]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Merge remote-tracking branch 'refs/remotes/jackhumbert/master'
authorStanley Lai <stanleylai.sg@gmail.com>
Sat, 17 Dec 2016 21:49:13 +0000 (13:49 -0800)
committerStanley Lai <stanleylai.sg@gmail.com>
Sat, 17 Dec 2016 21:49:13 +0000 (13:49 -0800)
1245 files changed:
.gitattributes [new file with mode: 0644]
.gitignore
.gitmodules
.travis.yml
Dockerfile [new file with mode: 0644]
Makefile
Vagrantfile
build_keyboard.mk [new file with mode: 0644]
build_test.mk [new file with mode: 0644]
common.mk [new file with mode: 0644]
doc/TMK_README.md
doc/VAGRANT_GUIDE.md
doc/basic_how_keyboards_work.md [new file with mode: 0644]
doc/keycode.txt
doc/keymap.md
keyboards/alps64/Makefile
keyboards/alps64/readme.md [new file with mode: 0644]
keyboards/alps64/rules.mk [new file with mode: 0644]
keyboards/amj60/Makefile [new file with mode: 0644]
keyboards/amj60/amj60.c [new file with mode: 0644]
keyboards/amj60/amj60.h [new file with mode: 0644]
keyboards/amj60/config.h [new file with mode: 0644]
keyboards/amj60/keymaps/iso_split_rshift/Makefile [new file with mode: 0644]
keyboards/amj60/keymaps/iso_split_rshift/build.sh [new file with mode: 0755]
keyboards/amj60/keymaps/iso_split_rshift/keymap.c [new file with mode: 0644]
keyboards/amj60/keymaps/iso_split_rshift/readme.md [new file with mode: 0644]
keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh [new file with mode: 0755]
keyboards/amj60/readme.md [new file with mode: 0644]
keyboards/amj60/rules.mk [new file with mode: 0644]
keyboards/arrow_pad/Makefile
keyboards/arrow_pad/readme.md
keyboards/arrow_pad/rules.mk [new file with mode: 0644]
keyboards/atomic/Makefile
keyboards/atomic/keymaps/pvc/Makefile
keyboards/atomic/keymaps/pvc/config.h
keyboards/atomic/keymaps/pvc/keymap.c
keyboards/atomic/readme.md
keyboards/atomic/rules.mk [new file with mode: 0644]
keyboards/atreus/Makefile
keyboards/atreus/atreus.h
keyboards/atreus/config.h
keyboards/atreus/keymaps/alphadox/config.h [new file with mode: 0644]
keyboards/atreus/keymaps/alphadox/keymap.c [new file with mode: 0644]
keyboards/atreus/keymaps/classic/keymap.c [new file with mode: 0644]
keyboards/atreus/keymaps/default/keymap.c
keyboards/atreus/keymaps/erlandsona/config.h [new file with mode: 0644]
keyboards/atreus/keymaps/erlandsona/keymap.c [new file with mode: 0644]
keyboards/atreus/keymaps/jeremy/keymap.c [new file with mode: 0644]
keyboards/atreus/keymaps/jeremy/readme.md [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/config.h [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/keymap.c [new file with mode: 0644]
keyboards/atreus/keymaps/replicaJunction/readme.md [new file with mode: 0644]
keyboards/atreus/keymaps/xyverz/keymap.c [new file with mode: 0644]
keyboards/atreus/readme.md
keyboards/atreus/rules.mk [new file with mode: 0644]
keyboards/atreus62/Makefile [new file with mode: 0644]
keyboards/atreus62/atreus62.c [new file with mode: 0644]
keyboards/atreus62/atreus62.h [new file with mode: 0644]
keyboards/atreus62/config.h [new file with mode: 0644]
keyboards/atreus62/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/atreus62/pro_micro.h [new file with mode: 0644]
keyboards/atreus62/readme.md [new file with mode: 0644]
keyboards/atreus62/rules.mk [new file with mode: 0644]
keyboards/bantam44/Makefile
keyboards/bantam44/readme.md
keyboards/bantam44/rules.mk [new file with mode: 0644]
keyboards/chibios_test/Makefile
keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c
keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h
keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk
keyboards/chibios_test/ld/MKL26Z64.ld
keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld
keyboards/chibios_test/rules.mk [new file with mode: 0644]
keyboards/chibios_test/stm32_f072_onekey/Makefile
keyboards/chibios_test/stm32_f072_onekey/mcuconf.h
keyboards/chibios_test/stm32_f072_onekey/rules.mk [new file with mode: 0644]
keyboards/chibios_test/stm32_f103_onekey/Makefile
keyboards/chibios_test/stm32_f103_onekey/mcuconf.h
keyboards/chibios_test/stm32_f103_onekey/rules.mk [new file with mode: 0644]
keyboards/chibios_test/teensy_lc_onekey/Makefile
keyboards/chibios_test/teensy_lc_onekey/chconf.h
keyboards/chibios_test/teensy_lc_onekey/halconf.h
keyboards/chibios_test/teensy_lc_onekey/mcuconf.h
keyboards/chibios_test/teensy_lc_onekey/rules.mk [new file with mode: 0644]
keyboards/clueboard/Makefile
keyboards/clueboard/config.h
keyboards/clueboard/keymaps/default/keymap.c
keyboards/clueboard/keymaps/skully/readme.md [new file with mode: 0644]
keyboards/clueboard/readme.md [new file with mode: 0644]
keyboards/clueboard/rev1/Makefile
keyboards/clueboard/rev1/config.h
keyboards/clueboard/rev1/rules.mk [new file with mode: 0644]
keyboards/clueboard/rev2/Makefile
keyboards/clueboard/rev2/config.h
keyboards/clueboard/rev2/rules.mk [new file with mode: 0644]
keyboards/clueboard/rules.mk [new file with mode: 0644]
keyboards/clueboard2/Makefile [deleted file]
keyboards/clueboard2/clueboard2.c [deleted file]
keyboards/cluecard/Makefile [new file with mode: 0644]
keyboards/cluecard/cluecard.c [new file with mode: 0644]
keyboards/cluecard/cluecard.h [new file with mode: 0644]
keyboards/cluecard/config.h [new file with mode: 0644]
keyboards/cluecard/keymaps/default/Makefile [new file with mode: 0644]
keyboards/cluecard/keymaps/default/config.h [new file with mode: 0644]
keyboards/cluecard/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/cluecard/keymaps/default/readme.md [new file with mode: 0644]
keyboards/cluecard/keymaps/rgb_effects/Makefile [new file with mode: 0644]
keyboards/cluecard/keymaps/rgb_effects/config.h [new file with mode: 0644]
keyboards/cluecard/keymaps/rgb_effects/keymap.c [new file with mode: 0644]
keyboards/cluecard/keymaps/rgb_effects/readme.md [new file with mode: 0644]
keyboards/cluecard/readme.md [new file with mode: 0644]
keyboards/cluecard/rules.mk [new file with mode: 0644]
keyboards/cluepad/Makefile
keyboards/cluepad/config.h
keyboards/cluepad/readme.md [new file with mode: 0644]
keyboards/cluepad/rules.mk [new file with mode: 0644]
keyboards/ergodox/Makefile [new file with mode: 0644]
keyboards/ergodox/config.h [new file with mode: 0644]
keyboards/ergodox/ergodox.c [new file with mode: 0644]
keyboards/ergodox/ergodox.h [new file with mode: 0644]
keyboards/ergodox/ez/190hotfix.sh [new file with mode: 0755]
keyboards/ergodox/ez/Makefile [new file with mode: 0644]
keyboards/ergodox/ez/config.h [new file with mode: 0644]
keyboards/ergodox/ez/ez.c [new file with mode: 0644]
keyboards/ergodox/ez/ez.h [new file with mode: 0644]
keyboards/ergodox/ez/i2cmaster.h [new file with mode: 0644]
keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png [new file with mode: 0644]
keyboards/ergodox/ez/keymaps/profet_80/keymap.c [new file with mode: 0644]
keyboards/ergodox/ez/keymaps/profet_80/readme.md [new file with mode: 0644]
keyboards/ergodox/ez/keymaps/steno/Makefile [new file with mode: 0644]
keyboards/ergodox/ez/keymaps/steno/keymap.c [new file with mode: 0644]
keyboards/ergodox/ez/keymaps/steno/readme.md [new file with mode: 0644]
keyboards/ergodox/ez/matrix.c [new file with mode: 0644]
keyboards/ergodox/ez/rules.mk [new file with mode: 0644]
keyboards/ergodox/ez/twimaster.c [new file with mode: 0644]
keyboards/ergodox/ez/util/compile_keymap.py [new file with mode: 0644]
keyboards/ergodox/ez/util/readme.md [new file with mode: 0644]
keyboards/ergodox/infinity/MEMO.txt [new file with mode: 0644]
keyboards/ergodox/infinity/Makefile [new file with mode: 0644]
keyboards/ergodox/infinity/bootloader_defs.h [new file with mode: 0644]
keyboards/ergodox/infinity/chconf.h [new file with mode: 0644]
keyboards/ergodox/infinity/config.h [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h [new file with mode: 0644]
keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h [new file with mode: 0644]
keyboards/ergodox/infinity/gfxconf.h [new file with mode: 0644]
keyboards/ergodox/infinity/halconf.h [new file with mode: 0644]
keyboards/ergodox/infinity/infinity.c [new file with mode: 0644]
keyboards/ergodox/infinity/infinity.h [new file with mode: 0644]
keyboards/ergodox/infinity/led.c [new file with mode: 0644]
keyboards/ergodox/infinity/matrix.c [new file with mode: 0644]
keyboards/ergodox/infinity/mcuconf.h [new file with mode: 0644]
keyboards/ergodox/infinity/rules.mk [new file with mode: 0644]
keyboards/ergodox/keymaps/ab/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/ab/keyboard-layout.json [new file with mode: 0644]
keyboards/ergodox/keymaps/ab/keyboard-layout.png [new file with mode: 0644]
keyboards/ergodox/keymaps/ab/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/ab/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/absenth/absenth_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/absenth/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/absenth/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/adnw_k_o_y/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/alexjj/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/alexjj/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/alexjj/rl-layout.jpg [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/COPYING [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/NEWS.md [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/images/adore-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/images/base-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/images/heatmap.png [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/images/hun-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/images/steno-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json [new file with mode: 0644]
keyboards/ergodox/keymaps/algernon/tools/hid-commands [new file with mode: 0755]
keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py [new file with mode: 0755]
keyboards/ergodox/keymaps/algernon/tools/text-to-log.py [new file with mode: 0755]
keyboards/ergodox/keymaps/alphadox/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/alphadox/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/alphadox/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/andrew_osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/bepo/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/bepo/bepo.png [new file with mode: 0644]
keyboards/ergodox/keymaps/bepo/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/bepo/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/bepo_csa/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/bepo_csa/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/coderkun_neo2/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/coderkun_neo2/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/coderkun_neo2/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/colemak/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/colemak/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png [new file with mode: 0644]
keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png [new file with mode: 0644]
keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png [new file with mode: 0644]
keyboards/ergodox/keymaps/csharp_dev/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/csharp_dev/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/dave/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/dave/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/default/default.png [new file with mode: 0644]
keyboards/ergodox/keymaps/default/default_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/default/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/default_osx/default_osx_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/default_osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/default_osx/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/dragon788/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak/dvorak.png [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_emacs/keymap.c [new file with mode: 0755]
keyboards/ergodox/keymaps/dvorak_emacs/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_plover/README.md [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_plover/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_programmer/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_programmer/README.md [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_programmer/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/dvorak_spanish/keymap.c [new file with mode: 0755]
keyboards/ergodox/keymaps/dvorak_spanish/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/emacs_osx_dk/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/erez_experimental/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/erez_experimental/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/erez_experimental/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/erez_experimental/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/galson/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/galson/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/galson/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/german-kinergo/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/german-kinergo/layout-code.png [new file with mode: 0644]
keyboards/ergodox/keymaps/german-kinergo/layout-media.png [new file with mode: 0644]
keyboards/ergodox/keymaps/german-kinergo/layout.png [new file with mode: 0644]
keyboards/ergodox/keymaps/german-kinergo/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py [new file with mode: 0644]
keyboards/ergodox/keymaps/german-manuneo/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/german-manuneo/keymap.md [new file with mode: 0644]
keyboards/ergodox/keymaps/german/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/j3rn/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/j3rn/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/jack/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/jack/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/jack/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/jacobono/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/jacobono/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/jafo/jafo-Notes [new file with mode: 0644]
keyboards/ergodox/keymaps/jafo/jafo-layout.pdf [new file with mode: 0644]
keyboards/ergodox/keymaps/jafo/jafo_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/jafo/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/jafo/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/jgarr/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/josh/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/josh/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/kastyle/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/kastyle/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/kines-ish/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/kines-ish/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/kristian/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/maz/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/maz/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/mclennon_osx/README.md [new file with mode: 0644]
keyboards/ergodox/keymaps/mclennon_osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/mpiechotka/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/mpiechotka/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/msc/img/code_layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/msc/img/main_layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/msc/img/media_layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/msc/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/msc/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/naps62/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/naps62/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png [new file with mode: 0644]
keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png [new file with mode: 0644]
keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-base.png [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-base.txt [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-media.png [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-media.txt [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-special.png [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-special.txt [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt [new file with mode: 0644]
keyboards/ergodox/keymaps/ordinary/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de/osx_de_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de_experimental/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_de_experimental/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_fr/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png [new file with mode: 0644]
keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/phoenix/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/phoenix/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/plover/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/plums/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/plums/plums.png [new file with mode: 0644]
keyboards/ergodox/keymaps/plums/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/pvinis/Changelog.md [new file with mode: 0644]
keyboards/ergodox/keymaps/pvinis/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/pvinis/Readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/pvinis/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/robot_test_layout/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/robot_test_layout/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png [new file with mode: 0644]
keyboards/ergodox/keymaps/sethbc/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/sethbc/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/sethbc/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/sneako/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/sneako/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/software_neo2/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/supercoder/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/supercoder/images/layout.png [new file with mode: 0644]
keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg [new file with mode: 0644]
keyboards/ergodox/keymaps/supercoder/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/supercoder/makefile.mk [new file with mode: 0644]
keyboards/ergodox/keymaps/supercoder/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/techtomas/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/techtomas/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/ordinary-special.png [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json [new file with mode: 0644]
keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png [new file with mode: 0644]
keyboards/ergodox/keymaps/tkuichooseyou/README.md [new file with mode: 0644]
keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex [new file with mode: 0644]
keyboards/ergodox/keymaps/tkuichooseyou/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/tm2030/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/tm2030/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/tonyabra_osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/tonyabra_osx/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/makefile.mk [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png [new file with mode: 0644]
keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png [new file with mode: 0644]
keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png [new file with mode: 0644]
keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png [new file with mode: 0644]
keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/twey/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/twey/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/videck/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/videck/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/videck/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/videck/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/videck/videck.json [new file with mode: 0644]
keyboards/ergodox/keymaps/videck/videck.png [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/config.h [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/win10_writers-block/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/xyverz/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/xyverz/readme.md [new file with mode: 0644]
keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf [new file with mode: 0644]
keyboards/ergodox/keymaps/yoruian/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/yoruian/README [new file with mode: 0644]
keyboards/ergodox/keymaps/yoruian/ergodox_yoruian [new file with mode: 0644]
keyboards/ergodox/keymaps/yoruian/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/yoruian/yoruian.h [new file with mode: 0644]
keyboards/ergodox/keymaps/zweihander-osx/Makefile [new file with mode: 0644]
keyboards/ergodox/keymaps/zweihander-osx/keymap.c [new file with mode: 0644]
keyboards/ergodox/keymaps/zweihander-osx/readme.markdown [new file with mode: 0644]
keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex [new file with mode: 0644]
keyboards/ergodox/readme.md [new file with mode: 0644]
keyboards/ergodox/rules.mk [new file with mode: 0644]
keyboards/ergodox_ez/190hotfix.sh [deleted file]
keyboards/ergodox_ez/Makefile [deleted file]
keyboards/ergodox_ez/config.h [deleted file]
keyboards/ergodox_ez/ergodox_ez.c [deleted file]
keyboards/ergodox_ez/ergodox_ez.h [deleted file]
keyboards/ergodox_ez/i2cmaster.h [deleted file]
keyboards/ergodox_ez/keymaps/ab/Makefile [deleted file]
keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json [deleted file]
keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png [deleted file]
keyboards/ergodox_ez/keymaps/ab/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/ab/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/alexjj/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/alexjj/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg [deleted file]
keyboards/ergodox_ez/keymaps/algernon/COPYING [deleted file]
keyboards/ergodox_ez/keymaps/algernon/Makefile [deleted file]
keyboards/ergodox_ez/keymaps/algernon/config.h [deleted file]
keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/algernon/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/algernon/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/algernon/tools/max-focused [deleted file]
keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/bepo/bepo.png [deleted file]
keyboards/ergodox_ez/keymaps/bepo/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/bepo/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile [deleted file]
keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/colemak/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/colemak/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png [deleted file]
keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png [deleted file]
keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png [deleted file]
keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/csharp_dev/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/dave/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/dave/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/default/default.png [deleted file]
keyboards/ergodox_ez/keymaps/default/default_highres.png [deleted file]
keyboards/ergodox_ez/keymaps/default/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/default/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png [deleted file]
keyboards/ergodox_ez/keymaps/default_osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/default_osx/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/dragon788/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/dvorak/dvorak.png [deleted file]
keyboards/ergodox_ez/keymaps/dvorak/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png [deleted file]
keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/erez_experimental/Makefile [deleted file]
keyboards/ergodox_ez/keymaps/erez_experimental/config.h [deleted file]
keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/erez_experimental/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png [deleted file]
keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png [deleted file]
keyboards/ergodox_ez/keymaps/german-kinergo/layout.png [deleted file]
keyboards/ergodox_ez/keymaps/german-kinergo/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py [deleted file]
keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md [deleted file]
keyboards/ergodox_ez/keymaps/german/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/j3rn/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/j3rn/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/jack/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png [deleted file]
keyboards/ergodox_ez/keymaps/jacobono/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/jacobono/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/jgarr/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/josh/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/josh/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/kastyle/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/kines-ish/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/kines-ish/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/mpiechotka/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/msc/img/code_layer.png [deleted file]
keyboards/ergodox_ez/keymaps/msc/img/main_layer.png [deleted file]
keyboards/ergodox_ez/keymaps/msc/img/media_layer.png [deleted file]
keyboards/ergodox_ez/keymaps/msc/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/msc/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/naps62/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/naps62/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt [deleted file]
keyboards/ergodox_ez/keymaps/ordinary/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/osx_de/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png [deleted file]
keyboards/ergodox_ez/keymaps/osx_de/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png [deleted file]
keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png [deleted file]
keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/osx_fr/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/plover/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/plums/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/plums/plums.png [deleted file]
keyboards/ergodox_ez/keymaps/plums/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png [deleted file]
keyboards/ergodox_ez/keymaps/sneako/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/sneako/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/software_neo2/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/supercoder/config_user.h [deleted file]
keyboards/ergodox_ez/keymaps/supercoder/images/layout.png [deleted file]
keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg [deleted file]
keyboards/ergodox_ez/keymaps/supercoder/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/supercoder/makefile.mk [deleted file]
keyboards/ergodox_ez/keymaps/supercoder/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/techtomas/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/techtomas/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md [deleted file]
keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex [deleted file]
keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/tm2030/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/tm2030/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/config.h [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png [deleted file]
keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png [deleted file]
keyboards/ergodox_ez/keymaps/twey/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/twey/readme.md [deleted file]
keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c [deleted file]
keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown [deleted file]
keyboards/ergodox_ez/matrix.c [deleted file]
keyboards/ergodox_ez/readme.md [deleted file]
keyboards/ergodox_ez/twimaster.c [deleted file]
keyboards/ergodox_ez/util/compile_keymap.py [deleted file]
keyboards/ergodox_ez/util/readme.md [deleted file]
keyboards/gh60/Makefile
keyboards/gh60/config.h
keyboards/gh60/gh60.c
keyboards/gh60/gh60.h
keyboards/gh60/keymaps/default/keymap.c
keyboards/gh60/keymaps/robotmaxtron/Makefile
keyboards/gh60/keymaps/robotmaxtron/config.h
keyboards/gh60/keymaps/robotmaxtron/keymap.c
keyboards/gh60/keymaps/sethbc/Makefile [new file with mode: 0644]
keyboards/gh60/keymaps/sethbc/keymap.c [new file with mode: 0644]
keyboards/gh60/pinout.txt
keyboards/gh60/readme.md
keyboards/gh60/rules.mk [new file with mode: 0644]
keyboards/handwired/CMD60/CMD60.c [new file with mode: 0644]
keyboards/handwired/CMD60/CMD60.h [new file with mode: 0644]
keyboards/handwired/CMD60/Makefile [new file with mode: 0644]
keyboards/handwired/CMD60/README.md [new file with mode: 0644]
keyboards/handwired/CMD60/config.h [new file with mode: 0644]
keyboards/handwired/CMD60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/CMD60/rules.mk [new file with mode: 0644]
keyboards/handwired/Makefile
keyboards/handwired/fivethirteen/Makefile
keyboards/handwired/fivethirteen/rules.mk [new file with mode: 0644]
keyboards/handwired/gamenum/Makefile [new file with mode: 0644]
keyboards/handwired/gamenum/README.md [new file with mode: 0644]
keyboards/handwired/gamenum/config.h [new file with mode: 0644]
keyboards/handwired/gamenum/gamenum.c [new file with mode: 0644]
keyboards/handwired/gamenum/gamenum.h [new file with mode: 0644]
keyboards/handwired/gamenum/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/gamenum/rules.mk [new file with mode: 0644]
keyboards/handwired/minorca/Makefile [new file with mode: 0644]
keyboards/handwired/minorca/config.h [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/default/Makefile [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/default/config.h [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/default/readme.md [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/readme.md [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/Makefile [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/config.h [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/example.jpg [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/keymap.c [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/readme.md [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg [new file with mode: 0644]
keyboards/handwired/minorca/minorca.c [new file with mode: 0644]
keyboards/handwired/minorca/minorca.h [new file with mode: 0644]
keyboards/handwired/minorca/readme.md [new file with mode: 0644]
keyboards/handwired/minorca/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/Makefile
keyboards/handwired/onekey/rules.mk [new file with mode: 0644]
keyboards/handwired/promethium/Makefile [new file with mode: 0644]
keyboards/handwired/promethium/config.h [new file with mode: 0644]
keyboards/handwired/promethium/keymaps/priyadi/Makefile [new file with mode: 0644]
keyboards/handwired/promethium/keymaps/priyadi/config.h [new file with mode: 0644]
keyboards/handwired/promethium/keymaps/priyadi/flash.sh [new file with mode: 0755]
keyboards/handwired/promethium/keymaps/priyadi/keymap.c [new file with mode: 0644]
keyboards/handwired/promethium/keymaps/priyadi/readme.md [new file with mode: 0644]
keyboards/handwired/promethium/keymaps/readme.md [new file with mode: 0644]
keyboards/handwired/promethium/promethium.c [new file with mode: 0644]
keyboards/handwired/promethium/promethium.h [new file with mode: 0644]
keyboards/handwired/promethium/readme.md [new file with mode: 0644]
keyboards/handwired/promethium/rgbsps.c [new file with mode: 0644]
keyboards/handwired/promethium/rgbsps.h [new file with mode: 0644]
keyboards/handwired/promethium/rules.mk [new file with mode: 0644]
keyboards/handwired/retro_refit/Makefile [new file with mode: 0644]
keyboards/handwired/retro_refit/config.h [new file with mode: 0644]
keyboards/handwired/retro_refit/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/retro_refit/readme.md [new file with mode: 0644]
keyboards/handwired/retro_refit/retro_refit.c [new file with mode: 0644]
keyboards/handwired/retro_refit/retro_refit.h [new file with mode: 0644]
keyboards/handwired/retro_refit/rules.mk [new file with mode: 0644]
keyboards/handwired/rules.mk [new file with mode: 0644]
keyboards/handwired/traveller/Makefile [new file with mode: 0644]
keyboards/handwired/traveller/config.h [new file with mode: 0644]
keyboards/handwired/traveller/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/traveller/keymaps/default/readme.md [new file with mode: 0644]
keyboards/handwired/traveller/readme.md [new file with mode: 0644]
keyboards/handwired/traveller/rules.mk [new file with mode: 0644]
keyboards/handwired/traveller/traveller.c [new file with mode: 0644]
keyboards/handwired/traveller/traveller.h [new file with mode: 0644]
keyboards/hhkb/Makefile
keyboards/hhkb/keymaps/dbroqua/keymap.c [new file with mode: 0644]
keyboards/hhkb/keymaps/dbroqua/readme.md [new file with mode: 0644]
keyboards/hhkb/keymaps/jp/Makefile
keyboards/hhkb/keymaps/rdg_jp/Makefile
keyboards/hhkb/keymaps/sh_jp/Makefile [new file with mode: 0644]
keyboards/hhkb/keymaps/sh_jp/README.md [new file with mode: 0644]
keyboards/hhkb/keymaps/sh_jp/keymap.c [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/Makefile [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/action_pseudo_lut.c [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/action_pseudo_lut.h [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/config.h [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/keymap.c [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/keymap_jis2us.h [new file with mode: 0644]
keyboards/hhkb/keymaps/shela/readme.md [new file with mode: 0644]
keyboards/hhkb/readme.md
keyboards/hhkb/rules.mk [new file with mode: 0644]
keyboards/infinity60/MEMO.txt [new file with mode: 0644]
keyboards/infinity60/Makefile [new file with mode: 0644]
keyboards/infinity60/bootloader_defs.h [new file with mode: 0644]
keyboards/infinity60/chconf.h [new file with mode: 0644]
keyboards/infinity60/config.h [new file with mode: 0644]
keyboards/infinity60/halconf.h [new file with mode: 0644]
keyboards/infinity60/infinity60.c [new file with mode: 0644]
keyboards/infinity60/infinity60.h [new file with mode: 0644]
keyboards/infinity60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/infinity60/keymaps/depariel/keymap.c [new file with mode: 0755]
keyboards/infinity60/keymaps/hasu/keymap.c [new file with mode: 0644]
keyboards/infinity60/led.c [new file with mode: 0644]
keyboards/infinity60/matrix.c [new file with mode: 0644]
keyboards/infinity60/mcuconf.h [new file with mode: 0644]
keyboards/infinity60/readme.md [new file with mode: 0644]
keyboards/infinity60/rules.mk [new file with mode: 0644]
keyboards/infinity_chibios/MEMO.txt [deleted file]
keyboards/infinity_chibios/Makefile [deleted file]
keyboards/infinity_chibios/bootloader_defs.h [deleted file]
keyboards/infinity_chibios/chconf.h [deleted file]
keyboards/infinity_chibios/config.h [deleted file]
keyboards/infinity_chibios/halconf.h [deleted file]
keyboards/infinity_chibios/infinity_chibios.c [deleted file]
keyboards/infinity_chibios/infinity_chibios.h [deleted file]
keyboards/infinity_chibios/keymaps/default/keymap.c [deleted file]
keyboards/infinity_chibios/keymaps/hasu/keymap.c [deleted file]
keyboards/infinity_chibios/led.c [deleted file]
keyboards/infinity_chibios/matrix.c [deleted file]
keyboards/infinity_chibios/mcuconf.h [deleted file]
keyboards/infinity_ergodox/MEMO.txt [deleted file]
keyboards/infinity_ergodox/Makefile [deleted file]
keyboards/infinity_ergodox/bootloader_defs.h [deleted file]
keyboards/infinity_ergodox/chconf.h [deleted file]
keyboards/infinity_ergodox/config.h [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h [deleted file]
keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h [deleted file]
keyboards/infinity_ergodox/gfxconf.h [deleted file]
keyboards/infinity_ergodox/halconf.h [deleted file]
keyboards/infinity_ergodox/infinity_ergodox.c [deleted file]
keyboards/infinity_ergodox/infinity_ergodox.h [deleted file]
keyboards/infinity_ergodox/keymaps/default/keymap.c [deleted file]
keyboards/infinity_ergodox/keymaps/default/visualizer.c [deleted file]
keyboards/infinity_ergodox/led.c [deleted file]
keyboards/infinity_ergodox/matrix.c [deleted file]
keyboards/infinity_ergodox/mcuconf.h [deleted file]
keyboards/jd40/Makefile [new file with mode: 0644]
keyboards/jd40/config.h [new file with mode: 0644]
keyboards/jd40/jd40.c [new file with mode: 0644]
keyboards/jd40/jd40.h [new file with mode: 0644]
keyboards/jd40/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/jd40/readme.md [new file with mode: 0644]
keyboards/jd40/rules.mk [new file with mode: 0644]
keyboards/jd45/Makefile
keyboards/jd45/keymaps/jeebak/config.h [new file with mode: 0644]
keyboards/jd45/keymaps/jeebak/keymap.c [new file with mode: 0644]
keyboards/jd45/keymaps/jeebak/readme.md [new file with mode: 0644]
keyboards/jd45/readme.md [new file with mode: 0644]
keyboards/jd45/rules.mk [new file with mode: 0644]
keyboards/kc60/Makefile
keyboards/kc60/config.h
keyboards/kc60/kc60.h
keyboards/kc60/keymaps/dbroqua/keymap.c [new file with mode: 0644]
keyboards/kc60/keymaps/dbroqua/readme.md [new file with mode: 0644]
keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c [new file with mode: 0644]
keyboards/kc60/keymaps/dbroqua_hhkb/readme.md [new file with mode: 0644]
keyboards/kc60/keymaps/default/keymap.c
keyboards/kc60/keymaps/sgoodwin/keymap.c
keyboards/kc60/keymaps/stanleylai/keymap.c
keyboards/kc60/keymaps/wigguno/keymap.c
keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png [new file with mode: 0644]
keyboards/kc60/keymaps/workman-dead/keymap.c [new file with mode: 0644]
keyboards/kc60/keymaps/workman-dead/readme.md [new file with mode: 0644]
keyboards/kc60/keymaps/ws2812/config.h
keyboards/kc60/keymaps/ws2812/keymap.c
keyboards/kc60/led.c [new file with mode: 0644]
keyboards/kc60/readme.md
keyboards/kc60/rules.mk [new file with mode: 0644]
keyboards/kinesis/Makefile [new file with mode: 0644]
keyboards/kinesis/config.h [new file with mode: 0644]
keyboards/kinesis/docs/kicad/kinesis-cache.lib [new file with mode: 0644]
keyboards/kinesis/docs/kicad/kinesis.pro [new file with mode: 0644]
keyboards/kinesis/docs/kicad/kinesis.sch [new file with mode: 0644]
keyboards/kinesis/docs/photos/P1050573.jpg [new file with mode: 0644]
keyboards/kinesis/docs/photos/P1050574.jpg [new file with mode: 0644]
keyboards/kinesis/docs/photos/P1050575.jpg [new file with mode: 0644]
keyboards/kinesis/docs/readme.txt [new file with mode: 0644]
keyboards/kinesis/docs/schematic.png [new file with mode: 0644]
keyboards/kinesis/keymaps/default/Makefile [new file with mode: 0644]
keyboards/kinesis/keymaps/default/config.h [new file with mode: 0644]
keyboards/kinesis/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/kinesis/keymaps/default/readme.md [new file with mode: 0644]
keyboards/kinesis/keymaps/programmer/Makefile [new file with mode: 0644]
keyboards/kinesis/keymaps/programmer/config.h [new file with mode: 0644]
keyboards/kinesis/keymaps/programmer/keymap.c [new file with mode: 0644]
keyboards/kinesis/keymaps/programmer/readme.md [new file with mode: 0644]
keyboards/kinesis/kinesis.c [new file with mode: 0644]
keyboards/kinesis/kinesis.h [new file with mode: 0644]
keyboards/kinesis/matrix.c [new file with mode: 0644]
keyboards/kinesis/readme.md [new file with mode: 0644]
keyboards/kinesis/rules.mk [new file with mode: 0644]
keyboards/kitten_paw/Makefile [new file with mode: 0644]
keyboards/kitten_paw/config.h [new file with mode: 0644]
keyboards/kitten_paw/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/kitten_paw/keymaps/ickerwx/config.h [new file with mode: 0644]
keyboards/kitten_paw/keymaps/ickerwx/keymap.c [new file with mode: 0644]
keyboards/kitten_paw/keymaps/ickerwx/readme.md [new file with mode: 0644]
keyboards/kitten_paw/kitten_paw.c [new file with mode: 0644]
keyboards/kitten_paw/kitten_paw.h [new file with mode: 0644]
keyboards/kitten_paw/matrix.c [new file with mode: 0644]
keyboards/kitten_paw/readme.md [new file with mode: 0644]
keyboards/kitten_paw/rules.mk [new file with mode: 0644]
keyboards/lets_split/Makefile
keyboards/lets_split/config.h
keyboards/lets_split/i2c.c
keyboards/lets_split/imgs/letssplitv2.svg [new file with mode: 0644]
keyboards/lets_split/keymaps/default/keymap.c
keyboards/lets_split/keymaps/i2c/config.h [new file with mode: 0644]
keyboards/lets_split/keymaps/i2c/keymap.c [new file with mode: 0644]
keyboards/lets_split/keymaps/serial/config.h [new file with mode: 0644]
keyboards/lets_split/keymaps/serial/keymap.c [new file with mode: 0644]
keyboards/lets_split/lets_split.c
keyboards/lets_split/lets_split.h
keyboards/lets_split/matrix.c
keyboards/lets_split/pro_micro.h
keyboards/lets_split/readme.md
keyboards/lets_split/rev1/Makefile [new file with mode: 0644]
keyboards/lets_split/rev1/config.h [new file with mode: 0644]
keyboards/lets_split/rev1/rev1.c [new file with mode: 0644]
keyboards/lets_split/rev1/rev1.h [new file with mode: 0644]
keyboards/lets_split/rev1/rules.mk [new file with mode: 0644]
keyboards/lets_split/rev2/Makefile [new file with mode: 0644]
keyboards/lets_split/rev2/config.h [new file with mode: 0644]
keyboards/lets_split/rev2/rev2.c [new file with mode: 0644]
keyboards/lets_split/rev2/rev2.h [new file with mode: 0644]
keyboards/lets_split/rev2/rules.mk [new file with mode: 0644]
keyboards/lets_split/rules.mk [new file with mode: 0644]
keyboards/lets_split/serial.c
keyboards/lets_split/split_util.c
keyboards/maxipad/Makefile [new file with mode: 0644]
keyboards/maxipad/config.h [new file with mode: 0644]
keyboards/maxipad/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/maxipad/maxipad.c [new file with mode: 0644]
keyboards/maxipad/maxipad.h [new file with mode: 0644]
keyboards/maxipad/readme.md [new file with mode: 0644]
keyboards/maxipad/rules.mk [new file with mode: 0644]
keyboards/pegasushoof/Makefile [new file with mode: 0644]
keyboards/pegasushoof/README.md [new file with mode: 0644]
keyboards/pegasushoof/config.h [new file with mode: 0644]
keyboards/pegasushoof/keymaps/blowrak/Makefile [new file with mode: 0644]
keyboards/pegasushoof/keymaps/blowrak/keymap.c [new file with mode: 0644]
keyboards/pegasushoof/keymaps/default/Makefile [new file with mode: 0644]
keyboards/pegasushoof/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/pegasushoof/matrix.c [new file with mode: 0644]
keyboards/pegasushoof/pegasushoof.c [new file with mode: 0644]
keyboards/pegasushoof/pegasushoof.h [new file with mode: 0644]
keyboards/pegasushoof/rules.mk [new file with mode: 0644]
keyboards/phantom/Makefile
keyboards/phantom/config.h
keyboards/phantom/keymaps/xyverz/keymap.c [new file with mode: 0644]
keyboards/phantom/readme.md [new file with mode: 0644]
keyboards/phantom/rules.mk [new file with mode: 0644]
keyboards/planck/Makefile
keyboards/planck/keymaps/bone2planck/Makefile
keyboards/planck/keymaps/bone2planck/config.h [new file with mode: 0644]
keyboards/planck/keymaps/bone2planck/keymap.c
keyboards/planck/keymaps/bone2planck/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/brandon/Makefile
keyboards/planck/keymaps/callum/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/callum/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/callum/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/cbbrowne/Makefile
keyboards/planck/keymaps/cbbrowne/config.h
keyboards/planck/keymaps/cbbrowne/keymap.c
keyboards/planck/keymaps/cbbrowne/readme.md
keyboards/planck/keymaps/circuit/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/circuit/Readme.md [new file with mode: 0644]
keyboards/planck/keymaps/circuit/config.h [new file with mode: 0644]
keyboards/planck/keymaps/circuit/keyboard-layout.png [new file with mode: 0644]
keyboards/planck/keymaps/circuit/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/dbroqua/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/dbroqua/layout.png [new file with mode: 0644]
keyboards/planck/keymaps/dbroqua/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/default/Makefile
keyboards/planck/keymaps/default/keymap.c
keyboards/planck/keymaps/experimental/Makefile
keyboards/planck/keymaps/experimental/config.h
keyboards/planck/keymaps/experimental/keymap.c
keyboards/planck/keymaps/impossible/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/impossible/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/impossible/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/jeebak/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/jeebak/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/jeebak/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/jhenahan/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/jhenahan/config.h [new file with mode: 0644]
keyboards/planck/keymaps/jhenahan/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/jhenahan/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/joe/Makefile
keyboards/planck/keymaps/leo/Makefile
keyboards/planck/keymaps/lucas/Makefile
keyboards/planck/keymaps/mollat/Makefile
keyboards/planck/keymaps/nico/Makefile
keyboards/planck/keymaps/premek/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/premek/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/premek/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/priyadi/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/priyadi/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/priyadi/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/pvc/Makefile
keyboards/planck/keymaps/pvc/config.h
keyboards/planck/keymaps/pvc/keymap.c
keyboards/planck/keymaps/sgoodwin/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/sgoodwin/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/sgoodwin/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/tak3over/Makefile
keyboards/planck/keymaps/thermal_printer/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/thermal_printer/config.h [new file with mode: 0644]
keyboards/planck/keymaps/thermal_printer/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/thermal_printer/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/tong92/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/tong92/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/tong92/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/vifon/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/vifon/config.h [new file with mode: 0644]
keyboards/planck/keymaps/vifon/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/xyverz/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/xyverz/makefile.mk [new file with mode: 0644]
keyboards/planck/keymaps/yang/config.h
keyboards/planck/planck.c
keyboards/planck/readme.md
keyboards/planck/rev3/Makefile [deleted file]
keyboards/planck/rev3/rules.mk [new file with mode: 0644]
keyboards/planck/rev4/Makefile
keyboards/planck/rev4/rules.mk [new file with mode: 0644]
keyboards/planck/rules.mk [new file with mode: 0644]
keyboards/preonic/Makefile
keyboards/preonic/config.h
keyboards/preonic/keymaps/0xdec/Makefile [new file with mode: 0644]
keyboards/preonic/keymaps/0xdec/README.md [new file with mode: 0644]
keyboards/preonic/keymaps/0xdec/config.h [new file with mode: 0644]
keyboards/preonic/keymaps/0xdec/keymap.c [new file with mode: 0644]
keyboards/preonic/keymaps/CMD-Preonic/README.md [new file with mode: 0644]
keyboards/preonic/keymaps/CMD-Preonic/keymap.c [new file with mode: 0644]
keyboards/preonic/keymaps/CMD-Preonic/makefile [new file with mode: 0644]
keyboards/preonic/keymaps/default/Makefile
keyboards/preonic/keymaps/default/keymap.c
keyboards/preonic/keymaps/jacwib/Makefile [new file with mode: 0644]
keyboards/preonic/keymaps/jacwib/config.h [new file with mode: 0644]
keyboards/preonic/keymaps/jacwib/keymap.c [new file with mode: 0644]
keyboards/preonic/keymaps/jacwib/readme.md [new file with mode: 0644]
keyboards/preonic/keymaps/kinesis/Makefile [new file with mode: 0644]
keyboards/preonic/keymaps/kinesis/config.h [new file with mode: 0644]
keyboards/preonic/keymaps/kinesis/keymap.c [new file with mode: 0644]
keyboards/preonic/keymaps/kinesis/readme.md [new file with mode: 0644]
keyboards/preonic/keymaps/xyverz/keymap.c [new file with mode: 0644]
keyboards/preonic/keymaps/xyverz/makefile.mk [new file with mode: 0644]
keyboards/preonic/preonic.c
keyboards/preonic/readme.md
keyboards/preonic/rules.mk [new file with mode: 0644]
keyboards/readme.md
keyboards/retro_refit/Makefile [deleted file]
keyboards/retro_refit/config.h [deleted file]
keyboards/retro_refit/keymaps/default/keymap.c [deleted file]
keyboards/retro_refit/readme.md [deleted file]
keyboards/retro_refit/retro_refit.c [deleted file]
keyboards/retro_refit/retro_refit.h [deleted file]
keyboards/s60-x/Makefile [new file with mode: 0644]
keyboards/s60-x/config.h [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/Makefile [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/config.h [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/ansi_qwertz/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/custom/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/custom/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/default/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/hasu/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/hasu/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/hhkb/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/hhkb/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/iso/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/iso/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/jpec/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/jpec/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/plain/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/plain/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/poker/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/poker/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/poker_bit/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/poker_bit/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/poker_set/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/poker_set/readme.md [new file with mode: 0644]
keyboards/s60-x/keymaps/spacefn/keymap.c [new file with mode: 0644]
keyboards/s60-x/keymaps/spacefn/readme.md [new file with mode: 0644]
keyboards/s60-x/readme.md [new file with mode: 0644]
keyboards/s60-x/rules.mk [new file with mode: 0644]
keyboards/s60-x/s60-x.c [new file with mode: 0644]
keyboards/s60-x/s60-x.h [new file with mode: 0644]
keyboards/s60-x/s60-x_precompiled.zip [new file with mode: 0644]
keyboards/satan/Makefile
keyboards/satan/config.h
keyboards/satan/keymaps/dbroqua_hhkb/keymap.c [new file with mode: 0644]
keyboards/satan/keymaps/dbroqua_hhkb/readme.md [new file with mode: 0644]
keyboards/satan/keymaps/default/Makefile [new file with mode: 0644]
keyboards/satan/keymaps/default/keymap.c
keyboards/satan/keymaps/default/readme.md [new file with mode: 0644]
keyboards/satan/keymaps/denolfe/Makefile [new file with mode: 0644]
keyboards/satan/keymaps/denolfe/README.md [new file with mode: 0644]
keyboards/satan/keymaps/denolfe/keyboard-layout.png [new file with mode: 0644]
keyboards/satan/keymaps/denolfe/keymap.c [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/.gitignore [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/Makefile [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/build.sh [new file with mode: 0755]
keyboards/satan/keymaps/iso_split_rshift/config.h [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/keymap.c [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/readme.md [new file with mode: 0644]
keyboards/satan/keymaps/iso_split_rshift/resetboard.sh [new file with mode: 0755]
keyboards/satan/keymaps/poker/keymap.c
keyboards/satan/keymaps/sethbc/Makefile [new file with mode: 0644]
keyboards/satan/keymaps/sethbc/keymap.c
keyboards/satan/keymaps/sethbc/readme.md [new file with mode: 0644]
keyboards/satan/keymaps/stanleylai/config.h
keyboards/satan/keymaps/stanleylai/keymap.c
keyboards/satan/readme.md [new file with mode: 0644]
keyboards/satan/rules.mk [new file with mode: 0644]
keyboards/satan/satan.h
keyboards/sixkeyboard/Makefile
keyboards/sixkeyboard/rules.mk [new file with mode: 0644]
keyboards/tada68/Makefile [new file with mode: 0644]
keyboards/tada68/config.h [new file with mode: 0644]
keyboards/tada68/keymaps/default/Makefile [new file with mode: 0644]
keyboards/tada68/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/tada68/keymaps/default/readme.md [new file with mode: 0644]
keyboards/tada68/readme.md [new file with mode: 0644]
keyboards/tada68/rules.mk [new file with mode: 0644]
keyboards/tada68/tada68.c [new file with mode: 0644]
keyboards/tada68/tada68.h [new file with mode: 0644]
keyboards/tv44/Makefile [new file with mode: 0644]
keyboards/tv44/config.h [new file with mode: 0644]
keyboards/tv44/keymaps/default/Makefile [new file with mode: 0644]
keyboards/tv44/keymaps/default/config.h [new file with mode: 0644]
keyboards/tv44/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/tv44/keymaps/default/readme.md [new file with mode: 0644]
keyboards/tv44/keymaps/jeebak/Makefile [new file with mode: 0644]
keyboards/tv44/keymaps/jeebak/config.h [new file with mode: 0644]
keyboards/tv44/keymaps/jeebak/keymap.c [new file with mode: 0644]
keyboards/tv44/keymaps/jeebak/readme.md [new file with mode: 0644]
keyboards/tv44/keymaps/xyverz/Makefile [new file with mode: 0644]
keyboards/tv44/keymaps/xyverz/config.h [new file with mode: 0644]
keyboards/tv44/keymaps/xyverz/keymap.c [new file with mode: 0644]
keyboards/tv44/keymaps/xyverz/readme.md [new file with mode: 0644]
keyboards/tv44/readme.md [new file with mode: 0644]
keyboards/tv44/rules.mk [new file with mode: 0644]
keyboards/tv44/tv44.c [new file with mode: 0644]
keyboards/tv44/tv44.h [new file with mode: 0644]
keyboards/vision_division/Makefile [new file with mode: 0644]
keyboards/vision_division/Potential Layouts.txt [new file with mode: 0644]
keyboards/vision_division/config.h [new file with mode: 0644]
keyboards/vision_division/keymaps/default/Makefile [new file with mode: 0644]
keyboards/vision_division/keymaps/default/config.h [new file with mode: 0644]
keyboards/vision_division/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/vision_division/keymaps/default/readme.md [new file with mode: 0644]
keyboards/vision_division/matrix_types.h [new file with mode: 0644]
keyboards/vision_division/readme.md [new file with mode: 0644]
keyboards/vision_division/rules.mk [new file with mode: 0644]
keyboards/vision_division/vision_division.c [new file with mode: 0644]
keyboards/vision_division/vision_division.h [new file with mode: 0644]
lib/googletest [new submodule]
message.mk [new file with mode: 0644]
quantum/api.c [new file with mode: 0644]
quantum/api.h [new file with mode: 0644]
quantum/api/api_sysex.c [new file with mode: 0644]
quantum/api/api_sysex.h [new file with mode: 0644]
quantum/audio/song_list.h
quantum/audio/voices.c
quantum/audio/voices.h
quantum/config_common.h
quantum/dynamic_macro.h [new file with mode: 0644]
quantum/keycode_config.h
quantum/keymap.h
quantum/keymap_common.c
quantum/keymap_extras/keymap_bepo.h
quantum/keymap_extras/keymap_br_abnt2.h [new file with mode: 0644]
quantum/keymap_extras/keymap_canadian_multilingual.h [new file with mode: 0644]
quantum/keymap_extras/keymap_dvorak.h
quantum/keymap_extras/keymap_dvp.h [new file with mode: 0644]
quantum/keymap_extras/keymap_fr_ch.h
quantum/keymap_extras/keymap_french.h
quantum/keymap_extras/keymap_german.h
quantum/keymap_extras/keymap_german_ch.h
quantum/keymap_extras/keymap_jp.h [new file with mode: 0644]
quantum/keymap_extras/keymap_nordic.h
quantum/keymap_extras/keymap_norwegian.h
quantum/keymap_extras/keymap_russian.h [new file with mode: 0644]
quantum/keymap_extras/keymap_spanish.h
quantum/keymap_extras/keymap_uk.h
quantum/keymap_extras/keymap_unicode_cyrillic.h [new file with mode: 0644]
quantum/light_ws2812.c
quantum/light_ws2812.h
quantum/matrix.c
quantum/pincontrol.h [new file with mode: 0644]
quantum/process_keycode/process_midi.c
quantum/process_keycode/process_music.c
quantum/process_keycode/process_printer.c [new file with mode: 0644]
quantum/process_keycode/process_printer.h [new file with mode: 0644]
quantum/process_keycode/process_printer_bb.c [new file with mode: 0644]
quantum/process_keycode/process_tap_dance.c
quantum/process_keycode/process_tap_dance.h
quantum/process_keycode/process_unicode.c
quantum/process_keycode/process_unicode.h
quantum/quantum.c
quantum/quantum.h
quantum/rgblight.c
quantum/rgblight.h
quantum/serial_link/protocol/byte_stuffer.c
quantum/serial_link/protocol/byte_stuffer.h
quantum/serial_link/protocol/transport.c
quantum/serial_link/protocol/transport.h
quantum/serial_link/tests/byte_stuffer_tests.c [deleted file]
quantum/serial_link/tests/byte_stuffer_tests.cpp [new file with mode: 0644]
quantum/serial_link/tests/frame_router_tests.c [deleted file]
quantum/serial_link/tests/frame_router_tests.cpp [new file with mode: 0644]
quantum/serial_link/tests/frame_validator_tests.c [deleted file]
quantum/serial_link/tests/frame_validator_tests.cpp [new file with mode: 0644]
quantum/serial_link/tests/rules.mk [new file with mode: 0644]
quantum/serial_link/tests/testlist.mk [new file with mode: 0644]
quantum/serial_link/tests/transport_tests.c [deleted file]
quantum/serial_link/tests/transport_tests.cpp [new file with mode: 0644]
quantum/serial_link/tests/triple_buffered_object_tests.c [deleted file]
quantum/serial_link/tests/triple_buffered_object_tests.cpp [new file with mode: 0644]
quantum/template/Makefile
quantum/template/readme.md
quantum/template/rules.mk [new file with mode: 0644]
quantum/variable_trace.c [new file with mode: 0644]
quantum/variable_trace.h [new file with mode: 0644]
readme.md
testlist.mk [new file with mode: 0644]
tmk_core/avr.mk
tmk_core/chibios.mk
tmk_core/common.mk
tmk_core/common/action.c
tmk_core/common/action.h
tmk_core/common/action_code.h
tmk_core/common/action_layer.c
tmk_core/common/action_util.c
tmk_core/common/avr/bootloader.c
tmk_core/common/avr/suspend.c
tmk_core/common/avr/timer.c
tmk_core/common/avr/xprintf.S
tmk_core/common/avr/xprintf.h
tmk_core/common/backlight.c
tmk_core/common/bootmagic.c
tmk_core/common/command.c
tmk_core/common/host.c
tmk_core/common/host.h
tmk_core/common/host_driver.h
tmk_core/common/keyboard.c
tmk_core/common/magic.c
tmk_core/common/mbed/xprintf.cpp
tmk_core/common/mbed/xprintf.h
tmk_core/common/print.h
tmk_core/common/raw_hid.h [new file with mode: 0644]
tmk_core/common/virtser.h [new file with mode: 0644]
tmk_core/native.mk [new file with mode: 0644]
tmk_core/protocol/chibios/usb_main.c
tmk_core/protocol/iwrap/suart.S
tmk_core/protocol/iwrap/suart.h
tmk_core/protocol/iwrap/wd.h
tmk_core/protocol/lufa.mk
tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml
tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml
tmk_core/protocol/lufa/adafruit_ble.cpp [new file with mode: 0644]
tmk_core/protocol/lufa/adafruit_ble.h [new file with mode: 0644]
tmk_core/protocol/lufa/descriptor.c
tmk_core/protocol/lufa/descriptor.h
tmk_core/protocol/lufa/lufa.c
tmk_core/protocol/lufa/lufa.h
tmk_core/protocol/lufa/ringbuffer.hpp [new file with mode: 0644]
tmk_core/protocol/midi.mk
tmk_core/protocol/midi/Config/LUFAConfig.h
tmk_core/protocol/pjrc/usb.c
tmk_core/protocol/pjrc/usb_keyboard.c
tmk_core/protocol/ps2_mouse.c
tmk_core/protocol/ps2_mouse.h
tmk_core/readme.md
tmk_core/ring_buffer.h
tmk_core/rules.mk
tmk_core/tool/chibios/ch-bootloader-jump.patch
util/Win_Check.bat [new file with mode: 0644]
util/ergodox_ez.html [new file with mode: 0644]
util/install_dependencies.sh [changed mode: 0644->0755]
util/new_project.sh
util/travis_compiled_push.sh

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..92dfc3c
--- /dev/null
@@ -0,0 +1,94 @@
+# auto for anything unspecified
+* text=auto
+
+# sources
+*.c text
+*.cc text
+*.cxx text
+*.cpp text
+*.c++ text
+*.hpp text
+*.h text
+*.h++ text
+*.hh text
+*.bat    text
+*.coffee text
+*.css    text
+*.htm    text
+*.html   text
+*.inc    text
+*.ini    text
+*.js     text
+*.jsx    text
+*.json   text
+*.less   text
+*.php    text
+*.pl     text
+*.py     text
+*.rb     text
+*.sass   text
+*.scm    text
+*.scss   text
+*.sh     text
+*.sql    text
+*.styl   text
+*.ts     text
+*.xml    text
+*.xhtml  text
+
+# make files (need to always use lf for compatibility with Windows 10 bash)
+Makefile eol=lf
+*.mk eol=lf
+
+# make files (need to always use lf for compatibility with Windows 10 bash)
+*.sh eol=lf
+
+# documentation
+*.markdown   text
+*.md         text
+*.mdwn       text
+*.mdown      text
+*.mkd        text
+*.mkdn       text
+*.mdtxt      text
+*.mdtext     text
+*.txt        text
+AUTHORS      text
+CHANGELOG    text
+CHANGES      text
+CONTRIBUTING text
+COPYING      text
+INSTALL      text
+license      text
+LICENSE      text
+NEWS         text
+readme       text
+*README*     text
+TODO         text
+
+GRAPHICS
+*.ai   binary
+*.bmp  binary
+*.eps  binary
+*.gif  binary
+*.ico  binary
+*.jng  binary
+*.jp2  binary
+*.jpg  binary
+*.jpeg binary
+*.jpx  binary
+*.jxr  binary
+*.pdf  binary
+*.png  binary
+*.psb  binary
+*.psd  binary
+*.svg  text
+*.svgz binary
+*.tif  binary
+*.tiff binary
+*.wbmp binary
+*.webp binary
+
+# hex files
+*.hex binary
+*.eep binary
index 7c1e434e3168348bd9caccd54a05b8a1dafbe2a5..f66a961fd1bc8c5da26a3b71c4a38e732bca04a3 100644 (file)
@@ -17,6 +17,7 @@ build/
 .build/
 *.bak
 .vagrant/
+quantum/version.h
 .idea/
 CMakeLists.txt
 .DS_STORE
@@ -26,3 +27,8 @@ CMakeLists.txt
 .project
 .settings/
 .idea
+.browse.VC.db*
+*.stackdump
+util/Win_Check_Output.txt
+.vscode
+.stfolder
index 7e3c92d031214cecc061c1ca9efa238b30c535d3..12b7cb918f2a7b9ebe35d03cffc1fd2a0c61edec 100644 (file)
@@ -7,3 +7,6 @@
 [submodule "lib/ugfx"]
        path = lib/ugfx
        url = https://bitbucket.org/Tectu/ugfx
+[submodule "lib/googletest"]
+       path = lib/googletest
+       url = https://github.com/google/googletest
index 26deac0cebcf86e64a5d8fcff27a5b7ef0a28d7d..e74744a967ef316ddff4bc66d6d6bd37d4e33c56 100644 (file)
@@ -9,8 +9,11 @@ branches:
 env:
   global:
   - secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
+  matrix:
+  - TARGET=all-keyboards AUTOGEN=true
+  - TARGET=test AUTOGEN=false
 script:
-- make all-keyboards-quick AUTOGEN=true
+- make $TARGET AUTOGEN=$AUTOGEN
 addons:
   apt:
     packages:
@@ -21,4 +24,8 @@ addons:
     - gcc-arm-none-eabi
     - binutils-arm-none-eabi
     - libnewlib-arm-none-eabi
-after_success: bash util/travis_compiled_push.sh
+    - diffutils
+after_success: 
+  if [ "$AUTOGEN" == "true" ]; then
+    bash util/travis_compiled_push.sh;
+  fi
diff --git a/Dockerfile b/Dockerfile
new file mode 100644 (file)
index 0000000..c42bbeb
--- /dev/null
@@ -0,0 +1,28 @@
+FROM debian:jessie
+MAINTAINER Erik Dasque <erik@frenchguys.com>
+
+RUN apt-get update
+RUN apt-get install --no-install-recommends -y build-essential \
+    gcc \
+    unzip \
+    wget \
+    zip \
+    gcc-avr \
+    binutils-avr \
+    avr-libc \
+    dfu-programmer \
+    dfu-util \
+    gcc-arm-none-eabi \
+    binutils-arm-none-eabi \
+    libnewlib-arm-none-eabi \
+    git
+
+RUN apt-get clean
+RUN rm -rf /var/lib/apt/lists/*
+
+ENV keyboard=ergodox
+ENV subproject=ez
+ENV keymap=default
+
+VOLUME /qmk
+WORKDIR /qmk
\ No newline at end of file
index a7a10bf3264cdc57cc99f9142de02b5ea9f5df4c..aa33c40f1ffcc5089bb7f42234b8a8c3b4dcafd6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,267 +2,554 @@ ifndef VERBOSE
 .SILENT:
 endif
 
-.DEFAULT_GOAL := all
-
-space := $(subst ,, )
-starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST))))
-mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST))))
-abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
-
-ifneq (,$(findstring /keyboards/,$(starting_makefile)))
-       possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile))))
-       ifneq (,$(findstring /keymaps/,$(possible_keyboard)))
-               KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard)))
-               KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard)))
-               ifneq (,$(findstring /,$(KEYBOARD_DIR)))
-                       # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
-                       # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
-                       tmk_root = ../../..
-               else
-                       tmk_root = ../../../..
-               endif
-       else
-               KEYMAP_DIR:=default
-               KEYBOARD_DIR:=$(possible_keyboard)
-               ifneq (,$(findstring /,$(KEYBOARD_DIR)))
-                       # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
-                       # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
-                       tmk_root = ../../..
-               else
-                       tmk_root = ../..
-               endif
-       endif
-else
-       tmk_root = .
-endif
-# $(info $(KEYBOARD_DIR))
-# $(info $(KEYMAP_DIR))
-# $(info $(SUBPROJECT_DIR))
-
-# Directory common source filess exist
-TOP_DIR = $(tmk_root)
-TMK_DIR = tmk_core
-TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
-LIB_PATH = $(TOP_DIR)/lib
-
-QUANTUM_DIR = quantum
-QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
-
-
+# Never run this makefile in parallel, as it could screw things up
+# It won't affect the submakes, so you still get the speedup from specifying -jx
+.NOTPARALLEL:
+
+# Allow the silent with lower caps to work the same way as upper caps
+ifdef silent
+    SILENT = $(silent)
+endif
+
+ifdef SILENT
+    SUB_IS_SILENT := $(SILENT)
+endif
+
+# We need to make sure that silent is always turned off at the top level
+# Otherwise the [OK], [ERROR] and [WARN] messags won't be displayed correctly
+override SILENT := false
+
+ON_ERROR := error_occured=1
+
+STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
+ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
+ROOT_DIR := $(dir $(ROOT_MAKEFILE))
+ifeq ($(ROOT_DIR),)
+    ROOT_DIR := .
+endif
+ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE))
+ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
+ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
+ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
+STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
+BUILD_DIR := $(ROOT_DIR)/.build
+TEST_DIR := $(BUILD_DIR)/test
+ERROR_FILE := $(BUILD_DIR)/error_occured
+
+MAKEFILE_INCLUDED=yes
+
+# Helper function to process the newt element of a space separated path
+# It works a bit like the traditional functional head tail
+# so the CURRENT_PATH_ELEMENT will beome the new head
+# and the PATH_ELEMENTS are the rest that are still unprocessed
+define NEXT_PATH_ELEMENT
+    $$(eval CURRENT_PATH_ELEMENT := $$(firstword  $$(PATH_ELEMENTS)))
+    $$(eval PATH_ELEMENTS := $$(wordlist  2,9999,$$(PATH_ELEMENTS)))
+endef
+
+# We change the / to spaces so that we more easily can work with the elements
+# separately
+PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
+# Initialize the path elements list for further processing
+$(eval $(call NEXT_PATH_ELEMENT))
+
+# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct
+# variables depending on which directory you stand in.
+# It's really a very simple if else chain, if you squint enough,
+# but the makefile syntax makes it very verbose.
+# If we are in a subfolder of keyboards
+ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
+    $(eval $(call NEXT_PATH_ELEMENT))
+    KEYBOARD := $(CURRENT_PATH_ELEMENT)
+    $(eval $(call NEXT_PATH_ELEMENT))
+    # If we are in a subfolder of keymaps, or in other words in a keymap
+    # folder
+    ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
+        $(eval $(call NEXT_PATH_ELEMENT))
+        KEYMAP := $(CURRENT_PATH_ELEMENT)
+     # else if we are not in the keyboard folder itself
+    else ifneq ($(CURRENT_PATH_ELEMENT),)
+        # the we can assume it's a subproject, as no other folders
+        # should have make files in them
+        SUBPROJECT := $(CURRENT_PATH_ELEMENT)
+        $(eval $(call NEXT_PATH_ELEMENT))
+        # if we are inside a keymap folder of a subproject
+        ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
+            $(eval $(call NEXT_PATH_ELEMENT))
+            KEYMAP := $(CURRENT_PATH_ELEMENT)
+        endif
+    endif
+endif
+
+# Only consider folders with makefiles, to prevent errors in case there are extra folders
+KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
+
+#Compability with the old make variables, anything you specify directly on the command line
+# always overrides the detected folders
 ifdef keyboard
-       KEYBOARD ?= $(keyboard)
-endif
-ifdef KEYBOARD_DIR
-       KEYBOARD ?= $(KEYBOARD_DIR)
+    KEYBOARD := $(keyboard)
 endif
-ifndef KEYBOARD
-       KEYBOARD=planck
-endif
-
-MASTER ?= left
-ifdef master
-       MASTER = $(master)
-endif
-
-
-# converts things to keyboards/subproject
-ifneq (,$(findstring /,$(KEYBOARD)))
-       TEMP:=$(KEYBOARD)
-       KEYBOARD:=$(firstword $(subst /, ,$(TEMP)))
-       SUBPROJECT:=$(lastword $(subst /, ,$(TEMP)))
-endif
-
-KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)
-
 ifdef sub
-       SUBPROJECT=$(sub)
+    SUBPROJECT := $(sub)
 endif
 ifdef subproject
-       SUBPROJECT=$(subproject)
+    SUBPROJECT := $(subproject)
 endif
-
-ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
-       KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
-       ifndef ARCH
-               ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","")
-                       include $(KEYBOARD_PATH)/Makefile
-               endif
-       endif
-else 
-$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
-endif
-
-ifdef SUBPROJECT_DEFAULT
-       SUBPROJECT?=$(SUBPROJECT_DEFAULT)
-endif
-
-ifdef SUBPROJECT
-       SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)
-       ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
-               OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
-               SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
-               -include $(SUBPROJECT_PATH)/Makefile
-       else 
-$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
-       endif
-endif
-
 ifdef keymap
-       KEYMAP ?= $(keymap)
-endif
-ifdef KEYMAP_DIR
-       KEYMAP ?= $(KEYMAP_DIR)
+    KEYMAP := $(keymap)
 endif
-ifndef KEYMAP
-       KEYMAP = default
-endif
-KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
-ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
-       KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
-       -include $(KEYMAP_PATH)/Makefile
-else 
-       ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
-$(error "$(KEYMAP_PATH)/keymap.c" does not exist)
-       else
-               KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
-               KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
-               -include $(KEYMAP_PATH)/Makefile
-       endif
-endif
-
-ifdef SUBPROJECT
-       TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
-else
-       TARGET ?= $(KEYBOARD)_$(KEYMAP)
-endif
-BUILD_DIR = .build
-
-# Object files directory
-#     To put object files in current directory, use a dot (.), do NOT make
-#     this an empty or blank macro!
-OBJDIR = $(BUILD_DIR)/obj_$(TARGET)
 
+# Uncomment these for debugging
+#$(info Keyboard: $(KEYBOARD))
+#$(info Keymap: $(KEYMAP))
+#$(info Subproject: $(SUBPROJECT))
+#$(info Keyboards: $(KEYBOARDS))
 
 
-ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
-       CONFIG_H = $(KEYMAP_PATH)/config.h
-else
-       CONFIG_H = $(KEYBOARD_PATH)/config.h
-       ifdef SUBPROJECT
-               ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
-                       CONFIG_H = $(SUBPROJECT_PATH)/config.h
-               endif
-       endif
-endif
-
-# # project specific files
-SRC += $(KEYBOARD_FILE) \
-       $(KEYMAP_FILE) \
-       $(QUANTUM_DIR)/quantum.c \
-       $(QUANTUM_DIR)/keymap_common.c \
-       $(QUANTUM_DIR)/keycode_config.c \
-       $(QUANTUM_DIR)/process_keycode/process_leader.c
-
-ifdef SUBPROJECT
-       SRC += $(SUBPROJECT_FILE)
-endif
-
-ifdef SUBPROJECT
-       SRC += $(SUBPROJECT_FILE)
-endif
-
-ifdef SUBPROJECT
-       SRC += $(SUBPROJECT_FILE)
-endif
-
-ifndef CUSTOM_MATRIX
-       SRC += $(QUANTUM_DIR)/matrix.c
-endif
-
-ifeq ($(strip $(MIDI_ENABLE)), yes)
-    OPT_DEFS += -DMIDI_ENABLE
-       SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
-endif
-
-ifeq ($(strip $(AUDIO_ENABLE)), yes)
-    OPT_DEFS += -DAUDIO_ENABLE
-       SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
-       SRC += $(QUANTUM_DIR)/audio/audio.c
-       SRC += $(QUANTUM_DIR)/audio/voices.c
-       SRC += $(QUANTUM_DIR)/audio/luts.c
-endif
-
-ifeq ($(strip $(UNICODE_ENABLE)), yes)
-    OPT_DEFS += -DUNICODE_ENABLE
-       SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
-endif
-
-ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
-       OPT_DEFS += -DRGBLIGHT_ENABLE
-       SRC += $(QUANTUM_DIR)/light_ws2812.c
-       SRC += $(QUANTUM_DIR)/rgblight.c
-endif
-
-ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
-       OPT_DEFS += -DTAP_DANCE_ENABLE
-       SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
-endif
-
-ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
-       SERIAL_DIR = $(QUANTUM_DIR)/serial_link
-       SERIAL_PATH = $(QUANTUM_PATH)/serial_link
-       SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
-       SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
-       SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
-       OPT_DEFS += -DSERIAL_LINK_ENABLE
-       VAPTH += $(SERIAL_PATH)
-endif
-
-# Optimize size but this may cause error "relocation truncated to fit"
-#EXTRALDFLAGS = -Wl,--relax
-
-# Search Path
-VPATH += $(KEYMAP_PATH)
-ifdef SUBPROJECT
-       VPATH += $(SUBPROJECT_PATH)
-endif
-VPATH += $(KEYBOARD_PATH)
-VPATH += $(TOP_DIR)
-VPATH += $(TMK_PATH)
-VPATH += $(QUANTUM_PATH)
-VPATH += $(QUANTUM_PATH)/keymap_extras
-VPATH += $(QUANTUM_PATH)/audio
-VPATH += $(QUANTUM_PATH)/process_keycode
-
-
-# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
-ifdef MCU_FAMILY
-       PLATFORM=CHIBIOS
+# Set the default goal depening on where we are running make from
+# this handles the case where you run make without any arguments
+.DEFAULT_GOAL := all
+ifneq ($(KEYMAP),)
+    ifeq ($(SUBPROJECT),)
+         # Inside a keymap folder, just build the keymap, with the
+         # default subproject
+        .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP)
+    else
+         # Inside a subproject keyamp folder, build the keymap
+         # for that subproject
+        .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP)
+    endif
+else ifneq ($(SUBPROJECT),)
+     # Inside a subproject folder, build all keymaps for that subproject
+    .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm
+else ifneq ($(KEYBOARD),)
+     # Inside a keyboard folder, build all keymaps for all subprojects
+     # Note that this is different from the old behaviour, which would
+     # build only the default keymap of the default keyboard
+    .DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm
+endif
+
+
+# Compare the start of the RULE variable with the first argument($1)
+# If the rules equals $1 or starts with $1-, RULE_FOUND is set to true
+#     and $1 is removed from the RULE variable
+# Otherwise the RULE_FOUND variable is set to false, and RULE left as it was
+# The function is a bit tricky, since there's no built in $(startswith) function
+define COMPARE_AND_REMOVE_FROM_RULE_HELPER
+    ifeq ($1,$$(RULE))
+        RULE:=
+        RULE_FOUND := true
+    else
+        STARTDASH_REMOVED=$$(subst START$1-,,START$$(RULE))
+        ifneq ($$(STARTDASH_REMOVED),START$$(RULE))
+            RULE_FOUND := true
+            RULE := $$(STARTDASH_REMOVED)
+        else
+            RULE_FOUND := false
+        endif
+    endif
+endef
+
+# This makes it easier to call COMPARE_AND_REMOVE_FROM_RULE, since it makes it behave like
+# a function that returns the value
+COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND)
+
+
+# Recursively try to find a match for the start of the rule to be checked
+# $1 The list to be checked
+# If a match is found, then RULE_FOUND is set to true
+# and MATCHED_ITEM to the item that was matched
+define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
+    ifneq ($1,)
+        ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
+            MATCHED_ITEM := $$(firstword $1)
+        else
+            $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
+        endif
+    endif
+endef
+
+# A recursive helper function for finding the longest match
+# $1 The list to be checed
+# It works by always removing the currently matched item from the list
+# and call itself recursively, until a match is found
+define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
+    # Stop the recursion when the list is empty
+    ifneq ($1,)
+        RULE_BEFORE := $$(RULE)
+        $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
+        # If a match is found in the current list, otherwise just return what we had before
+        ifeq ($$(RULE_FOUND),true)
+            # Save the best match so far and call itself recursivel
+            BEST_MATCH := $$(MATCHED_ITEM)
+            BEST_MATCH_RULE := $$(RULE)
+            RULE_FOUND := false
+            RULE := $$(RULE_BEFORE)
+            $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1)))
+        endif
+     endif
+endef
+
+
+# Recursively try to find the longest match for the start of the rule to be checked
+# $1 The list to be checked
+# If a match is found, then RULE_FOUND is set to true
+# and MATCHED_ITEM to the item that was matched
+define TRY_TO_MATCH_RULE_FROM_LIST_HELPER
+    BEST_MATCH :=
+    $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1))
+    ifneq ($$(BEST_MATCH),)
+        RULE_FOUND := true
+        RULE := $$(BEST_MATCH_RULE)
+        MATCHED_ITEM := $$(BEST_MATCH)
+    else
+        RULE_FOUND := false
+        MATCHED_ITEM :=
+    endif
+endef
+
+# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
+TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
+
+define ALL_IN_LIST_LOOP
+    OLD_RULE$1 := $$(RULE)
+    $$(eval $$(call $1,$$(ITEM$1)))
+    RULE := $$(OLD_RULE$1)
+endef
+
+define PARSE_ALL_IN_LIST
+    $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1)))
+endef
+
+# The entry point for rule parsing
+# parses a rule in the format <keyboard>-<subproject>-<keymap>-<target>
+# but this particular function only deals with the first <keyboard> part
+define PARSE_RULE
+    RULE := $1
+    COMMANDS :=
+    # If the rule starts with allkb, then continue the parsing from
+    # PARSE_ALL_KEYBOARDS
+    ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true)
+        $$(eval $$(call PARSE_ALL_KEYBOARDS))
+    else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
+        $$(eval $$(call PARSE_TEST))
+    # If the rule starts with the name of a known keyboard, then continue
+    # the parsing from PARSE_KEYBOARD
+    else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
+        $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
+    # Otherwise use the KEYBOARD variable, which is determined either by
+    # the current directory you run make from, or passed in as an argument
+    else ifneq ($$(KEYBOARD),)
+        $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD)))
+    else
+        $$(info make: *** No rule to make target '$1'. Stop.)
+        # Notice the tab instead of spaces below!
+               exit 1
+    endif
+endef
+
+# $1 = Keyboard
+# Parses a rule in the format <subproject>-<keymap>-<target>
+# the keyboard is already known when entering this function
+define PARSE_KEYBOARD
+    CURRENT_KB := $1
+    # A subproject is any keyboard subfolder with a makefile
+    SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile)))
+    # if the rule starts with allsp, then continue with looping over all subprojects
+    ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true)
+        $$(eval $$(call PARSE_ALL_SUBPROJECTS))
+    # A special case for matching the defaultsp (default subproject)
+    else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,defaultsp),true)
+        $$(eval $$(call PARSE_SUBPROJECT,defaultsp))
+    # If the rule starts with the name of a known subproject
+    else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true)
+        $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM)))
+    # Try to use the SUBPROJECT variable, which is either determined by the
+    # directory which invoked make, or passed as an argument to make
+    else ifneq ($$(SUBPROJECT),)
+        $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT)))
+       # If there's no matching subproject, we assume it's the default
+       # This will allow you to leave the subproject part of the target out
+    else
+        $$(eval $$(call PARSE_SUBPROJECT,))
+    endif
+endef
+
+# if we are going to compile all keyboards, match the rest of the rule
+# for each of them
+define PARSE_ALL_KEYBOARDS
+    $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS)))
+endef
+
+# $1 Subproject
+# When entering this, the keyboard and subproject are known, so now we need
+# to determine which keymaps are going to get compiled
+define PARSE_SUBPROJECT
+    # If we want to compile the default subproject, then we need to
+    # include the correct makefile to determine the actual name of it
+    CURRENT_SP := $1
+    ifeq ($$(CURRENT_SP),)
+        CURRENT_SP := defaultsp
+    endif
+    ifeq ($$(CURRENT_SP),defaultsp)
+        SUBPROJECT_DEFAULT=
+        $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile)
+        CURRENT_SP := $$(SUBPROJECT_DEFAULT)
+    endif
+    # If current subproject is empty (the default was not defined), and we have a list of subproject
+    # then make all of them
+    ifeq ($$(CURRENT_SP),)
+        ifneq ($$(SUBPROJECTS),)
+            CURRENT_SP := allsp
+         endif
+    endif
+    # The special allsp is handled later
+    ifneq ($$(CURRENT_SP),allsp)
+        # get a list of all keymaps
+        KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))
+        ifneq ($$(CURRENT_SP),)
+            # if the subproject is defined, then also look for keymaps inside the subproject folder
+            SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.)))
+            KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS))
+        endif
+        # if the rule after removing the start of it is empty (we haven't specified a kemap or target)
+        # compile all the keymaps
+        ifeq ($$(RULE),)
+            $$(eval $$(call PARSE_ALL_KEYMAPS))
+        # The same if allkm was specified
+        else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true)
+            $$(eval $$(call PARSE_ALL_KEYMAPS))
+        # Try to match the specified keyamp with the list of known keymaps
+        else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
+            $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
+        # Otherwise try to match the keymap from the current folder, or arguments to the make command
+        else ifneq ($$(KEYMAP),)
+            $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
+        # No matching keymap found, so we assume that the rest of the rule is the target
+        # If we haven't been able to parse out a subproject, then make all of them
+        # This is consistent with running make without any arguments from the keyboard
+        # folder
+        else ifeq ($1,)
+            $$(eval $$(call PARSE_ALL_SUBPROJECTS))
+        # Otherwise, make all keymaps, again this is consistent with how it works without
+        # any arguments
+        else
+            $$(eval $$(call PARSE_ALL_KEYMAPS))
+        endif
+    else
+        # As earlier mentione,d when allsb is specified, we call our self recursively
+        # for all of the subprojects
+        $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
+    endif
+endef
+
+# If we want to parse all subprojects, but the keyboard doesn't have any,
+# then use defaultsp instead
+define PARSE_ALL_SUBPROJECTS
+    ifeq ($$(SUBPROJECTS),)
+        $$(eval $$(call PARSE_SUBPROJECT,defaultsp))
+    else
+        $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS)))
+    endif
+endef
+
+# $1 Keymap
+# This is the meat of compiling a keyboard, when entering this, everything is known
+# keyboard, subproject, and keymap
+# Note that we are not directly calling the command here, but instead building a list,
+# which will later be processed
+define PARSE_KEYMAP
+    CURRENT_KM = $1
+    # The rest of the rule is the target
+    # Remove the leading "-" from the target, as it acts as a separator
+    MAKE_TARGET := $$(patsubst -%,%,$$(RULE))
+    # We need to generate an unique indentifer to append to the COMMANDS list
+    COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM)
+    # If we are compiling a keyboard without a subproject, we want to display just the name
+    # of the keyboard, otherwise keyboard/subproject
+    ifeq ($$(CURRENT_SP),)
+        KB_SP := $(CURRENT_KB)
+    else
+        KB_SP := $(CURRENT_KB)/$$(CURRENT_SP)
+    endif
+    # Format it in bold
+    KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR)
+    # Specify the variables that we are passing forward to submake
+    MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM)
+    # And the first part of the make command
+    MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET)
+    # The message to display
+    MAKE_MSG := $$(MSG_MAKE_KB)
+    # We run the command differently, depending on if we want more output or not
+    # The true version for silent output and the false version otherwise
+    $$(eval $$(call BUILD))
+endef
+
+define BUILD
+    MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR)
+    COMMANDS += $$(COMMAND)
+    COMMAND_true_$$(COMMAND) := \
+        printf "$$(MAKE_MSG)" | \
+        $$(MAKE_MSG_FORMAT); \
+        LOG=$$$$($$(MAKE_CMD) $$(MAKE_VARS) SILENT=true 2>&1) ; \
+        if [ $$$$? -gt 0 ]; \
+            then $$(PRINT_ERROR_PLAIN); \
+        elif [ "$$$$LOG" != "" ] ; \
+            then $$(PRINT_WARNING_PLAIN); \
+        else \
+            $$(PRINT_OK); \
+        fi;
+    COMMAND_false_$$(COMMAND) := \
+        printf "$$(MAKE_MSG)\n\n"; \
+        $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
+        if [ $$$$? -gt 0 ]; \
+            then error_occured=1; \
+        fi;
+endef
+
+# Just parse all the keymaps for a specifc keyboard
+define PARSE_ALL_KEYMAPS
+    $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
+endef
+
+define BUILD_TEST
+    TEST_NAME := $1
+    MAKE_TARGET := $2
+    COMMAND := $1
+    MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
+    MAKE_VARS := TEST=$$(TEST_NAME)
+    MAKE_MSG := $$(MSG_MAKE_TEST)
+    $$(eval $$(call BUILD))
+    ifneq ($$(MAKE_TARGET),clean)
+        TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
+        TESTS += $$(TEST_NAME)
+        TEST_MSG := $$(MSG_TEST)
+        $$(TEST_NAME)_COMMAND := \
+            printf "$$(TEST_MSG)\n"; \
+            $$(TEST_EXECUTABLE); \
+            if [ $$$$? -gt 0 ]; \
+                then error_occured=1; \
+            fi; \
+            printf "\n";
+    endif
+endef
+
+define PARSE_TEST
+    TESTS :=
+    TEST_NAME := $$(firstword $$(subst -, ,$$(RULE)))
+    TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE)))
+    ifeq ($$(TEST_NAME),all)
+        MATCHED_TESTS := $$(TEST_LIST)
+    else
+        MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),))
+    endif
+    $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET))))
+endef
+
+
+# Set the silent mode depending on if we are trying to compile multiple keyboards or not
+# By default it's on in that case, but it can be overriden by specifying silent=false
+# from the command line
+define SET_SILENT_MODE
+    ifdef SUB_IS_SILENT
+        SILENT_MODE := $(SUB_IS_SILENT)
+    else ifeq ($$(words $$(COMMANDS)),1)
+        SILENT_MODE := false
+    else
+        SILENT_MODE := true
+    endif
+endef
+
+include $(ROOT_DIR)/message.mk
+
+# The empty line is important here, as it will force a new shell to be created for each command
+# Otherwise the command line will become too long with a lot of keyboards and keymaps
+define RUN_COMMAND
++error_occured=0;\
+$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
+if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
+
+
+endef
+define RUN_TEST
++error_occured=0;\
+$($(TEST)_COMMAND))\
+if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
+
+endef
+
+# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps
+SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))
+.PHONY: $(SUBPROJECTS)
+$(SUBPROJECTS): %: %-allkm
+
+# Let's match everything, we handle all the rule parsing ourselves
+.PHONY: %
+ifndef SKIP_GIT
+%:
+       # Check if we have the CMP tool installed
+       cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
+       # Check if the submodules are dirty, and display a warning if they are
+       git submodule status --recursive 2>/dev/null | \
+       while IFS= read -r x; do \
+               case "$$x" in \
+                       \ *) ;; \
+                       *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
+               esac \
+       done
+       rm -f $(ERROR_FILE) > /dev/null 2>&1
+       $(eval $(call PARSE_RULE,$@))
+       $(eval $(call SET_SILENT_MODE))
+       # Run all the commands in the same shell, notice the + at the first line
+       # it has to be there to allow parallel execution of the submake
+       # This always tries to compile everything, even if error occurs in the middle
+       # But we return the error code at the end, to trigger travis failures
+       $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
+       if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
+       $(foreach TEST,$(TESTS),$(RUN_TEST))
+       if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
 else
-       PLATFORM=AVR
-endif
-
-include $(TMK_PATH)/common.mk
-ifeq ($(PLATFORM),AVR)
-       include $(TMK_PATH)/protocol/lufa.mk
-       include $(TMK_PATH)/avr.mk
-else ifeq ($(PLATFORM),CHIBIOS)
-       include $(TMK_PATH)/protocol/chibios.mk
-       include $(TMK_PATH)/chibios.mk
-       OPT_OS = chibios
+%:
+       # Check if we have the CMP tool installed
+       cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
+       rm -f $(ERROR_FILE) > /dev/null 2>&1
+       $(eval $(call PARSE_RULE,$@))
+       $(eval $(call SET_SILENT_MODE))
+       # Run all the commands in the same shell, notice the + at the first line
+       # it has to be there to allow parallel execution of the submake
+       # This always tries to compile everything, even if error occurs in the middle
+       # But we return the error code at the end, to trigger travis failures
+       $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
+       if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
+       $(foreach TEST,$(TESTS),$(RUN_TEST))
+       if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
+endif
+
+# All should compile everything
+.PHONY: all
+all: all-keyboards test-all
+
+# Define some shortcuts, mostly for compability with the old syntax
+.PHONY: all-keyboards
+all-keyboards: allkb-allsp-allkm
+
+.PHONY: all-keyboards-defaults
+all-keyboards-defaults: allkb-allsp-default
+
+.PHONY: test
+test: test-all
+
+.PHONY: test-clean
+test-clean: test-all-clean
+
+# Generate the version.h file
+ifndef SKIP_GIT
+    GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
 else
-       $(error Unknown platform)
-endif
-
-ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
-       VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
-       VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
-       include $(VISUALIZER_PATH)/visualizer.mk
+    GIT_VERSION := NA
 endif
-
-include $(TMK_PATH)/rules.mk
-
-GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
 BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
-OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
-OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\"
+$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)
+$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h)
+
+include $(ROOT_DIR)/testlist.mk
\ No newline at end of file
index 8cadeaddfcfbff97164c738d59ce150cc2237b79..389b688ae7cda65ad5e3fc6c824acd74e0166a50 100644 (file)
@@ -91,7 +91,7 @@ Vagrant.configure(2) do |config|
 
   Or you can copy and paste the example line below.
 
-  cd /vagrant; cd keyboards; cd ergodox_ez; make clean; make
+  cd /vagrant; cd keyboards; cd ergodox; make clean; make
 
 
   EOT
diff --git a/build_keyboard.mk b/build_keyboard.mk
new file mode 100644 (file)
index 0000000..ce505de
--- /dev/null
@@ -0,0 +1,254 @@
+ifndef VERBOSE
+.SILENT:
+endif
+
+.DEFAULT_GOAL := all
+
+include common.mk
+
+ifneq ($(SUBPROJECT),)
+       TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
+       KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT)
+else
+       TARGET ?= $(KEYBOARD)_$(KEYMAP)
+       KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)
+endif
+
+# Force expansion
+TARGET := $(TARGET)
+
+
+MASTER ?= left
+ifdef master
+       MASTER = $(master)
+endif
+
+ifeq ($(MASTER),right) 
+       OPT_DEFS += -DMASTER_IS_ON_RIGHT
+else 
+       ifneq ($(MASTER),left)
+$(error MASTER does not have a valid value(left/right))
+       endif
+endif
+
+
+
+KEYBOARD_PATH := keyboards/$(KEYBOARD)
+KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
+
+ifneq ("$(wildcard $(KEYBOARD_C))","")
+    include $(KEYBOARD_PATH)/rules.mk
+else 
+    $(error "$(KEYBOARD_C)" does not exist)
+endif
+
+
+ifneq ($(SUBPROJECT),)
+    SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
+    SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
+    ifneq ("$(wildcard $(SUBPROJECT_C))","")
+        OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
+        include $(SUBPROJECT_PATH)/rules.mk
+    else 
+        $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
+    endif
+endif
+
+# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
+ifdef MCU_FAMILY
+       PLATFORM=CHIBIOS
+else
+       PLATFORM=AVR
+endif
+
+ifeq ($(PLATFORM),CHIBIOS)
+       include $(TMK_PATH)/protocol/chibios.mk
+       include $(TMK_PATH)/chibios.mk
+       OPT_OS = chibios
+       ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","")
+               OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h
+       else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
+               OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h
+       else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
+               OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
+       else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
+               OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
+       endif
+endif
+
+CONFIG_H = $(KEYBOARD_PATH)/config.h
+ifneq ($(SUBPROJECT),)
+       ifneq ("$(wildcard $(SUBPROJECT_C))","")
+               CONFIG_H = $(SUBPROJECT_PATH)/config.h
+       endif
+endif
+
+# Save the defines and includes here, so we don't include any keymap specific ones 
+PROJECT_DEFS := $(OPT_DEFS)
+PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH)
+PROJECT_CONFIG := $(CONFIG_H)
+
+MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c
+SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
+SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c
+ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","")
+    -include $(SUBPROJ_KEYMAP_PATH)/Makefile
+    KEYMAP_C := $(SUBPROJ_KEYMAP_C)
+    KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","")
+    -include $(MAIN_KEYMAP_PATH)/Makefile
+    KEYMAP_C := $(MAIN_KEYMAP_C)
+    KEYMAP_PATH := $(MAIN_KEYMAP_PATH)
+else
+    $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist)
+endif
+
+
+# Object files directory
+#     To put object files in current directory, use a dot (.), do NOT make
+#     this an empty or blank macro!
+KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
+
+
+ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
+       CONFIG_H = $(KEYMAP_PATH)/config.h
+endif
+
+# # project specific files
+SRC += $(KEYBOARD_C) \
+       $(KEYMAP_C) \
+       $(QUANTUM_DIR)/quantum.c \
+       $(QUANTUM_DIR)/keymap_common.c \
+       $(QUANTUM_DIR)/keycode_config.c \
+       $(QUANTUM_DIR)/process_keycode/process_leader.c
+
+ifneq ($(SUBPROJECT),)
+       SRC += $(SUBPROJECT_C)
+endif
+
+ifndef CUSTOM_MATRIX
+       SRC += $(QUANTUM_DIR)/matrix.c
+endif
+
+ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
+       OPT_DEFS += -DAPI_SYSEX_ENABLE
+       SRC += $(QUANTUM_DIR)/api/api_sysex.c
+       OPT_DEFS += -DAPI_ENABLE
+       SRC += $(QUANTUM_DIR)/api.c
+    MIDI_ENABLE=yes
+endif
+
+ifeq ($(strip $(MIDI_ENABLE)), yes)
+    OPT_DEFS += -DMIDI_ENABLE
+       SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
+endif
+
+ifeq ($(strip $(VIRTSER_ENABLE)), yes)
+    OPT_DEFS += -DVIRTSER_ENABLE
+endif
+
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+    OPT_DEFS += -DAUDIO_ENABLE
+       SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
+       SRC += $(QUANTUM_DIR)/audio/audio.c
+       SRC += $(QUANTUM_DIR)/audio/voices.c
+       SRC += $(QUANTUM_DIR)/audio/luts.c
+endif
+
+ifeq ($(strip $(UCIS_ENABLE)), yes)
+       OPT_DEFS += -DUCIS_ENABLE
+       UNICODE_ENABLE = yes
+endif
+
+ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
+       OPT_DEFS += -DUNICODEMAP_ENABLE
+       UNICODE_ENABLE = yes
+endif
+
+ifeq ($(strip $(UNICODE_ENABLE)), yes)
+    OPT_DEFS += -DUNICODE_ENABLE
+       SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
+endif
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+       OPT_DEFS += -DRGBLIGHT_ENABLE
+       SRC += $(QUANTUM_DIR)/light_ws2812.c
+       SRC += $(QUANTUM_DIR)/rgblight.c
+endif
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+       OPT_DEFS += -DTAP_DANCE_ENABLE
+       SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
+endif
+
+ifeq ($(strip $(PRINTING_ENABLE)), yes)
+       OPT_DEFS += -DPRINTING_ENABLE
+       SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
+       SRC += $(TMK_DIR)/protocol/serial_uart.c
+endif
+
+ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
+       SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
+       OPT_DEFS += $(SERIAL_DEFS)
+       VAPTH += $(SERIAL_PATH)
+endif
+
+ifneq ($(strip $(VARIABLE_TRACE)),)
+       SRC += $(QUANTUM_DIR)/variable_trace.c
+       OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
+ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
+       OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
+endif
+endif
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+# Search Path
+VPATH += $(KEYMAP_PATH)
+ifneq ($(SUBPROJECT),)
+       VPATH += $(SUBPROJECT_PATH)
+endif
+VPATH += $(KEYBOARD_PATH)
+VPATH += $(COMMON_VPATH)
+
+include $(TMK_PATH)/protocol.mk
+
+include $(TMK_PATH)/common.mk
+SRC += $(TMK_COMMON_SRC)
+OPT_DEFS += $(TMK_COMMON_DEFS)
+EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
+
+ifeq ($(PLATFORM),AVR)
+       include $(TMK_PATH)/protocol/lufa.mk
+       include $(TMK_PATH)/avr.mk
+endif
+
+ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
+       VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
+       VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
+       include $(VISUALIZER_PATH)/visualizer.mk
+endif
+
+OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
+$(KEYMAP_OUTPUT)_SRC := $(SRC)
+$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" 
+$(KEYMAP_OUTPUT)_INC :=  $(VPATH) $(EXTRAINCDIRS)
+$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
+$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC)
+$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
+$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC)
+$(KEYBOARD_OUTPUT)_CONFIG  := $(PROJECT_CONFIG)
+
+# Default target.
+all: build sizeafter
+
+# Change the build target to build a HEX file or a library.
+build: elf hex
+#build: elf hex eep lss sym
+#build: lib
+
+
+include $(TMK_PATH)/rules.mk
+
diff --git a/build_test.mk b/build_test.mk
new file mode 100644 (file)
index 0000000..ee15a45
--- /dev/null
@@ -0,0 +1,57 @@
+ifndef VERBOSE
+.SILENT:
+endif
+
+.DEFAULT_GOAL := all
+
+include common.mk
+
+TARGET=test/$(TEST)
+
+GTEST_OUTPUT = $(BUILD_DIR)/gtest
+
+TEST_OBJ = $(BUILD_DIR)/test_obj
+
+OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
+
+GTEST_INC := \
+       $(LIB_PATH)/googletest/googletest/include\
+       $(LIB_PATH)/googletest/googlemock/include\
+       
+GTEST_INTERNAL_INC :=\
+       $(LIB_PATH)/googletest/googletest\
+       $(LIB_PATH)/googletest/googlemock
+
+$(GTEST_OUTPUT)_SRC :=\
+       googletest/src/gtest-all.cc\
+       googletest/src/gtest_main.cc\
+       googlemock/src/gmock-all.cc
+
+$(GTEST_OUTPUT)_DEFS := 
+$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
+
+LDFLAGS += -lstdc++ -lpthread -shared-libgcc
+CREATE_MAP := no
+
+VPATH +=\
+       $(LIB_PATH)/googletest\
+       $(LIB_PATH)/googlemock
+
+all: elf
+
+VPATH += $(COMMON_VPATH)
+
+include $(TMK_PATH)/common.mk
+include $(QUANTUM_PATH)/serial_link/tests/rules.mk
+
+$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
+$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
+$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
+
+include $(TMK_PATH)/native.mk
+include $(TMK_PATH)/rules.mk
+
+
+$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
+$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
+
diff --git a/common.mk b/common.mk
new file mode 100644 (file)
index 0000000..c4b9394
--- /dev/null
+++ b/common.mk
@@ -0,0 +1,27 @@
+include message.mk
+
+# Directory common source files exist
+TOP_DIR = .
+TMK_DIR = tmk_core
+TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
+LIB_PATH = $(TOP_DIR)/lib
+
+QUANTUM_DIR = quantum
+QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
+
+BUILD_DIR := $(TOP_DIR)/.build
+
+SERIAL_DIR := $(QUANTUM_DIR)/serial_link
+SERIAL_PATH := $(QUANTUM_PATH)/serial_link
+SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
+SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
+SERIAL_DEFS += -DSERIAL_LINK_ENABLE
+
+COMMON_VPATH := $(TOP_DIR)
+COMMON_VPATH += $(TMK_PATH)
+COMMON_VPATH += $(QUANTUM_PATH)
+COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
+COMMON_VPATH += $(QUANTUM_PATH)/audio
+COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
+COMMON_VPATH += $(QUANTUM_PATH)/api
+COMMON_VPATH += $(SERIAL_PATH)
\ No newline at end of file
index 6164dacd3cb2616ca7e660ff05990b60db87adbb..e3438eda2badf96b2e9ca60835fdee943109dc6d 100644 (file)
@@ -34,7 +34,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
 * [atomic](keyboards/atomic/)                - [Atomic] Ortholinear 60% keyboard
 
 ### Ergodox EZ
-* [ergodox_ez](keyboards/ergodox_ez)         - [Ergodox_EZ] Assembled split keyboard
+* [ergodox_ez](keyboards/ergodox/ez)         - [Ergodox_EZ] Assembled split keyboard
 
 ## Other projects
 
@@ -113,7 +113,7 @@ Third party libraries like LUFA, PJRC and V-USB have their own license respectiv
 
 Build Firmware and Program Controller
 -------------------------------------
-See [doc/build.md](tmk_core/doc/build.md), or the readme in the particular keyboards/* folder.
+See [build environment setup](/readme.md#build-environment-setup), or the readme in the particular keyboards/* folder.
 
 
 
index 62044b7f7261cff85eaf5091efdf57779ee92802..439e78da7d2cf4f4dae3aae89a3c61886356d945 100644 (file)
@@ -6,7 +6,8 @@ This project includes a Vagrantfile that will allow you to build a new firmware
 
 Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://www.vagrantup.com/) as well as [VirtualBox](https://www.virtualbox.org/) (or [VMware Workstation](https://www.vmware.com/products/workstation) and [Vagrant VMware plugin](http://www.vagrantup.com/vmware) but the (paid) VMware plugin requires a licensed copy of VMware Workstation/Fusion).
 
-*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12.
+*COMPATIBILITY NOTICE* Certain versions of Virtualbox 5 appear to have an incompatibility with the Virtualbox extensions installed in the boxes in this Vagrantfile. If you encounter any issues with the /vagrant mount not succeeding, please upgrade your version of Virtualbox to at least 5.0.12. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest`
+
 
 Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
 
@@ -20,7 +21,7 @@ See [/doc/keymap.md](/doc/keymap.md).
 
 ## Flashing the firmware
 
-The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboards/ergodox_ez/readme.md) gives a great example.
+The "easy" way to flash the firmware is using a tool from your host OS like the Teensy programming app. [ErgoDox EZ](/keyboards/ergodox/readme.md) gives a great example.
 
 If you want to program via the command line you can uncomment the ['modifyvm'] lines in the Vagrantfile to enable the USB passthrough into Linux and then program using the command line tools like dfu-util/dfu-programmer or you can install the Teensy CLI version.
-       
\ No newline at end of file
+       
diff --git a/doc/basic_how_keyboards_work.md b/doc/basic_how_keyboards_work.md
new file mode 100644 (file)
index 0000000..73c3f5c
--- /dev/null
@@ -0,0 +1,96 @@
+# How keys are registered, and interpreted by computers
+
+In this file, you can will learn the concepts of how keyboards work over USB,
+and you'll be able to better understand what you can expect from changing your
+firmware directly.
+
+## Schematic view
+
+Whenever you type on 1 particular key, here is the chain of actions taking
+place:
+
+``` text
++------+         +-----+       +----------+      +----------+     +----+
+| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
++------+         +-----+       +----------+      +----------+     |----+
+```
+
+This scheme is a very simple view of what's going on, and more details follow
+in the next sections.
+
+## 1. You Press a Key
+
+Whenever you press a key, the firmware of your keyboard can register this event.
+It can register when the key is pressed, held and released.
+
+This usually happens with a [periodic scan of key presses with a frequency around 100 hz](https://github.com/benblazak/ergodox-firmware/blob/master/references.md#typical-keyboard-information).
+This speed often is limited by the mechanical key response time, the protocol
+to transfer those key presses (here USB HID), and by the software it is used in.
+
+## 2. What the Firmware Sends
+
+The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf)
+tells what a keyboard can actually send through USB to have a chance to be
+properly recognised. This includes a pre-defined list of keycodes which are
+simple numbers from `0x00` to `0xE7`. The firmware assigns a keycode to each
+key of the keyboard.
+
+The firmware does not send actually letters or characters, but only keycodes.
+Thus, by modifying the firmware, you only can modify what keycode is sent over
+USB for a given key.
+
+## 3. What the Operating System Does
+
+Once the keycode reaches the operating system, a piece of software has to have
+it match an actual character thanks to a keyboard layout. For example, if your
+layout is set to QWERTY, a sample of the matching table is as follow:
+
+``` text
+| keycode | character |
+|---------+-----------|
+|    0x04 | a/A       |
+|    0x05 | b/B       |
+|    0x06 | c/C       |
+|     ... | ...       |
+|    0x1C | y/Y       |
+|    0x1D | z/Z       |
+|     ... | ...       |
+|---------+-----------|
+```
+
+## Back to the firmware
+
+As the layout is generally fixed (unless you create your own), the firmware can
+actually call a keycode by its layout name directly to ease things for you.
+
+This is exactly what is done here with `KC_A` actually representing `0x04` in
+QWERTY. The full list can be found in `keycode.txt`.
+
+## List of Characters You Can Send
+
+Putting aside shortcuts, having a limited set of keycodes mapped to a limited
+layout means that **the list of characters you can assign to a given key only
+is the ones present in the layout**.
+
+For example, this means that if you have a QWERTY US layout, and you want to
+assign 1 key to produce `€` (euro currency symbol), you are unable to do so,
+because the QWERTY US layout does not have such mapping. You could fix that by
+using a QWERTY UK layout, or a QWERTY US International.
+
+You may wonder why a keyboard layout containing all of Unicode is not devised
+then? The limited number of keycode available through USB simply disallow such
+a thing.
+
+## How to (Maybe) Enter Unicode Characters
+
+You can have the firmware send *sequences of keys* to use the [software Unicode
+Input
+Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of
+the target operating system, thus effectively entering characters independently
+of the layout defined in the OS.
+
+Yet, it does come with multiple disadvantages:
+
+ - Tied to a specific OS a a time (need recompilation when changing OS);
+ - Within a given OS, does not work in all software;
+ - Limited to a subset of Unicode on some systems.
index c1134f9bf2ed4e66283eb69f9bfb132a5cd56e3f..687406fdabda9f319832ff6e9a274338970f3805 100644 (file)
@@ -2,7 +2,7 @@ Keycode Symbol Table
 ====================
 Keycodes are defined in `common/keycode.h`.
 Range of 00-A4 and E0-E7 are identical with HID Usage:
-<http://www.usb.org/developers/devclass_docs/Hut1_11.pdf>
+<http://www.usb.org/developers/hidpage/Hut1_12v2.pdf>
 Virtual keycodes are defined out of above range to support special actions.
 
 
@@ -84,7 +84,7 @@ KC_PAUSE            KC_PAUS         48 Keyboard Pause1
 KC_INSERT           KC_INS          49 Keyboard Insert1
 KC_HOME                             4A Keyboard Home1
 KC_PGUP                             4B Keyboard PageUp1
-KC_DELETE           KC_DELETE       4C Keyboard Delete Forward
+KC_DELETE           KC_DEL          4C Keyboard Delete Forward
 KC_END                              4D Keyboard End1
 KC_PGDOWN           KC_PGDN         4E Keyboard PageDown1
 KC_RIGHT            KC_RGHT         4F Keyboard RightArrow1
index d1985e567c86d54ad34a59d1820434910744c66d..6f2a663fc818e6a18b21d4197d7af83f5f0deb1e 100644 (file)
@@ -455,6 +455,35 @@ Turn the backlight on and off without changing level.
 
 
 
+### 2.6 Swap-Hands Action
+The swap-hands action allows support for one-handed keyboards without requiring a separate layer. Set `ONEHAND_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command key is pressed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd`
+
+### 2.6.1 Configuration
+The configuration table is a simple 2-dimensional array to map from column/row to new column/row. Example `hand_swap_config` for Planck:
+
+```
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+  {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+  {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+  {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+  {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+```
+
+Note that the array indices are reversed same as the matrix and the values are of type `keypos_t` which is `{col, row}` and all values are zero-based. In the example above, `hand_swap_config[2][4]` (third row, fifth column) would return {7, 2} (third row, eighth column).
+
+### 2.6.2 Advanced Swap Commands
+- **`ACTION_SWAP_HANDS()`** Swaps hands when pressed, returns to normal when released (momentary).
+- **`ACTION_SWAP_HANDS_TOGGLE()`** Toggles swap on and off with every keypress.
+- **`ACTION_SWAP_HANDS_TAP_TOGGLE()`** Toggles with a tap; momentary when held.
+- **`ACTION_SWAP_HANDS_TAP_KEY(key)`** Sends `key` with a tap; momentary swap when held.
+- **`ACTION_SWAP_HANDS_ON_OFF()`** Alias for `ACTION_SWAP_HANDS()`
+- **`ACTION_SWAP_HANDS_OFF_ON()`** Momentarily turns off swap.
+- **`ACTION_SWAP_HANDS_ON()`** Turns on swapping and leaves it on.
+- **`ACTION_SWAP_HANDS_OFF()`** Turn off swapping and leaves it off. Good for returning to a known state.
+
+
+
 ## 3. Layer switching Example
 There are some ways to switch layer with 'Layer' actions.
 
index d8325e6c89dbd33bb251f75e15ece8fcb5804339..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,70 +1,3 @@
-
-
-# Target file name (without extension).
-
-# project specific files
-SRC = led.c
-
-# MCU name
-MCU = atmega32u2
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
-#NKRO_ENABLE = yes     # USB Nkey Rollover - not yet supported in LUFA
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
diff --git a/keyboards/alps64/readme.md b/keyboards/alps64/readme.md
new file mode 100644 (file)
index 0000000..1798b19
--- /dev/null
@@ -0,0 +1,4 @@
+Alps64 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/alps64/rules.mk b/keyboards/alps64/rules.mk
new file mode 100644 (file)
index 0000000..c326d3e
--- /dev/null
@@ -0,0 +1,66 @@
+
+
+# Target file name (without extension).
+
+# project specific files
+SRC = led.c
+
+# MCU name
+MCU = atmega32u2
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
+#NKRO_ENABLE = yes     # USB Nkey Rollover - not yet supported in LUFA
\ No newline at end of file
diff --git a/keyboards/amj60/Makefile b/keyboards/amj60/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/amj60/amj60.c b/keyboards/amj60/amj60.c
new file mode 100644 (file)
index 0000000..993a591
--- /dev/null
@@ -0,0 +1,30 @@
+#include "amj60.h"
+#include "led.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+       matrix_init_user();
+       led_init_ports();
+};
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+       matrix_scan_user();
+};
+
+void led_init_ports(void) {
+    // * Set our LED pins as output
+    DDRB |= (1<<2);
+}
+
+void led_set_kb(uint8_t usb_led) {
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        // Turn capslock on
+        PORTB &= ~(1<<2);
+    } else {
+        // Turn capslock off
+        PORTB |= (1<<2);
+    }
+}
diff --git a/keyboards/amj60/amj60.h b/keyboards/amj60/amj60.h
new file mode 100644 (file)
index 0000000..a0cb473
--- /dev/null
@@ -0,0 +1,153 @@
+#ifndef AMJ60_H
+#define AMJ60_H
+
+#include "quantum.h"
+
+// readability  
+#define XXX KC_NO
+
+/* AMJ60 layout to the best of my knowledge matrix layout
+   * ,-----------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
+   * |-----------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+   * |-----------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d    |
+   * |-----------------------------------------------------------|
+   * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|  3c | 3d |
+   * |-----------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
+   * `-----------------------------------------------------------'
+ */
+#define KEYMAP( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
+}
+
+/* 
+   * ANSI
+   * ,-----------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|   0d  |
+   * |-----------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+   * |-----------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d    |
+   * |-----------------------------------------------------------|
+   * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|   3d     |
+   * |-----------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
+   * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ANSI( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
+    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+    {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+}
+
+/* AMJ60 HHKB matrix layout
+   * ,------------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49 |
+   * |------------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d  |
+   * |------------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b|   2d   |
+   * |------------------------------------------------------------|
+   * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d   | 3c |
+   * |------------------------------------------------------------|
+   * | 40 | 41 | 42 |        45              | 4a | 4b | 4c | 4d  |
+   * `------------------------------------------------------------'
+ */
+
+#define KEYMAP_HHKB( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
+    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+    {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
+}
+
+/* ISO 
+   * ,-----------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d    |
+   * |-----------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+   * |-----------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
+   * |-----------------------------------------------------------|
+   * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|   3d     |
+   * |-----------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
+   * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ISO( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \
+    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+}
+/* ISO w/ split right shift key matrix layout
+   * ,-----------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d    |
+   * |-----------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+   * |-----------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
+   * |-----------------------------------------------------------|
+   * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d  | 3c |
+   * |-----------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
+   * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ISO_SPLITRSHIFT( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#endif
diff --git a/keyboards/amj60/config.h b/keyboards/amj60/config.h
new file mode 100644 (file)
index 0000000..7c06f9a
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6066
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Han Chen
+#define PRODUCT         AMJ60
+#define DESCRIPTION     qmk port of AMJ60 PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { F7, F6, F5, F4, D5}
+#define MATRIX_COL_PINS { F1, F0, E6, C7, C6, B0, D4, B1, B7, B5, B4, D7, D6, B3}
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 4
+
+/* Underlight configuration
+ */
+
+#define RGB_DI_PIN E2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/Makefile b/keyboards/amj60/keymaps/iso_split_rshift/Makefile
new file mode 100644 (file)
index 0000000..2969ed8
--- /dev/null
@@ -0,0 +1,23 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  = no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
+CONSOLE_ENABLE   = no  # Console for debug(+400)
+COMMAND_ENABLE   = yes # Commands for debug and configuration
+NKRO_ENABLE      = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality
+MIDI_ENABLE      = no  # MIDI controls
+AUDIO_ENABLE     = no  # Audio output on port C6
+UNICODE_ENABLE   = no  # Unicode
+BLUETOOTH_ENABLE = no  # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no  # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/build.sh b/keyboards/amj60/keymaps/iso_split_rshift/build.sh
new file mode 100755 (executable)
index 0000000..6b4b456
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/bash
+# adjust for cpu 
+# -j 16 gave best result on a hyperthreaded quad core core i7
+
+LIMIT=10
+THREADS="-j 16"
+KMAP=iso_split_rshift
+
+echo "We need sudo later"
+sudo ls 2>&1 /dev/null
+
+function wait_bootloader {
+       echo "Waiting for Bootloader..."
+       local STARTTIME=$(date +"%s")
+       local REMIND=0
+    local EXEC=dfu-programmer
+    local TARGET=atmega32u4
+       while true
+       do
+               sudo $EXEC $TARGET get > /dev/null 2>&1
+               [ $? -eq 0 ] && break
+               ENDTIME=$(date +"%s")
+               DURATION=$(($ENDTIME-$STARTTIME))
+               if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
+               then 
+                       echo "Did you forget to press the reset button?"
+                       REMIND=1
+               fi
+        sleep 1
+       done
+}
+make clean
+make KEYMAP=${KMAP} ${THREADS}
+if [[ $? -eq 0 ]]
+then
+    echo "please trigger flashing!"
+    wait_bootloader
+    sudo make KEYMAP=${KMAP} dfu ${THREADS}
+else
+    echo "make failed"
+    exit 77
+fi
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/keymap.c b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c
new file mode 100644 (file)
index 0000000..60fb0bf
--- /dev/null
@@ -0,0 +1,147 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "amj60.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DEF 0
+#define _SPC 1
+#define _TAB 2
+#define _SFX 3
+
+// dual-role shortcuts
+#define TABDUAL   LT(_TAB, KC_TAB)
+#define CAPSDUAL  CTL_T(KC_ESC)
+#define SPACEDUAL LT(_SPC, KC_SPACE)
+#define ENTERDUAL CTL_T(KC_ENT)
+// arrow cluster duality bottom right corner
+#define ARRLEFT  ALT_T(KC_LEFT)
+#define ARRDOWN  GUI_T(KC_DOWN)
+#define ARRUP    SFT_T(KC_UP)
+#define ARRRIGHT CTL_T(KC_RIGHT)
+// german brackets
+#define GER_CUR_L RALT(KC_7)    // [
+#define GER_CUR_R RALT(KC_0)    // ]
+#define GER_PAR_L LSFT(KC_8)    // (
+#define GER_PAR_R LSFT(KC_9)    // )
+#define GER_ANG_L KC_NUBS       // <
+#define GER_ANG_R LSFT(KC_NUBS) // >
+#define GER_BRC_L RALT(KC_8)    // [
+#define GER_BRC_R RALT(KC_9)    // ]
+
+// increase readability 
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Keymap _DEF: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Grv|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   \ | Tab is Fn1
+     * |-----------------------------------------------------------|
+     * |Ctrl   | A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '| Return |
+     * |-----------------------------------------------------------|
+     * |Sft | < |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn2| RShift is UP
+     * |-----------------------------------------------------------|
+     * |Ctrl|Win |Alt |      Space/Fn0         |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is 
+     * `-----------------------------------------------------------'   LEFT DWN RIGHT
+     */
+    [_DEF] = KEYMAP_ISO_SPLITRSHIFT(
+        KC_GRV,   KC_1,    KC_2,    KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9,    KC_0,    KC_MINS, KC_EQL,   KC_BSPC,   \
+        TABDUAL,  KC_Q,    KC_W,    KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,    KC_P,    KC_LBRC, KC_RBRC,  KC_BSLS,   \
+        CAPSDUAL, KC_A,    KC_S,    KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT, KC_NUHS,  ENTERDUAL, \
+        KC_LSFT,  KC_NUBS, KC_Z,    KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,  KC_SLSH, ARRUP,    TG(_SFX),  \
+        KC_LCTL,  KC_LGUI, KC_LALT,             SPACEDUAL,                       KC_RALT, ARRLEFT, ARRDOWN,  ARRRIGHT),
+
+    /* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
+     * ,-----------------------------------------------------------.
+     * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete|
+     * |-----------------------------------------------------------|
+     * |    |Paus| Up| [ | ] |   |   |   | ( | ) |   |   |   |     |
+     * |-----------------------------------------------------------|
+     * |      |Lft|Dwn|Rgt|   |   |Left|Down|Right|Up|  |   | PLAY |
+     * |-----------------------------------------------------------|
+     * |    |   |   |   | < | > |   |M0 |   |   |   |   | Vol+ |   |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |Alt |Prev|Vol-|Next|
+     * `-----------------------------------------------------------'
+     */
+    [_SPC] = KEYMAP_ISO_SPLITRSHIFT(
+        KC_PSCR, KC_F1,   KC_F2,   KC_F3,     KC_F4,     KC_F5,     KC_F6,    KC_F7,     KC_F8,     KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+        _______, KC_PAUS, KC_UP,   GER_BRC_L, GER_BRC_R, _______,   _______,  GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
+        _______, KC_LEFT, KC_DOWN, KC_RIGHT,  _______,   _______,   KC_LEFT,  KC_DOWN,   KC_UP,     KC_RGHT, _______, _______, _______, KC_MPLY, \
+        _______, _______, _______, _______,   GER_ANG_L, GER_ANG_R, KC_SPACE, M(0),      _______,   _______, _______, _______, KC_VOLU, _______, \
+        _______, _______, _______,                                  _______,                                 _______, KC_MPRV, KC_VOLD, KC_MNXT),
+
+    /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
+     * ,-----------------------------------------------------------.
+     * |WAKE|   |   |   |   |   |   |   |   |   |   |   |   |Insert|  TAB+GRC = WAKE
+     * |-----------------------------------------------------------|
+     * |     |   |   |   |   |   |   |   | { | } |   |   |   |     |
+     * |-----------------------------------------------------------|
+     * |      |   |   |   |   |   |Pos1|PgDn|PgUp|End|  |   |Retrn |
+     * |-----------------------------------------------------------|
+     * |    |   |   |   |   |   |   |AF2|   |   |   |   | PgUp |   |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |Alt |Pos1|PgDn|End |
+     * `-----------------------------------------------------------'
+     */
+    [_TAB] = KEYMAP_ISO_SPLITRSHIFT(
+        KC_WAKE, _______, _______, _______, _______, _______, _______, _______,    _______,  _______, _______, _______, _______, KC_INS,  \
+        _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN,    KC_PGUP,  KC_END,  _______, _______, _______, KC_ENT,  \
+        _______, _______, _______, _______, _______, _______, _______, M(1),       _______,  _______, _______, _______, KC_PGUP, _______, \
+        _______, _______, _______,                            _______,                                _______, KC_HOME, KC_PGDN, KC_END),
+
+    /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
+     * ,-----------------------------------------------------------.
+     * |RSET|  |   |   |   |   |   |  7|  8|  9|   |   |   |Backsp |
+     * |-----------------------------------------------------------|
+     * |     |   |   |   |   |   |   | 4 | 5 | 6 |   |   |   |   \ |
+     * |-----------------------------------------------------------|
+     * |      | L | L |   |   |   |   | 1 | 2 | 3 |   |   | Return |
+     * |-----------------------------------------------------------|
+     * |    |   | L | L | L | L | L | L |   | 0 |   |  /|  Up  |   | All "L"s represent
+     * |-----------------------------------------------------------| LED controlling
+     * |Ctrl|Win |Alt |                        |Alt |Left|Down|Right|
+     * `-----------------------------------------------------------'
+     */
+    [_SFX] = KEYMAP_ISO_SPLITRSHIFT(
+        RESET,   _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9, _______, _______, _______, KC_BSPC, \
+        _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6, _______, _______, _______, KC_BSLS, \
+        _______, F(2),    F(3),    _______, _______, _______, _______, KC_1,    KC_2,    KC_3, _______, _______, XXXXXXX, KC_ENT,  \
+        _______, F(4),    F(5),    F(6),    F(7),    F(8),    F(9),    _______, _______, KC_0, _______, KC_SLSH, KC_UP,   _______, \
+        _______, _______, _______,                            _______,                         _______, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+enum function_id {
+    LAUNCH,
+    RGBLED_TOGGLE,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1]  = ACTION_FUNCTION(LAUNCH),
+    [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    // MACRODOWN only works in this function
+    switch(id) {
+        case 0:
+            return (record->event.pressed ? 
+                    MACRO( D(RALT), T(SPC), U(RALT), END )
+                    :MACRO( END ));
+            break;
+        case 1:
+            return (record->event.pressed ? 
+                    MACRO( D(LALT), T(F2), U(LALT), END )
+                    :MACRO( END ));
+            break;
+    }
+    return MACRO_NONE;
+};
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/readme.md b/keyboards/amj60/keymaps/iso_split_rshift/readme.md
new file mode 100644 (file)
index 0000000..2113d93
--- /dev/null
@@ -0,0 +1,30 @@
+toneman77's custom spacefn Layout
+=====================
+
+##Quantum MK Firmware
+For the full Quantum feature list, see the parent readme.md.
+
+# Features
+* heavily modified ISO (!) layout with split right shift key
+* spaceFn
+* Dual-Role keys:
+* 
+ | Original key     | when tapped   | when held     |
+ | ---------------- | ------------- | ------------- |
+ | Space            | Space         | layer change  |
+ | Caps lock        | Escape        | Control       |
+ | Tab              | Tab           | layer change  |
+ | Enter            | Enter         | Control       |
+
+* vim-style arrow keys on hjkl (spacefn layer)
+* corresponding Home/PgDn/PgUp/End on hjkl (tab layer)
+* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift
+* more bonus arrow keys on wasd (spacefn layer)
+* media keys prev/next/play/vol+/vol- (spacefn layer)
+* firmware bootloader button
+* additional brackets that only work in german layout due to horrible placement
+in the default qwertz layout
+
+
+### Additional Credits
+* visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) (without the LED keys)
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh b/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh
new file mode 100755 (executable)
index 0000000..da5457e
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+git checkout amj60      # gets you on branch amj60
+git fetch origin        # gets you up to date with origin
+git merge origin/master
diff --git a/keyboards/amj60/readme.md b/keyboards/amj60/readme.md
new file mode 100644 (file)
index 0000000..0896134
--- /dev/null
@@ -0,0 +1,57 @@
+AMJ60 keyboard firmware
+======================
+DIY/Assembled compact 60% keyboard.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/amj60
+folder. Once your dev env is setup, you'll be able to type `make` to generate
+your .hex - you can then use `make dfu` to program your PCB once you hit the
+reset button. 
+
+Depending on which keymap you would like to use, you will have to compile
+slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to
+define your favorite layout yourself. To define your own keymap create file
+named `<name>.c` in the keymaps folder, and see keymap document (you can find
+in top readme.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with
+`KEYMAP` option like:
+``
+$ make KEYMAP=[default|jack|<name>]
+``
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps`
+folder.
+
+## Variations
+KEYMAP macros for the following layouts are available:
+
+* default, for all the available, possible keys
+* ANSI, for 60% ANSI keyboard
+* ISO
+* ISO w/ split right shift key
+* HHKB
+
+Remark: all but "ISO w/ split right shift key" are untested and were done to the best of my knowledge.
+
+### Original tmk firmware
+The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60).
+
+## Further information
+Since information and documentation for this board are sparse, (at least for non-chinese speaking ppl) here is everything that could be found
+
+* [geekhack discussion](https://geekhack.org/index.php?topic=53070.0)
+* [chinese discussion](https://www.v2ex.com/t/161887)
+* Board has [dedicated pinouts](https://i.imgur.com/D0sWhyh.jpg?1) for a bluetooth module
+* has pins for external power [picture](https://i.imgur.com/00VrtIp.jpg?1).
+* most information comes from [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/32oonr/gh60_pcb_for_your_custom_keyboard/)
diff --git a/keyboards/amj60/rules.mk b/keyboards/amj60/rules.mk
new file mode 100644 (file)
index 0000000..18403ac
--- /dev/null
@@ -0,0 +1,66 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  ?= no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE  ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE   ?= yes # Console for debug(+400)
+COMMAND_ENABLE   ?= yes # Commands for debug and configuration
+NKRO_ENABLE      ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE  ?= yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE      ?= no  # MIDI controls
+AUDIO_ENABLE     ?= no
+UNICODE_ENABLE   ?= no  # Unicode
+BLUETOOTH_ENABLE ?= no  # Enable Bluetooth with the Adafruit EZ-Key HID
index 09fcf3e7a0e1b61072575f177ce84bc6867167fe..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,74 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes        # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-KEYBOARD_LOCK_ENABLE ?= yes  # Allow locking of keyboard via magic key
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= yes           # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no            # MIDI controls
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no           # Audio output on port C6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 5aa44cce541548bff51f0d2caf1bfbec19520e66..d0d172272ee48de9e5afc7583b624737f1b728ec 100644 (file)
 arrow_pad keyboard firmware
 ======================
 
+## Keyboard Info
+
+The ArrowPad is a wired conversion that can be made to any stand-alone keypad. It uses two main layers - a standard numpad, and a more advanced arrow cluster navigator.
+
+The first 24-key ArrowPad was handwired, but the PCB was wired as listed below.
+
+```
+<Chip Ref Des> pin <Pin #>
+<Keycap Name> (Silkscreen Name if different) - <Switch Pin #>
+
+
+Note:
+U2 pin 2 is the Num Lock LED and is  active low.
+
+U2 pin 1
+Clear (Num Lock) - 1
+Enter - 2
+Esc (ESC) - 2
+
+
+U2 pin 3
+- - 1
+
+U2 pin 4
+7 - 2
+8 - 2
+9 - 2
+
+U2 pin 5
+* - 2
+Delete (BACK SPACE) -  2
+
+U2 pin 6
+1 - 2
+0 - 2
+. - 2
+, - 2
+
+U2 pin 7
+4 - 2
+5 - 2
+6 - 2
+
+U2 pin 8
+Tab - 2
+= (/) - 2
+
+U2 pin 13
+Delete (BACK SPACE) -  1
+9 - 1
+6 - 1
+3 - 1
+. - 1
+
+U2 pin 14
+Tab - 1
+8 - 1
+5 - 1
+2 - 1
+0 - 1
+
+U2 pin 15
+Esc (ESC) - 1
+= (/) - 1
+/ (*) - 1
+7 - 1
+4 - 1
+1 - 1
++ - 1
+
+U2 pin 16
+Enter - 1
+* (<--) - 1
+, - 1
+
+U2 pin 17
+Fn (#NAME?) - 1
+- - 2
+Clear (Num Lock) - 2
+
+U2 pin 18
+Fn (#NAME?) - 2
+* (<--) - 2
++ - 2
+3 - 2
+2 - 2
+```
+
+More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.msg1802497#msg1802497)
+
+The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
+
+```
+#define KEYMAP( \
+    KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
+    KM_NUM, KM_FSL, KM_AST, KM_MIN, \
+    KM___7, KM___8, KM___9, ___PLS, \
+    KM___4, KM___5, KM___6, KM_PLS, \
+    KM___1, KM___2, KM___3, ___ENT, \
+    KM___0, _____0, KM_DOT, KM_ENT  \
+) { \
+    { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
+    { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO,  KM___0, KM_DOT, }, \
+}
+```
+
+
 ## Quantum MK Firmware
 
 For the full Quantum feature list, see [the parent readme.md](/readme.md).
 
 ## Building
 
-Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+Download or clone the whole firmware and navigate to the keyboards/arrow_pad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
 
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|pad_21|pad_24|<name>]
 ```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
\ No newline at end of file
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/arrow_pad/rules.mk b/keyboards/arrow_pad/rules.mk
new file mode 100644 (file)
index 0000000..3dca9b6
--- /dev/null
@@ -0,0 +1,70 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes  # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
\ No newline at end of file
index 08e9205cbf1f30a6223dd98f0f40f094288556d8..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,73 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no         # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no            # MIDI controls
-AUDIO_ENABLE ?= no           # Audio output on port C6
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 278407e6c974575b2dd867dd68b553b0f71975f9..c7c04485fcea80023fb571aa7dec910bed430a68 100644 (file)
@@ -1,7 +1,7 @@
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE  = yes # Mouse keys(+4700)
 EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
-CONSOLE_ENABLE   = no  # Console for debug(+400)
+CONSOLE_ENABLE   = yes # Console for debug(+400)
 COMMAND_ENABLE   = yes # Commands for debug and configuration
 NKRO_ENABLE      = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
index 70353323b678086e9331e16152a15409c2719f93..18a7253f2eb7a9e98d9c740717cec28da4cdc72c 100644 (file)
@@ -150,10 +150,17 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /* disable debug print */
-//#define NO_DEBUG
+#ifndef NO_DEBUG
+#  define NO_DEBUG
+#endif
 
 /* disable print */
-//#define NO_PRINT
+// #ifndef NO_PRINT
+// #  define NO_PRINT
+// #endif
+
+/* Only print user print statements */
+#define USER_PRINT
 
 /* disable action features */
 //#define NO_ACTION_LAYER
index f16ec8a6ec511049bf8580765e0762c4e3f8b2d1..d10bfe3bfceb0be68684ee2aa45e0e0fbb1d153c 100644 (file)
@@ -2,48 +2,59 @@
 #include "action_layer.h"
 #include "eeconfig.h"
 #include "led.h"
+#include "mousekey.h"
 
 #ifdef AUDIO_ENABLE
     #include "audio.h"
     #include "song_list.h"
 #endif
 
-#define LAYER_QWERTY                     0
-#define LAYER_COLEMAK                    1
-#define LAYER_DVORAK                     2
-#define LAYER_UPPER                      3
-#define LAYER_LOWER                      4
-#define LAYER_FUNCTION                   5
-#define LAYER_MOUSE                      6
-#define LAYER_ADJUST                     7
-
-#define MACRO_QWERTY                     0
-#define MACRO_COLEMAK                    1
-#define MACRO_DVORAK                     2
-#define MACRO_UPPER                      3
-#define MACRO_LOWER                      4
-#define MACRO_FUNCTION                   5
-#define MACRO_MOUSE                      6
-#define MACRO_TIMBRE_1                   7
-#define MACRO_TIMBRE_2                   8
-#define MACRO_TIMBRE_3                   9
-#define MACRO_TIMBRE_4                  10
-#define MACRO_TEMPO_U                   11
-#define MACRO_TEMPO_D                   12
-#define MACRO_TONE_DEFAULT              13
-#define MACRO_MUSIC_TOGGLE              14
-#define MACRO_AUDIO_TOGGLE              16
-#define MACRO_INC_VOICE                 18
-#define MACRO_DEC_VOICE                 19
-#define MACRO_BACKLIGHT                 20
-#define MACRO_BREATH_TOGGLE             21
-#define MACRO_BREATH_SPEED_INC          23
-#define MACRO_BREATH_SPEED_DEC          24
-#define MACRO_BREATH_DEFAULT            25
+enum keyboard_layers {
+  LAYER_QWERTY = 0,
+  LAYER_UPPER,
+  LAYER_LOWER,
+  LAYER_FUNCTION,
+  LAYER_MOUSE,
+  LAYER_ADJUST,
+};
+enum keyboard_macros {
+  MACRO_QWERTY = 0,
+  MACRO_UPPER,
+  MACRO_LOWER,
+  MACRO_FUNCTION,
+  MACRO_MOUSE,
+  MACRO_TIMBRE_1,
+  MACRO_TIMBRE_2,
+  MACRO_TIMBRE_3,
+  MACRO_TIMBRE_4,
+  MACRO_TEMPO_U,
+  MACRO_TEMPO_D,
+  MACRO_TONE_DEFAULT,
+  MACRO_MUSIC_TOGGLE,
+  MACRO_AUDIO_TOGGLE,
+  MACRO_INC_VOICE,
+  MACRO_DEC_VOICE,
+  MACRO_BACKLIGHT,
+  MACRO_BREATH_TOGGLE,
+  MACRO_BREATH_SPEED_INC,
+  MACRO_BREATH_SPEED_DEC,
+  MACRO_BREATH_DEFAULT,
+  MACRO_MOUSE_MOVE_UL,
+  MACRO_MOUSE_MOVE_UR,
+  MACRO_MOUSE_MOVE_DL,
+  MACRO_MOUSE_MOVE_DR,
+  MACRO_HELP_1,
+  MACRO_HELP_2,
+  MACRO_HELP_3,
+  MACRO_HELP_4,
+  MACRO_HELP_5,
+  MACRO_HELP_6,
+  MACRO_HELP_7,
+  MACRO_HELP_8,
+  MACRO_HELP_9,
+};
 
 #define M_QWRTY             M(MACRO_QWERTY)
-#define M_COLMK             M(MACRO_COLEMAK)
-#define M_DVORK             M(MACRO_DVORAK)
 #define M_UPPER             M(MACRO_UPPER)
 #define M_LOWER             M(MACRO_LOWER)
 #define M_FUNCT             M(MACRO_FUNCTION)
 #define M_BSPDU             M(MACRO_BREATH_SPEED_INC)
 #define M_BSPDD             M(MACRO_BREATH_SPEED_DEC)
 #define M_BDFLT             M(MACRO_BREATH_DEFAULT)
+#define M_MS_UL             M(MACRO_MOUSE_MOVE_UL)
+#define M_MS_UR             M(MACRO_MOUSE_MOVE_UR)
+#define M_MS_DL             M(MACRO_MOUSE_MOVE_DL)
+#define M_MS_DR             M(MACRO_MOUSE_MOVE_DR)
+#define M_HELP1             M(MACRO_HELP_1)
+#define M_HELP2             M(MACRO_HELP_2)
+#define M_HELP3             M(MACRO_HELP_3)
+#define M_HELP4             M(MACRO_HELP_4)
+#define M_HELP5             M(MACRO_HELP_5)
+#define M_HELP6             M(MACRO_HELP_6)
+#define M_HELP7             M(MACRO_HELP_7)
+#define M_HELP8             M(MACRO_HELP_8)
+#define M_HELP9             M(MACRO_HELP_9)
 
 
 #define VC_UP               M(MACRO_INC_VOICE)
 #define SC_ACLS             LALT(KC_F4)
 #define SC_CCLS             LCTL(KC_F4)
 
+#define TG_NKRO             MAGIC_TOGGLE_NKRO
 #define OS_SHFT             KC_FN0
 
 #define _______             KC_TRNS
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-/* QWERTY
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \      | DEL    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAPS   | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | XXXXXX . ENTER  | PG UP  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | XXXXXX . RSHIFT | UP     | PG DN  |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_QWERTY]       = { // QWERTY
-  { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC  },
-  { KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL   },
-  { KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  KC_ENT,  KC_PGUP  },
-  { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
-  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
- },
-
- /* COLEMAK
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB    | Q      | W      | F      | P      | G      | J      | L      | U      | Y      | ;      | [      | ]      | \      | DEL    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | BACKSP | A      | R      | S      | T      | D      | H      | N      | E      | I      | O      | '      | XXXXXX . ENTER  | PG UP  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | Z      | X      | C      | V      | B      | K      | M      | ,      | .      | /      | XXXXXX . RSHIFT | UP     | PG DN  |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_COLEMAK]      = { // COLEMAK
-  { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_BSPC  },
-  { KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL   },
-  { KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, KC_ENT,  KC_ENT,  KC_PGUP  },
-  { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
-  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
+/* LAYER = LAYER_QWERTY
+  .--------------------------------------------------------------------------------------------------------------------------------------.
+  | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | -      | =      | BACKSP . BACKSP |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | [      | ]      | \      | DEL    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | CAP LK | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | ENTER  . ENTER  | PG UP  |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | RSHIFT . RSHIFT | UP     | PG DN  |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | LCTRL  | LWIN   | FN     | LALT   | UPPER  | SPACE  . SPACE  | LOWER  | OSHIFT | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
+  '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_QWERTY] = {
+  { KC_ESC , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC },
+  { KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL  },
+  { KC_CAPS, KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP },
+  { KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_UP  , KC_PGDN },
+  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }
 },
-
-/* DVORAK
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC    | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | [      | ]      | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB    | '      | ,      | .      | P      | Y      | F      | G      | C      | R      | L      | /      | =      | \      | DEL    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAPS   | A      | O      | E      | U      | I      | D      | H      | T      | N      | S      | -      | XXXXXX . ENTER  | PG UP  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | ;      | Q      | J      | K      | X      | B      | M      | W      | V      | Z      | XXXXXX . RSHIFT | UP     | PG DN  |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | XXXXXX . SPACE  | LOWER  | SHIFT  | RALT   | APP    | RCTRL  | LEFT   | DOWN   | RIGHT  |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_DVORAK]       = { // DVORAK
-  { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC  },
-  { KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH, KC_EQL,  KC_BSLS, KC_DEL   },
-  { KC_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS, KC_ENT,  KC_ENT,  KC_PGUP  },
-  { KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT, KC_RSFT, KC_UP,   KC_PGDN  },
-  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_RALT, KC_APP,  KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT  },
- },
-
-/* UPPER
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | PRINT  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | /      | *      |        | NUM LK | SCR LK | XXXXXX . PAUSE  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * |        | F1     | F2     | F3     | F4     |        |        | 7      | 8      | 9      | -      |        |        |        | INS    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAP LK | F5     | F6     | F7     | F8     |        |        | 4      | 5      | 6      | +      |        | XXXXXX .        | HOME   |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * |        | F9     | F10    | F11    | F12    |        |        | 1      | 2      | 3      | ENTER  | XXXXXX .        |        | END    |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * |        |        |        |        |        | 0               |        | RALT   | .      | ENTER  |        |        |        |        |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_UPPER]        = { // UPPER
-  { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS  },
-  { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS   },
-  { KC_CAPS, KC_F5,   KC_F6,   KC_F7,   KC_F8,   XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME  },
-  { _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END   },
-  { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______  },
- },
-
-/* LOWER
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * |        | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * |        | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      |        |        |        | INS    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * |        | ^      | *      | +      | -      | ;      | :      | _      | '      | "      | `      |        | XXXXXX .        | HOME   |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * |        | |      | &      | !      | ~      | /      | \      | =      | <      | >      | ?      | XXXXXX .        |        | END    |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * |        |        |        |        |        |                 |        |        |        |        |        |        |        |        |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_LOWER]        = { // LOWER
-  { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ________________  },
-  { _______, KC_DLR,  KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT,   _______, _______, _______, KC_INS   },
-  { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  _______, ________________, KC_HOME  },
-  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, ________________, _______, KC_END   },
-  { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______  },
- },
-
- [LAYER_FUNCTION]     = { // FUNCTION
-  { KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ________________  },
-  { KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24,  _______, KC_PAUS  },
-  { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_VOLU, KC_MUTE  },
-  { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT  },
- },
-
-#ifdef MOUSEKEY_ENABLE
-
- [LAYER_MOUSE]        = { // MOUSE
-  { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX  },
-  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  },
-  { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U  },
-  { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D  },
-  { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R  },
- },
-
-#endif
-
- [LAYER_ADJUST]       = { // ADJUST
-  { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG,  AU_TOG,  ________________  },
-  { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______  },
-  { _______, _______, _______, _______, M_BACKL, RESET,   _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN,  _______  },
-  { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE,  _______  },
- },
-
-
-/*
- [LAYER_EMPTY]        = { // LAYER
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______  },
-  { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______  },
- },
+/* LAYER = LAYER_UPPER
+  .--------------------------------------------------------------------------------------------------------------------------------------.
+  | PRINT  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP /   | KP *   | KP -   | XXXXXX | XXXXXX | ______ . ______ |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | PAUSE  | F1     | F2     | F3     | F4     | NUM LK | KP /   | KP 7   | KP 8   | KP 9   | KP -   | ______ | ______ | ______ | INS    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | F5     | F6     | F7     | F8     | CAP LK | KP *   | KP 4   | KP 5   | KP 6   | KP +   | ______ | ______ . ______ | HOME   |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | F9     | F10    | F11    | F12    | SCR LK | KP 0   | KP 1   | KP 2   | KP 3   | KP ENT | ______ . ______ | ______ | END    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | ______ | ______ | UPPER  | KP 0   . KP 0   | ______ | RALT   | KP .   | KP ENT | ______ | ______ | ______ | ______ |
+  '--------------------------------------------------------------------------------------------------------------------------------------'
 */
-
+[LAYER_UPPER] = {
+  { KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______ },
+  { KC_PAUS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS  },
+  { _______, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME },
+  { _______, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END  },
+  { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }
+},
+/* LAYER = LAYER_LOWER
+  .--------------------------------------------------------------------------------------------------------------------------------------.
+  | PRINT  | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | ______ . ______ |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      | ______ | ______ | ______ | INS    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      | ______ | ______ . ______ | HOME   |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | ______ . ______ | ______ | END    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER  | ______ | ______ | ______ | ______ | ______ | ______ | ______ |
+  '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_LOWER] = {
+  { KC_PSCR, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12 , _______, _______ },
+  { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT  , _______, _______, _______, KC_INS  },
+  { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME },
+  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT  , KC_GT  , KC_QUES, _______, _______, _______, KC_END  },
+  { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ }
+},
+/* LAYER = LAYER_FUNCTION
+  .--------------------------------------------------------------------------------------------------------------------------------------.
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | F13    | F14    | F15    | F16    | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | F17    | F18    | F19    | F20    | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | F21    | F22    | F23    | F24    | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE   |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | FN     | ______ | ______ | PLAY   . PLAY   | ______ | ______ | ______ | ______ | ______ | PREV   | VOL DN | NEXT   |
+  '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_FUNCTION] = {
+  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE },
+  { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
+},
+/* LAYER = LAYER_MOUSE
+  .--------------------------------------------------------------------------------------------------------------------------------------.
+  | ESC    | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL  | MS U   | MS UR  | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L   | XXXXXX | MS R   | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL  | MS D   | MS DR  | XXXXXX | ______ . ______ | MS U   | MS WHD |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L   | MS D   | MS R   |
+  '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_MOUSE] = {
+  { KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R },
+  { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U },
+  { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D },
+  { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
+},
+/* LAYER = LAYER_ADJUST
+  .--------------------------------------------------------------------------------------------------------------------------------------.
+  | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC  | AUDIO  | XXXXXX . XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | BRTOG  | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET  | XXXXXX | MOUSE  | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER  | XXXXXX . XXXXXX | LOWER  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
+  '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_ADJUST] = {
+  { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX },
+  { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET  , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX },
+  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
+},
 };
 
 #ifdef AUDIO_ENABLE
@@ -276,61 +272,101 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
     switch(id)
     {
 
-        case MACRO_BREATH_TOGGLE:
+        case MACRO_HELP_1:
             if (record->event.pressed)
             {
-                breathing_toggle();
+        uprintf("1");
             }
             break;
 
-        case MACRO_BREATH_SPEED_INC:
+        case MACRO_HELP_2:
             if (record->event.pressed)
             {
-                breathing_speed_inc(1);
+        uprintf("2");
             }
             break;
 
-        case MACRO_BREATH_SPEED_DEC:
+        case MACRO_HELP_3:
             if (record->event.pressed)
             {
-                breathing_speed_dec(1);
+        uprintf("3");
             }
             break;
 
-        case MACRO_BREATH_DEFAULT:
+        case MACRO_HELP_4:
             if (record->event.pressed)
             {
-                breathing_defaults();
+        uprintf("4");
             }
             break;
 
-        case MACRO_QWERTY:
+        case MACRO_HELP_5:
             if (record->event.pressed)
             {
-                persistant_default_layer_set(1UL<<LAYER_QWERTY);
-                #ifdef AUDIO_ENABLE
-                    PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
-                #endif /* AUDIO_ENABLE */
+        uprintf("5");
             }
             break;
 
-        case MACRO_COLEMAK:
+        case MACRO_HELP_6:
             if (record->event.pressed)
             {
-                persistant_default_layer_set(1UL<<LAYER_COLEMAK);
-                #ifdef AUDIO_ENABLE
-                    PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
-                #endif /* AUDIO_ENABLE */
+        uprintf("6");
             }
             break;
 
-        case MACRO_DVORAK:
+        case MACRO_HELP_7:
             if (record->event.pressed)
             {
-                persistant_default_layer_set(1UL<<LAYER_DVORAK);
-                #ifdef AUDIO_ENABLE
-                    PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
-                #endif /* AUDIO_ENABLE */
+        uprintf("7");
+            }
+            break;
+
+        case MACRO_HELP_8:
+            if (record->event.pressed)
+            {
+        uprintf("8");
+            }
+            break;
+
+        case MACRO_HELP_9:
+            if (record->event.pressed)
+            {
+        uprintf("9");
+            }
+            break;
+
+        case MACRO_BREATH_TOGGLE:
+            if (record->event.pressed)
+            {
+                breathing_toggle();
+            }
+            break;
+
+        case MACRO_BREATH_SPEED_INC:
+            if (record->event.pressed)
+            {
+                breathing_speed_inc(1);
+            }
+            break;
+
+        case MACRO_BREATH_SPEED_DEC:
+            if (record->event.pressed)
+            {
+                breathing_speed_dec(1);
+            }
+            break;
+
+        case MACRO_BREATH_DEFAULT:
+            if (record->event.pressed)
+            {
+                breathing_defaults();
+            }
+            break;
+
+        case MACRO_QWERTY:
+            if (record->event.pressed)
+            {
+                persistant_default_layer_set(1UL<<LAYER_QWERTY);
             }
             break;
 
index ab1e7ba1ff8ded2afe672b0276d7742ef50f0e52..674dcf113b394ea3cd17c863f55408bf351e13f3 100644 (file)
@@ -13,13 +13,14 @@ Download or clone the whole firmware and navigate to the keyboards/atomic folder
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/atomic/rules.mk b/keyboards/atomic/rules.mk
new file mode 100644 (file)
index 0000000..d0f3a3a
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no         # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
\ No newline at end of file
index 95ee1d4d7b1144210d7dcac2bfd35dbf8f4b9a9f..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,88 +1,3 @@
-
-
-ifdef TEENSY2
-    OPT_DEFS += -DATREUS_TEENSY2
-    ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
-else
-    OPT_DEFS += -DATREUS_ASTAR
-    OPT_DEFS += -DCATERINA_BOOTLOADER
-    ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
-                            avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
-endif
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - not yet supported in LUFA
-# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
-# MIDI_ENABLE ?= YES           # MIDI controls
-UNICODE_ENABLE ?= YES          # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
-
-USB ?= /dev/cu.usbmodem1411
-
-upload: build
-       $(ATRUES_UPLOAD_COMMAND)
-       
\ No newline at end of file
+endif
\ No newline at end of file
index 2b3803bc2134f411d540b2499e2d94818313e498..f841c351997a260ab150fa4a1c0d8763c327e400 100644 (file)
 // The first section contains all of the arguements
 // The second converts the arguments into a two-dimensional array
 #define KEYMAP( \
-  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
-  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
-  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \
-  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \
+  k00, k01, k02, k03, k04,           k05, k06, k07, k08, k09, \
+  k10, k11, k12, k13, k14,           k15, k16, k17, k18, k19, \
+  k20, k21, k22, k23, k24,           k25, k26, k27, k28, k29, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \
 ) \
 { \
        { k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \
        { k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \
        { k20, k21, k22, k23, k24, k35,   k25, k26, k27, k28, k29 }, \
-       { k2a, k30, k31, k32, k33, k34,   k36, k37, k38, k39, k3a } \
+       { k30, k31, k32, k33, k34, k36,   k37, k38, k39, k3a, k3b } \
 }
 
 #endif
index 624d90188cbcda0750b11f0fba220949b62cae4c..51162cde3af0152268a979c2eedec914642ad2c7 100644 (file)
@@ -37,7 +37,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // COLS: Left to right, ROWS: Top to bottom
 #if defined(ATREUS_ASTAR)
 #   define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#if defined(PCBDOWN)
+#   define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
+#else
 #   define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#endif
 #   define UNUSED_PINS
 #elif defined(ATREUS_TEENSY2)
 #   define MATRIX_ROW_PINS { D0, D1, D2, D3 }
diff --git a/keyboards/atreus/keymaps/alphadox/config.h b/keyboards/atreus/keymaps/alphadox/config.h
new file mode 100644 (file)
index 0000000..df56849
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Arbitrary Definitions
+#define PRODUCT         Planckeus
+#define DESCRIPTION     q.m.k. keyboard firmware for Planckeus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+#define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#define MATRIX_COL_PINS { F6, F5, F4, F1, F0, F7, B0, B1, B2, B3, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/alphadox/keymap.c b/keyboards/atreus/keymaps/alphadox/keymap.c
new file mode 100644 (file)
index 0000000..b8ec0e0
--- /dev/null
@@ -0,0 +1,45 @@
+#include "atreus.h"
+
+#define BASE 0
+#define SYMB 1
+#define ETC 2
+
+enum macro_id {
+    TEENSY,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[BASE] = KEYMAP(
+    KC_Q,          KC_W,    KC_D,     KC_F,           KC_K,                                              KC_J,             KC_U,            KC_R,     KC_L,     KC_SCLN,
+    LT(ETC,KC_A),  KC_S,    KC_E,     KC_T,           KC_G,                                              KC_Y,             KC_N,            KC_I,     KC_O,     KC_H,
+    SFT_T(KC_Z),   KC_X,    KC_C,     KC_V,           KC_B,                                              KC_P,             KC_M,            KC_COMM,  KC_DOT,   SFT_T(KC_SLSH),
+    KC_GRV,        KC_DEL,  KC_LALT,  GUI_T(KC_TAB),  LT(SYMB,KC_BSPC),  CTL_T(KC_ESC),  SFT_T(KC_ENT),  LT(SYMB,KC_SPC),  GUI_T(KC_LEFT),  KC_DOWN,  KC_UP,    LCAG_T(KC_RGHT)
+),
+
+[SYMB] = KEYMAP(
+    KC_EXLM,  KC_AT,    KC_LCBR,  KC_RCBR,  KC_PIPE,                      KC_EQL,   KC_7,  KC_8,   KC_9,    KC_PLUS,
+    KC_HASH,  KC_DLR,   KC_LPRN,  KC_RPRN,  KC_BSLS,                      KC_MINS,  KC_4,  KC_5,   KC_6,    KC_QUOT,
+    KC_PERC,  KC_CIRC,  KC_LBRC,  KC_RBRC,  KC_ASTR,                      KC_UNDS,  KC_1,  KC_2,   KC_3,    KC_DQUO,
+    KC_TILD,  KC_AMPR,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_0,  KC_NO,  KC_DOT,  KC_TRNS
+),
+
+[ETC] = KEYMAP(
+    RESET,         KC_NO,  KC_NO,    KC_NO,    KC_PGUP,                      KC_VOLU,  KC_F7,  KC_F8,  KC_F9,   KC_HOME,
+    LT(ETC,KC_A),  KC_NO,  KC_NO,    KC_NO,    KC_PGDN,                      KC_VOLD,  KC_F4,  KC_F5,  KC_F6,   KC_END,
+    KC_NO,         KC_NO,  KC_NO,    KC_NO,    KC_DEL,                       KC_MUTE,  KC_F1,  KC_F2,  KC_F3,   KC_INS,
+    KC_TRNS,       KC_NO,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_NO,  KC_NO,  KC_NO,   KC_NO
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch(id) {
+    case TEENSY:
+      break;
+  }
+  return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c
new file mode 100644 (file)
index 0000000..6ca0b20
--- /dev/null
@@ -0,0 +1,48 @@
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _RS 1
+#define _LW 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+  {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_TRNS,  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P    },
+  {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_TRNS,  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN },
+  {KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_LALT,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH },
+  {KC_ESC, KC_TAB, KC_LGUI,  KC_LSFT, KC_BSPC,  KC_LCTL, KC_SPC,  MO(_RS), KC_MINS, KC_QUOT, KC_ENT  }
+},
+[_RS] = { /* [> RAISE <] */
+  {KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7,    KC_8,   KC_9, KC_ASTR},
+  {KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,  KC_TRNS, KC_PGDN, KC_4,    KC_5,   KC_6, KC_PLUS},
+  {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1,    KC_2,   KC_3, KC_BSLS},
+  {TG(_LW), KC_INS,  KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  KC_TRNS, KC_DOT, KC_0, KC_EQL}
+},
+[_LW] = { /* [> LOWER <] */
+  {KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_TRNS, KC_UP,   KC_F7,   KC_F8,   KC_F9,   KC_F10},
+  {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4,   KC_F5,   KC_F6,   KC_F11},
+  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F12},
+  {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  DF(_QW), KC_TRNS, KC_TRNS, RESET}
+}};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
index 1c4280ff5608f540dbbe232b3a8665576cd9cd73..04ad66fed8d27a954e7f97a8c7770cc34a35f0b9 100644 (file)
@@ -18,17 +18,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_LALT,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH },
   {KC_ESC, KC_TAB, KC_LGUI,  KC_LSFT, KC_BSPC,  KC_LCTL, KC_SPC,  MO(_RS), KC_MINS, KC_QUOT, KC_ENT  }
 },
+/*
+ *  !       @     up     {    }        ||     pgup    7     8     9    *
+ *  #     left   down  right  $        ||     pgdn    4     5     6    +
+ *  [       ]      (     )    &        ||       `     1     2     3    \
+ * lower  insert super shift bksp ctrl || alt space   fn    .     0    =
+ */
 [_RS] = { /* [> RAISE <] */
-  {KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7,    KC_8,   KC_9, KC_ASTR},
-  {KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,  KC_TRNS, KC_PGDN, KC_4,    KC_5,   KC_6, KC_PLUS},
-  {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1,    KC_2,   KC_3, KC_BSLS},
+  {KC_EXLM, KC_AT,   KC_UP,   KC_LCBR, KC_RCBR, KC_TRNS, KC_PGUP, KC_7,    KC_8,   KC_9, KC_ASTR},
+  {KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR,  KC_TRNS, KC_PGDN, KC_4,    KC_5,   KC_6, KC_PLUS},
+  {KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_LALT, KC_GRV,  KC_1,    KC_2,   KC_3, KC_BSLS},
   {TG(_LW), KC_INS,  KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  KC_TRNS, KC_DOT, KC_0, KC_EQL}
 },
+/*
+ * insert home   up  end   pgup       ||      up     F7    F8    F9   F10
+ *  del   left  down right pgdn       ||     down    F4    F5    F6   F11
+ *       volup             reset      ||             F1    F2    F3   F12
+ *       voldn  super shift bksp ctrl || alt space   L0  prtsc scroll pause
+ */
 [_LW] = { /* [> LOWER <] */
   {KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_TRNS, KC_UP,   KC_F7,   KC_F8,   KC_F9,   KC_F10},
   {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4,   KC_F5,   KC_F6,   KC_F11},
-  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F12},
-  {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  DF(_QW), KC_TRNS, KC_TRNS, RESET}
+  {KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET,   KC_LALT, KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F12},
+  {KC_TRNS, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC,  DF(_QW), KC_PSCR, KC_SLCK, KC_PAUS}
 }};
 
 const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h
new file mode 100644 (file)
index 0000000..d9eb190
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+
+/* Make Overloaded Keys switch faster */
+#define TAPPING_TERM 150
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Technomancy
+#define PRODUCT         Atreus
+#define DESCRIPTION     q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#if defined(ATREUS_ASTAR)
+#   define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#if defined(PCBDOWN)
+#   define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
+#else
+#   define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#endif
+#   define UNUSED_PINS
+#elif defined(ATREUS_TEENSY2)
+#   define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#   define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
+#   define UNUSED_PINS
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c
new file mode 100644 (file)
index 0000000..32c8826
--- /dev/null
@@ -0,0 +1,61 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define BASE 0
+#define NUMS 1
+#define MOUS 2
+
+// Some quick aliases, just to make it look pretty
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE] = KEYMAP( /* Qwerty */
+  KC_Q       , KC_W   , KC_E   , KC_R   ,  KC_T   ,                 KC_Y  ,  KC_U   , KC_I   , KC_O   , KC_P          ,
+  KC_A       , KC_S   , KC_D   , KC_F   ,  KC_G   ,                 KC_H  ,  KC_J   , KC_K   , KC_L   , KC_SCLN       ,
+  SFT_T(KC_Z), KC_X   , KC_C   , KC_V   ,  KC_B   ,                 KC_N  ,  KC_M   , KC_COMM, KC_DOT , SFT_T(KC_QUOT),
+  KC_LCTL    , KC_LALT, KC_LALT, KC_LGUI,  KC_BSPC, KC_ESC, KC_ENT, KC_SPC,  F(NUMS), KC_RALT, KC_SLSH, KC_BSLS      ),
+
+[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */
+  KC_GRV , KC_1   , KC_2   , KC_3   , KC_4   ,                   KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC,
+  KC_TAB , KC_5   , KC_6   , KC_7   , KC_8   ,                   KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT, KC_RBRC,
+  _______, KC_9   , KC_0   , KC_DOT , KC_COMM,                   KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______,
+  _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______),
+
+[MOUS] = KEYMAP( /* Mouse and Media Keys */
+  KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9  ,                   KC_F8  , KC_F7  , KC_F6  , KC_F5  , KC_F4,
+  KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU,                   KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3,
+  KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE,                   KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2,
+  _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET  , KC_F12 , KC_F1)
+};
+
+
+// I prefer this layer switching strategy to the TG and MO functions.
+// so that I can get out of mouse mode just by tapping/holding my base layer FN key.
+const uint16_t PROGMEM fn_actions[] = {
+  [BASE] = ACTION_LAYER_OFF(2, 1),  // switch back to layer 0
+  [NUMS] = ACTION_LAYER_MOMENTARY(1),  // to Fn overlay
+  [MOUS] = ACTION_LAYER_ON(2, 1)  // switch to layer 2
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c
new file mode 100644 (file)
index 0000000..90ec6f9
--- /dev/null
@@ -0,0 +1,66 @@
+// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer.
+
+#include "atreus.h"
+#include "action_layer.h"
+#include "keymap_colemak.h"
+
+#define PREVENT_STUCK_MODIFIERS
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define ALPH 0
+#define NUMS 1
+#define CURS 2
+#define SYMB 3
+#define FKEY 4
+
+// Some handy macros to keep the keymaps clean and easier to maintain
+#define KM_SAVE LGUI(CM_S)
+#define KM_CLSE LGUI(CM_W)
+#define KM_OPEN LGUI(CM_O)
+
+#define KM_COPY LGUI(KC_C)
+#define KM_CUT  LGUI(KC_X)
+#define KM_PAST LGUI(KC_V)
+#define KM_UNDO LGUI(KC_Z)
+#define KM_REDO LGUI(LSFT(KC_Z))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[ALPH] = {
+  {KC_Q,    KC_W,           KC_E,           KC_R,    KC_T,    KC_TRNS, KC_Y,    KC_U,    KC_I,           KC_O,           KC_P},
+  {KC_A,    LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F,    KC_G,    KC_TRNS, KC_H,    KC_J,    LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN},
+  {KC_Z,    KC_X,           KC_C,           KC_V,    KC_B,    KC_LALT, KC_N,    KC_M,    KC_COMM,        KC_DOT,         KC_SLSH},
+  {KC_LCTL, KC_ESC,         KC_NO,          KC_LSFT, KC_SPC,  KC_LGUI, KC_ENT,  KC_RSFT, KC_NO,          KC_ESC,         KC_RCTL}
+},
+[NUMS] = {
+  {KC_TRNS, KC_TRNS,        KC_TRNS,        KC_ASTR, KC_SLSH, KC_TRNS, KC_TRNS, KC_7,    KC_8,           KC_9,           KC_SLSH},
+  {KC_TRNS, KC_TRNS,        KC_EQL,         KC_PLUS, KC_MINS, KC_TRNS, KC_LPRN, KC_4,    KC_5,           KC_6,           KC_ASTR},
+  {KC_TRNS, KC_TRNS,        KC_DOT,         KC_COMM, CM_SCLN, KC_TRNS, KC_RPRN, KC_1,    KC_2,           KC_3,           KC_MINS},
+  {KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0,    KC_DOT,         KC_EQL,         KC_PLUS}
+},
+[CURS] = {
+  {KC_TRNS, KC_BSPC,        KC_UP,          KC_DELT, KC_PGUP, KC_TRNS, KC_TRNS, KM_SAVE, KC_TRNS,        KM_OPEN,        KC_TRNS},
+  {KC_TRNS, KC_LEFT,        KC_DOWN,        KC_RGHT, KC_PGDN, KC_TRNS, KM_UNDO, KC_LALT, KC_TRNS,        KC_LGUI,        KC_TRNS},
+  {KC_TRNS, KC_VOLD,        KC_MUTE,        KC_VOLU, KC_MPLY, KM_COPY, KM_REDO, KM_CLSE, KC_TRNS,        KC_TRNS,        KC_TRNS},
+  {KC_TRNS, KC_TRNS,        RESET,          KC_TRNS, KC_TAB,  KM_CUT,  KM_PAST, KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS}
+},
+[SYMB] = {
+  {KC_BSLS, KC_EXLM,        KC_LABK,        KC_RABK, CM_COLN, KC_TRNS, KC_UNDS, KC_DLR,  KC_QUES,       KC_TRNS,         KC_PERC},
+  {KC_AT,   KC_AMPR,        KC_LPRN,        KC_RPRN, CM_SCLN, KC_TRNS, KC_COMM, KC_DOT,  KC_QUOT,       KC_TRNS,         KC_TILD},
+  {KC_HASH, KC_PIPE,        KC_LCBR,        KC_RCBR, KC_SLSH, KC_TRNS, KC_TRNS, KC_GRV,  KC_DQT,        KC_TRNS,         KC_CIRC},
+  {KC_TRNS, KC_TRNS,        KC_LBRC,        KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,         KC_TRNS}
+},
+[FKEY] = {
+  {KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9,   KC_F10,        KC_F11,          KC_F12},
+  {KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5,   KC_F6,         KC_F7,           KC_F8},
+  {KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1,   KC_F2,         KC_F3,           KC_F4},
+  {KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,         KC_TRNS}
+}};
+
+const uint16_t PROGMEM fn_actions[] = {};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  switch(id) {}
+
+  return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/jeremy/readme.md b/keyboards/atreus/keymaps/jeremy/readme.md
new file mode 100644 (file)
index 0000000..df0179a
--- /dev/null
@@ -0,0 +1,45 @@
+Jeremy's Atreus Key Mapping
+===========================
+
+I am a programmer by trade that suffers from the beginning stages of RSI. As a programmer I use letters, symbols and cursor navigation most often. To prevent strange finger gymnastics, I wrote a script to rank which non-letter characters occurred in my primary source projects most often and then placed these characters in the easiest to reach locations, for me. I made heavy use of momentary layer toggling.
+
+My layout is also geared toward a software based Colemak mapping. I would like it to be hardware, but I use my Laptop on the go frequently and thus my laptop keyboard. I have moved the keycaps to reflect the Colemak layout. My laptop is a MacBook Pro (2015).
+
+## Main Layers
+
+1. [Letters](http://www.keyboard-layout-editor.com/#/gists/6861cb9df09ce78efaddf8aa7471e3ac)
+2. [Symbols](http://www.keyboard-layout-editor.com/#/gists/8956a18b508a78e93b9c38ec3fcccaa5)
+3. [Navigation](http://www.keyboard-layout-editor.com/#/gists/6ed492b714a7f54eb1c5de09b87fd8c4)
+4. [Numbers](http://www.keyboard-layout-editor.com/#/gists/399ceb5624e8388e48a3a5eacac8e973)
+5. [Function Keys](http://www.keyboard-layout-editor.com/#/gists/7fd7dc24c7048316f3724b1893c64e89)
+
+## Notes
+
+### General
+
+Some characters can be accessed multiple ways. This was done because you may be in a given layer, such as numbers, where when doing math, you may need quick access to the parentheses characters for grouping. This prevents some layer switching.
+
+I own an ErgoDox and plan on porting this as a base layer, then using the extra keys the ErgoDox provides accordingly. My goal, though, is to be fully functional on this base setup and build everything into muscle memory.
+
+### Symbol Layer
+
+1. I placed characters that deal with an if statement close together, such as !, & and |.
+2. All matching brace/bracket characters are together as well.
+
+### Number Layer
+
+1. Everything I did was a compromise when trying to mimic a ten-key. I did the best I could.
+2. Operators are duplicated on the right and left. I do not find it comfortable to use my pinky much, so I tend to use my left hand for +, -, * and / but those were also placed on the right hand to mimic the ten-key.
+3. Parentheses were added for typing on the calculator.
+
+### Cursor Layer
+
+1. It includes basic audio controls because they didn't really fit anywhere else
+2. It contains basic file manipulation. I'm not sure that was a good idea. I do save all the time, but Cmd+S isn't exactly hard.
+3. It contains the backspace and delete keys right on top of the left and right arrows.
+4. Cmd and Opt keys are duplicated. This makes for very easy navigation, for example on a Mac, Opt+Left/Right moves word by word. It also backspaces or deletes word by word.
+
+### Function Layer
+
+1. Almost all other layers I saw grouped the F keys into a bunch of three. This only gives nine function keys in order if you attempt to stay as close to the home row as possible. I went with a group of four, which gives all twelve function keys to the right hand, one row below and above the home row.
+2. I duplicated the Command and Option keys the same as on the cursor layer. This makes it dead easy to hit modified function keys such as Cmd+Opt+F5. It's also easy to toss in a Shift modifier in there with the right thumb since the bottom row is preserved.
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png
new file mode 100644 (file)
index 0000000..4640f9f
Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
new file mode 100644 (file)
index 0000000..08c2e61
Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
new file mode 100644 (file)
index 0000000..34ad03d
Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
new file mode 100644 (file)
index 0000000..14ae35b
Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
new file mode 100644 (file)
index 0000000..6598acb
Binary files /dev/null and b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/config.h b/keyboards/atreus/keymaps/replicaJunction/config.h
new file mode 100644 (file)
index 0000000..437aa66
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+Config file - Atreus QMK with replicaJunction layout
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Technomancy
+#define PRODUCT         Atreus
+#define DESCRIPTION     q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#if defined(ATREUS_ASTAR)
+#   define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#   define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#   define UNUSED_PINS
+#elif defined(ATREUS_TEENSY2)
+#   define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#   define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
+#   define UNUSED_PINS
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+// Default: 5
+#define DEBOUNCING_DELAY 6
+
+// I don't have any locking keys, so I don't need these features
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Prevent modifiers from sticking when switching layers */
+#define PREVENT_STUCK_MODIFIERS
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/replicaJunction/keymap.c b/keyboards/atreus/keymaps/replicaJunction/keymap.c
new file mode 100644 (file)
index 0000000..52d3677
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Keyboard: Atreus
+ * Keymap:   replicaJunction
+ * Version:  0.3
+ *
+ * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
+ * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
+ * have both keyboards, so I've designed these layouts in an effort to make switching between the
+ * two as easy as possible.
+ *
+ * Clearly, the Atreus is the limiting factor in this equation, so I've taken heavy advantage of
+ * function and dual-role keys.
+ *
+ * The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
+ * here: https://colemakmods.github.io/mod-dh/
+ */
+
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+// Note that whatever is set as layer 0 will be the default layer of the keyboard.
+
+#define _CO 0 // Colemak
+#define _QW 1 // QWERTY
+#define _GA 2 // Gaming
+#define _EX 3 // Extend
+#define _NU 4 // Numpad
+#define _FN 5 // Function
+
+// Some quick aliases, just to make it look pretty
+#define _______ KC_TRNS
+#define KCX_CA  LCTL(KC_LALT)
+#define KCX_CS  LCTL(KC_LSFT)
+#define KCX_CSA LCTL(LSFT(KC_LALT))
+#define KCX_LST LSFT(KC_TAB)
+#define KX_COPY LCTL(KC_C)
+#define KX_CUT  LCTL(KC_X)
+#define KX_PAST LCTL(KC_V)
+#define KX_UNDO LCTL(KC_Z)
+
+; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_CO] = KEYMAP(
+  KC_Q,        KC_W,    KC_F,    KC_P,    KC_B,                                   KC_J,            KC_L,    KC_U,    KC_Y,    KC_SCLN,
+  KC_A,        KC_R,    KC_S,    KC_T,    KC_G,                                   KC_M,            KC_N,    KC_E,    KC_I,    KC_O,
+  SFT_T(KC_Z), KC_X,    KC_C,    KC_D,    KC_V,                                   KC_K,            KC_H,    KC_COMM, KC_DOT,  SFT_T(KC_SLSH),
+  KC_ESC,      KC_LGUI, KC_TAB,  KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT),  LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
+),
+
+[_QW] = KEYMAP( /* Qwerty */
+  KC_Q,        KC_W,    KC_E,    KC_R,    KC_T,                                  KC_Y,            KC_U,    KC_I,    KC_O,    KC_P,
+  KC_A,        KC_S,    KC_D,    KC_F,    KC_G,                                  KC_H,            KC_J,    KC_K,    KC_L,    KC_SCLN,
+  SFT_T(KC_Z), KC_X,    KC_C,    KC_V,    KC_B,                                  KC_N,            KC_M,    KC_COMM, KC_DOT,  SFT_T(KC_SLSH),
+  KC_ESC,      KC_LGUI, KC_TAB,  KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
+),
+
+[_EX] = KEYMAP( /* Extend */
+  KC_CAPS, _______, _______, _______, _______,                   KC_PGUP, KC_HOME, KC_UP,   KC_END,  KC_DEL,
+  _______, KC_LGUI, KC_LALT, KC_LCTL, _______,                   KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
+  _______, KX_CUT,  KX_COPY, _______, KX_PAST,                   _______, KC_TAB,  KCX_LST, _______, KC_INSERT,
+  _______, _______, _______, _______, _______, _______, _______, KC_SPC,  _______, _______, _______, KC_PSCR
+),
+
+[_NU] = KEYMAP( /* Numbers and symbols */
+  KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_AMPR,                    KC_SLSH, KC_7,    KC_8,   KC_9,   KC_ASTR,
+  KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_TILD,                    KC_PIPE, KC_4,    KC_5,   KC_6,   KC_MINS,
+  KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV,                     KC_BSLS, KC_1,    KC_2,   KC_3,   KC_PLUS,
+  _______, TG(_GA), _______, MO(_FN), _______, _______,  _______, _______, KC_0,    KC_DOT, KC_EQL, _______
+),
+
+[_FN] = KEYMAP( /* Functions */
+  KC_DEL,  KC_HOME, KC_UP,   KC_END,  KC_PGUP,                   _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,
+  KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN,                   _______, KC_F4,   KC_F5,   KC_F6,   KC_F11,
+  _______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY,                   _______, KC_F1,   KC_F2,   KC_F3,   KC_F12,
+  _______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO,   DF(_CO), DF(_QW), RESET
+),
+
+[_GA] = KEYMAP( /* Gaming */
+  _______, _______, _______, _______, _______,                   _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
+  _______, _______, _______, _______, _______,                   _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+  KC_Z,    _______, _______, _______, _______,                   KC_BTN3, _______, KC_MS_D, _______, _______,
+  _______, TG(_GA), _______, KC_LSFT, KC_SPC,  KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______
+)};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/replicaJunction/readme.md b/keyboards/atreus/keymaps/replicaJunction/readme.md
new file mode 100644 (file)
index 0000000..21af48e
--- /dev/null
@@ -0,0 +1,57 @@
+# replicaJunction - Atreus Layout #
+
+This layout is designed to make the absolute most out of the Atreus 40% keyboard.
+
+I was enchanted with the idea of the Atreus keyboard after using my Ergodox for several months. I wanted something of a similar form factor that was easily portable, so I could bring and transport a keyboard to my workplace without much hassle. After building the Atreus keyboard, though, I realized very quickly that the 40% form factor requires a lot more creativity than a full-size keyboard (even one as strangely-shaped as the Ergodox).
+
+The default Atreus keyboard layout provides all the necessary keys in order to function with the keyboard, but as a programmer, I needed quicker access to just about everything. I noticed that the default layer didn't include any dual-role keys, and so I started on my journey to build my perfect layout for the Atreus.
+
+I won't claim that this layout is perfect for everyone. It does make several significant changes from the "normal" Atreus layout. In my own use, though, I've found this keyboard turbocharges my Atreus, and gives it the power of a full-size keyboard without the size.
+
+## Base Layer ##
+
+![Atreus base layout](atreus-replica-base-colemakdh.png)
+
+The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/).
+
+Note that there are four dual-purpose keys: Shift (Backspace), Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key by double-tapping the key and holding on the second tap. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
+
+The secondary Alt on the left bottom row exists to provide a single-hand Alt+Tab shortcut, which would take two rows otherwise.
+
+## Extend Layer ##
+
+![Atreus extend layer](atreus-replica-extend.png)
+
+This layout is designed primarily for keyboard navigation. Arrow keys are easily accessible under the right hand (a welcome change from the original Atreus layout, which places them under the left hand), along with Home/End and PgUp/PgDn.
+
+Modifiers are also placed under the home row of the left hand. One of the single keyboard actions I use most is Shift+Ctrl+Left/Right to select a whole word; this layer makes those keypresses simple by adding the Ctrl key in an easy-to-reach location.
+
+For the common Ctrl shortcuts, I also added some hotkeys to this layer over the letter keys they are associated with. This gives the Extend key some extra utility by letting it "feel" like a Ctrl key in some cases.
+
+The Space key exists to prevent going from this layer directly into the Number layer. Similarly, the Shift key on the left pinky helps make sure that the normal letter (Z) doesn't fire.
+
+## Number and Symbol Layer ##
+
+![Atreus number and symbol layer](atreus-replica-num.png)
+
+This layer provides the only way of accessing number keys on this keyboard, since it's too small for its own number row. Note that even though they are laid out in the number pad fashion, they send the "regular" number keystrokes. Games and programs that specifically use NumPad keys are not supported in this layout at the moment.
+
+This layer also provides plenty of symbol shortcuts. Most of these can be accessed through other means (like Shift+8 for the asterisk), but having shortcut keys to them makes for one less keypress, which adds up quickly when using these symbols on a regular basis. I've been through many revisions of this concept on my Ergodox as well as the Atreus, and I've finally arrived at this layout as the one that provides the symbols I need most frequently in places I can think to expect them. The Ordinary layout from the Ergodox-EZ keyboard in this repository was a large influence in this design.
+
+## Function Layer ##
+
+![Atreus function layer](atreus-replica-function.png)
+
+Function keys (F1-F12) are on this layer, as well as some more generic "functions" such as media keys. I've also set up a mirror image of the arrows from the Extend layer in case I need to use these with my left hand, but I don't do this very often.
+
+The reset key is on this layer, as well as a toggle from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
+
+## Gaming Layer ##
+
+![Atreus gaming layer](atreus-replica-game.png)
+
+This is a small layer developed to allow some simple gameplay without a mouse. This layer is a toggle (from the Number layer), so it is designed to stay on while in use.
+
+The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games.
+
+I would probably not consider this a hard-core gaming keyboard, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it.
\ No newline at end of file
diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c
new file mode 100644 (file)
index 0000000..b418cc9
--- /dev/null
@@ -0,0 +1,89 @@
+// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by
+// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and
+// Preonic keyboards by Jack Humbert.
+
+#include "atreus.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DV 0
+#define _QW 1
+#define _CM 2
+#define _L1 3
+#define _L2 4
+
+// Macro name shortcuts
+#define DVORAK M(_DV)
+#define QWERTY M(_QW)
+#define COLEMAK M(_CM)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_DV] = { /* Dvorak */
+    {KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_NO,   KC_F,    KC_G,    KC_C,    KC_R,    KC_L   },
+    {KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_NO,   KC_D,    KC_H,    KC_T,    KC_N,    KC_S   },
+    {SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL),  KC_B,  KC_M,  KC_W,  KC_V,   SFT_T(KC_Z) },
+    {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL}
+  },
+  [_QW] = { /* Qwerty */
+    {KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_NO,   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   },
+    {KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN},
+    {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH)  },
+    {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT}
+  },
+  [_CM] = { /* Colemak */
+    {KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_NO,   KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN},
+    {KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_NO,   KC_H,    KC_N,    KC_E,    KC_I,    KC_O   },
+    {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH)  },
+    {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT}
+  },
+  [_L1] = { /* LAYER 1 */
+    {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0   },
+    {KC_TAB,  KC_INS,  KC_UP,   KC_DEL,  KC_HOME, KC_NO,   KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL },
+    {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS},
+    {KC_TRNS, KC_GRV,  KC_LGUI, KC_TRNS, KC_DEL,  KC_LALT, KC_SPC,  KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT }
+  },
+  [_L2] = { /* LAYER 2 */
+    {KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_NO,   KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
+    {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_NO,   KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_PLUS},
+    {KC_TRNS, KC_TRNS, DVORAK,  QWERTY,  COLEMAK, KC_LCTL, KC_TRNS, KC_F9,   KC_F10,  KC_F11,  KC_F12 },
+    {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC,  KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET}
+  }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _DV:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_DV);
+          }
+          break;
+        case _QW:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_QW);
+          }
+          break;
+        case _CM:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_CM);
+          }
+          break;
+      }
+    return MACRO_NONE;
+};
index 734f58f0f095602ca5882ff53c130cb9ab588ea9..a4077668e3662895f7b6e1b5fbff63236a59893a 100644 (file)
@@ -174,13 +174,14 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk
new file mode 100644 (file)
index 0000000..3a00993
--- /dev/null
@@ -0,0 +1,82 @@
+
+
+ifdef TEENSY2
+    OPT_DEFS += -DATREUS_TEENSY2
+    ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
+else
+    OPT_DEFS += -DATREUS_ASTAR
+    OPT_DEFS += -DCATERINA_BOOTLOADER
+    ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+                            avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+endif
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+#BOOTMAGIC_ENABLE = yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - not yet supported in LUFA
+# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES           # MIDI controls
+UNICODE_ENABLE ?= YES          # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+USB ?= /dev/cu.usbmodem1411
+
+upload: build
+       $(ATREUS_UPLOAD_COMMAND)
diff --git a/keyboards/atreus62/Makefile b/keyboards/atreus62/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/atreus62/atreus62.c b/keyboards/atreus62/atreus62.c
new file mode 100644 (file)
index 0000000..ba5bce9
--- /dev/null
@@ -0,0 +1 @@
+#include "atreus62.h"
\ No newline at end of file
diff --git a/keyboards/atreus62/atreus62.h b/keyboards/atreus62/atreus62.h
new file mode 100644 (file)
index 0000000..eacf5b4
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef ATREUS62_H
+#define ATREUS62_H
+
+#include "quantum.h"
+
+void promicro_bootloader_jmp(bool program);
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+  k00, k01, k02, k03, k04, k05,           k06, k07, k08, k09, k0a, k0b, \
+  k10, k11, k12, k13, k14, k15,           k16, k17, k18, k19, k1a, k1b, \
+  k20, k21, k22, k23, k24, k25,           k26, k27, k28, k29, k2a, k2b, \
+  k30, k31, k32, k33, k34, k35,           k36, k37, k38, k39, k3a, k3b, \
+  k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \
+) \
+{ \
+       { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \
+       { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \
+       { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \
+       { k30, k31, k32, k33, k34, k35, k46,   k36, k37, k38, k39, k3a, k3b }, \
+       { k40, k41, k42, k43, k44, k45, k47,   k48, k49, k4a, k4b, k4c, k4d } \
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/atreus62/config.h b/keyboards/atreus62/config.h
new file mode 100644 (file)
index 0000000..90a4aa0
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6062
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Profet
+#define PRODUCT         Atreus62
+#define DESCRIPTION     q.m.k. keyboard firmware for Atreus62
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 13
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D2, D3, D1, D0, D4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, C6 }
+
+#define CATERINA_BOOTLOADER
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus62/keymaps/default/keymap.c b/keyboards/atreus62/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..52802c7
--- /dev/null
@@ -0,0 +1,71 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "atreus62.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DEFAULT 0
+#define _NAV 1
+#define _RESET 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_DEFAULT] = { /* qwerty */
+               { KC_ESC,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS },
+               { KC_BSLS,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_TRNS,  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_RBRC },
+               { KC_TAB,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_TRNS,  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT },
+               { KC_LSFT,  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_DELT,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_LBRC },
+               { KC_LCTL,  KC_LGUI, KC_LALT, KC_GRV,  MO(_NAV),KC_BSPC, KC_ENT,   KC_SPC,  KC_EQL,  KC_MINS, KC_QUOT, KC_ENT,  KC_RGUI }
+},
+
+[_NAV] = { 
+               { TO(_DEFAULT),  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11  },
+               { KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_F12,  KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS },
+               { KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS },
+               { TO(_RESET),    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+               { KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
+},
+
+[_RESET] = {
+               { TO(_DEFAULT),  KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  ,  KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO   },
+               { KC_NO  ,       KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  ,  KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO   },
+               { KC_NO  ,       KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  ,  KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO   },
+               { KC_NO  ,       KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  ,  KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO   },
+               { KC_NO  ,       KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  ,  KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , RESET }
+}
+
+
+/*
+[_TRNS] = {
+               { KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+               { KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+               { KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+               { KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+               { KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
+},
+*/
+};
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+       // MACRODOWN only works in this function
+       switch (id) {
+       case 0:
+               if (record->event.pressed) {
+                       register_code(KC_RSFT);
+               }
+               else {
+                       unregister_code(KC_RSFT);
+               }
+               break;
+       }
+       return MACRO_NONE;
+};
diff --git a/keyboards/atreus62/pro_micro.h b/keyboards/atreus62/pro_micro.h
new file mode 100644 (file)
index 0000000..f9e7ed7
--- /dev/null
@@ -0,0 +1,362 @@
+/*
+  pins_arduino.h - Pin definition functions for Arduino
+  Part of Arduino - http://www.arduino.cc/
+
+  Copyright (c) 2007 David A. Mellis
+
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General
+  Public License along with this library; if not, write to the
+  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+  Boston, MA  02111-1307  USA
+
+  $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
+*/
+
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include <avr/pgmspace.h>
+
+// Workaround for wrong definitions in "iom32u4.h".
+// This should be fixed in the AVR toolchain.
+#undef UHCON
+#undef UHINT
+#undef UHIEN
+#undef UHADDR
+#undef UHFNUM
+#undef UHFNUML
+#undef UHFNUMH
+#undef UHFLEN
+#undef UPINRQX
+#undef UPINTX
+#undef UPNUM
+#undef UPRST
+#undef UPCONX
+#undef UPCFG0X
+#undef UPCFG1X
+#undef UPSTAX
+#undef UPCFG2X
+#undef UPIENX
+#undef UPDATX
+#undef TCCR2A
+#undef WGM20
+#undef WGM21
+#undef COM2B0
+#undef COM2B1
+#undef COM2A0
+#undef COM2A1
+#undef TCCR2B
+#undef CS20
+#undef CS21
+#undef CS22
+#undef WGM22
+#undef FOC2B
+#undef FOC2A
+#undef TCNT2
+#undef TCNT2_0
+#undef TCNT2_1
+#undef TCNT2_2
+#undef TCNT2_3
+#undef TCNT2_4
+#undef TCNT2_5
+#undef TCNT2_6
+#undef TCNT2_7
+#undef OCR2A
+#undef OCR2_0
+#undef OCR2_1
+#undef OCR2_2
+#undef OCR2_3
+#undef OCR2_4
+#undef OCR2_5
+#undef OCR2_6
+#undef OCR2_7
+#undef OCR2B
+#undef OCR2_0
+#undef OCR2_1
+#undef OCR2_2
+#undef OCR2_3
+#undef OCR2_4
+#undef OCR2_5
+#undef OCR2_6
+#undef OCR2_7
+
+#define NUM_DIGITAL_PINS  30
+#define NUM_ANALOG_INPUTS 12
+
+#define TX_RX_LED_INIT  DDRD |= (1<<5), DDRB |= (1<<0)
+#define TXLED0          PORTD |= (1<<5)
+#define TXLED1          PORTD &= ~(1<<5)
+#define RXLED0          PORTB |= (1<<0)
+#define RXLED1          PORTB &= ~(1<<0)
+
+static const uint8_t SDA = 2;
+static const uint8_t SCL = 3;
+#define LED_BUILTIN 13
+
+// Map SPI port to 'new' pins D14..D17
+static const uint8_t SS   = 17;
+static const uint8_t MOSI = 16;
+static const uint8_t MISO = 14;
+static const uint8_t SCK  = 15;
+
+// Mapping of analog pins as digital I/O
+// A6-A11 share with digital pins
+static const uint8_t ADC0 = 18;
+static const uint8_t ADC1 = 19;
+static const uint8_t ADC2 = 20;
+static const uint8_t ADC3 = 21;
+static const uint8_t ADC4 = 22;
+static const uint8_t ADC5 = 23;
+static const uint8_t ADC6 = 24;   // D4
+static const uint8_t ADC7 = 25;   // D6
+static const uint8_t ADC8 = 26;   // D8
+static const uint8_t ADC9 = 27;   // D9
+static const uint8_t ADC10 = 28;  // D10
+static const uint8_t ADC11 = 29;  // D12
+
+#define digitalPinToPCICR(p)    ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
+#define digitalPinToPCICRbit(p) 0
+#define digitalPinToPCMSK(p)    ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
+#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
+
+//  __AVR_ATmega32U4__ has an unusual mapping of pins to channels
+extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
+#define analogPinToChannel(P)  ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
+
+#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
+
+#ifdef ARDUINO_MAIN
+
+// On the Arduino board, digital pins are also used
+// for the analog output (software PWM).  Analog input
+// pins are a separate set.
+
+// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
+//
+// D0               PD2                 RXD1/INT2
+// D1               PD3                 TXD1/INT3
+// D2               PD1     SDA         SDA/INT1
+// D3#              PD0     PWM8/SCL    OC0B/SCL/INT0
+// D4       A6      PD4                 ADC8
+// D5#              PC6     ???         OC3A/#OC4A
+// D6#      A7      PD7     FastPWM     #OC4D/ADC10
+// D7               PE6                 INT6/AIN0
+//
+// D8       A8      PB4                 ADC11/PCINT4
+// D9#      A9      PB5     PWM16       OC1A/#OC4B/ADC12/PCINT5
+// D10#     A10     PB6     PWM16       OC1B/0c4B/ADC13/PCINT6
+// D11#             PB7     PWM8/16     0C0A/OC1C/#RTS/PCINT7
+// D12      A11     PD6                 T1/#OC4D/ADC9
+// D13#             PC7     PWM10       CLK0/OC4A
+//
+// A0       D18     PF7                 ADC7
+// A1       D19     PF6                 ADC6
+// A2       D20     PF5                 ADC5
+// A3       D21     PF4                 ADC4
+// A4       D22     PF1                 ADC1
+// A5       D23     PF0                 ADC0
+//
+// New pins D14..D17 to map SPI port to digital pins
+//
+// MISO     D14     PB3                 MISO,PCINT3
+// SCK      D15     PB1                 SCK,PCINT1
+// MOSI     D16     PB2                 MOSI,PCINT2
+// SS       D17     PB0                 RXLED,SS/PCINT0
+//
+// Connected LEDs on board for TX and RX
+// TXLED    D24     PD5                 XCK1
+// RXLED    D17     PB0
+// HWB              PE2                 HWB
+
+// these arrays map port names (e.g. port B) to the
+// appropriate addresses for various functions (e.g. reading
+// and writing)
+const uint16_t PROGMEM port_to_mode_PGM[] = {
+    NOT_A_PORT,
+    NOT_A_PORT,
+    (uint16_t) &DDRB,
+    (uint16_t) &DDRC,
+    (uint16_t) &DDRD,
+    (uint16_t) &DDRE,
+    (uint16_t) &DDRF,
+};
+
+const uint16_t PROGMEM port_to_output_PGM[] = {
+    NOT_A_PORT,
+    NOT_A_PORT,
+    (uint16_t) &PORTB,
+    (uint16_t) &PORTC,
+    (uint16_t) &PORTD,
+    (uint16_t) &PORTE,
+    (uint16_t) &PORTF,
+};
+
+const uint16_t PROGMEM port_to_input_PGM[] = {
+    NOT_A_PORT,
+    NOT_A_PORT,
+    (uint16_t) &PINB,
+    (uint16_t) &PINC,
+    (uint16_t) &PIND,
+    (uint16_t) &PINE,
+    (uint16_t) &PINF,
+};
+
+const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
+    PD, // D0 - PD2
+    PD, // D1 - PD3
+    PD, // D2 - PD1
+    PD, // D3 - PD0
+    PD, // D4 - PD4
+    PC, // D5 - PC6
+    PD, // D6 - PD7
+    PE, // D7 - PE6
+
+    PB, // D8 - PB4
+    PB, // D9 - PB5
+    PB, // D10 - PB6
+    PB, // D11 - PB7
+    PD, // D12 - PD6
+    PC, // D13 - PC7
+
+    PB, // D14 - MISO - PB3
+    PB, // D15 - SCK - PB1
+    PB, // D16 - MOSI - PB2
+    PB, // D17 - SS - PB0
+
+    PF, // D18 - A0 - PF7
+    PF, // D19 - A1 - PF6
+    PF, // D20 - A2 - PF5
+    PF, // D21 - A3 - PF4
+    PF, // D22 - A4 - PF1
+    PF, // D23 - A5 - PF0
+
+    PD, // D24 - PD5
+    PD, // D25 / D6 - A7 - PD7
+    PB, // D26 / D8 - A8 - PB4
+    PB, // D27 / D9 - A9 - PB5
+    PB, // D28 / D10 - A10 - PB6
+    PD, // D29 / D12 - A11 - PD6
+};
+
+const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
+    _BV(2), // D0 - PD2
+    _BV(3), // D1 - PD3
+    _BV(1), // D2 - PD1
+    _BV(0), // D3 - PD0
+    _BV(4), // D4 - PD4
+    _BV(6), // D5 - PC6
+    _BV(7), // D6 - PD7
+    _BV(6), // D7 - PE6
+
+    _BV(4), // D8 - PB4
+    _BV(5), // D9 - PB5
+    _BV(6), // D10 - PB6
+    _BV(7), // D11 - PB7
+    _BV(6), // D12 - PD6
+    _BV(7), // D13 - PC7
+
+    _BV(3), // D14 - MISO - PB3
+    _BV(1), // D15 - SCK - PB1
+    _BV(2), // D16 - MOSI - PB2
+    _BV(0), // D17 - SS - PB0
+
+    _BV(7), // D18 - A0 - PF7
+    _BV(6), // D19 - A1 - PF6
+    _BV(5), // D20 - A2 - PF5
+    _BV(4), // D21 - A3 - PF4
+    _BV(1), // D22 - A4 - PF1
+    _BV(0), // D23 - A5 - PF0
+
+    _BV(5), // D24 - PD5
+    _BV(7), // D25 / D6 - A7 - PD7
+    _BV(4), // D26 / D8 - A8 - PB4
+    _BV(5), // D27 / D9 - A9 - PB5
+    _BV(6), // D28 / D10 - A10 - PB6
+    _BV(6), // D29 / D12 - A11 - PD6
+};
+
+const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    TIMER0B,        /* 3 */
+    NOT_ON_TIMER,
+    TIMER3A,        /* 5 */
+    TIMER4D,        /* 6 */
+    NOT_ON_TIMER,
+
+    NOT_ON_TIMER,
+    TIMER1A,        /* 9 */
+    TIMER1B,        /* 10 */
+    TIMER0A,        /* 11 */
+
+    NOT_ON_TIMER,
+    TIMER4A,        /* 13 */
+
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+    NOT_ON_TIMER,
+};
+
+const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
+    7,  // A0               PF7                 ADC7
+    6,  // A1               PF6                 ADC6
+    5,  // A2               PF5                 ADC5
+    4,  // A3               PF4                 ADC4
+    1,  // A4               PF1                 ADC1
+    0,  // A5               PF0                 ADC0
+    8,  // A6       D4      PD4                 ADC8
+    10, // A7       D6      PD7                 ADC10
+    11, // A8       D8      PB4                 ADC11
+    12, // A9       D9      PB5                 ADC12
+    13, // A10      D10     PB6                 ADC13
+    9   // A11      D12     PD6                 ADC9
+};
+
+#endif /* ARDUINO_MAIN */
+
+// These serial port names are intended to allow libraries and architecture-neutral
+// sketches to automatically default to the correct port name for a particular type
+// of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
+// the first hardware serial port whose RX/TX pins are not dedicated to another use.
+//
+// SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
+//
+// SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
+//
+// SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
+//
+// SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
+//
+// SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
+//                            pins are NOT connected to anything by default.
+#define SERIAL_PORT_MONITOR        Serial
+#define SERIAL_PORT_USBVIRTUAL     Serial
+#define SERIAL_PORT_HARDWARE       Serial1
+#define SERIAL_PORT_HARDWARE_OPEN  Serial1
+
+#endif /* Pins_Arduino_h */
diff --git a/keyboards/atreus62/readme.md b/keyboards/atreus62/readme.md
new file mode 100644 (file)
index 0000000..0245b4f
--- /dev/null
@@ -0,0 +1,10 @@
+atreus62 keyboard firmware
+======================
+
+This firmware is for the atreus62 keyboard.
+
+This version utilizes a Pro Micro for its controller and has a 62 key layout.
+
+https://github.com/profet23/atreus62
+
+TODO: More information
\ No newline at end of file
diff --git a/keyboards/atreus62/rules.mk b/keyboards/atreus62/rules.mk
new file mode 100644 (file)
index 0000000..f5d0be2
--- /dev/null
@@ -0,0 +1,66 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes         # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+#BACKLIGHT_ENABLE ?= no      # Enable keyboard backlight functionality
+#MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= yes         # Unicode
+#BLUETOOTH_ENABLE ?= yes       # Enable Bluetooth with the Adafruit EZ-Key HID
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
index 03893dbf8905f5f364d10d28a048cf9593b461b7..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,72 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-# NKRO_ENABLE ?= yes           # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
-# MIDI_ENABLE ?= YES           # MIDI controls
-# UNICODE_ENABLE ?= YES                # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
-
+endif
\ No newline at end of file
index 89d7f9d053e4e72ae1cb40bad7dbc0bdd92f92d4..462f67c12458caed189ca2ddd12eb76fdbff515c 100644 (file)
@@ -12,13 +12,14 @@ Download or clone the whole firmware and navigate to the keyboards/Bantam44 fold
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
\ No newline at end of file
diff --git a/keyboards/bantam44/rules.mk b/keyboards/bantam44/rules.mk
new file mode 100644 (file)
index 0000000..baa0e9e
--- /dev/null
@@ -0,0 +1,67 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes           # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES           # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
index d9f2b8b83bac6ab7d23b3a1ee4ccc52668e0bdc8..4b07a623432e97ec31a0e244cbf084a6d14a9200 100644 (file)
@@ -1,14 +1,5 @@
 SUBPROJECT_DEFAULT = stm32_f072_onekey
 
-#BOOTMAGIC_ENABLE = yes        # Virtual DIP switch configuration
-MOUSEKEY_ENABLE ?= yes # Mouse keys
-EXTRAKEY_ENABLE ?= yes # Audio control and System control
-CONSOLE_ENABLE ?= yes  # Console for debug
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes         # USB Nkey Rollover
-CUSTOM_MATRIX ?= yes # Custom matrix file
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 31319ef57528338e51c6749ef46e88e73ad6bf9e..2809c9d184ed1a982dff98a14577cc9f70302d48 100644 (file)
@@ -1,49 +1,49 @@
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-#include "hal.h"\r
-\r
-/**\r
- * @brief   PAL setup.\r
- * @details Digital I/O ports static configuration as defined in @p board.h.\r
- *          This variable is used by the HAL when initializing the PAL driver.\r
- */\r
-#if HAL_USE_PAL || defined(__DOXYGEN__)\r
-const PALConfig pal_default_config =\r
-{\r
-  {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},\r
-  {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},\r
-  {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},\r
-  {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},\r
-  {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},\r
-};\r
-#endif\r
-\r
-/*\r
- * Early initialization code.\r
- * This initialization must be performed just after stack setup and before\r
- * any other initialization.\r
- */\r
-void __early_init(void) {\r
-\r
-  stm32_clock_init();\r
-}\r
-\r
-/*\r
- * Board-specific initialization code.\r
- */\r
-void boardInit(void) {\r
-}\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#include "hal.h"
+
+/**
+ * @brief   PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ *          This variable is used by the HAL when initializing the PAL driver.
+ */
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+const PALConfig pal_default_config =
+{
+  {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
+  {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
+  {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
+  {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
+  {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
+};
+#endif
+
+/*
+ * Early initialization code.
+ * This initialization must be performed just after stack setup and before
+ * any other initialization.
+ */
+void __early_init(void) {
+
+  stm32_clock_init();
+}
+
+/*
+ * Board-specific initialization code.
+ */
+void boardInit(void) {
+}
index 7253e7782634bf4e4c327598eaa4ba29f21b0b10..b31d74307b3dd93e85f1b22bfbe08cbc67a1626c 100644 (file)
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-#ifndef _BOARD_H_\r
-#define _BOARD_H_\r
-\r
-/*\r
- * Setup for a Generic STM32F103 board.\r
- */\r
-\r
-/*\r
- * Board identifier.\r
- */\r
-#define BOARD_GENERIC_STM32_F103\r
-#define BOARD_NAME              "Generic STM32F103x board"\r
-\r
-/*\r
- * Board frequencies.\r
- */\r
-#define STM32_LSECLK            32768\r
-#define STM32_HSECLK            8000000\r
-\r
-/*\r
- * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.\r
- */\r
-#define STM32F103xB\r
-\r
-/*\r
- * IO pins assignments\r
- */\r
-\r
-/* on-board */\r
-\r
-#define GPIOC_LED               13\r
-#define GPIOD_OSC_IN            0\r
-#define GPIOD_OSC_OUT           1\r
-\r
-/* In case your board has a "USB enable" hardware\r
-   controlled by a pin, define it here. (It could be just\r
-   a 1.5k resistor connected to D+ line.)\r
-*/\r
-/*\r
-#define GPIOB_USB_DISC          10\r
-*/\r
-\r
-/*\r
- * I/O ports initial setup, this configuration is established soon after reset\r
- * in the initialization code.\r
- *\r
- * The digits have the following meaning:\r
- *   0 - Analog input.\r
- *   1 - Push Pull output 10MHz.\r
- *   2 - Push Pull output 2MHz.\r
- *   3 - Push Pull output 50MHz.\r
- *   4 - Digital input.\r
- *   5 - Open Drain output 10MHz.\r
- *   6 - Open Drain output 2MHz.\r
- *   7 - Open Drain output 50MHz.\r
- *   8 - Digital input with PullUp or PullDown resistor depending on ODR.\r
- *   9 - Alternate Push Pull output 10MHz.\r
- *   A - Alternate Push Pull output 2MHz.\r
- *   B - Alternate Push Pull output 50MHz.\r
- *   C - Reserved.\r
- *   D - Alternate Open Drain output 10MHz.\r
- *   E - Alternate Open Drain output 2MHz.\r
- *   F - Alternate Open Drain output 50MHz.\r
- * Please refer to the STM32 Reference Manual for details.\r
- */\r
-\r
-/*\r
- * Port A setup.\r
- * Everything input with pull-up except:\r
- * PA2  - Alternate output  (USART2 TX).\r
- * PA3  - Normal input      (USART2 RX).\r
- * PA9  - Alternate output  (USART1 TX).\r
- * PA10 - Normal input      (USART1 RX).\r
- */\r
-#define VAL_GPIOACRL            0x88884B88      /*  PA7...PA0 */\r
-#define VAL_GPIOACRH            0x888884B8      /* PA15...PA8 */\r
-#define VAL_GPIOAODR            0xFFFFFFFF\r
-\r
-/*\r
- * Port B setup.\r
- * Everything input with pull-up except:\r
- * PB10    - Push Pull output  (USB switch).\r
- */\r
-#define VAL_GPIOBCRL            0x88888888      /*  PB7...PB0 */\r
-#define VAL_GPIOBCRH            0x88888388      /* PB15...PB8 */\r
-#define VAL_GPIOBODR            0xFFFFFFFF\r
-\r
-/*\r
- * Port C setup.\r
- * Everything input with pull-up except:\r
- * PC13    - Push Pull output  (LED).\r
- */\r
-#define VAL_GPIOCCRL            0x88888888      /*  PC7...PC0 */\r
-#define VAL_GPIOCCRH            0x88388888      /* PC15...PC8 */\r
-#define VAL_GPIOCODR            0xFFFFFFFF\r
-\r
-/*\r
- * Port D setup.\r
- * Everything input with pull-up except:\r
- * PD0  - Normal input (XTAL).\r
- * PD1  - Normal input (XTAL).\r
- */\r
-#define VAL_GPIODCRL            0x88888844      /*  PD7...PD0 */\r
-#define VAL_GPIODCRH            0x88888888      /* PD15...PD8 */\r
-#define VAL_GPIODODR            0xFFFFFFFF\r
-\r
-/*\r
- * Port E setup.\r
- * Everything input with pull-up except:\r
- */\r
-#define VAL_GPIOECRL            0x88888888      /*  PE7...PE0 */\r
-#define VAL_GPIOECRH            0x88888888      /* PE15...PE8 */\r
-#define VAL_GPIOEODR            0xFFFFFFFF\r
-\r
-/*\r
- * USB bus activation macro, required by the USB driver.\r
- */\r
-/* The point is that most of the generic STM32F103* boards\r
-   have a 1.5k resistor connected on one end to the D+ line\r
-   and on the other end to some pin. Or even a slightly more\r
-   complicated "USB enable" circuit, controlled by a pin.\r
-   That should go here.\r
-\r
-   However on some boards (e.g. one that I have), there's no\r
-   such hardware. In which case it's better to not do anything.\r
-*/\r
-/*\r
-#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)\r
-*/\r
-#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);\r
-\r
-/*\r
- * USB bus de-activation macro, required by the USB driver.\r
- */\r
-/*\r
-#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)\r
-*/\r
-#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);\r
-\r
-#if !defined(_FROM_ASM_)\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-  void boardInit(void);\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#endif /* _FROM_ASM_ */\r
-\r
-#endif /* _BOARD_H_ */\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for a Generic STM32F103 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F103
+#define BOARD_NAME              "Generic STM32F103x board"
+
+/*
+ * Board frequencies.
+ */
+#define STM32_LSECLK            32768
+#define STM32_HSECLK            8000000
+
+/*
+ * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
+ */
+#define STM32F103xB
+
+/*
+ * IO pins assignments
+ */
+
+/* on-board */
+
+#define GPIOC_LED               13
+#define GPIOD_OSC_IN            0
+#define GPIOD_OSC_OUT           1
+
+/* In case your board has a "USB enable" hardware
+   controlled by a pin, define it here. (It could be just
+   a 1.5k resistor connected to D+ line.)
+*/
+/*
+#define GPIOB_USB_DISC          10
+*/
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ *
+ * The digits have the following meaning:
+ *   0 - Analog input.
+ *   1 - Push Pull output 10MHz.
+ *   2 - Push Pull output 2MHz.
+ *   3 - Push Pull output 50MHz.
+ *   4 - Digital input.
+ *   5 - Open Drain output 10MHz.
+ *   6 - Open Drain output 2MHz.
+ *   7 - Open Drain output 50MHz.
+ *   8 - Digital input with PullUp or PullDown resistor depending on ODR.
+ *   9 - Alternate Push Pull output 10MHz.
+ *   A - Alternate Push Pull output 2MHz.
+ *   B - Alternate Push Pull output 50MHz.
+ *   C - Reserved.
+ *   D - Alternate Open Drain output 10MHz.
+ *   E - Alternate Open Drain output 2MHz.
+ *   F - Alternate Open Drain output 50MHz.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+
+/*
+ * Port A setup.
+ * Everything input with pull-up except:
+ * PA2  - Alternate output  (USART2 TX).
+ * PA3  - Normal input      (USART2 RX).
+ * PA9  - Alternate output  (USART1 TX).
+ * PA10 - Normal input      (USART1 RX).
+ */
+#define VAL_GPIOACRL            0x88884B88      /*  PA7...PA0 */
+#define VAL_GPIOACRH            0x888884B8      /* PA15...PA8 */
+#define VAL_GPIOAODR            0xFFFFFFFF
+
+/*
+ * Port B setup.
+ * Everything input with pull-up except:
+ * PB10    - Push Pull output  (USB switch).
+ */
+#define VAL_GPIOBCRL            0x88888888      /*  PB7...PB0 */
+#define VAL_GPIOBCRH            0x88888388      /* PB15...PB8 */
+#define VAL_GPIOBODR            0xFFFFFFFF
+
+/*
+ * Port C setup.
+ * Everything input with pull-up except:
+ * PC13    - Push Pull output  (LED).
+ */
+#define VAL_GPIOCCRL            0x88888888      /*  PC7...PC0 */
+#define VAL_GPIOCCRH            0x88388888      /* PC15...PC8 */
+#define VAL_GPIOCODR            0xFFFFFFFF
+
+/*
+ * Port D setup.
+ * Everything input with pull-up except:
+ * PD0  - Normal input (XTAL).
+ * PD1  - Normal input (XTAL).
+ */
+#define VAL_GPIODCRL            0x88888844      /*  PD7...PD0 */
+#define VAL_GPIODCRH            0x88888888      /* PD15...PD8 */
+#define VAL_GPIODODR            0xFFFFFFFF
+
+/*
+ * Port E setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOECRL            0x88888888      /*  PE7...PE0 */
+#define VAL_GPIOECRH            0x88888888      /* PE15...PE8 */
+#define VAL_GPIOEODR            0xFFFFFFFF
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+/* The point is that most of the generic STM32F103* boards
+   have a 1.5k resistor connected on one end to the D+ line
+   and on the other end to some pin. Or even a slightly more
+   complicated "USB enable" circuit, controlled by a pin.
+   That should go here.
+
+   However on some boards (e.g. one that I have), there's no
+   such hardware. In which case it's better to not do anything.
+*/
+/*
+#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
+
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+/*
+#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+  void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
index d692c0ee460d1e8cc2b316f5d7308929b50ccbee..48e0e51fe670e9c8405538e1fc21b71de0903abf 100644 (file)
@@ -1,5 +1,5 @@
-# List of all the board related files.\r
-BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c\r
-\r
-# Required include directories\r
-BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103\r
+# List of all the board related files.
+BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
index fb141f888cef12c77e6080e37a5db877b87701e8..c4ca8b874cca1f9a05aab983600861d84336ef34 100644 (file)
-/*\r
- * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com\r
- *           (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>\r
- *\r
- * Permission is hereby granted, free of charge, to any person obtaining\r
- * a copy of this software and associated documentation files (the "Software"),\r
- * to deal in the Software without restriction, including without limitation\r
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
- * and/or sell copies of the Software, and to permit persons to whom the\r
- * Software is furnished to do so, subject to the following conditions:\r
- *\r
- * The above copyright notice and this permission notice shall be included in\r
- * all copies or substantial portions of the Software.\r
- *\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
- * SOFTWARE.\r
- */\r
-\r
-/*\r
- * KL26Z64 memory setup.\r
- */\r
-MEMORY\r
-{\r
-  flash0   : org = 0x00000000, len = 0x100\r
-  flash1   : org = 0x00000400, len = 0x10\r
-  flash2   : org = 0x00000410, len = 62k - 0x410\r
-  flash3   : org = 0x0000F800, len = 2k\r
-  flash4   : org = 0x00000000, len = 0\r
-  flash5   : org = 0x00000000, len = 0\r
-  flash6   : org = 0x00000000, len = 0\r
-  flash7   : org = 0x00000000, len = 0\r
-  ram0     : org = 0x1FFFF800, len = 8k\r
-  ram1     : org = 0x00000000, len = 0\r
-  ram2     : org = 0x00000000, len = 0\r
-  ram3     : org = 0x00000000, len = 0\r
-  ram4     : org = 0x00000000, len = 0\r
-  ram5     : org = 0x00000000, len = 0\r
-  ram6     : org = 0x00000000, len = 0\r
-  ram7     : org = 0x00000000, len = 0\r
-}\r
-\r
-/* Flash region for the configuration bytes.*/\r
-SECTIONS\r
-{\r
-  .cfmprotect : ALIGN(4) SUBALIGN(4)\r
-  {\r
-    KEEP(*(.cfmconfig))\r
-  } > flash1\r
-}\r
-\r
-/* For each data/text section two region are defined, a virtual region\r
-   and a load region (_LMA suffix).*/\r
-\r
-/* Flash region to be used for exception vectors.*/\r
-REGION_ALIAS("VECTORS_FLASH", flash0);\r
-REGION_ALIAS("VECTORS_FLASH_LMA", flash0);\r
-\r
-/* Flash region to be used for constructors and destructors.*/\r
-REGION_ALIAS("XTORS_FLASH", flash2);\r
-REGION_ALIAS("XTORS_FLASH_LMA", flash2);\r
-\r
-/* Flash region to be used for code text.*/\r
-REGION_ALIAS("TEXT_FLASH", flash2);\r
-REGION_ALIAS("TEXT_FLASH_LMA", flash2);\r
-\r
-/* Flash region to be used for read only data.*/\r
-REGION_ALIAS("RODATA_FLASH", flash2);\r
-REGION_ALIAS("RODATA_FLASH_LMA", flash2);\r
-\r
-/* Flash region to be used for various.*/\r
-REGION_ALIAS("VARIOUS_FLASH", flash2);\r
-REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);\r
-\r
-/* Flash region to be used for RAM(n) initialization data.*/\r
-REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);\r
-\r
-/* RAM region to be used for Main stack. This stack accommodates the processing\r
-   of all exceptions and interrupts.*/\r
-REGION_ALIAS("MAIN_STACK_RAM", ram0);\r
-\r
-/* RAM region to be used for the process stack. This is the stack used by\r
-   the main() function.*/\r
-REGION_ALIAS("PROCESS_STACK_RAM", ram0);\r
-\r
-/* RAM region to be used for data segment.*/\r
-REGION_ALIAS("DATA_RAM", ram0);\r
-REGION_ALIAS("DATA_RAM_LMA", flash2);\r
-\r
-/* RAM region to be used for BSS segment.*/\r
-REGION_ALIAS("BSS_RAM", ram0);\r
-\r
-/* RAM region to be used for the default heap.*/\r
-REGION_ALIAS("HEAP_RAM", ram0);\r
-\r
-__eeprom_workarea_start__ = ORIGIN(flash3);\r
-__eeprom_workarea_size__  = LENGTH(flash3);\r
-__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;\r
-\r
-/* Generic rules inclusion.*/\r
-INCLUDE rules.ld\r
+/*
+ * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
+ *           (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * KL26Z64 memory setup.
+ */
+MEMORY
+{
+  flash0   : org = 0x00000000, len = 0x100
+  flash1   : org = 0x00000400, len = 0x10
+  flash2   : org = 0x00000410, len = 62k - 0x410
+  flash3   : org = 0x0000F800, len = 2k
+  flash4   : org = 0x00000000, len = 0
+  flash5   : org = 0x00000000, len = 0
+  flash6   : org = 0x00000000, len = 0
+  flash7   : org = 0x00000000, len = 0
+  ram0     : org = 0x1FFFF800, len = 8k
+  ram1     : org = 0x00000000, len = 0
+  ram2     : org = 0x00000000, len = 0
+  ram3     : org = 0x00000000, len = 0
+  ram4     : org = 0x00000000, len = 0
+  ram5     : org = 0x00000000, len = 0
+  ram6     : org = 0x00000000, len = 0
+  ram7     : org = 0x00000000, len = 0
+}
+
+/* Flash region for the configuration bytes.*/
+SECTIONS
+{
+  .cfmprotect : ALIGN(4) SUBALIGN(4)
+  {
+    KEEP(*(.cfmconfig))
+  } > flash1
+}
+
+/* For each data/text section two region are defined, a virtual region
+   and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash2);
+REGION_ALIAS("XTORS_FLASH_LMA", flash2);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash2);
+REGION_ALIAS("TEXT_FLASH_LMA", flash2);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash2);
+REGION_ALIAS("RODATA_FLASH_LMA", flash2);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash2);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+   of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+   the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash2);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+__eeprom_workarea_start__ = ORIGIN(flash3);
+__eeprom_workarea_size__  = LENGTH(flash3);
+__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
index 00613328ed16dfa482f0060698b9327d5bfe5cb4..f9bfe9c005279cbd0b77e0fe9cb2a125dd7b1eb1 100644 (file)
@@ -1,88 +1,88 @@
-/*\r
-    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-/*\r
- * ST32F103xB memory setup for use with the maplemini bootloader.\r
- * You will have to\r
- *     #define CORTEX_VTOR_INIT 0x5000\r
- * in your projects chconf.h\r
- */\r
-MEMORY\r
-{\r
-    flash0  : org = 0x08002000, len = 128k - 0x2000\r
-    flash1  : org = 0x00000000, len = 0\r
-    flash2  : org = 0x00000000, len = 0\r
-    flash3  : org = 0x00000000, len = 0\r
-    flash4  : org = 0x00000000, len = 0\r
-    flash5  : org = 0x00000000, len = 0\r
-    flash6  : org = 0x00000000, len = 0\r
-    flash7  : org = 0x00000000, len = 0\r
-    ram0    : org = 0x20000000, len = 20k\r
-    ram1    : org = 0x00000000, len = 0\r
-    ram2    : org = 0x00000000, len = 0\r
-    ram3    : org = 0x00000000, len = 0\r
-    ram4    : org = 0x00000000, len = 0\r
-    ram5    : org = 0x00000000, len = 0\r
-    ram6    : org = 0x00000000, len = 0\r
-    ram7    : org = 0x00000000, len = 0\r
-}\r
-\r
-/* For each data/text section two region are defined, a virtual region\r
-   and a load region (_LMA suffix).*/\r
-\r
-/* Flash region to be used for exception vectors.*/\r
-REGION_ALIAS("VECTORS_FLASH", flash0);\r
-REGION_ALIAS("VECTORS_FLASH_LMA", flash0);\r
-\r
-/* Flash region to be used for constructors and destructors.*/\r
-REGION_ALIAS("XTORS_FLASH", flash0);\r
-REGION_ALIAS("XTORS_FLASH_LMA", flash0);\r
-\r
-/* Flash region to be used for code text.*/\r
-REGION_ALIAS("TEXT_FLASH", flash0);\r
-REGION_ALIAS("TEXT_FLASH_LMA", flash0);\r
-\r
-/* Flash region to be used for read only data.*/\r
-REGION_ALIAS("RODATA_FLASH", flash0);\r
-REGION_ALIAS("RODATA_FLASH_LMA", flash0);\r
-\r
-/* Flash region to be used for various.*/\r
-REGION_ALIAS("VARIOUS_FLASH", flash0);\r
-REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);\r
-\r
-/* Flash region to be used for RAM(n) initialization data.*/\r
-REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);\r
-\r
-/* RAM region to be used for Main stack. This stack accommodates the processing\r
-   of all exceptions and interrupts.*/\r
-REGION_ALIAS("MAIN_STACK_RAM", ram0);\r
-\r
-/* RAM region to be used for the process stack. This is the stack used by\r
-   the main() function.*/\r
-REGION_ALIAS("PROCESS_STACK_RAM", ram0);\r
-\r
-/* RAM region to be used for data segment.*/\r
-REGION_ALIAS("DATA_RAM", ram0);\r
-REGION_ALIAS("DATA_RAM_LMA", flash0);\r
-\r
-/* RAM region to be used for BSS segment.*/\r
-REGION_ALIAS("BSS_RAM", ram0);\r
-\r
-/* RAM region to be used for the default heap.*/\r
-REGION_ALIAS("HEAP_RAM", ram0);\r
-\r
-/* Generic rules inclusion.*/\r
-INCLUDE rules.ld\r
+/*
+    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/*
+ * ST32F103xB memory setup for use with the maplemini bootloader.
+ * You will have to
+ *     #define CORTEX_VTOR_INIT 0x5000
+ * in your projects chconf.h
+ */
+MEMORY
+{
+    flash0  : org = 0x08002000, len = 128k - 0x2000
+    flash1  : org = 0x00000000, len = 0
+    flash2  : org = 0x00000000, len = 0
+    flash3  : org = 0x00000000, len = 0
+    flash4  : org = 0x00000000, len = 0
+    flash5  : org = 0x00000000, len = 0
+    flash6  : org = 0x00000000, len = 0
+    flash7  : org = 0x00000000, len = 0
+    ram0    : org = 0x20000000, len = 20k
+    ram1    : org = 0x00000000, len = 0
+    ram2    : org = 0x00000000, len = 0
+    ram3    : org = 0x00000000, len = 0
+    ram4    : org = 0x00000000, len = 0
+    ram5    : org = 0x00000000, len = 0
+    ram6    : org = 0x00000000, len = 0
+    ram7    : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+   and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+   of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+   the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/chibios_test/rules.mk b/keyboards/chibios_test/rules.mk
new file mode 100644 (file)
index 0000000..4b5a845
--- /dev/null
@@ -0,0 +1,8 @@
+#BOOTMAGIC_ENABLE = yes        # Virtual DIP switch configuration
+MOUSEKEY_ENABLE ?= yes # Mouse keys
+EXTRAKEY_ENABLE ?= yes # Audio control and System control
+CONSOLE_ENABLE ?= yes  # Console for debug
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes         # USB Nkey Rollover
+CUSTOM_MATRIX ?= yes # Custom matrix file
\ No newline at end of file
index eae38c4b2bcdbccab742299d693940a5bc4e0dc0..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,41 +1,3 @@
-# project specific files
-SRC =  matrix.c \
-           led.c
-
-## chip/board settings
-# the next two should match the directories in
-#  <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F0xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-#  or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F072xB
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-#  or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU  = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
-# This also requires a patch to chibios:
-#   <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Build Options
-#   comment out to disable the options.
-#
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
-endif
+endif
\ No newline at end of file
index 3d877aaa2b38bd0abb414b535547bd7f164107da..faca3defdf0e9b5ae523eacc050c0513df2829c1 100644 (file)
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-#ifndef _MCUCONF_H_\r
-#define _MCUCONF_H_\r
-\r
-/*\r
- * STM32F0xx drivers configuration.\r
- * The following settings override the default settings present in\r
- * the various device driver implementation headers.\r
- * Note that the settings for each driver only have effect if the whole\r
- * driver is enabled in halconf.h.\r
- *\r
- * IRQ priorities:\r
- * 3...0       Lowest...Highest.\r
- *\r
- * DMA priorities:\r
- * 0...3        Lowest...Highest.\r
- */\r
-\r
-#define STM32F0xx_MCUCONF\r
-\r
-/*\r
- * HAL driver system settings.\r
- */\r
-#define STM32_NO_INIT                       FALSE\r
-#define STM32_PVD_ENABLE                    FALSE\r
-#define STM32_PLS                           STM32_PLS_LEV0\r
-#define STM32_HSI_ENABLED                   TRUE\r
-#define STM32_HSI14_ENABLED                 TRUE\r
-#define STM32_HSI48_ENABLED                 FALSE\r
-#define STM32_LSI_ENABLED                   TRUE\r
-#define STM32_HSE_ENABLED                   FALSE\r
-#define STM32_LSE_ENABLED                   FALSE\r
-#define STM32_SW                            STM32_SW_PLL\r
-#define STM32_PLLSRC                        STM32_PLLSRC_HSI_DIV2\r
-#define STM32_PREDIV_VALUE                  1\r
-#define STM32_PLLMUL_VALUE                  12\r
-#define STM32_HPRE                          STM32_HPRE_DIV1\r
-#define STM32_PPRE                          STM32_PPRE_DIV1\r
-#define STM32_ADCSW                         STM32_ADCSW_HSI14\r
-#define STM32_ADCPRE                        STM32_ADCPRE_DIV4\r
-#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK\r
-#define STM32_ADCPRE                        STM32_ADCPRE_DIV4\r
-#define STM32_ADCSW                         STM32_ADCSW_HSI14\r
-#define STM32_USBSW                         STM32_USBSW_HSI48\r
-#define STM32_CECSW                         STM32_CECSW_HSI\r
-#define STM32_I2C1SW                        STM32_I2C1SW_HSI\r
-#define STM32_USART1SW                      STM32_USART1SW_PCLK\r
-#define STM32_RTCSEL                        STM32_RTCSEL_LSI\r
-\r
-/*\r
- * ADC driver system settings.\r
- */\r
-#define STM32_ADC_USE_ADC1                  FALSE\r
-#define STM32_ADC_ADC1_DMA_PRIORITY         2\r
-#define STM32_ADC_IRQ_PRIORITY              2\r
-#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     2\r
-\r
-/*\r
- * EXT driver system settings.\r
- */\r
-#define STM32_EXT_EXTI0_1_IRQ_PRIORITY      3\r
-#define STM32_EXT_EXTI2_3_IRQ_PRIORITY      3\r
-#define STM32_EXT_EXTI4_15_IRQ_PRIORITY     3\r
-#define STM32_EXT_EXTI16_IRQ_PRIORITY       3\r
-#define STM32_EXT_EXTI17_IRQ_PRIORITY       3\r
-\r
-/*\r
- * GPT driver system settings.\r
- */\r
-#define STM32_GPT_USE_TIM1                  FALSE\r
-#define STM32_GPT_USE_TIM2                  FALSE\r
-#define STM32_GPT_USE_TIM3                  FALSE\r
-#define STM32_GPT_USE_TIM14                 FALSE\r
-#define STM32_GPT_TIM1_IRQ_PRIORITY         2\r
-#define STM32_GPT_TIM2_IRQ_PRIORITY         2\r
-#define STM32_GPT_TIM3_IRQ_PRIORITY         2\r
-#define STM32_GPT_TIM14_IRQ_PRIORITY        2\r
-\r
-/*\r
- * I2C driver system settings.\r
- */\r
-#define STM32_I2C_USE_I2C1                  FALSE\r
-#define STM32_I2C_USE_I2C2                  FALSE\r
-#define STM32_I2C_BUSY_TIMEOUT              50\r
-#define STM32_I2C_I2C1_IRQ_PRIORITY         3\r
-#define STM32_I2C_I2C2_IRQ_PRIORITY         3\r
-#define STM32_I2C_USE_DMA                   TRUE\r
-#define STM32_I2C_I2C1_DMA_PRIORITY         1\r
-#define STM32_I2C_I2C2_DMA_PRIORITY         1\r
-#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")\r
-\r
-/*\r
- * ICU driver system settings.\r
- */\r
-#define STM32_ICU_USE_TIM1                  FALSE\r
-#define STM32_ICU_USE_TIM2                  FALSE\r
-#define STM32_ICU_USE_TIM3                  FALSE\r
-#define STM32_ICU_TIM1_IRQ_PRIORITY         3\r
-#define STM32_ICU_TIM2_IRQ_PRIORITY         3\r
-#define STM32_ICU_TIM3_IRQ_PRIORITY         3\r
-\r
-/*\r
- * PWM driver system settings.\r
- */\r
-#define STM32_PWM_USE_ADVANCED              FALSE\r
-#define STM32_PWM_USE_TIM1                  FALSE\r
-#define STM32_PWM_USE_TIM2                  FALSE\r
-#define STM32_PWM_USE_TIM3                  FALSE\r
-#define STM32_PWM_TIM1_IRQ_PRIORITY         3\r
-#define STM32_PWM_TIM2_IRQ_PRIORITY         3\r
-#define STM32_PWM_TIM3_IRQ_PRIORITY         3\r
-\r
-/*\r
- * SERIAL driver system settings.\r
- */\r
-#define STM32_SERIAL_USE_USART1             FALSE\r
-#define STM32_SERIAL_USE_USART2             FALSE\r
-#define STM32_SERIAL_USART1_PRIORITY        3\r
-#define STM32_SERIAL_USART2_PRIORITY        3\r
-\r
-/*\r
- * SPI driver system settings.\r
- */\r
-#define STM32_SPI_USE_SPI1                  FALSE\r
-#define STM32_SPI_USE_SPI2                  FALSE\r
-#define STM32_SPI_SPI1_DMA_PRIORITY         1\r
-#define STM32_SPI_SPI2_DMA_PRIORITY         1\r
-#define STM32_SPI_SPI1_IRQ_PRIORITY         2\r
-#define STM32_SPI_SPI2_IRQ_PRIORITY         2\r
-#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")\r
-\r
-/*\r
- * ST driver system settings.\r
- */\r
-#define STM32_ST_IRQ_PRIORITY               2\r
-#define STM32_ST_USE_TIMER                  2\r
-\r
-/*\r
- * UART driver system settings.\r
- */\r
-#define STM32_UART_USE_USART1               FALSE\r
-#define STM32_UART_USE_USART2               FALSE\r
-#define STM32_UART_USART1_IRQ_PRIORITY      3\r
-#define STM32_UART_USART2_IRQ_PRIORITY      3\r
-#define STM32_UART_USART1_DMA_PRIORITY      0\r
-#define STM32_UART_USART2_DMA_PRIORITY      0\r
-#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")\r
-\r
-/*\r
- * USB driver system settings.\r
- */\r
-#define STM32_USB_USE_USB1                  TRUE\r
-#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE\r
-#define STM32_USB_USB1_LP_IRQ_PRIORITY      3\r
-\r
-#endif /* _MCUCONF_H_ */\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0       Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3        Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT                       FALSE
+#define STM32_PVD_ENABLE                    FALSE
+#define STM32_PLS                           STM32_PLS_LEV0
+#define STM32_HSI_ENABLED                   TRUE
+#define STM32_HSI14_ENABLED                 TRUE
+#define STM32_HSI48_ENABLED                 FALSE
+#define STM32_LSI_ENABLED                   TRUE
+#define STM32_HSE_ENABLED                   FALSE
+#define STM32_LSE_ENABLED                   FALSE
+#define STM32_SW                            STM32_SW_PLL
+#define STM32_PLLSRC                        STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE                  1
+#define STM32_PLLMUL_VALUE                  12
+#define STM32_HPRE                          STM32_HPRE_DIV1
+#define STM32_PPRE                          STM32_PPRE_DIV1
+#define STM32_ADCSW                         STM32_ADCSW_HSI14
+#define STM32_ADCPRE                        STM32_ADCPRE_DIV4
+#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE                        STM32_ADCPRE_DIV4
+#define STM32_ADCSW                         STM32_ADCSW_HSI14
+#define STM32_USBSW                         STM32_USBSW_HSI48
+#define STM32_CECSW                         STM32_CECSW_HSI
+#define STM32_I2C1SW                        STM32_I2C1SW_HSI
+#define STM32_USART1SW                      STM32_USART1SW_PCLK
+#define STM32_RTCSEL                        STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1                  FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY         2
+#define STM32_ADC_IRQ_PRIORITY              2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY      3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY      3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY     3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY       3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY       3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1                  FALSE
+#define STM32_GPT_USE_TIM2                  FALSE
+#define STM32_GPT_USE_TIM3                  FALSE
+#define STM32_GPT_USE_TIM14                 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY         2
+#define STM32_GPT_TIM2_IRQ_PRIORITY         2
+#define STM32_GPT_TIM3_IRQ_PRIORITY         2
+#define STM32_GPT_TIM14_IRQ_PRIORITY        2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1                  FALSE
+#define STM32_I2C_USE_I2C2                  FALSE
+#define STM32_I2C_BUSY_TIMEOUT              50
+#define STM32_I2C_I2C1_IRQ_PRIORITY         3
+#define STM32_I2C_I2C2_IRQ_PRIORITY         3
+#define STM32_I2C_USE_DMA                   TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY         1
+#define STM32_I2C_I2C2_DMA_PRIORITY         1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1                  FALSE
+#define STM32_ICU_USE_TIM2                  FALSE
+#define STM32_ICU_USE_TIM3                  FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY         3
+#define STM32_ICU_TIM2_IRQ_PRIORITY         3
+#define STM32_ICU_TIM3_IRQ_PRIORITY         3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED              FALSE
+#define STM32_PWM_USE_TIM1                  FALSE
+#define STM32_PWM_USE_TIM2                  FALSE
+#define STM32_PWM_USE_TIM3                  FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY         3
+#define STM32_PWM_TIM2_IRQ_PRIORITY         3
+#define STM32_PWM_TIM3_IRQ_PRIORITY         3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1             FALSE
+#define STM32_SERIAL_USE_USART2             FALSE
+#define STM32_SERIAL_USART1_PRIORITY        3
+#define STM32_SERIAL_USART2_PRIORITY        3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1                  FALSE
+#define STM32_SPI_USE_SPI2                  FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY         1
+#define STM32_SPI_SPI2_DMA_PRIORITY         1
+#define STM32_SPI_SPI1_IRQ_PRIORITY         2
+#define STM32_SPI_SPI2_IRQ_PRIORITY         2
+#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY               2
+#define STM32_ST_USE_TIMER                  2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1               FALSE
+#define STM32_UART_USE_USART2               FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY      3
+#define STM32_UART_USART2_IRQ_PRIORITY      3
+#define STM32_UART_USART1_DMA_PRIORITY      0
+#define STM32_UART_USART2_DMA_PRIORITY      0
+#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1                  TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY      3
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/chibios_test/stm32_f072_onekey/rules.mk b/keyboards/chibios_test/stm32_f072_onekey/rules.mk
new file mode 100644 (file)
index 0000000..eae38c4
--- /dev/null
@@ -0,0 +1,41 @@
+# project specific files
+SRC =  matrix.c \
+           led.c
+
+## chip/board settings
+# the next two should match the directories in
+#  <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F0xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#  or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F072xB
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f0xx
+# it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = ST_STM32F072B_DISCOVERY
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU  = cortex-m0
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 6
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+#   <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+
+# Build Options
+#   comment out to disable the options.
+#
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
index 307ca5b198ef28222c00f8f3b4b1cc357f9776fa..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,52 +1,3 @@
-# project specific files
-SRC =  matrix.c \
-           led.c
-
-# GENERIC STM32F103C8T6 board - stm32duino bootloader
-OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
-MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
-BOARD = GENERIC_STM32_F103
-
-# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-# MAPLE MINI
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
-# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
-# BOARD = MAPLEMINI_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-#  <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-#  or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-#  or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU  = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
-# This also requires a patch to chibios:
-#   <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
-endif
+endif
\ No newline at end of file
index 626332a6aa28bf10f4d299428cbbeb7c190ad86b..276829216ee8e6e70e5ee228c0a6084259baf6ab 100644 (file)
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-#ifndef _MCUCONF_H_\r
-#define _MCUCONF_H_\r
-\r
-#define STM32F103_MCUCONF\r
-\r
-/*\r
- * STM32F103 drivers configuration.\r
- * The following settings override the default settings present in\r
- * the various device driver implementation headers.\r
- * Note that the settings for each driver only have effect if the whole\r
- * driver is enabled in halconf.h.\r
- *\r
- * IRQ priorities:\r
- * 15...0       Lowest...Highest.\r
- *\r
- * DMA priorities:\r
- * 0...3        Lowest...Highest.\r
- */\r
-\r
-/*\r
- * HAL driver system settings.\r
- */\r
-#define STM32_NO_INIT                       FALSE\r
-#define STM32_HSI_ENABLED                   TRUE\r
-#define STM32_LSI_ENABLED                   FALSE\r
-#define STM32_HSE_ENABLED                   TRUE\r
-#define STM32_LSE_ENABLED                   FALSE\r
-#define STM32_SW                            STM32_SW_PLL\r
-#define STM32_PLLSRC                        STM32_PLLSRC_HSE\r
-#define STM32_PLLXTPRE                      STM32_PLLXTPRE_DIV1\r
-#define STM32_PLLMUL_VALUE                  9\r
-#define STM32_HPRE                          STM32_HPRE_DIV1\r
-#define STM32_PPRE1                         STM32_PPRE1_DIV2\r
-#define STM32_PPRE2                         STM32_PPRE2_DIV2\r
-#define STM32_ADCPRE                        STM32_ADCPRE_DIV4\r
-#define STM32_USB_CLOCK_REQUIRED            TRUE\r
-#define STM32_USBPRE                        STM32_USBPRE_DIV1P5\r
-#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK\r
-#define STM32_RTCSEL                        STM32_RTCSEL_HSEDIV\r
-#define STM32_PVD_ENABLE                    FALSE\r
-#define STM32_PLS                           STM32_PLS_LEV0\r
-\r
-/*\r
- * ADC driver system settings.\r
- */\r
-#define STM32_ADC_USE_ADC1                  FALSE\r
-#define STM32_ADC_ADC1_DMA_PRIORITY         2\r
-#define STM32_ADC_ADC1_IRQ_PRIORITY         6\r
-\r
-/*\r
- * CAN driver system settings.\r
- */\r
-#define STM32_CAN_USE_CAN1                  FALSE\r
-#define STM32_CAN_CAN1_IRQ_PRIORITY         11\r
-\r
-/*\r
- * EXT driver system settings.\r
- */\r
-#define STM32_EXT_EXTI0_IRQ_PRIORITY        6\r
-#define STM32_EXT_EXTI1_IRQ_PRIORITY        6\r
-#define STM32_EXT_EXTI2_IRQ_PRIORITY        6\r
-#define STM32_EXT_EXTI3_IRQ_PRIORITY        6\r
-#define STM32_EXT_EXTI4_IRQ_PRIORITY        6\r
-#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6\r
-#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6\r
-#define STM32_EXT_EXTI16_IRQ_PRIORITY       6\r
-#define STM32_EXT_EXTI17_IRQ_PRIORITY       6\r
-#define STM32_EXT_EXTI18_IRQ_PRIORITY       6\r
-#define STM32_EXT_EXTI19_IRQ_PRIORITY       6\r
-\r
-/*\r
- * GPT driver system settings.\r
- */\r
-#define STM32_GPT_USE_TIM1                  FALSE\r
-#define STM32_GPT_USE_TIM2                  FALSE\r
-#define STM32_GPT_USE_TIM3                  FALSE\r
-#define STM32_GPT_USE_TIM4                  FALSE\r
-#define STM32_GPT_USE_TIM5                  FALSE\r
-#define STM32_GPT_USE_TIM8                  FALSE\r
-#define STM32_GPT_TIM1_IRQ_PRIORITY         7\r
-#define STM32_GPT_TIM2_IRQ_PRIORITY         7\r
-#define STM32_GPT_TIM3_IRQ_PRIORITY         7\r
-#define STM32_GPT_TIM4_IRQ_PRIORITY         7\r
-#define STM32_GPT_TIM5_IRQ_PRIORITY         7\r
-#define STM32_GPT_TIM8_IRQ_PRIORITY         7\r
-\r
-/*\r
- * I2C driver system settings.\r
- */\r
-#define STM32_I2C_USE_I2C1                  FALSE\r
-#define STM32_I2C_USE_I2C2                  FALSE\r
-#define STM32_I2C_BUSY_TIMEOUT              50\r
-#define STM32_I2C_I2C1_IRQ_PRIORITY         5\r
-#define STM32_I2C_I2C2_IRQ_PRIORITY         5\r
-#define STM32_I2C_I2C1_DMA_PRIORITY         3\r
-#define STM32_I2C_I2C2_DMA_PRIORITY         3\r
-#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")\r
-\r
-/*\r
- * ICU driver system settings.\r
- */\r
-#define STM32_ICU_USE_TIM1                  FALSE\r
-#define STM32_ICU_USE_TIM2                  FALSE\r
-#define STM32_ICU_USE_TIM3                  FALSE\r
-#define STM32_ICU_USE_TIM4                  FALSE\r
-#define STM32_ICU_USE_TIM5                  FALSE\r
-#define STM32_ICU_USE_TIM8                  FALSE\r
-#define STM32_ICU_TIM1_IRQ_PRIORITY         7\r
-#define STM32_ICU_TIM2_IRQ_PRIORITY         7\r
-#define STM32_ICU_TIM3_IRQ_PRIORITY         7\r
-#define STM32_ICU_TIM4_IRQ_PRIORITY         7\r
-#define STM32_ICU_TIM5_IRQ_PRIORITY         7\r
-#define STM32_ICU_TIM8_IRQ_PRIORITY         7\r
-\r
-/*\r
- * PWM driver system settings.\r
- */\r
-#define STM32_PWM_USE_ADVANCED              FALSE\r
-#define STM32_PWM_USE_TIM1                  FALSE\r
-#define STM32_PWM_USE_TIM2                  FALSE\r
-#define STM32_PWM_USE_TIM3                  FALSE\r
-#define STM32_PWM_USE_TIM4                  FALSE\r
-#define STM32_PWM_USE_TIM5                  FALSE\r
-#define STM32_PWM_USE_TIM8                  FALSE\r
-#define STM32_PWM_TIM1_IRQ_PRIORITY         7\r
-#define STM32_PWM_TIM2_IRQ_PRIORITY         7\r
-#define STM32_PWM_TIM3_IRQ_PRIORITY         7\r
-#define STM32_PWM_TIM4_IRQ_PRIORITY         7\r
-#define STM32_PWM_TIM5_IRQ_PRIORITY         7\r
-#define STM32_PWM_TIM8_IRQ_PRIORITY         7\r
-\r
-/*\r
- * RTC driver system settings.\r
- */\r
-#define STM32_RTC_IRQ_PRIORITY              15\r
-\r
-/*\r
- * SERIAL driver system settings.\r
- */\r
-#define STM32_SERIAL_USE_USART1             FALSE\r
-#define STM32_SERIAL_USE_USART2             FALSE\r
-#define STM32_SERIAL_USE_USART3             FALSE\r
-#define STM32_SERIAL_USE_UART4              FALSE\r
-#define STM32_SERIAL_USE_UART5              FALSE\r
-#define STM32_SERIAL_USART1_PRIORITY        12\r
-#define STM32_SERIAL_USART2_PRIORITY        12\r
-#define STM32_SERIAL_USART3_PRIORITY        12\r
-#define STM32_SERIAL_UART4_PRIORITY         12\r
-#define STM32_SERIAL_UART5_PRIORITY         12\r
-\r
-/*\r
- * SPI driver system settings.\r
- */\r
-#define STM32_SPI_USE_SPI1                  FALSE\r
-#define STM32_SPI_USE_SPI2                  FALSE\r
-#define STM32_SPI_USE_SPI3                  FALSE\r
-#define STM32_SPI_SPI1_DMA_PRIORITY         1\r
-#define STM32_SPI_SPI2_DMA_PRIORITY         1\r
-#define STM32_SPI_SPI3_DMA_PRIORITY         1\r
-#define STM32_SPI_SPI1_IRQ_PRIORITY         10\r
-#define STM32_SPI_SPI2_IRQ_PRIORITY         10\r
-#define STM32_SPI_SPI3_IRQ_PRIORITY         10\r
-#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")\r
-\r
-/*\r
- * ST driver system settings.\r
- */\r
-#define STM32_ST_IRQ_PRIORITY               8\r
-#define STM32_ST_USE_TIMER                  2\r
-\r
-/*\r
- * UART driver system settings.\r
- */\r
-#define STM32_UART_USE_USART1               FALSE\r
-#define STM32_UART_USE_USART2               FALSE\r
-#define STM32_UART_USE_USART3               FALSE\r
-#define STM32_UART_USART1_IRQ_PRIORITY      12\r
-#define STM32_UART_USART2_IRQ_PRIORITY      12\r
-#define STM32_UART_USART3_IRQ_PRIORITY      12\r
-#define STM32_UART_USART1_DMA_PRIORITY      0\r
-#define STM32_UART_USART2_DMA_PRIORITY      0\r
-#define STM32_UART_USART3_DMA_PRIORITY      0\r
-#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")\r
-\r
-/*\r
- * USB driver system settings.\r
- */\r
-#define STM32_USB_USE_USB1                  TRUE\r
-#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE\r
-#define STM32_USB_USB1_HP_IRQ_PRIORITY      13\r
-#define STM32_USB_USB1_LP_IRQ_PRIORITY      14\r
-\r
-#endif /* _MCUCONF_H_ */\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0       Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3        Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT                       FALSE
+#define STM32_HSI_ENABLED                   TRUE
+#define STM32_LSI_ENABLED                   FALSE
+#define STM32_HSE_ENABLED                   TRUE
+#define STM32_LSE_ENABLED                   FALSE
+#define STM32_SW                            STM32_SW_PLL
+#define STM32_PLLSRC                        STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE                      STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE                  9
+#define STM32_HPRE                          STM32_HPRE_DIV1
+#define STM32_PPRE1                         STM32_PPRE1_DIV2
+#define STM32_PPRE2                         STM32_PPRE2_DIV2
+#define STM32_ADCPRE                        STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED            TRUE
+#define STM32_USBPRE                        STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL                        STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL                        STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE                    FALSE
+#define STM32_PLS                           STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1                  FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY         2
+#define STM32_ADC_ADC1_IRQ_PRIORITY         6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1                  FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY         11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY        6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY      6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY    6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY       6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1                  FALSE
+#define STM32_GPT_USE_TIM2                  FALSE
+#define STM32_GPT_USE_TIM3                  FALSE
+#define STM32_GPT_USE_TIM4                  FALSE
+#define STM32_GPT_USE_TIM5                  FALSE
+#define STM32_GPT_USE_TIM8                  FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY         7
+#define STM32_GPT_TIM2_IRQ_PRIORITY         7
+#define STM32_GPT_TIM3_IRQ_PRIORITY         7
+#define STM32_GPT_TIM4_IRQ_PRIORITY         7
+#define STM32_GPT_TIM5_IRQ_PRIORITY         7
+#define STM32_GPT_TIM8_IRQ_PRIORITY         7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1                  FALSE
+#define STM32_I2C_USE_I2C2                  FALSE
+#define STM32_I2C_BUSY_TIMEOUT              50
+#define STM32_I2C_I2C1_IRQ_PRIORITY         5
+#define STM32_I2C_I2C2_IRQ_PRIORITY         5
+#define STM32_I2C_I2C1_DMA_PRIORITY         3
+#define STM32_I2C_I2C2_DMA_PRIORITY         3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1                  FALSE
+#define STM32_ICU_USE_TIM2                  FALSE
+#define STM32_ICU_USE_TIM3                  FALSE
+#define STM32_ICU_USE_TIM4                  FALSE
+#define STM32_ICU_USE_TIM5                  FALSE
+#define STM32_ICU_USE_TIM8                  FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY         7
+#define STM32_ICU_TIM2_IRQ_PRIORITY         7
+#define STM32_ICU_TIM3_IRQ_PRIORITY         7
+#define STM32_ICU_TIM4_IRQ_PRIORITY         7
+#define STM32_ICU_TIM5_IRQ_PRIORITY         7
+#define STM32_ICU_TIM8_IRQ_PRIORITY         7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED              FALSE
+#define STM32_PWM_USE_TIM1                  FALSE
+#define STM32_PWM_USE_TIM2                  FALSE
+#define STM32_PWM_USE_TIM3                  FALSE
+#define STM32_PWM_USE_TIM4                  FALSE
+#define STM32_PWM_USE_TIM5                  FALSE
+#define STM32_PWM_USE_TIM8                  FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY         7
+#define STM32_PWM_TIM2_IRQ_PRIORITY         7
+#define STM32_PWM_TIM3_IRQ_PRIORITY         7
+#define STM32_PWM_TIM4_IRQ_PRIORITY         7
+#define STM32_PWM_TIM5_IRQ_PRIORITY         7
+#define STM32_PWM_TIM8_IRQ_PRIORITY         7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY              15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1             FALSE
+#define STM32_SERIAL_USE_USART2             FALSE
+#define STM32_SERIAL_USE_USART3             FALSE
+#define STM32_SERIAL_USE_UART4              FALSE
+#define STM32_SERIAL_USE_UART5              FALSE
+#define STM32_SERIAL_USART1_PRIORITY        12
+#define STM32_SERIAL_USART2_PRIORITY        12
+#define STM32_SERIAL_USART3_PRIORITY        12
+#define STM32_SERIAL_UART4_PRIORITY         12
+#define STM32_SERIAL_UART5_PRIORITY         12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1                  FALSE
+#define STM32_SPI_USE_SPI2                  FALSE
+#define STM32_SPI_USE_SPI3                  FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY         1
+#define STM32_SPI_SPI2_DMA_PRIORITY         1
+#define STM32_SPI_SPI3_DMA_PRIORITY         1
+#define STM32_SPI_SPI1_IRQ_PRIORITY         10
+#define STM32_SPI_SPI2_IRQ_PRIORITY         10
+#define STM32_SPI_SPI3_IRQ_PRIORITY         10
+#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY               8
+#define STM32_ST_USE_TIMER                  2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1               FALSE
+#define STM32_UART_USE_USART2               FALSE
+#define STM32_UART_USE_USART3               FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY      12
+#define STM32_UART_USART2_IRQ_PRIORITY      12
+#define STM32_UART_USART3_IRQ_PRIORITY      12
+#define STM32_UART_USART1_DMA_PRIORITY      0
+#define STM32_UART_USART2_DMA_PRIORITY      0
+#define STM32_UART_USART3_DMA_PRIORITY      0
+#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1                  TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY      13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY      14
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/chibios_test/stm32_f103_onekey/rules.mk b/keyboards/chibios_test/stm32_f103_onekey/rules.mk
new file mode 100644 (file)
index 0000000..307ca5b
--- /dev/null
@@ -0,0 +1,52 @@
+# project specific files
+SRC =  matrix.c \
+           led.c
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
+
+# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
+# OPT_DEFS =
+# MCU_LDSCRIPT = STM32F103x8
+# BOARD = GENERIC_STM32_F103
+
+# MAPLE MINI
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
+# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
+# BOARD = MAPLEMINI_STM32_F103
+
+## chip/board settings
+# the next two should match the directories in
+#  <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F1xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#  or <this_dir>/ld/
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f1xx
+# it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU  = cortex-m3
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+#   <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
index 43ea9d82d93830d3786e57b76160a2fea1401135..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,49 +1,3 @@
-# project specific files
-SRC =  matrix.c \
-           led.c
-
-## chip/board settings
-# - the next two should match the directories in
-#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-# - For Teensies, FAMILY = KINETIS and SERIES is either
-#   KL2x (LC) or K20x (3.0,3.1,3.2).
-MCU_FAMILY = KINETIS
-MCU_SERIES = KL2x
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-#   or <this_dir>/ld/
-# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
-# - LDSCRIPT =
-#   - MKL26Z64 for Teensy LC
-#   - MK20DX128 for Teensy 3.0
-#   - MK20DX256 for Teensy 3.1 and 3.2
-MCU_LDSCRIPT = MKL26Z64
-
-# Startup code to use
-#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-# - STARTUP =
-#   - kl2x for Teensy LC
-#   - k20x5 for Teensy 3.0
-#   - k20x7 for Teensy 3.1 and 3.2
-MCU_STARTUP = kl2x
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-#  or <this_dir>/boards
-# - BOARD =
-#   - PJRC_TEENSY_LC for Teensy LC
-#   - PJRC_TEENSY_3 for Teensy 3.0
-#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
-BOARD = PJRC_TEENSY_LC
-
-# Cortex version
-# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
-MCU  = cortex-m0plus
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-# I.e. 6 for Teensy LC; 7 for Teensy 3.x
-ARMV = 6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
 endif
\ No newline at end of file
index cb36996c33144933b1462787c22248c6dd23b958..3294ac7eeef438ce9137aed5c71f212b6610350f 100644 (file)
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-/**\r
- * @file    templates/chconf.h\r
- * @brief   Configuration file template.\r
- * @details A copy of this file must be placed in each project directory, it\r
- *          contains the application specific kernel settings.\r
- *\r
- * @addtogroup config\r
- * @details Kernel related settings and hooks.\r
- * @{\r
- */\r
-\r
-#ifndef CHCONF_H\r
-#define CHCONF_H\r
-\r
-#define _CHIBIOS_RT_CONF_\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name System timers settings\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   System time counter resolution.\r
- * @note    Allowed values are 16 or 32 bits.\r
- */\r
-#define CH_CFG_ST_RESOLUTION                32\r
-\r
-/**\r
- * @brief   System tick frequency.\r
- * @details Frequency of the system timer that drives the system ticks. This\r
- *          setting also defines the system tick time unit.\r
- */\r
-#define CH_CFG_ST_FREQUENCY                 1000\r
-\r
-/**\r
- * @brief   Time delta constant for the tick-less mode.\r
- * @note    If this value is zero then the system uses the classic\r
- *          periodic tick. This value represents the minimum number\r
- *          of ticks that is safe to specify in a timeout directive.\r
- *          The value one is not valid, timeouts are rounded up to\r
- *          this value.\r
- */\r
-#define CH_CFG_ST_TIMEDELTA                 0\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Kernel parameters and options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Round robin interval.\r
- * @details This constant is the number of system ticks allowed for the\r
- *          threads before preemption occurs. Setting this value to zero\r
- *          disables the preemption for threads with equal priority and the\r
- *          round robin becomes cooperative. Note that higher priority\r
- *          threads can still preempt, the kernel is always preemptive.\r
- * @note    Disabling the round robin preemption makes the kernel more compact\r
- *          and generally faster.\r
- * @note    The round robin preemption is not supported in tickless mode and\r
- *          must be set to zero in that case.\r
- */\r
-#define CH_CFG_TIME_QUANTUM                 20\r
-\r
-/**\r
- * @brief   Managed RAM size.\r
- * @details Size of the RAM area to be managed by the OS. If set to zero\r
- *          then the whole available RAM is used. The core memory is made\r
- *          available to the heap allocator and/or can be used directly through\r
- *          the simplified core memory allocator.\r
- *\r
- * @note    In order to let the OS manage the whole RAM the linker script must\r
- *          provide the @p __heap_base__ and @p __heap_end__ symbols.\r
- * @note    Requires @p CH_CFG_USE_MEMCORE.\r
- */\r
-#define CH_CFG_MEMCORE_SIZE                 0\r
-\r
-/**\r
- * @brief   Idle thread automatic spawn suppression.\r
- * @details When this option is activated the function @p chSysInit()\r
- *          does not spawn the idle thread. The application @p main()\r
- *          function becomes the idle thread and must implement an\r
- *          infinite loop.\r
- */\r
-#define CH_CFG_NO_IDLE_THREAD               FALSE\r
-\r
-/* Use __WFI in the idle thread for waiting. Does lower the power\r
- * consumption. */\r
-#define CORTEX_ENABLE_WFI_IDLE              TRUE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Performance options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   OS optimization.\r
- * @details If enabled then time efficient rather than space efficient code\r
- *          is used when two possible implementations exist.\r
- *\r
- * @note    This is not related to the compiler optimization options.\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_OPTIMIZE_SPEED               TRUE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Subsystem options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Time Measurement APIs.\r
- * @details If enabled then the time measurement APIs are included in\r
- *          the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_TM                       FALSE\r
-\r
-/**\r
- * @brief   Threads registry APIs.\r
- * @details If enabled then the registry APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_REGISTRY                 TRUE\r
-\r
-/**\r
- * @brief   Threads synchronization APIs.\r
- * @details If enabled then the @p chThdWait() function is included in\r
- *          the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_WAITEXIT                 TRUE\r
-\r
-/**\r
- * @brief   Semaphores APIs.\r
- * @details If enabled then the Semaphores APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_SEMAPHORES               TRUE\r
-\r
-/**\r
- * @brief   Semaphores queuing mode.\r
- * @details If enabled then the threads are enqueued on semaphores by\r
- *          priority rather than in FIFO order.\r
- *\r
- * @note    The default is @p FALSE. Enable this if you have special\r
- *          requirements.\r
- * @note    Requires @p CH_CFG_USE_SEMAPHORES.\r
- */\r
-#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE\r
-\r
-/**\r
- * @brief   Mutexes APIs.\r
- * @details If enabled then the mutexes APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MUTEXES                  TRUE\r
-\r
-/**\r
- * @brief   Enables recursive behavior on mutexes.\r
- * @note    Recursive mutexes are heavier and have an increased\r
- *          memory footprint.\r
- *\r
- * @note    The default is @p FALSE.\r
- * @note    Requires @p CH_CFG_USE_MUTEXES.\r
- */\r
-#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE\r
-\r
-/**\r
- * @brief   Conditional Variables APIs.\r
- * @details If enabled then the conditional variables APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_MUTEXES.\r
- */\r
-#define CH_CFG_USE_CONDVARS                 TRUE\r
-\r
-/**\r
- * @brief   Conditional Variables APIs with timeout.\r
- * @details If enabled then the conditional variables APIs with timeout\r
- *          specification are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_CONDVARS.\r
- */\r
-#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE\r
-\r
-/**\r
- * @brief   Events Flags APIs.\r
- * @details If enabled then the event flags APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_EVENTS                   TRUE\r
-\r
-/**\r
- * @brief   Events Flags APIs with timeout.\r
- * @details If enabled then the events APIs with timeout specification\r
- *          are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_EVENTS.\r
- */\r
-#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE\r
-\r
-/**\r
- * @brief   Synchronous Messages APIs.\r
- * @details If enabled then the synchronous messages APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MESSAGES                 TRUE\r
-\r
-/**\r
- * @brief   Synchronous Messages queuing mode.\r
- * @details If enabled then messages are served by priority rather than in\r
- *          FIFO order.\r
- *\r
- * @note    The default is @p FALSE. Enable this if you have special\r
- *          requirements.\r
- * @note    Requires @p CH_CFG_USE_MESSAGES.\r
- */\r
-#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE\r
-\r
-/**\r
- * @brief   Mailboxes APIs.\r
- * @details If enabled then the asynchronous messages (mailboxes) APIs are\r
- *          included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_SEMAPHORES.\r
- */\r
-#define CH_CFG_USE_MAILBOXES                TRUE\r
-\r
-/**\r
- * @brief   Core Memory Manager APIs.\r
- * @details If enabled then the core memory manager APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MEMCORE                  TRUE\r
-\r
-/**\r
- * @brief   Heap Allocator APIs.\r
- * @details If enabled then the memory heap allocator APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or\r
- *          @p CH_CFG_USE_SEMAPHORES.\r
- * @note    Mutexes are recommended.\r
- */\r
-#define CH_CFG_USE_HEAP                     TRUE\r
-\r
-/**\r
- * @brief   Memory Pools Allocator APIs.\r
- * @details If enabled then the memory pools allocator APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MEMPOOLS                 TRUE\r
-\r
-/**\r
- * @brief   Dynamic Threads APIs.\r
- * @details If enabled then the dynamic threads creation APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_WAITEXIT.\r
- * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.\r
- */\r
-#define CH_CFG_USE_DYNAMIC                  TRUE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Debug options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Debug option, kernel statistics.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_STATISTICS                   FALSE\r
-\r
-/**\r
- * @brief   Debug option, system state check.\r
- * @details If enabled the correct call protocol for system APIs is checked\r
- *          at runtime.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_SYSTEM_STATE_CHECK           TRUE\r
-\r
-/**\r
- * @brief   Debug option, parameters checks.\r
- * @details If enabled then the checks on the API functions input\r
- *          parameters are activated.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_ENABLE_CHECKS                TRUE\r
-\r
-/**\r
- * @brief   Debug option, consistency checks.\r
- * @details If enabled then all the assertions in the kernel code are\r
- *          activated. This includes consistency checks inside the kernel,\r
- *          runtime anomalies and port-defined checks.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_ENABLE_ASSERTS               TRUE\r
-\r
-/**\r
- * @brief   Debug option, trace buffer.\r
- * @details If enabled then the trace buffer is activated.\r
- *\r
- * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.\r
- */\r
-#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED\r
-\r
-/**\r
- * @brief   Trace buffer entries.\r
- * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is\r
- *          different from @p CH_DBG_TRACE_MASK_DISABLED.\r
- */\r
-#define CH_DBG_TRACE_BUFFER_SIZE            128\r
-\r
-/**\r
- * @brief   Debug option, stack checks.\r
- * @details If enabled then a runtime stack check is performed.\r
- *\r
- * @note    The default is @p FALSE.\r
- * @note    The stack check is performed in a architecture/port dependent way.\r
- *          It may not be implemented or some ports.\r
- * @note    The default failure mode is to halt the system with the global\r
- *          @p panic_msg variable set to @p NULL.\r
- */\r
-#define CH_DBG_ENABLE_STACK_CHECK           TRUE\r
-\r
-/**\r
- * @brief   Debug option, stacks initialization.\r
- * @details If enabled then the threads working area is filled with a byte\r
- *          value when a thread is created. This can be useful for the\r
- *          runtime measurement of the used stack.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_FILL_THREADS                 TRUE\r
-\r
-/**\r
- * @brief   Debug option, threads profiling.\r
- * @details If enabled then a field is added to the @p thread_t structure that\r
- *          counts the system ticks occurred while executing the thread.\r
- *\r
- * @note    The default is @p FALSE.\r
- * @note    This debug option is not currently compatible with the\r
- *          tickless mode.\r
- */\r
-#define CH_DBG_THREADS_PROFILING            FALSE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Kernel hooks\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Threads descriptor structure extension.\r
- * @details User fields added to the end of the @p thread_t structure.\r
- */\r
-#define CH_CFG_THREAD_EXTRA_FIELDS                                          \\r
-  /* Add threads custom fields here.*/\r
-\r
-/**\r
- * @brief   Threads initialization hook.\r
- * @details User initialization code added to the @p chThdInit() API.\r
- *\r
- * @note    It is invoked from within @p chThdInit() and implicitly from all\r
- *          the threads creation APIs.\r
- */\r
-#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \\r
-  /* Add threads initialization code here.*/                                \\r
-}\r
-\r
-/**\r
- * @brief   Threads finalization hook.\r
- * @details User finalization code added to the @p chThdExit() API.\r
- */\r
-#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \\r
-  /* Add threads finalization code here.*/                                  \\r
-}\r
-\r
-/**\r
- * @brief   Context switch hook.\r
- * @details This hook is invoked just before switching between threads.\r
- */\r
-#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \\r
-  /* Context switch code here.*/                                            \\r
-}\r
-\r
-/**\r
- * @brief   ISR enter hook.\r
- */\r
-#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \\r
-  /* IRQ prologue code here.*/                                              \\r
-}\r
-\r
-/**\r
- * @brief   ISR exit hook.\r
- */\r
-#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \\r
-  /* IRQ epilogue code here.*/                                              \\r
-}\r
-\r
-/**\r
- * @brief   Idle thread enter hook.\r
- * @note    This hook is invoked within a critical zone, no OS functions\r
- *          should be invoked from here.\r
- * @note    This macro can be used to activate a power saving mode.\r
- */\r
-#define CH_CFG_IDLE_ENTER_HOOK() {                                          \\r
-  /* Idle-enter code here.*/                                                \\r
-}\r
-\r
-/**\r
- * @brief   Idle thread leave hook.\r
- * @note    This hook is invoked within a critical zone, no OS functions\r
- *          should be invoked from here.\r
- * @note    This macro can be used to deactivate a power saving mode.\r
- */\r
-#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \\r
-  /* Idle-leave code here.*/                                                \\r
-}\r
-\r
-/**\r
- * @brief   Idle Loop hook.\r
- * @details This hook is continuously invoked by the idle thread loop.\r
- */\r
-#define CH_CFG_IDLE_LOOP_HOOK() {                                           \\r
-  /* Idle loop code here.*/                                                 \\r
-}\r
-\r
-/**\r
- * @brief   System tick event hook.\r
- * @details This hook is invoked in the system tick handler immediately\r
- *          after processing the virtual timers queue.\r
- */\r
-#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \\r
-  /* System tick event code here.*/                                         \\r
-}\r
-\r
-/**\r
- * @brief   System halt hook.\r
- * @details This hook is invoked in case to a system halting error before\r
- *          the system is halted.\r
- */\r
-#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \\r
-  /* System halt code here.*/                                               \\r
-}\r
-\r
-/**\r
- * @brief   Trace hook.\r
- * @details This hook is invoked each time a new record is written in the\r
- *          trace buffer.\r
- */\r
-#define CH_CFG_TRACE_HOOK(tep) {                                            \\r
-  /* Trace code here.*/                                                     \\r
-}\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/* Port-specific settings (override port settings defaulted in chcore.h).    */\r
-/*===========================================================================*/\r
-\r
-#endif  /* CHCONF_H */\r
-\r
-/** @} */\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/**
+ * @file    templates/chconf.h
+ * @brief   Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ *          contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   System time counter resolution.
+ * @note    Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION                32
+
+/**
+ * @brief   System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ *          setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY                 1000
+
+/**
+ * @brief   Time delta constant for the tick-less mode.
+ * @note    If this value is zero then the system uses the classic
+ *          periodic tick. This value represents the minimum number
+ *          of ticks that is safe to specify in a timeout directive.
+ *          The value one is not valid, timeouts are rounded up to
+ *          this value.
+ */
+#define CH_CFG_ST_TIMEDELTA                 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ *          threads before preemption occurs. Setting this value to zero
+ *          disables the preemption for threads with equal priority and the
+ *          round robin becomes cooperative. Note that higher priority
+ *          threads can still preempt, the kernel is always preemptive.
+ * @note    Disabling the round robin preemption makes the kernel more compact
+ *          and generally faster.
+ * @note    The round robin preemption is not supported in tickless mode and
+ *          must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM                 20
+
+/**
+ * @brief   Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ *          then the whole available RAM is used. The core memory is made
+ *          available to the heap allocator and/or can be used directly through
+ *          the simplified core memory allocator.
+ *
+ * @note    In order to let the OS manage the whole RAM the linker script must
+ *          provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note    Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE                 0
+
+/**
+ * @brief   Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ *          does not spawn the idle thread. The application @p main()
+ *          function becomes the idle thread and must implement an
+ *          infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD               FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE              TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ *          is used when two possible implementations exist.
+ *
+ * @note    This is not related to the compiler optimization options.
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED               TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ *          the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM                       FALSE
+
+/**
+ * @brief   Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY                 TRUE
+
+/**
+ * @brief   Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ *          the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT                 TRUE
+
+/**
+ * @brief   Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES               TRUE
+
+/**
+ * @brief   Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ *          priority rather than in FIFO order.
+ *
+ * @note    The default is @p FALSE. Enable this if you have special
+ *          requirements.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
+
+/**
+ * @brief   Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES                  TRUE
+
+/**
+ * @brief   Enables recursive behavior on mutexes.
+ * @note    Recursive mutexes are heavier and have an increased
+ *          memory footprint.
+ *
+ * @note    The default is @p FALSE.
+ * @note    Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
+
+/**
+ * @brief   Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS                 TRUE
+
+/**
+ * @brief   Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ *          specification are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
+
+/**
+ * @brief   Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS                   TRUE
+
+/**
+ * @brief   Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ *          are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
+
+/**
+ * @brief   Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES                 TRUE
+
+/**
+ * @brief   Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ *          FIFO order.
+ *
+ * @note    The default is @p FALSE. Enable this if you have special
+ *          requirements.
+ * @note    Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE
+
+/**
+ * @brief   Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ *          included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES                TRUE
+
+/**
+ * @brief   Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE                  TRUE
+
+/**
+ * @brief   Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ *          @p CH_CFG_USE_SEMAPHORES.
+ * @note    Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP                     TRUE
+
+/**
+ * @brief   Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS                 TRUE
+
+/**
+ * @brief   Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_WAITEXIT.
+ * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC                  TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Debug option, kernel statistics.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS                   FALSE
+
+/**
+ * @brief   Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ *          at runtime.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK           TRUE
+
+/**
+ * @brief   Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ *          parameters are activated.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS                TRUE
+
+/**
+ * @brief   Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ *          activated. This includes consistency checks inside the kernel,
+ *          runtime anomalies and port-defined checks.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS               TRUE
+
+/**
+ * @brief   Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief   Trace buffer entries.
+ * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ *          different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE            128
+
+/**
+ * @brief   Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note    The default is @p FALSE.
+ * @note    The stack check is performed in a architecture/port dependent way.
+ *          It may not be implemented or some ports.
+ * @note    The default failure mode is to halt the system with the global
+ *          @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK           TRUE
+
+/**
+ * @brief   Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ *          value when a thread is created. This can be useful for the
+ *          runtime measurement of the used stack.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS                 TRUE
+
+/**
+ * @brief   Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ *          counts the system ticks occurred while executing the thread.
+ *
+ * @note    The default is @p FALSE.
+ * @note    This debug option is not currently compatible with the
+ *          tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING            FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
+  /* Add threads custom fields here.*/
+
+/**
+ * @brief   Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note    It is invoked from within @p chThdInit() and implicitly from all
+ *          the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
+  /* Add threads initialization code here.*/                                \
+}
+
+/**
+ * @brief   Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
+  /* Add threads finalization code here.*/                                  \
+}
+
+/**
+ * @brief   Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
+  /* Context switch code here.*/                                            \
+}
+
+/**
+ * @brief   ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
+  /* IRQ prologue code here.*/                                              \
+}
+
+/**
+ * @brief   ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
+  /* IRQ epilogue code here.*/                                              \
+}
+
+/**
+ * @brief   Idle thread enter hook.
+ * @note    This hook is invoked within a critical zone, no OS functions
+ *          should be invoked from here.
+ * @note    This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
+  /* Idle-enter code here.*/                                                \
+}
+
+/**
+ * @brief   Idle thread leave hook.
+ * @note    This hook is invoked within a critical zone, no OS functions
+ *          should be invoked from here.
+ * @note    This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
+  /* Idle-leave code here.*/                                                \
+}
+
+/**
+ * @brief   Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
+  /* Idle loop code here.*/                                                 \
+}
+
+/**
+ * @brief   System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ *          after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
+  /* System tick event code here.*/                                         \
+}
+
+/**
+ * @brief   System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ *          the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
+  /* System halt code here.*/                                               \
+}
+
+/**
+ * @brief   Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ *          trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) {                                            \
+  /* Trace code here.*/                                                     \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h).    */
+/*===========================================================================*/
+
+#endif  /* CHCONF_H */
+
+/** @} */
index b1d2cd5502a83392452513f462495a3f471a1dbb..0436408b09c67c186ba77ea1d0a5e1bbe6dea0b9 100644 (file)
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-/**\r
- * @file    templates/halconf.h\r
- * @brief   HAL configuration header.\r
- * @details HAL configuration file, this file allows to enable or disable the\r
- *          various device drivers from your application. You may also use\r
- *          this file in order to override the device drivers default settings.\r
- *\r
- * @addtogroup HAL_CONF\r
- * @{\r
- */\r
-\r
-#ifndef _HALCONF_H_\r
-#define _HALCONF_H_\r
-\r
-#include "mcuconf.h"\r
-\r
-/**\r
- * @brief   Enables the PAL subsystem.\r
- */\r
-#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)\r
-#define HAL_USE_PAL                 TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the ADC subsystem.\r
- */\r
-#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)\r
-#define HAL_USE_ADC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the CAN subsystem.\r
- */\r
-#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)\r
-#define HAL_USE_CAN                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the DAC subsystem.\r
- */\r
-#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)\r
-#define HAL_USE_DAC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the EXT subsystem.\r
- */\r
-#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)\r
-#define HAL_USE_EXT                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the GPT subsystem.\r
- */\r
-#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)\r
-#define HAL_USE_GPT                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the I2C subsystem.\r
- */\r
-#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)\r
-#define HAL_USE_I2C                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the I2S subsystem.\r
- */\r
-#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)\r
-#define HAL_USE_I2S                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the ICU subsystem.\r
- */\r
-#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)\r
-#define HAL_USE_ICU                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the MAC subsystem.\r
- */\r
-#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)\r
-#define HAL_USE_MAC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the MMC_SPI subsystem.\r
- */\r
-#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)\r
-#define HAL_USE_MMC_SPI             FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the PWM subsystem.\r
- */\r
-#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)\r
-#define HAL_USE_PWM                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the RTC subsystem.\r
- */\r
-#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)\r
-#define HAL_USE_RTC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SDC subsystem.\r
- */\r
-#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)\r
-#define HAL_USE_SDC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SERIAL subsystem.\r
- */\r
-#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)\r
-#define HAL_USE_SERIAL              FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SERIAL over USB subsystem.\r
- */\r
-#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)\r
-#define HAL_USE_SERIAL_USB          FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SPI subsystem.\r
- */\r
-#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)\r
-#define HAL_USE_SPI                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the UART subsystem.\r
- */\r
-#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)\r
-#define HAL_USE_UART                FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the USB subsystem.\r
- */\r
-#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)\r
-#define HAL_USE_USB                 TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the WDG subsystem.\r
- */\r
-#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)\r
-#define HAL_USE_WDG                 FALSE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* USB driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Enables synchronous APIs.\r
- * @note    Disabling this option saves both code and data space.\r
- */\r
-#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)\r
-#define USB_USE_WAIT                TRUE\r
-#endif\r
-\r
-#endif /* _HALCONF_H_ */\r
-\r
-/** @} */\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/**
+ * @file    templates/halconf.h
+ * @brief   HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ *          various device drivers from your application. You may also use
+ *          this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief   Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL                 TRUE
+#endif
+
+/**
+ * @brief   Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN                 FALSE
+#endif
+
+/**
+ * @brief   Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT                 FALSE
+#endif
+
+/**
+ * @brief   Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S                 FALSE
+#endif
+
+/**
+ * @brief   Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI             FALSE
+#endif
+
+/**
+ * @brief   Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM                 FALSE
+#endif
+
+/**
+ * @brief   Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL              FALSE
+#endif
+
+/**
+ * @brief   Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB          FALSE
+#endif
+
+/**
+ * @brief   Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI                 FALSE
+#endif
+
+/**
+ * @brief   Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART                FALSE
+#endif
+
+/**
+ * @brief   Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB                 TRUE
+#endif
+
+/**
+ * @brief   Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG                 FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT                TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
index c636590197be92908698e8375b3c316817acaeb6..2764e88989c1889ad18956b1469f50c1aa0bb9f4 100644 (file)
@@ -1,55 +1,55 @@
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-#ifndef _MCUCONF_H_\r
-#define _MCUCONF_H_\r
-\r
-#define KL2x_MCUCONF\r
-\r
-/*\r
- * HAL driver system settings.\r
- */\r
-#if 1\r
-/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */\r
-#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_PEE\r
-#define KINETIS_PLLCLK_FREQUENCY    96000000UL\r
-#define KINETIS_SYSCLK_FREQUENCY    48000000UL\r
-#endif\r
-\r
-#if 0\r
-/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */\r
-#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI\r
-#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */\r
-#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */\r
-#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */\r
-#define KINETIS_CLKDIV1_OUTDIV1     1           /* do not divide system clock */\r
-#endif\r
-\r
-/*\r
- * SERIAL driver system settings.\r
- */\r
-#define KINETIS_SERIAL_USE_UART0              TRUE\r
-\r
-/*\r
- * USB driver settings\r
- */\r
-#define KINETIS_USB_USE_USB0                  TRUE\r
-/* Need to redefine this, since the default is for K20x */\r
-/* This is for Teensy LC; you should comment it out (or change to 5)\r
- * for Teensy 3.x */\r
-#define KINETIS_USB_USB0_IRQ_PRIORITY         2\r
-\r
-#endif /* _MCUCONF_H_ */\r
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define KL2x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#if 1
+/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
+#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY    96000000UL
+#define KINETIS_SYSCLK_FREQUENCY    48000000UL
+#endif
+
+#if 0
+/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1     1           /* do not divide system clock */
+#endif
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0              TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0                  TRUE
+/* Need to redefine this, since the default is for K20x */
+/* This is for Teensy LC; you should comment it out (or change to 5)
+ * for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY         2
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/chibios_test/teensy_lc_onekey/rules.mk b/keyboards/chibios_test/teensy_lc_onekey/rules.mk
new file mode 100644 (file)
index 0000000..43ea9d8
--- /dev/null
@@ -0,0 +1,49 @@
+# project specific files
+SRC =  matrix.c \
+           led.c
+
+## chip/board settings
+# - the next two should match the directories in
+#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+# - For Teensies, FAMILY = KINETIS and SERIES is either
+#   KL2x (LC) or K20x (3.0,3.1,3.2).
+MCU_FAMILY = KINETIS
+MCU_SERIES = KL2x
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
+# - LDSCRIPT =
+#   - MKL26Z64 for Teensy LC
+#   - MK20DX128 for Teensy 3.0
+#   - MK20DX256 for Teensy 3.1 and 3.2
+MCU_LDSCRIPT = MKL26Z64
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+# - STARTUP =
+#   - kl2x for Teensy LC
+#   - k20x5 for Teensy 3.0
+#   - k20x7 for Teensy 3.1 and 3.2
+MCU_STARTUP = kl2x
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+# - BOARD =
+#   - PJRC_TEENSY_LC for Teensy LC
+#   - PJRC_TEENSY_3 for Teensy 3.0
+#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
+BOARD = PJRC_TEENSY_LC
+
+# Cortex version
+# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
+MCU  = cortex-m0plus
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+# I.e. 6 for Teensy LC; 7 for Teensy 3.x
+ARMV = 6
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
\ No newline at end of file
index ccc01ea9a72803245e4a589a2a3d85dc32956374..b9bada8f8d73aa3a06f9f27ca37f0129e4c19728 100644 (file)
@@ -1,109 +1,5 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device.
-#                Please customize your programmer settings(PROGRAM_CMD)
-#
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-#               (must have teensy_loader_cli installed).
-#
-# make dfu = Download the hex file to the device, using dfu-programmer (must
-#            have dfu-programmer installed).
-#
-# make flip = Download the hex file to the device, using Atmel FLIP (must
-#             have Atmel FLIP installed).
-#
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
-#               (must have dfu-programmer installed).
-#
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
-#                (must have Atmel FLIP installed).
-#
-# make debug = Start either simulavr or avarice as specified for debugging,
-#              with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-#                   bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
 SUBPROJECT_DEFAULT = rev2
 
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-AUDIO_ENABLE ?= no
-RGBLIGHT_ENABLE ?= no   # Enable keyboard underlight functionality
-MIDI_ENABLE ?= no              # MIDI controls
-UNICODE_ENABLE ?= no           # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
+endif
\ No newline at end of file
index ceac80795b26185beb839b9b2dcc8bb0fbeec520..ad683238564ad8a7e956142db9cd7ca1ccedb803 100644 (file)
@@ -29,9 +29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION COL2ROW
 
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
 /* Set 0 if debouncing isn't needed */
 #define DEBOUNCING_DELAY 5
 
index 896bc7ebcc53f96e288d1614ccb114fbd35f3800..01f158bf0f849fcce41887324bc3df243ee96253 100644 (file)
@@ -66,19 +66,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * `----------------------------------------------------------------------------------'
    */
 [_RS] = KEYMAP(
-  #ifdef RGBLIGHT_ENABLE
   KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, RGB_TOG,             RGB_VAI, \
   KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                   RGB_VAD, \
   KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                         \
   MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  MO(_FL),          RGB_SAI,          \
   KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,        RGB_MOD,   RGB_MOD,                            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, RGB_HUD,    RGB_SAD,    RGB_HUI),
-  #else
-  KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET,  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                   KC_TRNS, \
-  KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                            \
-  KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,          KC_TRNS,          \
-  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,        KC_TRNS,KC_TRNS,                        KC_TRNS,  KC_TRNS,  KC_TRNS,  MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS),
-  #endif
 };
 
 enum function_id {
diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard/keymaps/skully/readme.md
new file mode 100644 (file)
index 0000000..c118212
--- /dev/null
@@ -0,0 +1,5 @@
+# skullY's Clueboard Layout
+
+This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
+
+The most notable change from the default layout is putting Ctrl on the Capslock key. I also swap Alt and Cmd because I mostly use a Mac day to day.
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md
new file mode 100644 (file)
index 0000000..4a76e29
--- /dev/null
@@ -0,0 +1,97 @@
+Clueboard keyboard firmware
+======================
+
+DIY/Assembled compact 66% keyboard by [Clueboard](http://clueboard.co).
+
+For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
+
+## First Time Setup
+
+Download or clone the whole firmware and navigate to the keyboards/clueboard directory. Once your dev env is setup, you'll be able to generate the default .hex:
+
+```
+$ make
+```
+
+You will see a lot of output and if everything worked correctly you will see something similar to this:
+
+```
+Size after:
+   text           data     bss     dec     hex filename
+      0          19992       0   19992    4e18 clueboard_rev2_default.hex
+```
+
+At this point you can press RESET on your Clueboard and flash your keyboard with this command:
+
+```
+$ make dfu
+```
+
+If you would like to use one of the alternative keymaps, or create your own, see below.
+
+## Clueboard 1.0
+
+If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `rev1` to your make command, like this:
+
+```
+$ make rev1
+```
+
+And when flashing your keyboard:
+
+```
+$ make rev1-dfu
+```
+
+If you are flashing an alternative layout to your rev1, include both `rev1` and `<keymap>` in your command, for example when flashing max:
+
+```
+$ make rev1-max-dfu
+```
+
+## Alternate Keymaps
+
+There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `<keymap>` to your command:
+
+```
+$ make skully
+```
+
+And when flashing your keyboard, put `<keymap>` between "make" and "dfu":
+
+```
+$ make skully-dfu
+```
+
+### Notable Layouts
+
+These layouts are notable for one reason or another. If you are looking for ideas or inspiration you should look at these first:
+
+* [keymaps/default](keymaps/default) - The default Clueboard layout
+* [keymaps/max](keymaps/max) - A maximised layout that makes use of every key and feature of the Clueboard 2.0 PCB.
+* [keymaps/skully](keymaps/skully) - The layout that @skullydazed uses on his own Clueboards.
+
+## Create Your Own Keymap
+
+There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend:
+
+* Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`.
+* Compile the firmware (`$ make <your_layout>`)
+* Flash the firmware (`$ make <your_layout>-dfu`)
+* Make sure everything works like the default keyboard
+* Modify `keymaps/<your_layout>/readme.md` to tell others about your layout.
+* Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout.
+* Compile your new custom firmware (`$ make <your_layout>`)
+** If you have warnings you may flash without fixing them, but something may not work right.
+** If you have any errors you must fix them before continuing.
+* Flash the firmware (`$ make <your_layout>-dfu`)
+
+## Share Your Keymap
+
+Got your layout dialed in? Please share it with the world so we can benefit from your work! Simply submit a pull request with your layout and we'll include it in the official repository. Please use the following guidelines when putting together your pull request:
+
+* Include a readme.md that states what your primary keyboard use is, how your layout differs from the default, and highlights anything you think makes your layout particularly great.
+* If your layout requires certain features (EG, RGB underlight or backlighting) ensure you have a Makefile and config.h that reflects that
+* If your layout requires special hardware to be added, please describe that in the readme.md
+
+TODO: Write up or link quick how-to on creating and submitting a PR. (Pull requests accepted. :)
index 80a942d06f7cc35dc8abf7a43d371a2381a84204..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,5 +1,3 @@
-BACKLIGHT_ENABLE = no
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
-endif
+endif
\ No newline at end of file
index 8c949723247bf654dcab4e521ab989aa5f40fa5a..f40876ffbf7762482e72759ac0ffad41be927281 100644 (file)
@@ -26,7 +26,7 @@
 /* Underlight configuration
  */
 #define RGB_DI_PIN B2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 14     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/clueboard/rev1/rules.mk b/keyboards/clueboard/rev1/rules.mk
new file mode 100644 (file)
index 0000000..80a942d
--- /dev/null
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
index cea967b7955c7958daea51ae2380494d782922fc..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,5 +1,3 @@
-BACKLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
-endif
+endif
\ No newline at end of file
index 02982ff29994fc3f36096861c151d71afecc28d6..8435fd02be748a5d74a9688f1570ce1b26b1ada1 100644 (file)
 /* Underlight configuration
  */
 #define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 14     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
 #define RGBLIGHT_VAL_STEP 17
 
-#endif
\ No newline at end of file
+#endif
diff --git a/keyboards/clueboard/rev2/rules.mk b/keyboards/clueboard/rev2/rules.mk
new file mode 100644 (file)
index 0000000..cea967b
--- /dev/null
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = yes
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
diff --git a/keyboards/clueboard/rules.mk b/keyboards/clueboard/rules.mk
new file mode 100644 (file)
index 0000000..3909fbd
--- /dev/null
@@ -0,0 +1,103 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+#                Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+#            have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+#             have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+#               (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+#                (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE ?= no
+RGBLIGHT_ENABLE ?= no   # Enable keyboard underlight functionality
+MIDI_ENABLE ?= no              # MIDI controls
+UNICODE_ENABLE ?= no           # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
\ No newline at end of file
diff --git a/keyboards/clueboard2/Makefile b/keyboards/clueboard2/Makefile
deleted file mode 100644 (file)
index e9367a9..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE ?= no   # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality (+1150)
-MIDI_ENABLE ?= no              # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no           # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
-       include ../../Makefile
-endif
diff --git a/keyboards/clueboard2/clueboard2.c b/keyboards/clueboard2/clueboard2.c
deleted file mode 100644 (file)
index d78ffed..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "clueboard2.h"
-
-void matrix_init_kb(void) {
-       // put your keyboard start-up code here
-       // runs once when the firmware starts up
-       matrix_init_user();
-       led_init_ports();
-
-    // JTAG disable for PORT F. write JTD bit twice within four cycles.
-    MCUCR |= (1<<JTD);
-    MCUCR |= (1<<JTD);
-};
-
-void led_init_ports() {
-    // * Set our LED pins as output
-    DDRB |= (1<<4);
-}
-
-void led_set_kb(uint8_t usb_led) {
-    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
-        // Turn capslock on
-        PORTB |= (1<<4);
-    } else {
-        // Turn capslock off
-        PORTB &= ~(1<<4);
-    }
-}
-
-/* Clueboard 2.0 LED locations:
- *
- * Capslock: B4, pull high to turn on
- * LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH
- * Page Up: B7, pull high to turn on
- * Escape: D6, pull high to turn on
- * Arrows: D4, pull high to turn on
- */
-
-void backlight_init_ports(void) {
-    print("init_backlight_pin()\n");
-    // Set our LED pins as output
-    DDRD |= (1<<6); // Esc
-    DDRB |= (1<<7); // Page Up
-    DDRD |= (1<<4); // Arrows
-
-    // Set our LED pins low
-    PORTD &= ~(1<<6); // Esc
-    PORTB &= ~(1<<7); // Page Up
-    PORTD &= ~(1<<4); // Arrows
-}
-
-void backlight_set(uint8_t level) {
-    if ( level == 0 ) {
-        // Turn off light
-        PORTD |= (1<<6); // Esc
-        PORTB |= (1<<7); // Page Up
-        PORTD |= (1<<4); // Arrows
-    } else {
-        // Turn on light
-        PORTD &= ~(1<<6); // Esc
-        PORTB &= ~(1<<7); // Page Up
-        PORTD &= ~(1<<4); // Arrows
-    }
-}
diff --git a/keyboards/cluecard/Makefile b/keyboards/cluecard/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/cluecard/cluecard.c b/keyboards/cluecard/cluecard.c
new file mode 100644 (file)
index 0000000..81db252
--- /dev/null
@@ -0,0 +1,98 @@
+#include "cluecard.h"
+#define BL_RED OCR1B
+#define BL_GREEN OCR1A
+#define BL_BLUE OCR1C
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
+
+void backlight_init_ports(void)
+{
+       // Set B5, B6, and B7 as output
+       DDRB |= (1<<7)|(1<<6)|(1<<5);
+
+       // Setup PWM
+       ICR1 = 0xFFFF;
+       TCCR1A = 0b10101010;
+       TCCR1B = 0b00011001;
+
+       BL_RED = 0xFFFF;
+       BL_GREEN = 0xFFFF;
+       BL_BLUE = 0xFFFF;
+}
+
+void backlight_set(uint8_t level)
+{
+       // Set the RGB color
+       switch (level)
+       {
+       case 0:
+               // Off
+               BL_RED = 0xFFFF;
+               BL_GREEN = 0xFFFF;
+               BL_BLUE = 0xFFFF;
+               break;
+       case 1:
+               // Red
+               BL_RED = 0x0000;
+               BL_GREEN = 0xFFFF;
+               BL_BLUE = 0xFFFF;
+               break;
+       case 2:
+               // Green
+               BL_RED = 0xFFFF;
+               BL_GREEN = 0x0000;
+               BL_BLUE = 0xFFFF;
+               break;
+       case 3:
+               // Blue
+               BL_RED = 0xFFFF;
+               BL_GREEN = 0xFFFF;
+               BL_BLUE = 0x0000;
+               break;
+       case 4:
+               // Magenta
+               BL_RED = 0x4000;
+               BL_GREEN = 0x4000;
+               BL_BLUE = 0x4000;
+               break;
+       case 5:
+               // Purple
+               BL_RED = 0x0000;
+               BL_GREEN = 0xFFFF;
+               BL_BLUE = 0x0000;
+               break;
+       case 6:
+               // Yellow
+               BL_RED = 0x0000;
+               BL_GREEN = 0x0000;
+               BL_BLUE = 0xFFFF;
+               break;
+       default:
+               xprintf("Unknown level: %d\n", level);
+       }
+}
diff --git a/keyboards/cluecard/cluecard.h b/keyboards/cluecard/cluecard.h
new file mode 100644 (file)
index 0000000..3342a08
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef CLUECARD_H
+#define CLUECARD_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+       k00, k01, k02, \
+       k10, k12, \
+       k20, k21, k22, \
+       k11, \
+       k30, k31, k32 \
+) { \
+       { k00, k01, k02, }, \
+       { k10, k11, k12, }, \
+       { k20, k21, k22, }, \
+       { k30, k31, k32, } \
+}
+
+#endif
diff --git a/keyboards/cluecard/config.h b/keyboards/cluecard/config.h
new file mode 100644 (file)
index 0000000..6520eb5
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xC1ED
+#define PRODUCT_ID      0x2330
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Clueboard
+#define PRODUCT         ATMEGA32U4 Firmware Dev Kit
+#define DESCRIPTION     A small board to help you hack on QMK.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F5, F4, B4 }
+#define MATRIX_COL_PINS { F1, F7, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 20
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+       keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/* Underlight configuration
+ */
+#define RGB_DI_PIN E6
+//#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 4     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/cluecard/keymaps/default/Makefile b/keyboards/cluecard/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..8ee841d
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/cluecard/keymaps/default/config.h b/keyboards/cluecard/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..8893d12
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/cluecard/keymaps/default/keymap.c b/keyboards/cluecard/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..517afe8
--- /dev/null
@@ -0,0 +1,63 @@
+#include "cluecard.h"
+#ifdef AUDIO_ENABLE
+       #include "audio.h"
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = KEYMAP(
+               RGB_TOG,        RGB_SAI,        RGB_VAI, \
+                       RGB_HUD,        RGB_HUI,         \
+               RGB_MOD,        RGB_SAD,        RGB_VAD, \
+               BL_STEP,                                 \
+               F(0),   F(1),   F(2)                     \
+       )
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_FUNCTION(0),
+       [1] = ACTION_FUNCTION(1),
+       [2] = ACTION_FUNCTION(2)
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+       if (record->event.pressed) {
+               switch (id) {
+                       case 0:
+                               PLAY_NOTE_ARRAY(tone_startup, false, 0);
+                               break;
+                       case 1:
+                               PLAY_NOTE_ARRAY(music_scale, false, 0);
+                               break;
+                       case 2:
+                               PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+                               break;
+               }
+       }
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/cluecard/keymaps/default/readme.md b/keyboards/cluecard/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..fa4e8cc
--- /dev/null
@@ -0,0 +1,5 @@
+# The default keymap for cluecard
+
+Note that this keymap has audio enabled, so the RGB mode button does not go through the different effects. 
+So the LEDs will still show a static light, that is configurable with the hue, staturation and brightness
+buttons. You can of course also turn them on and off with the on/off button.
diff --git a/keyboards/cluecard/keymaps/rgb_effects/Makefile b/keyboards/cluecard/keymaps/rgb_effects/Makefile
new file mode 100644 (file)
index 0000000..00670c0
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/cluecard/keymaps/rgb_effects/config.h b/keyboards/cluecard/keymaps/rgb_effects/config.h
new file mode 100644 (file)
index 0000000..c6c9342
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2
+
+#endif
diff --git a/keyboards/cluecard/keymaps/rgb_effects/keymap.c b/keyboards/cluecard/keymaps/rgb_effects/keymap.c
new file mode 100644 (file)
index 0000000..74c95ce
--- /dev/null
@@ -0,0 +1,28 @@
+#include "cluecard.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = KEYMAP(
+               RGB_TOG,        RGB_SAI,        RGB_VAI, \
+                       RGB_HUD,        RGB_HUI,         \
+               RGB_MOD,        RGB_SAD,        RGB_VAD, \
+               BL_STEP,                                 \
+               KC_NO,   KC_NO,   KC_NO                  \
+       )
+};
+
+const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {255, 170, 85};
+const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {255, 170, 85};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/cluecard/keymaps/rgb_effects/readme.md b/keyboards/cluecard/keymaps/rgb_effects/readme.md
new file mode 100644 (file)
index 0000000..949cac3
--- /dev/null
@@ -0,0 +1,7 @@
+# RGB effect test keymap for cluecard
+
+This keymap is made for testing the RGB effects. Audio is disabled and the mode buttons goes through each
+effect. If you run HID-listen you will be able to see which effect is active. For a list of effects, check
+the `rgblight.c` file.
+
+The hue, saturation and brightness buttons will work depending on which effect is active.
diff --git a/keyboards/cluecard/readme.md b/keyboards/cluecard/readme.md
new file mode 100644 (file)
index 0000000..be13fc0
--- /dev/null
@@ -0,0 +1,28 @@
+cluecard keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/cluecard folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make default`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/cluecard/rules.mk b/keyboards/cluecard/rules.mk
new file mode 100644 (file)
index 0000000..4542358
--- /dev/null
@@ -0,0 +1,70 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+RGBLIGHT_ENABLE ?= yes       # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes       # Enable keyboard backlight functionality by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= yes           # Audio output on port C6
index a331ff4dcd97b9a66fa8ddc990f1f89529459ca4..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,70 +1,3 @@
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-# MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-# EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-# CONSOLE_ENABLE ?= yes        # Console for debug(+400)
-# COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes  # Enable numpad's backlight functionality
-RGBLIGHT_ENABLE ?= yes
-# MIDI_ENABLE ?= YES           # MIDI controls
-# UNICODE_ENABLE ?= YES                # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
+endif
\ No newline at end of file
index bae05fade38ae99b8ee11c7c2d1fb8b96b9ac5bb..bd64dfd27d9aaa3778e9621f5484622c751a7c18 100644 (file)
@@ -70,7 +70,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* Underlight configuration
  */
 #define RGB_DI_PIN F6
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 4     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/cluepad/readme.md b/keyboards/cluepad/readme.md
new file mode 100644 (file)
index 0000000..8450340
--- /dev/null
@@ -0,0 +1,4 @@
+Cluepad number pad firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/cluepad/rules.mk b/keyboards/cluepad/rules.mk
new file mode 100644 (file)
index 0000000..19b16b9
--- /dev/null
@@ -0,0 +1,65 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+# MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+# EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+# CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+# COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes  # Enable numpad's backlight functionality
+RGBLIGHT_ENABLE ?= yes
+# MIDI_ENABLE ?= YES           # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
\ No newline at end of file
diff --git a/keyboards/ergodox/Makefile b/keyboards/ergodox/Makefile
new file mode 100644 (file)
index 0000000..7165350
--- /dev/null
@@ -0,0 +1,5 @@
+SUBPROJECT_DEFAULT = ez
+
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h
new file mode 100644 (file)
index 0000000..994a8c6
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
+#define KEYBOARDS_ERGODOX_CONFIG_H_
+
+#define MOUSEKEY_INTERVAL       20
+#define MOUSEKEY_DELAY          0
+#define MOUSEKEY_TIME_TO_MAX    5
+#define MOUSEKEY_MAX_SPEED      2
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define TAPPING_TOGGLE  1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM    200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+    keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#ifdef SUBPROJECT_ez
+    #include "ez/config.h"
+#endif
+#ifdef SUBPROJECT_infinity
+    #include "infinity/config.h"
+#endif
+
+
+#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c
new file mode 100644 (file)
index 0000000..648ec8a
--- /dev/null
@@ -0,0 +1,4 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
diff --git a/keyboards/ergodox/ergodox.h b/keyboards/ergodox/ergodox.h
new file mode 100644 (file)
index 0000000..f8ec8b5
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_
+#define KEYBOARDS_ERGODOX_ERGODOX_H_
+#ifdef SUBPROJECT_ez
+    #include "ez.h"
+#endif
+#ifdef SUBPROJECT_infinity
+    #include "infinity.h"
+#endif
+
+#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */
diff --git a/keyboards/ergodox/ez/190hotfix.sh b/keyboards/ergodox/ez/190hotfix.sh
new file mode 100755 (executable)
index 0000000..bdc3adc
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+#a tool to fix broken keymaps as a result of pull request #190 
+#changing the declaration of matrix_scan_user() and matrix_init_user()
+#
+#This script will save a copy of the specified keymap as keymap.c.bak
+#and then create a new keymap.c with the definion corrected.
+#this script must be run from the ergodox_ez directory
+if [ $# -ne 1 ]; then
+    echo $0: usage: ./190hotfix keymap_name
+    exit 1
+fi
+
+echo Saving backup as ./keymaps/$1/keymap.c.bak ...
+mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak
+
+echo Modifying ./keymaps/$1/keymap.c ...
+cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c
+
+echo Complete!
diff --git a/keyboards/ergodox/ez/Makefile b/keyboards/ergodox/ez/Makefile
new file mode 100644 (file)
index 0000000..9b6121e
--- /dev/null
@@ -0,0 +1,8 @@
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+COMMAND_ENABLE   = no  # Commands for debug and configuration
+RGBLIGHT_ENABLE ?= yes
+MIDI_ENABLE ?= yes
+
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h
new file mode 100644 (file)
index 0000000..c2750a3
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef ERGODOX_EZ_CONFIG_H
+#define ERGODOX_EZ_CONFIG_H
+
+#include "../config.h"
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x1307
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    ErgoDox EZ
+#define PRODUCT         ErgoDox EZ
+#define DESCRIPTION     QMK keyboard firmware for Ergodox EZ
+
+/* key matrix size */
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 6
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO       15
+#define LED_BRIGHTNESS_HI       255
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 15     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 255
+#define RGBLIGHT_VAL_STEP 12
+
+#define RGB_MIDI
+#define RGBW_BB_TWI
+
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE    5
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+//#define DEBUG_MATRIX_SCAN_RATE
+
+#endif
diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c
new file mode 100644 (file)
index 0000000..039e4c6
--- /dev/null
@@ -0,0 +1,112 @@
+#include "ez.h"
+#include "i2cmaster.h"
+
+bool i2c_initialized = 0;
+uint8_t mcp23018_status = 0x20;
+
+void matrix_init_kb(void) {
+   // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
+    TCCR1A = 0b10101001;  // set and configure fast PWM
+    TCCR1B = 0b00001001;  // set and configure fast PWM
+
+    // (tied to Vcc for hardware convenience)
+    DDRB  &= ~(1<<4);  // set B(4) as input
+    PORTB &= ~(1<<4);  // set B(4) internal pull-up disabled
+
+    // unused pins - C7, D4, D5, D7, E6
+    // set as input with internal pull-ip enabled
+    DDRC  &= ~(1<<7);
+    DDRD  &= ~(1<<5 | 1<<4);
+    DDRE  &= ~(1<<6);
+    PORTC |=  (1<<7);
+    PORTD |=  (1<<5 | 1<<4);
+    PORTE |=  (1<<6);
+
+    ergodox_blink_all_leds();
+
+    matrix_init_user();
+}
+
+void ergodox_blink_all_leds(void)
+{
+    ergodox_led_all_off();
+    ergodox_led_all_set(LED_BRIGHTNESS_HI);
+    ergodox_right_led_1_on();
+    _delay_ms(50);
+    ergodox_right_led_2_on();
+    _delay_ms(50);
+    ergodox_right_led_3_on();
+    _delay_ms(50);
+    ergodox_right_led_1_off();
+    _delay_ms(50);
+    ergodox_right_led_2_off();
+    _delay_ms(50);
+    ergodox_right_led_3_off();
+    //ergodox_led_all_on();
+    //_delay_ms(333);
+    ergodox_led_all_off();
+}
+
+uint8_t init_mcp23018(void) {
+    mcp23018_status = 0x20;
+
+    // I2C subsystem
+
+    uint8_t sreg_prev;
+    sreg_prev=SREG;
+    cli();
+    if (i2c_initialized == 0) {
+        i2c_init();  // on pins D(1,0)
+        i2c_initialized++;
+        _delay_ms(1000);
+    }
+
+    // set pin direction
+    // - unused  : input  : 1
+    // - input   : input  : 1
+    // - driving : output : 0
+    mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(IODIRA);            if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b00000000);        if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b00111111);        if (mcp23018_status) goto out;
+    i2c_stop();
+
+    // set pull-up
+    // - unused  : on  : 1
+    // - input   : on  : 1
+    // - driving : off : 0
+    mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(GPPUA);             if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b00000000);        if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b00111111);        if (mcp23018_status) goto out;
+
+out:
+    i2c_stop();
+
+    SREG=sreg_prev;
+
+    return mcp23018_status;
+}
+
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+// swap-hands action needs a matrix to define the swap
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+    /* Left hand, matrix positions */
+    {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
+    {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
+    {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
+    {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
+    {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
+    {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
+    {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
+    /* Right hand, matrix positions */
+    {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
+    {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
+    {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
+    {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
+    {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
+    {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
+    {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
+};
+#endif
diff --git a/keyboards/ergodox/ez/ez.h b/keyboards/ergodox/ez/ez.h
new file mode 100644 (file)
index 0000000..124bf85
--- /dev/null
@@ -0,0 +1,163 @@
+#ifndef ERGODOX_EZ_H
+#define ERGODOX_EZ_H
+
+#include "quantum.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include "i2cmaster.h"
+#include <util/delay.h>
+
+#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
+#define CPU_16MHz       0x00
+
+// I2C aliases and register addresses (see "mcp23018.md")
+#define I2C_ADDR        0b0100000
+#define I2C_ADDR_WRITE  ( (I2C_ADDR<<1) | I2C_WRITE )
+#define I2C_ADDR_READ   ( (I2C_ADDR<<1) | I2C_READ  )
+#define IODIRA          0x00            // i/o direction register
+#define IODIRB          0x01
+#define GPPUA           0x0C            // GPIO pull-up resistor register
+#define GPPUB           0x0D
+#define GPIOA           0x12            // general purpose i/o port register (write modifies OLAT)
+#define GPIOB           0x13
+#define OLATA           0x14            // output latch register
+#define OLATB           0x15
+
+extern uint8_t mcp23018_status;
+
+void init_ergodox(void);
+void ergodox_blink_all_leds(void);
+uint8_t init_mcp23018(void);
+uint8_t ergodox_left_leds_update(void);
+
+#define LED_BRIGHTNESS_LO       15
+#define LED_BRIGHTNESS_HI       255
+
+
+inline void ergodox_board_led_on(void)      { DDRD |=  (1<<6); PORTD |=  (1<<6); }
+inline void ergodox_right_led_1_on(void)    { DDRB |=  (1<<5); PORTB |=  (1<<5); }
+inline void ergodox_right_led_2_on(void)    { DDRB |=  (1<<6); PORTB |=  (1<<6); }
+inline void ergodox_right_led_3_on(void)    { DDRB |=  (1<<7); PORTB |=  (1<<7); }
+inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); }
+
+inline void ergodox_board_led_off(void)     { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
+inline void ergodox_right_led_1_off(void)   { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
+inline void ergodox_right_led_2_off(void)   { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
+inline void ergodox_right_led_3_off(void)   { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
+inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
+
+inline void ergodox_led_all_on(void)
+{
+    ergodox_board_led_on();
+    ergodox_right_led_1_on();
+    ergodox_right_led_2_on();
+    ergodox_right_led_3_on();
+}
+
+inline void ergodox_led_all_off(void)
+{
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+}
+
+inline void ergodox_right_led_1_set(uint8_t n)    { OCR1A = n; }
+inline void ergodox_right_led_2_set(uint8_t n)    { OCR1B = n; }
+inline void ergodox_right_led_3_set(uint8_t n)    { OCR1C = n; }
+inline void ergodox_right_led_set(uint8_t led, uint8_t n)  {
+    (led == 1) ? (OCR1A = n) :
+    (led == 2) ? (OCR1B = n) :
+                 (OCR1C = n);
+}
+
+inline void ergodox_led_all_set(uint8_t n)
+{
+    ergodox_right_led_1_set(n);
+    ergodox_right_led_2_set(n);
+    ergodox_right_led_3_set(n);
+}
+
+#define KEYMAP(                                                 \
+                                                                \
+    /* left hand, spatial positions */                          \
+    k00,k01,k02,k03,k04,k05,k06,                                \
+    k10,k11,k12,k13,k14,k15,k16,                                \
+    k20,k21,k22,k23,k24,k25,                                    \
+    k30,k31,k32,k33,k34,k35,k36,                                \
+    k40,k41,k42,k43,k44,                                        \
+                            k55,k56,                            \
+                                k54,                            \
+                        k53,k52,k51,                            \
+                                                                \
+    /* right hand, spatial positions */                         \
+        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
+        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
+            k28,k29,k2A,k2B,k2C,k2D,                            \
+        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
+                k49,k4A,k4B,k4C,k4D,                            \
+    k57,k58,                                                    \
+    k59,                                                        \
+    k5C,k5B,k5A )                                               \
+                                                                \
+   /* matrix positions */                                       \
+   {                                                            \
+    { k00, k10, k20, k30, k40, KC_NO },   \
+    { k01, k11, k21, k31, k41, k51 },   \
+    { k02, k12, k22, k32, k42, k52 },   \
+    { k03, k13, k23, k33, k43, k53 },   \
+    { k04, k14, k24, k34, k44, k54 },   \
+    { k05, k15, k25, k35, KC_NO, k55 },   \
+    { k06, k16, KC_NO, k36, KC_NO, k56 },   \
+                                                                 \
+    { k07, k17, KC_NO, k37,KC_NO, k57 },   \
+    { k08, k18, k28, k38,KC_NO, k58 },   \
+    { k09, k19, k29, k39, k49, k59 },   \
+    { k0A, k1A, k2A, k3A, k4A, k5A },   \
+    { k0B, k1B, k2B, k3B, k4B, k5B },   \
+    { k0C, k1C, k2C, k3C, k4C, k5C },   \
+    { k0D, k1D, k2D, k3D, k4D, KC_NO }    \
+   }
+
+#define KEYMAP_80(                                              \
+                                                                \
+    /* left hand, spatial positions */                          \
+    k00,k01,k02,k03,k04,k05,k06,                                \
+    k10,k11,k12,k13,k14,k15,k16,                                \
+    k20,k21,k22,k23,k24,k25,                                    \
+    k30,k31,k32,k33,k34,k35,k36,                                \
+    k40,k41,k42,k43,k44,                                        \
+                            k55,k56,                            \
+                        k45,k46,k54,                            \
+                        k53,k52,k51,                            \
+                                                                \
+    /* right hand, spatial positions */                         \
+        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
+        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
+            k28,k29,k2A,k2B,k2C,k2D,                            \
+        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
+                k49,k4A,k4B,k4C,k4D,                            \
+    k57,k58,                                                    \
+    k59,k47,k48,                                                \
+    k5C,k5B,k5A )                                               \
+                                                                \
+   /* matrix positions */                                       \
+   {                                                            \
+    { k00, k10, k20, k30, k40, KC_NO },   \
+    { k01, k11, k21, k31, k41, k51 },   \
+    { k02, k12, k22, k32, k42, k52 },   \
+    { k03, k13, k23, k33, k43, k53 },   \
+    { k04, k14, k24, k34, k44, k54 },   \
+    { k05, k15, k25, k35, k45, k55 },   \
+    { k06, k16, KC_NO, k36, k46, k56 },   \
+                                                                 \
+    { k07, k17, KC_NO, k37, k47, k57 },   \
+    { k08, k18, k28, k38, k48, k58 },   \
+    { k09, k19, k29, k39, k49, k59 },   \
+    { k0A, k1A, k2A, k3A, k4A, k5A },   \
+    { k0B, k1B, k2B, k3B, k4B, k5B },   \
+    { k0C, k1C, k2C, k3C, k4C, k5C },   \
+    { k0D, k1D, k2D, k3D, k4D, KC_NO }    \
+   }
+
+#endif
diff --git a/keyboards/ergodox/ez/i2cmaster.h b/keyboards/ergodox/ez/i2cmaster.h
new file mode 100644 (file)
index 0000000..3917b9e
--- /dev/null
@@ -0,0 +1,178 @@
+#ifndef _I2CMASTER_H
+#define _I2CMASTER_H   1
+/************************************************************************* 
+* Title:    C include file for the I2C master interface 
+*           (i2cmaster.S or twimaster.c)
+* Author:   Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
+* File:     $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
+* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
+* Target:   any AVR device
+* Usage:    see Doxygen manual
+**************************************************************************/
+
+#ifdef DOXYGEN
+/**
+ @defgroup pfleury_ic2master I2C Master library
+ @code #include <i2cmaster.h> @endcode
+  
+ @brief I2C (TWI) Master Software Library
+
+ Basic routines for communicating with I2C slave devices. This single master 
+ implementation is limited to one bus master on the I2C bus. 
+
+ This I2c library is implemented as a compact assembler software implementation of the I2C protocol 
+ which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
+ Since the API for these two implementations is exactly the same, an application can be linked either against the
+ software I2C implementation or the hardware I2C implementation.
+
+ Use 4.7k pull-up resistor on the SDA and SCL pin.
+ Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module 
+ i2cmaster.S to your target when using the software I2C implementation ! 
+ Adjust the  CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
+
+ @note 
+    The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted 
+    to GNU assembler and AVR-GCC C call interface.
+    Replaced the incorrect quarter period delays found in AVR300 with 
+    half period delays. 
+    
+ @author Peter Fleury pfleury@gmx.ch  http://jump.to/fleury
+
+ @par API Usage Example
+  The following code shows typical usage of this library, see example test_i2cmaster.c
+
+ @code
+
+ #include <i2cmaster.h>
+
+
+ #define Dev24C02  0xA2      // device address of EEPROM 24C02, see datasheet
+
+ int main(void)
+ {
+     unsigned char ret;
+
+     i2c_init();                             // initialize I2C library
+
+     // write 0x75 to EEPROM address 5 (Byte Write) 
+     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode
+     i2c_write(0x05);                        // write address = 5
+     i2c_write(0x75);                        // write value 0x75 to EEPROM
+     i2c_stop();                             // set stop conditon = release bus
+
+
+     // read previously written value back from EEPROM address 5 
+     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode
+
+     i2c_write(0x05);                        // write address = 5
+     i2c_rep_start(Dev24C02+I2C_READ);       // set device address and read mode
+
+     ret = i2c_readNak();                    // read one byte from EEPROM
+     i2c_stop();
+
+     for(;;);
+ }
+ @endcode
+
+*/
+#endif /* DOXYGEN */
+
+/**@{*/
+
+#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
+#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
+#endif
+
+#include <avr/io.h>
+
+/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
+#define I2C_READ    1
+
+/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
+#define I2C_WRITE   0
+
+
+/**
+ @brief initialize the I2C master interace. Need to be called only once 
+ @param  void
+ @return none
+ */
+extern void i2c_init(void);
+
+
+/** 
+ @brief Terminates the data transfer and releases the I2C bus 
+ @param void
+ @return none
+ */
+extern void i2c_stop(void);
+
+
+/** 
+ @brief Issues a start condition and sends address and transfer direction 
+  
+ @param    addr address and transfer direction of I2C device
+ @retval   0   device accessible 
+ @retval   1   failed to access device 
+ */
+extern unsigned char i2c_start(unsigned char addr);
+
+
+/**
+ @brief Issues a repeated start condition and sends address and transfer direction 
+
+ @param   addr address and transfer direction of I2C device
+ @retval  0 device accessible
+ @retval  1 failed to access device
+ */
+extern unsigned char i2c_rep_start(unsigned char addr);
+
+
+/**
+ @brief Issues a start condition and sends address and transfer direction 
+   
+ If device is busy, use ack polling to wait until device ready 
+ @param    addr address and transfer direction of I2C device
+ @return   none
+ */
+extern void i2c_start_wait(unsigned char addr);
+
+/**
+ @brief Send one byte to I2C device
+ @param    data  byte to be transfered
+ @retval   0 write successful
+ @retval   1 write failed
+ */
+extern unsigned char i2c_write(unsigned char data);
+
+
+/**
+ @brief    read one byte from the I2C device, request more data from device 
+ @return   byte read from I2C device
+ */
+extern unsigned char i2c_readAck(void);
+
+/**
+ @brief    read one byte from the I2C device, read is followed by a stop condition 
+ @return   byte read from I2C device
+ */
+extern unsigned char i2c_readNak(void);
+
+/** 
+ @brief    read one byte from the I2C device
+ Implemented as a macro, which calls either i2c_readAck or i2c_readNak
+ @param    ack 1 send ack, request more data from device<br>
+               0 send nak, read is followed by a stop condition 
+ @return   byte read from I2C device
+ */
+extern unsigned char i2c_read(unsigned char ack);
+#define i2c_read(ack)  (ack) ? i2c_readAck() : i2c_readNak(); 
+
+
+/**@}*/
+#endif
diff --git a/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png b/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png
new file mode 100644 (file)
index 0000000..66b9752
Binary files /dev/null and b/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png differ
diff --git a/keyboards/ergodox/ez/keymaps/profet_80/keymap.c b/keyboards/ergodox/ez/keymaps/profet_80/keymap.c
new file mode 100644 (file)
index 0000000..505ff29
--- /dev/null
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |  1   |  2   | Home |       | PgUp |   3    |   4  |
+ *                                 |------|------|------|       |------|--------|------|
+ *                                 | Space| BkSp | End  |       | PgDn |  Tab   |Enter |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP_80(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                               KC_1,  KC_2,   KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,KC_3,   KC_4,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |------|------|------|       |------|------|------|
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP_80(
+       // left hand
+       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+----------.
+ *                                 |      |      |      |       |      |      |          |
+ *                                 |------|------|------|       |------|------|----------|
+ *                                 |      |      |      |       |      |      |BrwserBack|
+ *                                 `--------------------'       `------------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP_80(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                                 KC_TRNS, KC_TRNS, KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/ez/keymaps/profet_80/readme.md b/keyboards/ergodox/ez/keymaps/profet_80/readme.md
new file mode 100644 (file)
index 0000000..b6bbb86
--- /dev/null
@@ -0,0 +1,10 @@
+# ErgoDox 80 Default Configuration
+
+This is based on the default Ergodox EZ keymap.
+The difference is that this keymap supports 80 key layouts.
+If you own an 80 key Ergodox, use this as an example to get your desired keymap.
+
+**NOTE:** This layout is not physically supported by the Ergodox EZ.
+
+
+![Default80](ergodox80.png)
diff --git a/keyboards/ergodox/ez/keymaps/steno/Makefile b/keyboards/ergodox/ez/keymaps/steno/Makefile
new file mode 100644 (file)
index 0000000..b6fb9b1
--- /dev/null
@@ -0,0 +1,3 @@
+VIRTSER_ENABLE = yes
+# Not enough interupts, so something has to go
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/ergodox/ez/keymaps/steno/keymap.c b/keyboards/ergodox/ez/keymaps/steno/keymap.c
new file mode 100644 (file)
index 0000000..3e98309
--- /dev/null
@@ -0,0 +1,324 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "sendchar.h"
+#include "virtser.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define TXBOLT 3 // TxBolt Steno Virtual Serial
+#define TXBOLT2 4 // TxBolt Steno Virtual Serial Alternative Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  TX  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           | BOLT |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(TXBOLT),  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | RESET  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+// TxBolt Codes
+#define Sl 0b00000001
+#define Tl 0b00000010
+#define Kl 0b00000100
+#define Pl 0b00001000
+#define Wl 0b00010000
+#define Hl 0b00100000
+#define Rl 0b01000001
+#define Al 0b01000010
+#define Ol 0b01000100
+#define X  0b01001000
+#define Er 0b01010000
+#define Ur 0b01100000
+#define Fr 0b10000001
+#define Rr 0b10000010
+#define Pr 0b10000100
+#define Br 0b10001000
+#define Lr 0b10010000
+#define Gr 0b10100000
+#define Tr 0b11000001
+#define Sr 0b11000010
+#define Dr 0b11000100
+#define Zr 0b11001000
+#define NM 0b11010000
+#define GRPMASK 0b11000000
+#define GRP0 0b00000000
+#define GRP1 0b01000000
+#define GRP2 0b10000000
+#define GRP3 0b11000000
+/* Keymap 3: TxBolt (Serial)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | BKSPC  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   #  |   #  |   #  |   #  |   #  |      |           |      |   #  |   #  |   #  |   #  |   #  |   #    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   T  |   P  |   H  |   *  |------|           |------|   *  |   F  |   P  |   L  |   T  |   D    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   K  |   W  |   R  |   *  |      |           |      |   *  |   R  |   B  |   G  |   S  |   Z    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   A  |   O  |------|       |------|   E  |   U  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// TxBolt over Serial
+[TXBOLT] = KEYMAP(
+       KC_BSPC, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,  
+       KC_NO,   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),  KC_NO,  
+       KC_NO,   M(Sl),   M(Tl),   M(Pl),   M(Hl),   M(X),
+       KC_NO,   M(Sl),   M(Kl),   M(Wl),   M(Rl),   M(X),   KC_NO,
+       KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+                                           KC_NO,   KC_NO,  
+                                                    KC_NO,  
+                                  M(Al),   M(Ol),   KC_NO,  
+    // right hand
+       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,  
+       KC_TRNS,  M(NM),   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),
+                 M(X),    M(Fr),   M(Pr),   M(Lr),   M(Tr),   M(Dr),
+       KC_NO,    M(X),    M(Rr),   M(Br),   M(Gr),   M(Sr),   M(Zr),
+                          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,  
+       KC_NO,   KC_NO,  
+       KC_NO,  
+       KC_NO,   M(Er),   M(Ur)
+),
+/* Keymap 4: TxBolt (Serial) Alternative
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |   #  |   #  |   #  |   #  |   #  |      |           |      |   #  |   #  |   #  |   #  |   #  |   #    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   S  |   T  |   P  |   H  |   *  |      |           |      |   *  |   F  |   P  |   L  |   T  |   D    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   K  |   W  |   R  |   *  |------|           |------|   *  |   R  |   B  |   G  |   S  |   Z    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |   A  |   O  |                                       |   E  |   U  |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// TxBolt over Serial
+[TXBOLT2] = KEYMAP(
+       KC_NO,   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),  KC_NO,  
+       KC_NO,   M(Sl),   M(Tl),   M(Pl),   M(Hl),   M(X),   KC_NO,  
+       KC_NO,   M(Sl),   M(Kl),   M(Wl),   M(Rl),   M(X),
+       KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,  
+       KC_NO,   KC_NO,   KC_NO,   M(Al),   M(Ol),
+                                           KC_NO,   KC_NO,  
+                                                    KC_NO,  
+                                  KC_NO,   KC_NO,   KC_NO,  
+    // right hand
+       KC_NO,    M(NM),   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),
+       KC_TRNS,  M(X),    M(Fr),   M(Pr),   M(Lr),   M(Tr),   M(Dr),
+                 M(X),    M(Rr),   M(Br),   M(Gr),   M(Sr),   M(Zr),
+       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,  
+                          M(Er),   M(Ur),   KC_NO,   KC_NO,   KC_NO,  
+       KC_NO,   KC_NO,  
+       KC_NO,  
+       KC_NO,   KC_NO,   KC_NO
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+uint8_t chord[4] = {0,0,0,0};
+uint8_t pressed_count = 0;
+
+void send_chord(void)
+{
+  for(uint8_t i = 0; i < 4; i++)
+  {
+    if(chord[i])
+      virtser_send(chord[i]);
+  }
+  virtser_send(0);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+  // We need to track keypresses in all modes, in case the user
+  // changes mode whilst pressing other keys.
+  if (record->event.pressed)
+    pressed_count++;
+  else
+    pressed_count--;
+  return true;
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+
+  if (record->event.pressed) {
+    uint8_t grp = (id & GRPMASK) >> 6;
+    chord[grp] |= id;
+  }
+  else {
+    if (pressed_count == 0) {
+      send_chord();
+      chord[0] = chord[1] = chord[2] = chord[3] = 0;
+    }
+  }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/ez/keymaps/steno/readme.md b/keyboards/ergodox/ez/keymaps/steno/readme.md
new file mode 100644 (file)
index 0000000..d67cde2
--- /dev/null
@@ -0,0 +1,92 @@
+# ErgoDox EZ Steno Configuration
+
+This layout has a layer that uses the TxBolt Stenograph protocol over a Virtual Serial port. It requires something like Plover in order to function.
+
+In Plover, you can select TX Bolt as the Stenotype Machine, and find the COM port that was assigned. In this way, your regular keyboard will still function normally, and you can switch back and forth between the Steno and Keyboard layers.
+
+<pre><code>
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  TX  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           | BOLT |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+/* Keymap 2: Media keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | RESET  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+/* Keymap 3: TxBolt (Serial)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | BKSPC  |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   #  |   #  |   #  |   #  |   #  |      |           |      |   #  |   #  |   #  |   #  |   #  |   #    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   T  |   P  |   H  |   *  |------|           |------|   *  |   F  |   P  |   L  |   T  |   D    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   S  |   K  |   W  |   R  |   *  |      |           |      |   *  |   R  |   B  |   G  |   S  |   Z    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   A  |   O  |------|       |------|   E  |   U  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+</code></pre>
diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c
new file mode 100644 (file)
index 0000000..43f5152
--- /dev/null
@@ -0,0 +1,382 @@
+/*
+
+Note for ErgoDox EZ customizers: Here be dragons!
+This is not a file you want to be messing with.
+All of the interesting stuff for you is under keymaps/ :)
+Love, Erez
+
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "ez.h"
+#include "i2cmaster.h"
+#ifdef DEBUG_MATRIX_SCAN_RATE
+#include  "timer.h"
+#endif
+
+/*
+ * This constant define not debouncing time in msecs, but amount of matrix
+ * scan loops which should be made to get stable debounced results.
+ *
+ * On Ergodox matrix scan rate is relatively low, because of slow I2C.
+ * Now it's only 317 scans/second, or about 3.15 msec/scan.
+ * According to Cherry specs, debouncing time is 5 msec.
+ *
+ * And so, there is no sense to have DEBOUNCE higher than 2.
+ */
+
+#ifndef DEBOUNCE
+#   define DEBOUNCE    5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+static uint8_t mcp23018_reset_loop;
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+uint32_t matrix_timer;
+uint32_t matrix_scan_count;
+#endif
+
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+  matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+  matrix_scan_user();
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+    return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+    return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+    // initialize row and col
+
+    mcp23018_status = init_mcp23018();
+
+
+    unselect_rows();
+    init_cols();
+
+    // initialize matrix state: all keys off
+    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+        matrix[i] = 0;
+        matrix_debouncing[i] = 0;
+    }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    matrix_timer = timer_read32();
+    matrix_scan_count = 0;
+#endif
+
+    matrix_init_quantum();
+
+}
+
+void matrix_power_up(void) {
+    mcp23018_status = init_mcp23018();
+
+    unselect_rows();
+    init_cols();
+
+    // initialize matrix state: all keys off
+    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+        matrix[i] = 0;
+        matrix_debouncing[i] = 0;
+    }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    matrix_timer = timer_read32();
+    matrix_scan_count = 0;
+#endif
+
+}
+
+uint8_t matrix_scan(void)
+{
+    if (mcp23018_status) { // if there was an error
+        if (++mcp23018_reset_loop == 0) {
+            // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+            // this will be approx bit more frequent than once per second
+            print("trying to reset mcp23018\n");
+            mcp23018_status = init_mcp23018();
+            if (mcp23018_status) {
+                print("left side not responding\n");
+            } else {
+                print("left side attached\n");
+                ergodox_blink_all_leds();
+            }
+        }
+    }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    matrix_scan_count++;
+
+    uint32_t timer_now = timer_read32();
+    if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
+        print("matrix scan frequency: ");
+        pdec(matrix_scan_count);
+        print("\n");
+
+        matrix_timer = timer_now;
+        matrix_scan_count = 0;
+    }
+#endif
+
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        select_row(i);
+        wait_us(30);  // without this wait read unstable value.
+        matrix_row_t cols = read_cols(i);
+        if (matrix_debouncing[i] != cols) {
+            matrix_debouncing[i] = cols;
+            if (debouncing) {
+                debug("bounce!: "); debug_hex(debouncing); debug("\n");
+            }
+            debouncing = DEBOUNCE;
+        }
+        unselect_rows();
+    }
+
+    if (debouncing) {
+        if (--debouncing) {
+            wait_us(1);
+            // this should be wait_ms(1) but has been left as-is at EZ's request
+        } else {
+            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+                matrix[i] = matrix_debouncing[i];
+            }
+        }
+    }
+
+    matrix_scan_quantum();
+
+    return 1;
+}
+
+bool matrix_is_modified(void)
+{
+    if (debouncing) return false;
+    return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+    return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+    return matrix[row];
+}
+
+void matrix_print(void)
+{
+    print("\nr/c 0123456789ABCDEF\n");
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+        phex(row); print(": ");
+        pbin_reverse16(matrix_get_row(row));
+        print("\n");
+    }
+}
+
+uint8_t matrix_key_count(void)
+{
+    uint8_t count = 0;
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        count += bitpop16(matrix[i]);
+    }
+    return count;
+}
+
+/* Column pin configuration
+ *
+ * Teensy
+ * col: 0   1   2   3   4   5
+ * pin: F0  F1  F4  F5  F6  F7
+ *
+ * MCP23018
+ * col: 0   1   2   3   4   5
+ * pin: B5  B4  B3  B2  B1  B0
+ */
+static void  init_cols(void)
+{
+    // init on mcp23018
+    // not needed, already done as part of init_mcp23018()
+
+    // init on teensy
+    // Input with pull-up(DDR:0, PORT:1)
+    DDRF  &= ~(1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
+    PORTF |=  (1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
+}
+
+static matrix_row_t read_cols(uint8_t row)
+{
+    if (row < 7) {
+        if (mcp23018_status) { // if there was an error
+            return 0;
+        } else {
+            uint8_t data = 0;
+            mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
+            mcp23018_status = i2c_write(GPIOB);             if (mcp23018_status) goto out;
+            mcp23018_status = i2c_start(I2C_ADDR_READ);     if (mcp23018_status) goto out;
+            data = i2c_readNak();
+            data = ~data;
+        out:
+            i2c_stop();
+            return data;
+        }
+    } else {
+        // read from teensy
+        return
+            (PINF&(1<<0) ? 0 : (1<<0)) |
+            (PINF&(1<<1) ? 0 : (1<<1)) |
+            (PINF&(1<<4) ? 0 : (1<<2)) |
+            (PINF&(1<<5) ? 0 : (1<<3)) |
+            (PINF&(1<<6) ? 0 : (1<<4)) |
+            (PINF&(1<<7) ? 0 : (1<<5)) ;
+    }
+}
+
+/* Row pin configuration
+ *
+ * Teensy
+ * row: 7   8   9   10  11  12  13
+ * pin: B0  B1  B2  B3  D2  D3  C6
+ *
+ * MCP23018
+ * row: 0   1   2   3   4   5   6
+ * pin: A0  A1  A2  A3  A4  A5  A6
+ */
+static void unselect_rows(void)
+{
+    // unselect on mcp23018
+    if (mcp23018_status) { // if there was an error
+        // do nothing
+    } else {
+        // set all rows hi-Z : 1
+        mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
+        mcp23018_status = i2c_write(GPIOA);             if (mcp23018_status) goto out;
+        mcp23018_status = i2c_write( 0xFF
+                              & ~(0<<7)
+                          );                            if (mcp23018_status) goto out;
+    out:
+        i2c_stop();
+    }
+
+    // unselect on teensy
+    // Hi-Z(DDR:0, PORT:0) to unselect
+    DDRB  &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
+    PORTB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
+    DDRD  &= ~(1<<2 | 1<<3);
+    PORTD &= ~(1<<2 | 1<<3);
+    DDRC  &= ~(1<<6);
+    PORTC &= ~(1<<6);
+}
+
+static void select_row(uint8_t row)
+{
+    if (row < 7) {
+        // select on mcp23018
+        if (mcp23018_status) { // if there was an error
+            // do nothing
+        } else {
+            // set active row low  : 0
+            // set other rows hi-Z : 1
+            mcp23018_status = i2c_start(I2C_ADDR_WRITE);        if (mcp23018_status) goto out;
+            mcp23018_status = i2c_write(GPIOA);                 if (mcp23018_status) goto out;
+            mcp23018_status = i2c_write( 0xFF & ~(1<<row)
+                                  & ~(0<<7)
+                              );                                if (mcp23018_status) goto out;
+        out:
+            i2c_stop();
+        }
+    } else {
+        // select on teensy
+        // Output low(DDR:1, PORT:0) to select
+        switch (row) {
+            case 7:
+                DDRB  |= (1<<0);
+                PORTB &= ~(1<<0);
+                break;
+            case 8:
+                DDRB  |= (1<<1);
+                PORTB &= ~(1<<1);
+                break;
+            case 9:
+                DDRB  |= (1<<2);
+                PORTB &= ~(1<<2);
+                break;
+            case 10:
+                DDRB  |= (1<<3);
+                PORTB &= ~(1<<3);
+                break;
+            case 11:
+                DDRD  |= (1<<2);
+                PORTD &= ~(1<<3);
+                break;
+            case 12:
+                DDRD  |= (1<<3);
+                PORTD &= ~(1<<3);
+                break;
+            case 13:
+                DDRC  |= (1<<6);
+                PORTC &= ~(1<<6);
+                break;
+        }
+    }
+}
+
diff --git a/keyboards/ergodox/ez/rules.mk b/keyboards/ergodox/ez/rules.mk
new file mode 100644 (file)
index 0000000..893cfa7
--- /dev/null
@@ -0,0 +1,80 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make = Make software.
+#
+# make clean = Clean out built project files.
+#
+# That's pretty much all you need. To compile, always go make clean, 
+# followed by make.
+#
+# For advanced users only:
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+#----------------------------------------------------------------------------
+
+# # project specific files
+SRC = twimaster.c \
+         matrix.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   comment out to disable the options.
+#
+
+SLEEP_LED_ENABLE = no
+API_SYSEX_ENABLE ?= yes
+RGBLIGHT_ENABLE ?= yes
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
diff --git a/keyboards/ergodox/ez/twimaster.c b/keyboards/ergodox/ez/twimaster.c
new file mode 100644 (file)
index 0000000..f91c08e
--- /dev/null
@@ -0,0 +1,208 @@
+/*************************************************************************
+* Title:    I2C master library using hardware TWI interface
+* Author:   Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
+* File:     $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $
+* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
+* Target:   any AVR device with hardware TWI 
+* Usage:    API compatible with I2C Software Library i2cmaster.h
+**************************************************************************/
+#include <inttypes.h>
+#include <compat/twi.h>
+
+#include <i2cmaster.h>
+
+
+/* define CPU frequency in Mhz here if not defined in Makefile */
+#ifndef F_CPU
+#define F_CPU 16000000UL
+#endif
+
+/* I2C clock in Hz */
+#define SCL_CLOCK  400000L
+
+
+/*************************************************************************
+ Initialization of the I2C bus interface. Need to be called only once
+*************************************************************************/
+void i2c_init(void)
+{
+  /* initialize TWI clock
+   * minimal values in Bit Rate Register (TWBR) and minimal Prescaler
+   * bits in the TWI Status Register should give us maximal possible
+   * I2C bus speed - about 444 kHz
+   *
+   * for more details, see 20.5.2 in ATmega16/32 secification
+   */
+  
+  TWSR = 0;     /* no prescaler */
+  TWBR = 10;    /* must be >= 10 for stable operation */
+
+}/* i2c_init */
+
+
+/*************************************************************************     
+  Issues a start condition and sends address and transfer direction.
+  return 0 = device accessible, 1= failed to access device
+*************************************************************************/
+unsigned char i2c_start(unsigned char address)
+{
+    uint8_t   twst;
+
+       // send START condition
+       TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+
+       // wait until transmission completed
+       while(!(TWCR & (1<<TWINT)));
+
+       // check value of TWI Status Register. Mask prescaler bits.
+       twst = TW_STATUS & 0xF8;
+       if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
+
+       // send device address
+       TWDR = address;
+       TWCR = (1<<TWINT) | (1<<TWEN);
+
+       // wail until transmission completed and ACK/NACK has been received
+       while(!(TWCR & (1<<TWINT)));
+
+       // check value of TWI Status Register. Mask prescaler bits.
+       twst = TW_STATUS & 0xF8;
+       if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
+
+       return 0;
+
+}/* i2c_start */
+
+
+/*************************************************************************
+ Issues a start condition and sends address and transfer direction.
+ If device is busy, use ack polling to wait until device is ready
+ Input:   address and transfer direction of I2C device
+*************************************************************************/
+void i2c_start_wait(unsigned char address)
+{
+    uint8_t   twst;
+
+
+    while ( 1 )
+    {
+           // send START condition
+           TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+    
+       // wait until transmission completed
+       while(!(TWCR & (1<<TWINT)));
+    
+       // check value of TWI Status Register. Mask prescaler bits.
+       twst = TW_STATUS & 0xF8;
+       if ( (twst != TW_START) && (twst != TW_REP_START)) continue;
+    
+       // send device address
+       TWDR = address;
+       TWCR = (1<<TWINT) | (1<<TWEN);
+    
+       // wail until transmission completed
+       while(!(TWCR & (1<<TWINT)));
+    
+       // check value of TWI Status Register. Mask prescaler bits.
+       twst = TW_STATUS & 0xF8;
+       if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) ) 
+       {           
+           /* device busy, send stop condition to terminate write operation */
+               TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+               
+               // wait until stop condition is executed and bus released
+               while(TWCR & (1<<TWSTO));
+               
+           continue;
+       }
+       //if( twst != TW_MT_SLA_ACK) return 1;
+       break;
+     }
+
+}/* i2c_start_wait */
+
+
+/*************************************************************************
+ Issues a repeated start condition and sends address and transfer direction 
+
+ Input:   address and transfer direction of I2C device
+ Return:  0 device accessible
+          1 failed to access device
+*************************************************************************/
+unsigned char i2c_rep_start(unsigned char address)
+{
+    return i2c_start( address );
+
+}/* i2c_rep_start */
+
+
+/*************************************************************************
+ Terminates the data transfer and releases the I2C bus
+*************************************************************************/
+void i2c_stop(void)
+{
+    /* send stop condition */
+       TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+       
+       // wait until stop condition is executed and bus released
+       while(TWCR & (1<<TWSTO));
+
+}/* i2c_stop */
+
+
+/*************************************************************************
+  Send one byte to I2C device
+  
+  Input:    byte to be transfered
+  Return:   0 write successful 
+            1 write failed
+*************************************************************************/
+unsigned char i2c_write( unsigned char data )
+{      
+    uint8_t   twst;
+    
+       // send data to the previously addressed device
+       TWDR = data;
+       TWCR = (1<<TWINT) | (1<<TWEN);
+
+       // wait until transmission completed
+       while(!(TWCR & (1<<TWINT)));
+
+       // check value of TWI Status Register. Mask prescaler bits
+       twst = TW_STATUS & 0xF8;
+       if( twst != TW_MT_DATA_ACK) return 1;
+       return 0;
+
+}/* i2c_write */
+
+
+/*************************************************************************
+ Read one byte from the I2C device, request more data from device 
+ Return:  byte read from I2C device
+*************************************************************************/
+unsigned char i2c_readAck(void)
+{
+       TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
+       while(!(TWCR & (1<<TWINT)));    
+
+    return TWDR;
+
+}/* i2c_readAck */
+
+
+/*************************************************************************
+ Read one byte from the I2C device, read is followed by a stop condition 
+ Return:  byte read from I2C device
+*************************************************************************/
+unsigned char i2c_readNak(void)
+{
+       TWCR = (1<<TWINT) | (1<<TWEN);
+       while(!(TWCR & (1<<TWINT)));
+       
+    return TWDR;
+
+}/* i2c_readNak */
diff --git a/keyboards/ergodox/ez/util/compile_keymap.py b/keyboards/ergodox/ez/util/compile_keymap.py
new file mode 100644 (file)
index 0000000..7076a6e
--- /dev/null
@@ -0,0 +1,710 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Compiler for keymap.c files
+
+This scrip will generate a keymap.c file from a simple
+markdown file with a specific layout.
+
+Usage:
+    python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
+"""
+from __future__ import division
+from __future__ import print_function
+from __future__ import absolute_import
+from __future__ import unicode_literals
+
+import os
+import io
+import re
+import sys
+import json
+import unicodedata
+import collections
+import itertools as it
+
+PY2 = sys.version_info.major == 2
+
+if PY2:
+    chr = unichr
+
+
+KEYBOARD_LAYOUTS = {
+    # These map positions in the parsed layout to
+    # positions in the KEYMAP MATRIX
+    'ergodox_ez': [
+        [ 0,  1,  2,  3,  4,  5,  6],  [38, 39, 40, 41, 42, 43, 44],
+        [ 7,  8,  9, 10, 11, 12, 13],  [45, 46, 47, 48, 49, 50, 51],
+        [14, 15, 16, 17, 18, 19    ],  [    52, 53, 54, 55, 56, 57],
+        [20, 21, 22, 23, 24, 25, 26],  [58, 59, 60, 61, 62, 63, 64],
+        [27, 28, 29, 30, 31        ],  [        65, 66, 67, 68, 69],
+        [                    32, 33],  [70, 71                    ],
+        [                        34],  [72                        ],
+        [                35, 36, 37],  [73, 74, 75                ],
+    ]
+}
+
+ROW_INDENTS = {
+    'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0]
+}
+
+BLANK_LAYOUTS = [
+# Compact Layout
+"""
+.------------------------------------.------------------------------------.
+|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+|     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
+!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ |    |    |    |    |    |                     !    |    |    |    |    |
+ '------------------------'                     '------------------------'
+                        .-----------. .-----------.
+                        |     |     | !     |     |
+                  .-----+-----+-----! !-----+-----+-----.
+                  !     !     |     | !     |     !     !
+                  !     !     !-----! !-----!     !     !
+                  |     |     |     | !     |     |     |
+                  '-----------------' '-----------------'
+""",
+
+# Wide Layout
+"""
+.---------------------------------------------. .---------------------------------------------.
+|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
+!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
+!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
+|       |     |     |     |     |     |-------! !-------!     |     |     |     |     |       |
+!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
+|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
+'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ |      |     |     |     |     |                             !     |     |     |     |      |
+ '------------------------------'                             '------------------------------'
+                              .---------------. .---------------.
+                              |       |       | !       |       |
+                      .-------+-------+-------! !-------+-------+-------.
+                      !       !       |       | !       |       !       !
+                      !       !       !-------! !-------!       !       !
+                      |       |       |       | !       |       |       |
+                      '-----------------------' '-----------------------'
+""",
+]
+
+
+DEFAULT_CONFIG = {
+    "keymaps_includes": [
+        "keymap_common.h",
+    ],
+    'filler': "-+.'!:x",
+    'separator': "|",
+    'default_key_prefix': ["KC_"],
+}
+
+
+SECTIONS = [
+    'layout_config',
+    'layers',
+]
+
+
+#       Markdown Parsing
+
+ONELINE_COMMENT_RE = re.compile(r"""
+    ^                       # comment must be at the start of the line
+    \s*                     # arbitrary whitespace
+    //                      # start of the comment
+    (.*)                    # the comment
+    $                       # until the end of line
+""", re.MULTILINE | re.VERBOSE
+)
+
+INLINE_COMMENT_RE = re.compile(r"""
+    ([\,\"\[\]\{\}\d])      # anythig that might end a expression
+    \s+                     # comment must be preceded by whitespace
+    //                      # start of the comment
+    \s                      # and succeded by whitespace
+    (?:[^\"\]\}\{\[]*)      # the comment (except things which might be json)
+    $                       # until the end of line
+""", re.MULTILINE | re.VERBOSE)
+
+TRAILING_COMMA_RE = re.compile(r"""
+    ,                       # the comma
+    (?:\s*)                 # arbitrary whitespace
+    $                       # only works if the trailing comma is followed by newline
+    (\s*)                   # arbitrary whitespace
+    ([\]\}])                # end of an array or object
+""", re.MULTILINE | re.VERBOSE)
+
+
+def loads(raw_data):
+    if isinstance(raw_data, bytes):
+        raw_data = raw_data.decode('utf-8')
+
+    raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
+    raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
+    raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
+    return json.loads(raw_data)
+
+
+def parse_config(path):
+    def reset_section():
+        section.update({
+            'name': section.get('name', ""),
+            'sub_name': "",
+            'start_line': -1,
+            'end_line': -1,
+            'code_lines': [],
+        })
+
+    def start_section(line_index, line):
+        end_section()
+        if line.startswith("# "):
+            name = line[2:]
+        elif line.startswith("## "):
+            name = line[3:]
+        else:
+            name = ""
+
+        name = name.strip().replace(" ", "_").lower()
+        if name in SECTIONS:
+            section['name'] = name
+        else:
+            section['sub_name'] = name
+        section['start_line'] = line_index
+
+    def end_section():
+        if section['start_line'] >= 0:
+            if section['name'] == 'layout_config':
+                config.update(loads("\n".join(
+                    section['code_lines']
+                )))
+            elif section['sub_name'].startswith('layer'):
+                layer_name = section['sub_name']
+                config['layer_lines'][layer_name] = section['code_lines']
+
+        reset_section()
+
+    def amend_section(line_index, line):
+        section['end_line'] = line_index
+        section['code_lines'].append(line)
+
+    config = DEFAULT_CONFIG.copy()
+    config.update({
+        'layer_lines': collections.OrderedDict(),
+        'macro_ids': {'UM'},
+        'unicode_macros': {},
+    })
+
+    section = {}
+    reset_section()
+
+    with io.open(path, encoding="utf-8") as fh:
+        for i, line in enumerate(fh):
+            if line.startswith("#"):
+                start_section(i, line)
+            elif line.startswith("    "):
+                amend_section(i, line[4:])
+            else:
+                # TODO: maybe parse description
+                pass
+
+    end_section()
+    assert 'layout' in config
+    return config
+
+#       header file parsing
+
+IF0_RE = re.compile(r"""
+    ^
+    #if 0
+    $.*?
+    #endif
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+COMMENT_RE = re.compile(r"""
+    /\*
+    .*?
+    \*/"
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+def read_header_file(path):
+    with io.open(path, encoding="utf-8") as fh:
+        data = fh.read()
+    data, _ = COMMENT_RE.subn("", data)
+    data, _ = IF0_RE.subn("", data)
+    return data
+
+
+def regex_partial(re_str_fmt, flags):
+    def partial(*args, **kwargs):
+        re_str = re_str_fmt.format(*args, **kwargs)
+        return re.compile(re_str, flags)
+    return partial
+
+
+KEYDEF_REP = regex_partial(r"""
+    #define
+    \s
+    (
+        (?:{})          # the prefixes
+        (?:\w+)         # the key name
+    )                   # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+ENUM_RE = re.compile(r"""
+    (
+        enum
+        \s\w+\s
+        \{
+        .*?             # the enum content
+        \}
+        ;
+    )                   # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+ENUM_KEY_REP = regex_partial(r"""
+    (
+        {}              # the prefixes
+        \w+             # the key name
+    )                   # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+def parse_keydefs(config, data):
+    prefix_options = "|".join(config['key_prefixes'])
+    keydef_re = KEYDEF_REP(prefix_options)
+    enum_key_re = ENUM_KEY_REP(prefix_options)
+    for match in keydef_re.finditer(data):
+        yield match.groups()[0]
+
+    for enum_match in ENUM_RE.finditer(data):
+        enum = enum_match.groups()[0]
+        for key_match in enum_key_re.finditer(enum):
+            yield key_match.groups()[0]
+
+
+def parse_valid_keys(config, out_path):
+    basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
+    dirpaths = []
+    subpaths = []
+    while len(subpaths) < 6:
+        path = os.path.join(basepath, *subpaths)
+        dirpaths.append(path)
+        dirpaths.append(os.path.join(path, "tmk_core", "common"))
+        dirpaths.append(os.path.join(path, "quantum"))
+        subpaths.append('..')
+
+    includes = set(config['keymaps_includes'])
+    includes.add("keycode.h")
+
+    valid_keycodes = set()
+    for dirpath, include in it.product(dirpaths, includes):
+        include_path = os.path.join(dirpath, include)
+        if os.path.exists(include_path):
+            header_data = read_header_file(include_path)
+            valid_keycodes.update(
+                parse_keydefs(config, header_data)
+            )
+    return valid_keycodes
+
+
+#       Keymap Parsing
+
+def iter_raw_codes(layer_lines, filler, separator):
+    filler_re = re.compile("[" + filler + " ]")
+    for line in layer_lines:
+        line, _ = filler_re.subn("", line.strip())
+        if not line:
+            continue
+        codes = line.split(separator)
+        for code in codes[1:-1]:
+            yield code
+
+
+def iter_indexed_codes(raw_codes, key_indexes):
+    key_rows = {}
+    key_indexes_flat = []
+
+    for row_index, key_indexes in enumerate(key_indexes):
+        for key_index in key_indexes:
+            key_rows[key_index] = row_index
+        key_indexes_flat.extend(key_indexes)
+    assert len(raw_codes) == len(key_indexes_flat)
+    for raw_code, key_index in zip(raw_codes, key_indexes_flat):
+        # we keep track of the row mostly for layout purposes
+        yield raw_code, key_index, key_rows[key_index]
+
+
+LAYER_CHANGE_RE = re.compile(r"""
+    (DF|TG|MO)\(\d+\)
+""", re.VERBOSE)
+
+
+MACRO_RE = re.compile(r"""
+    M\(\w+\)
+""", re.VERBOSE)
+
+
+UNICODE_RE = re.compile(r"""
+    U[0-9A-F]{4}
+""", re.VERBOSE)
+
+
+NON_CODE = re.compile(r"""
+    ^[^A-Z0-9_]$
+""", re.VERBOSE)
+
+
+def parse_uni_code(raw_code):
+    macro_id = "UC_" + (
+        unicodedata.name(raw_code)
+        .replace(" ", "_")
+        .replace("-", "_")
+    )
+    code = "M({})".format(macro_id)
+    uc_hex = "{:04X}".format(ord(raw_code))
+    return code, macro_id, uc_hex
+
+
+def parse_key_code(raw_code, key_prefixes, valid_keycodes):
+    if raw_code in valid_keycodes:
+        return raw_code
+
+    for prefix in key_prefixes:
+        code = prefix + raw_code
+        if code in valid_keycodes:
+            return code
+
+
+def parse_code(raw_code, key_prefixes, valid_keycodes):
+    if not raw_code:
+        return 'KC_TRNS', None, None
+
+    if LAYER_CHANGE_RE.match(raw_code):
+        return raw_code, None, None
+
+    if MACRO_RE.match(raw_code):
+        macro_id = raw_code[2:-1]
+        return raw_code, macro_id, None
+
+    if UNICODE_RE.match(raw_code):
+        hex_code = raw_code[1:]
+        return parse_uni_code(chr(int(hex_code, 16)))
+
+    if NON_CODE.match(raw_code):
+        return parse_uni_code(raw_code)
+
+    code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
+    return code, None, None
+
+
+def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
+    keymap = {}
+    raw_codes = list(iter_raw_codes(
+        layer_lines, config['filler'], config['separator']
+    ))
+    indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
+    key_prefixes = config['key_prefixes']
+    for raw_code, key_index, row_index in indexed_codes:
+        code, macro_id, uc_hex = parse_code(
+            raw_code, key_prefixes, valid_keycodes
+        )
+        # TODO: line numbers for invalid codes
+        err_msg = "Could not parse key '{}' on row {}".format(
+            raw_code, row_index
+        )
+        assert code is not None, err_msg
+        # print(repr(raw_code), repr(code), macro_id, uc_hex)
+        if macro_id:
+            config['macro_ids'].add(macro_id)
+        if uc_hex:
+            config['unicode_macros'][macro_id] = uc_hex
+        keymap[key_index] = (code, row_index)
+    return keymap
+
+
+def parse_keymaps(config, valid_keycodes):
+    keymaps = collections.OrderedDict()
+    key_indexes = config.get(
+        'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
+    )
+    # TODO: maybe validate key_indexes
+
+    for layer_name, layer_lines, in config['layer_lines'].items():
+        keymaps[layer_name] = parse_keymap(
+            config, key_indexes, layer_lines, valid_keycodes
+        )
+    return keymaps
+
+#       keymap.c output
+
+USERCODE = """
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case L1:
+            ergodox_right_led_1_on();
+            break;
+        case L2:
+            ergodox_right_led_2_on();
+            break;
+        case L3:
+            ergodox_right_led_3_on();
+            break;
+        case L4:
+            ergodox_right_led_1_on();
+            ergodox_right_led_2_on();
+            break;
+        case L5:
+            ergodox_right_led_1_on();
+            ergodox_right_led_3_on();
+            break;
+        // case L6:
+        //     ergodox_right_led_2_on();
+        //     ergodox_right_led_3_on();
+        //     break;
+        // case L7:
+        //     ergodox_right_led_1_on();
+        //     ergodox_right_led_2_on();
+        //     ergodox_right_led_3_on();
+        //     break;
+        default:
+            ergodox_board_led_off();
+            break;
+    }
+};
+"""
+
+MACROCODE = """
+#define UC_MODE_WIN 0
+#define UC_MODE_LINUX 1
+#define UC_MODE_OSX 2
+
+// TODO: allow default mode to be configured
+static uint16_t unicode_mode = UC_MODE_WIN;
+
+uint16_t hextokeycode(uint8_t hex) {{
+    if (hex == 0x0) {{
+        return KC_P0;
+    }}
+    if (hex < 0xA) {{
+        return KC_P1 + (hex - 0x1);
+    }}
+    return KC_A + (hex - 0xA);
+}}
+
+void unicode_action_function(uint16_t hi, uint16_t lo) {{
+    switch (unicode_mode) {{
+    case UC_MODE_WIN:
+        register_code(KC_LALT);
+
+        register_code(KC_PPLS);
+        unregister_code(KC_PPLS);
+
+        register_code(hextokeycode((hi & 0xF0) >> 4));
+        unregister_code(hextokeycode((hi & 0xF0) >> 4));
+        register_code(hextokeycode((hi & 0x0F)));
+        unregister_code(hextokeycode((hi & 0x0F)));
+        register_code(hextokeycode((lo & 0xF0) >> 4));
+        unregister_code(hextokeycode((lo & 0xF0) >> 4));
+        register_code(hextokeycode((lo & 0x0F)));
+        unregister_code(hextokeycode((lo & 0x0F)));
+
+        unregister_code(KC_LALT);
+        break;
+    case UC_MODE_LINUX:
+        register_code(KC_LCTL);
+        register_code(KC_LSFT);
+
+        register_code(KC_U);
+        unregister_code(KC_U);
+
+        register_code(hextokeycode((hi & 0xF0) >> 4));
+        unregister_code(hextokeycode((hi & 0xF0) >> 4));
+        register_code(hextokeycode((hi & 0x0F)));
+        unregister_code(hextokeycode((hi & 0x0F)));
+        register_code(hextokeycode((lo & 0xF0) >> 4));
+        unregister_code(hextokeycode((lo & 0xF0) >> 4));
+        register_code(hextokeycode((lo & 0x0F)));
+        unregister_code(hextokeycode((lo & 0x0F)));
+
+        unregister_code(KC_LCTL);
+        unregister_code(KC_LSFT);
+        break;
+    case UC_MODE_OSX:
+        break;
+    }}
+}}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
+    if (!record->event.pressed) {{
+        return MACRO_NONE;
+    }}
+    // MACRODOWN only works in this function
+    switch(id) {{
+        case UM:
+            unicode_mode = (unicode_mode + 1) % 2;
+            break;
+{macro_cases}
+{unicode_macro_cases}
+        default:
+            break;
+    }}
+    return MACRO_NONE;
+}};
+"""
+
+
+UNICODE_MACRO_TEMPLATE = """
+case {macro_id}:
+    unicode_action_function(0x{hi:02x}, 0x{lo:02x});
+    break;
+""".strip()
+
+
+def unicode_macro_cases(config):
+    for macro_id, uc_hex in config['unicode_macros'].items():
+        hi = int(uc_hex, 16) >> 8
+        lo = int(uc_hex, 16) & 0xFF
+        unimacro_keys = ", ".join(
+            "T({})".format(
+                "KP_" + digit if digit.isdigit() else digit
+            ) for digit in uc_hex
+        )
+        yield UNICODE_MACRO_TEMPLATE.format(
+            macro_id=macro_id, hi=hi, lo=lo
+        )
+
+
+def iter_keymap_lines(keymap, row_indents=None):
+    col_widths = {}
+    col = 0
+    # first pass, figure out the column widths
+    prev_row_index = None
+    for code, row_index in keymap.values():
+        if row_index != prev_row_index:
+            col = 0
+            if row_indents:
+                col = row_indents[row_index]
+        col_widths[col] = max(len(code), col_widths.get(col, 0))
+        prev_row_index = row_index
+        col += 1
+
+    # second pass, yield the cell values
+    col = 0
+    prev_row_index = None
+    for key_index in sorted(keymap):
+        code, row_index = keymap[key_index]
+        if row_index != prev_row_index:
+            col = 0
+            yield "\n"
+            if row_indents:
+                for indent_col in range(row_indents[row_index]):
+                    pad = " " * (col_widths[indent_col] - 4)
+                    yield (" /*-*/" + pad)
+                col = row_indents[row_index]
+        else:
+            yield pad
+        yield " {}".format(code)
+        if key_index < len(keymap) - 1:
+            yield ","
+            # This will be yielded on the next iteration when
+            # we know that we're not at the end of a line.
+            pad = " " * (col_widths[col] - len(code))
+        prev_row_index = row_index
+        col += 1
+
+
+def iter_keymap_parts(config, keymaps):
+    # includes
+    for include_path in config['keymaps_includes']:
+        yield '#include "{}"\n'.format(include_path)
+
+    yield "\n"
+
+    # definitions
+    for i, macro_id in enumerate(sorted(config['macro_ids'])):
+        yield "#define {} {}\n".format(macro_id, i)
+
+    yield "\n"
+
+    for i, layer_name in enumerate(config['layer_lines']):
+        yield '#define L{0:<3} {0:<5}  // {1}\n'.format(i, layer_name)
+
+    yield "\n"
+
+    # keymaps
+    yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
+
+    for i, layer_name in enumerate(config['layer_lines']):
+        # comment
+        layer_lines = config['layer_lines'][layer_name]
+        prefixed_lines = " * " + " * ".join(layer_lines)
+        yield "/*\n{} */\n".format(prefixed_lines)
+
+        # keymap codes
+        keymap = keymaps[layer_name]
+        row_indents = ROW_INDENTS.get(config['layout'])
+        keymap_lines = "".join(iter_keymap_lines(keymap, row_indents))
+        yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
+
+    yield "};\n\n"
+
+    # no idea what this is for
+    yield "const uint16_t PROGMEM fn_actions[] = {};\n"
+
+    # macros
+    yield MACROCODE.format(
+        macro_cases="",
+        unicode_macro_cases="\n".join(unicode_macro_cases(config)),
+    )
+
+    # TODO: dynamically create blinking lights
+    yield USERCODE
+
+
+def main(argv=sys.argv[1:]):
+    if not argv or '-h' in argv or '--help' in argv:
+        print(__doc__)
+        return 0
+
+    in_path = os.path.abspath(argv[0])
+    if not os.path.exists(in_path):
+        print("No such file '{}'".format(in_path))
+        return 1
+
+    if len(argv) > 1:
+        out_path = os.path.abspath(argv[1])
+    else:
+        dirname = os.path.dirname(in_path)
+        out_path = os.path.join(dirname, "keymap.c")
+
+    config = parse_config(in_path)
+    valid_keys = parse_valid_keys(config, out_path)
+    keymaps = parse_keymaps(config, valid_keys)
+
+    with io.open(out_path, mode="w", encoding="utf-8") as fh:
+        for part in iter_keymap_parts(config, keymaps):
+            fh.write(part)
+
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/keyboards/ergodox/ez/util/readme.md b/keyboards/ergodox/ez/util/readme.md
new file mode 100644 (file)
index 0000000..26c5e5d
--- /dev/null
@@ -0,0 +1,3 @@
+# ErgoDox EZ Utilities
+
+The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option.
diff --git a/keyboards/ergodox/infinity/MEMO.txt b/keyboards/ergodox/infinity/MEMO.txt
new file mode 100644 (file)
index 0000000..e2886aa
--- /dev/null
@@ -0,0 +1,385 @@
+flabbergast's TMK/ChibiOS port
+==============================
+2015/10/16
+
+
+Build
+-----
+$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
+
+$ cd tmk_keyboard
+$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
+or
+$ cd tmk_keyboard/tmk_core/tool/chibios
+$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
+
+$ cd tmk_keyboard/keyboard/infinity_chibios
+$ make
+
+
+
+
+Chibios Configuration
+---------------------
+halconf.h: for HAL configuration
+    placed in project directory
+    read in chibios/os/hal/hal.mk
+    included in chibios/os/hal/include/hal.h
+mcuconf.h: for MCU configuration
+    placed in project directory
+    included in halconf.h
+
+
+Chibios Term
+------------
+PAL = Port Abstraction Layer
+    palWritePad
+    palReadPad
+    palSetPad
+    chibios/os/hal/include/pal.h
+
+LLD = Low Level Driver
+
+
+Makefile
+--------
+    #   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+    MCU_FAMILY = KINETIS
+    MCU_SERIES = KL2x
+
+    # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+    #   or <this_dir>/ld/
+    MCU_LDSCRIPT = MKL26Z64
+
+    #  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+    MCU_STARTUP = kl2x
+
+    # Board: it should exist either in <chibios>/os/hal/boards/
+    #  or <this_dir>/boards
+    BOARD = PJRC_TEENSY_LC
+
+    MCU  = cortex-m0
+
+    # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+    ARMV = 6
+
+
+halconf.h
+---------
+
+
+mcuconf.h
+---------
+
+
+chconf.h
+--------
+
+
+ld script
+---------
+--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld     2015-10-15 09:08:58.732904304 +0900
++++ ld/MKL26Z64.ld      2015-10-15 08:48:06.430215496 +0900
+@@ -27,7 +27,8 @@
+ {
+   flash0   :  org = 0x00000000,  len = 0xc0
+   flashcfg :  org = 0x00000400,  len = 0x10
+-  flash    :  org = 0x00000410,  len = 64k - 0x410
++  flash    :  org = 0x00000410,  len = 62k - 0x410
++  eeprom_emu : org = 0x0000F800, len = 2k
+   ram      :  org = 0x1FFFF800,  len = 8k
+ }
+
+@@ -35,6 +36,10 @@
+ __ram_size__            = LENGTH(ram);
+ __ram_end__             = __ram_start__ + __ram_size__;
+
++__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
++__eeprom_workarea_size__  = LENGTH(eeprom_emu);
++__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;
++
+ SECTIONS
+ {
+   . = 0;
+
+
+
+Configuration/Startup for Infinity 60%
+--------------------------------------
+Configuration:
+
+
+Clock:
+Inifinity   
+    FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
+    Clock dividor:
+    SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
+    SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
+    SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
+    Internal reference clock:
+    MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
+    MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
+    FLL multipilication:
+    MCG_C4[DMX32] = 1
+    MCG_C4[DRST_DRS] = 01   FLL factor 1464 * 32.768kHz = 48MHz
+
+chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
+    k20x_clock_init(): called in __early_init() defined in board.c
+        disable watchdog and configure clock
+
+        configurable macros:
+        KINETIS_NO_INIT: whether init or not
+        KINETIS_MCG_MODE: clock mode   
+            KINETIS_MCG_MODE_FEI
+            KINETIS_MCG_MODE_PEE
+                hal/ports/KINETIS/K20x/hal_lld.h
+            
+
+chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
+    PALConfig pal_default_config
+    boardInit()
+    __early_init()
+    macro definitions for board infos, freq and mcu type
+
+chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
+
+USB
+
+
+Startup
+-------
+    common/ports/ARMCMx/GCC/crt0_v[67]m.s
+        Reset_Handler: startup code
+    common/ports/ARMCMx/GCC/crt1.c
+        __core_init(): weak
+        __early_init(): weak
+        __late_init(): weak
+        __default_exit(): weak
+            called from Reset_Handler of crt0
+    common/ports/ARMCMx/GCC/vector.c
+    common/ports/ARMCMx/GCC/ld/*.ld
+
+chibios/os/common/ports/ARMCMx/compilers/GCC/
+├── crt0_v6m.s
+├── crt0_v7m.s
+├── crt1.c
+├── ld
+│   ├── MK20DX128BLDR3.ld
+│   ├── MK20DX128BLDR4.ld
+│   ├── MK20DX128.ld
+│   ├── MK20DX256.ld
+│   ├── MKL25Z128.ld
+│   ├── MKL26Z128.ld
+│   ├── MKL26Z64.ld
+│   └── STM32L476xG.ld
+├── mk
+│   ├── startup_k20x5.mk
+│   ├── startup_k20x7.mk
+│   ├── startup_k20x.mk
+│   ├── startup_kl2x.mk
+│   └── startup_stm32l4xx.mk
+├── rules.ld
+├── rules.mk
+└── vectors.c
+
+chibios/os/hal/
+├── boards
+│   ├── FREESCALE_FREEDOM_K20D50M
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── MCHCK_K20
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── PJRC_TEENSY_3
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── PJRC_TEENSY_3_1
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── PJRC_TEENSY_LC
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── readme.txt
+│   ├── simulator
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── ST_NUCLEO_F030R8
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   ├── board.mk
+│   │   └── cfg
+│   │       └── board.chcfg
+├── hal.mk
+├── include
+│   ├── adc.h
+│   ├── can.h
+│   ├── dac.h
+│   ├── ext.h
+│   ├── gpt.h
+│   ├── hal_channels.h
+│   ├── hal_files.h
+│   ├── hal.h
+│   ├── hal_ioblock.h
+│   ├── hal_mmcsd.h
+│   ├── hal_queues.h
+│   ├── hal_streams.h
+│   ├── i2c.h
+│   ├── i2s.h
+│   ├── icu.h
+│   ├── mac.h
+│   ├── mii.h
+│   ├── mmc_spi.h
+│   ├── pal.h
+│   ├── pwm.h
+│   ├── rtc.h
+│   ├── sdc.h
+│   ├── serial.h
+│   ├── serial_usb.h
+│   ├── spi.h
+│   ├── st.h
+│   ├── uart.h
+│   └── usb.h
+├── lib
+│   └── streams
+│       ├── chprintf.c
+│       ├── chprintf.h
+│       ├── memstreams.c
+│       ├── memstreams.h
+│       ├── nullstreams.c
+│       └── nullstreams.h
+├── osal
+│   ├── nil
+│   │   ├── osal.c
+│   │   ├── osal.h
+│   │   └── osal.mk
+│   ├── os-less
+│   │   └── ARMCMx
+│   │       ├── osal.c
+│   │       ├── osal.h
+│   │       └── osal.mk
+│   └── rt
+│       ├── osal.c
+│       ├── osal.h
+│       └── osal.mk
+├── ports
+│   ├── AVR
+│   ├── common
+│   │   └── ARMCMx
+│   │       ├── mpu.h
+│   │       ├── nvic.c
+│   │       └── nvic.h
+│   ├── KINETIS
+│   │   ├── K20x
+│   │   │   ├── hal_lld.c
+│   │   │   ├── hal_lld.h
+│   │   │   ├── kinetis_registry.h
+│   │   │   ├── platform.dox
+│   │   │   ├── platform.mk
+│   │   │   ├── pwm_lld.c
+│   │   │   ├── pwm_lld.h
+│   │   │   ├── spi_lld.c
+│   │   │   └── spi_lld.h
+│   │   ├── KL2x
+│   │   │   ├── hal_lld.c
+│   │   │   ├── hal_lld.h
+│   │   │   ├── kinetis_registry.h
+│   │   │   ├── platform.mk
+│   │   │   ├── pwm_lld.c
+│   │   │   └── pwm_lld.h
+│   │   ├── LLD
+│   │   │   ├── adc_lld.c
+│   │   │   ├── adc_lld.h
+│   │   │   ├── ext_lld.c
+│   │   │   ├── ext_lld.h
+│   │   │   ├── gpt_lld.c
+│   │   │   ├── gpt_lld.h
+│   │   │   ├── i2c_lld.c
+│   │   │   ├── i2c_lld.h
+│   │   │   ├── pal_lld.c
+│   │   │   ├── pal_lld.h
+│   │   │   ├── serial_lld.c
+│   │   │   ├── serial_lld.h
+│   │   │   ├── st_lld.c
+│   │   │   ├── st_lld.h
+│   │   │   ├── usb_lld.c
+│   │   │   └── usb_lld.h
+│   │   └── README.md
+│   ├── LPC
+│   ├── simulator
+│   └── STM32
+├── src
+│   ├── adc.c
+│   ├── can.c
+│   ├── dac.c
+│   ├── ext.c
+│   ├── gpt.c
+│   ├── hal.c
+│   ├── hal_mmcsd.c
+│   ├── hal_queues.c
+│   ├── i2c.c
+│   ├── i2s.c
+│   ├── icu.c
+│   ├── mac.c
+│   ├── mmc_spi.c
+│   ├── pal.c
+│   ├── pwm.c
+│   ├── rtc.c
+│   ├── sdc.c
+│   ├── serial.c
+│   ├── serial_usb.c
+│   ├── spi.c
+│   ├── st.c
+│   ├── uart.c
+│   └── usb.c
+└── templates
+    ├── adc_lld.c
+    ├── adc_lld.h
+    ├── can_lld.c
+    ├── can_lld.h
+    ├── dac_lld.c
+    ├── dac_lld.h
+    ├── ext_lld.c
+    ├── ext_lld.h
+    ├── gpt_lld.c
+    ├── gpt_lld.h
+    ├── halconf.h
+    ├── hal_lld.c
+    ├── hal_lld.h
+    ├── i2c_lld.c
+    ├── i2c_lld.h
+    ├── i2s_lld.c
+    ├── i2s_lld.h
+    ├── icu_lld.c
+    ├── icu_lld.h
+    ├── mac_lld.c
+    ├── mac_lld.h
+    ├── mcuconf.h
+    ├── osal
+    │   ├── osal.c
+    │   ├── osal.h
+    │   └── osal.mk
+    ├── pal_lld.c
+    ├── pal_lld.h
+    ├── platform.mk
+    ├── pwm_lld.c
+    ├── pwm_lld.h
+    ├── rtc_lld.c
+    ├── rtc_lld.h
+    ├── sdc_lld.c
+    ├── sdc_lld.h
+    ├── serial_lld.c
+    ├── serial_lld.h
+    ├── spi_lld.c
+    ├── spi_lld.h
+    ├── st_lld.c
+    ├── st_lld.h
+    ├── uart_lld.c
+    ├── uart_lld.h
+    ├── usb_lld.c
+    └── usb_lld.h
diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/ergodox/infinity/bootloader_defs.h b/keyboards/ergodox/infinity/bootloader_defs.h
new file mode 100644 (file)
index 0000000..c67153b
--- /dev/null
@@ -0,0 +1 @@
+#define KIIBOHD_BOOTLOADER
diff --git a/keyboards/ergodox/infinity/chconf.h b/keyboards/ergodox/infinity/chconf.h
new file mode 100644 (file)
index 0000000..d59c35e
--- /dev/null
@@ -0,0 +1,524 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/**
+ * @file    templates/chconf.h
+ * @brief   Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ *          contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef _CHCONF_H_
+#define _CHCONF_H_
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   System time counter resolution.
+ * @note    Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION                32
+
+/**
+ * @brief   System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ *          setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY                 100000
+
+/**
+ * @brief   Time delta constant for the tick-less mode.
+ * @note    If this value is zero then the system uses the classic
+ *          periodic tick. This value represents the minimum number
+ *          of ticks that is safe to specify in a timeout directive.
+ *          The value one is not valid, timeouts are rounded up to
+ *          this value.
+ */
+#define CH_CFG_ST_TIMEDELTA                 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ *          threads before preemption occurs. Setting this value to zero
+ *          disables the preemption for threads with equal priority and the
+ *          round robin becomes cooperative. Note that higher priority
+ *          threads can still preempt, the kernel is always preemptive.
+ * @note    Disabling the round robin preemption makes the kernel more compact
+ *          and generally faster.
+ * @note    The round robin preemption is not supported in tickless mode and
+ *          must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM                 20
+
+/**
+ * @brief   Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ *          then the whole available RAM is used. The core memory is made
+ *          available to the heap allocator and/or can be used directly through
+ *          the simplified core memory allocator.
+ *
+ * @note    In order to let the OS manage the whole RAM the linker script must
+ *          provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note    Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE                 0
+
+/**
+ * @brief   Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ *          does not spawn the idle thread. The application @p main()
+ *          function becomes the idle thread and must implement an
+ *          infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD               FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ *          is used when two possible implementations exist.
+ *
+ * @note    This is not related to the compiler optimization options.
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED               TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ *          the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM                       FALSE
+
+/**
+ * @brief   Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY                 TRUE
+
+/**
+ * @brief   Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ *          the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT                 TRUE
+
+/**
+ * @brief   Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES               TRUE
+
+/**
+ * @brief   Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ *          priority rather than in FIFO order.
+ *
+ * @note    The default is @p FALSE. Enable this if you have special
+ *          requirements.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
+
+/**
+ * @brief   Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES                  TRUE
+
+/**
+ * @brief   Enables recursive behavior on mutexes.
+ * @note    Recursive mutexes are heavier and have an increased
+ *          memory footprint.
+ *
+ * @note    The default is @p FALSE.
+ * @note    Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
+
+/**
+ * @brief   Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS                 TRUE
+
+/**
+ * @brief   Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ *          specification are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
+
+/**
+ * @brief   Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS                   TRUE
+
+/**
+ * @brief   Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ *          are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
+
+/**
+ * @brief   Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES                 TRUE
+
+/**
+ * @brief   Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ *          FIFO order.
+ *
+ * @note    The default is @p FALSE. Enable this if you have special
+ *          requirements.
+ * @note    Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE
+
+/**
+ * @brief   Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ *          included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES                TRUE
+
+/**
+ * @brief   I/O Queues APIs.
+ * @details If enabled then the I/O queues APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_QUEUES                   TRUE
+
+/**
+ * @brief   Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE                  TRUE
+
+/**
+ * @brief   Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ *          @p CH_CFG_USE_SEMAPHORES.
+ * @note    Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP                     TRUE
+
+/**
+ * @brief   Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS                 TRUE
+
+/**
+ * @brief   Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_WAITEXIT.
+ * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC                  TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Debug option, kernel statistics.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS                   FALSE
+
+/**
+ * @brief   Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ *          at runtime.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
+
+/**
+ * @brief   Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ *          parameters are activated.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS                FALSE
+
+/**
+ * @brief   Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ *          activated. This includes consistency checks inside the kernel,
+ *          runtime anomalies and port-defined checks.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS               FALSE
+
+/**
+ * @brief   Debug option, trace buffer.
+ * @details If enabled then the context switch circular trace buffer is
+ *          activated.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_TRACE                 FALSE
+
+/**
+ * @brief   Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note    The default is @p FALSE.
+ * @note    The stack check is performed in a architecture/port dependent way.
+ *          It may not be implemented or some ports.
+ * @note    The default failure mode is to halt the system with the global
+ *          @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK           FALSE
+
+/**
+ * @brief   Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ *          value when a thread is created. This can be useful for the
+ *          runtime measurement of the used stack.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS                 FALSE
+
+/**
+ * @brief   Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ *          counts the system ticks occurred while executing the thread.
+ *
+ * @note    The default is @p FALSE.
+ * @note    This debug option is not currently compatible with the
+ *          tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING            FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
+  /* Add threads custom fields here.*/
+
+/**
+ * @brief   Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note    It is invoked from within @p chThdInit() and implicitly from all
+ *          the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
+  /* Add threads initialization code here.*/                                \
+}
+
+/**
+ * @brief   Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ *
+ * @note    It is inserted into lock zone.
+ * @note    It is also invoked when the threads simply return in order to
+ *          terminate.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
+  /* Add threads finalization code here.*/                                  \
+}
+
+/**
+ * @brief   Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
+  /* Context switch code here.*/                                            \
+}
+
+/**
+ * @brief   ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
+  /* IRQ prologue code here.*/                                              \
+}
+
+/**
+ * @brief   ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
+  /* IRQ epilogue code here.*/                                              \
+}
+
+/**
+ * @brief   Idle thread enter hook.
+ * @note    This hook is invoked within a critical zone, no OS functions
+ *          should be invoked from here.
+ * @note    This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
+}
+
+/**
+ * @brief   Idle thread leave hook.
+ * @note    This hook is invoked within a critical zone, no OS functions
+ *          should be invoked from here.
+ * @note    This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
+}
+
+/**
+ * @brief   Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
+  /* Idle loop code here.*/                                                 \
+}
+
+/**
+ * @brief   System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ *          after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
+  /* System tick event code here.*/                                         \
+}
+
+/**
+ * @brief   System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ *          the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
+  /* System halt code here.*/                                               \
+}
+
+/**
+ * @brief   Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ *          trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) {                                            \
+  /* Trace code here.*/                                                     \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h).    */
+/*===========================================================================*/
+
+#endif  /* _CHCONF_H_ */
+
+/** @} */
diff --git a/keyboards/ergodox/infinity/config.h b/keyboards/ergodox/infinity/config.h
new file mode 100644 (file)
index 0000000..9e26408
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef INFINITY_ERGODOX_CONFIG_H
+#define INFINITY_ERGODOX_CONFIG_H
+
+#include "../config.h"
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6464
+#define DEVICE_VER      0x0001
+/* in python2: list(u"whatever".encode('utf-16-le')) */
+/*   at most 32 characters or the ugly hack in usb_main.c borks */
+#define MANUFACTURER "TMK"
+#define USBSTR_MANUFACTURER    'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00'
+#define PRODUCT "Infinity keyboard/TMK"
+#define USBSTR_PRODUCT         'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00'
+
+/* key matrix size */
+#define MATRIX_ROWS 18
+#define MATRIX_COLS 5
+#define LOCAL_MATRIX_ROWS 9
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO       15
+#define LED_BRIGHTNESS_HI       255
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE    5
+
+#define SERIAL_LINK_BAUD 562500
+#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1)
+// The visualizer needs gfx thread priorities
+#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h
new file mode 100644 (file)
index 0000000..2ea73f1
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _GDISP_LLD_BOARD_H
+#define _GDISP_LLD_BOARD_H
+
+static const I2CConfig i2ccfg = {
+  400000 // clock speed (Hz); 400kHz max for IS31
+};
+
+#define GDISP_SCREEN_WIDTH  7
+#define GDISP_SCREEN_HEIGHT 7
+
+static const uint8_t led_mask[] = {
+       0xFF, 0x00, /* C1-1 -> C1-16 */
+       0xFF, 0x00, /* C2-1 -> C2-16 */
+       0xFF, 0x00, /* C3-1 -> C3-16 */
+       0xFF, 0x00, /* C4-1 -> C4-16 */
+       0x3F, 0x00, /* C5-1 -> C5-16 */
+       0x00, 0x00, /* C6-1 -> C6-16 */
+       0x00, 0x00, /* C7-1 -> C7-16 */
+       0x00, 0x00, /* C8-1 -> C8-16 */
+       0x00, 0x00, /* C9-1 -> C9-16 */
+};
+
+// The address of the LED
+#define LA(c, r) (c + r * 16 )
+// Need to be an address that is not mapped, but inside the range of the controller matrix
+#define NA LA(8, 8)
+
+// The numbers in the comments are the led numbers DXX on the PCB
+// The mapping is taken from the schematic of left hand side
+static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = {
+//   45        44        43        42        41        40        39
+   { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)},
+//   52        51        50        49        48        47        46
+   { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) },
+//   58        57        56        55        54        53        N/A
+   { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA },
+//   67        66        65        64        63        62        61
+   { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) },
+//   76        75        74        73        72        60        59
+   { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) },
+//   N/A       N/A       N/A       N/A       N/A       N/A       68
+   { NA,       NA,       NA,       NA,       NA,       NA,       LA(5, 4) },
+//   N/A       N/A       N/A       N/A       71        70        69
+   { NA,       NA,       NA,       NA,       LA(6, 2), LA(6, 1), LA(6, 0) },
+};
+
+
+#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND
+#define IS31_TIMEOUT 5000
+
+static GFXINLINE void init_board(GDisplay *g) {
+    (void) g;
+    /* I2C pins */
+    palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL
+    palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA
+    palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
+    palClearPad(GPIOB, 16);
+    /* start I2C */
+    i2cStart(&I2CD1, &i2ccfg);
+    // try high drive (from kiibohd)
+    I2CD1.i2c->C2 |= I2Cx_C2_HDRS;
+    // try glitch fixing (from kiibohd)
+    I2CD1.i2c->FLT = 4;
+}
+
+static GFXINLINE void post_init_board(GDisplay *g) {
+       (void) g;
+}
+
+static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) {
+    (void) g;
+    return led_mask;
+}
+
+static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y)
+{
+    (void) g;
+    return led_mapping[y][x];
+}
+
+static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) {
+    (void) g;
+    if(!shutdown) {
+        palSetPad(GPIOB, 16);
+    }
+    else {
+        palClearPad(GPIOB, 16);
+    }
+}
+
+static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
+       (void) g;
+       i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT));
+}
+
+#endif /* _GDISP_LLD_BOARD_H */
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk
new file mode 100644 (file)
index 0000000..f32d0d8
--- /dev/null
@@ -0,0 +1,2 @@
+GFXINC += drivers/gdisp/IS31FL3731C
+GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
new file mode 100644 (file)
index 0000000..1d21f0c
--- /dev/null
@@ -0,0 +1,333 @@
+/*
+Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "gfx.h"
+
+#if GFX_USE_GDISP
+
+#define GDISP_DRIVER_VMT                       GDISPVMT_IS31FL3731C_ERGODOX
+#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h"
+#include "src/gdisp/gdisp_driver.h"
+
+#include "board_IS31FL3731C.h"
+
+/*===========================================================================*/
+/* Driver local definitions.                                                 */
+/*===========================================================================*/
+
+#ifndef GDISP_SCREEN_HEIGHT
+       #define GDISP_SCREEN_HEIGHT             9
+#endif
+#ifndef GDISP_SCREEN_WIDTH
+       #define GDISP_SCREEN_WIDTH              16
+#endif
+#ifndef GDISP_INITIAL_CONTRAST
+       #define GDISP_INITIAL_CONTRAST  0
+#endif
+#ifndef GDISP_INITIAL_BACKLIGHT
+       #define GDISP_INITIAL_BACKLIGHT 100
+#endif
+
+#define GDISP_FLG_NEEDFLUSH                    (GDISP_FLG_DRIVER<<0)
+
+#define IS31_ADDR_DEFAULT 0x74
+
+#define IS31_REG_CONFIG  0x00
+// bits in reg
+#define IS31_REG_CONFIG_PICTUREMODE 0x00
+#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08
+#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18
+// D2:D0 bits are starting frame for autoplay mode
+
+#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode
+
+#define IS31_REG_AUTOPLAYCTRL1 0x02
+// D6:D4 number of loops (000=infty)
+// D2:D0 number of frames to be used
+
+#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms)
+
+#define IS31_REG_DISPLAYOPT 0x05
+#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames
+#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8
+// D2:D0 bits blink period time (*0.27s)
+
+#define IS31_REG_AUDIOSYNC 0x06
+#define IS31_REG_AUDIOSYNC_ENABLE 0x1
+
+#define IS31_REG_FRAMESTATE 0x07
+
+#define IS31_REG_BREATHCTRL1 0x08
+// D6:D4 fade out time (26ms*2^i)
+// D2:D0 fade in time (26ms*2^i)
+
+#define IS31_REG_BREATHCTRL2 0x09
+#define IS31_REG_BREATHCTRL2_ENABLE 0x10
+// D2:D0 extinguish time (3.5ms*2^i)
+
+#define IS31_REG_SHUTDOWN 0x0A
+#define IS31_REG_SHUTDOWN_OFF 0x0
+#define IS31_REG_SHUTDOWN_ON 0x1
+
+#define IS31_REG_AGCCTRL 0x0B
+#define IS31_REG_ADCRATE 0x0C
+
+#define IS31_COMMANDREGISTER 0xFD
+#define IS31_FUNCTIONREG 0x0B    // helpfully called 'page nine'
+#define IS31_FUNCTIONREG_SIZE 0xD
+
+#define IS31_FRAME_SIZE 0xB4
+
+#define IS31_PWM_REG 0x24
+#define IS31_PWM_SIZE 0x90
+
+#define IS31_LED_MASK_SIZE 0x12
+#define IS31_SCREEN_WIDTH 16
+
+#define IS31
+
+//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm
+const unsigned char cie[256] = {
+    0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+    3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
+    5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
+    7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
+    10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
+    13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
+    17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
+    22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
+    28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
+    34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
+    41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
+    49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
+    58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+    68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
+    80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
+    92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
+    106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
+    121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
+    138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
+    155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
+    175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
+    196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
+    218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
+    242, 245, 247, 250, 252, 255,
+};
+
+
+/*===========================================================================*/
+/* Driver local functions.                                                   */
+/*===========================================================================*/
+
+typedef struct{
+    uint8_t write_buffer_offset;
+    uint8_t write_buffer[IS31_FRAME_SIZE];
+    uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH];
+    uint8_t page;
+}__attribute__((__packed__)) PrivData;
+
+// Some common routines and macros
+#define PRIV(g)                         ((PrivData*)g->priv)
+
+/*===========================================================================*/
+/* Driver exported functions.                                                */
+/*===========================================================================*/
+
+static GFXINLINE void write_page(GDisplay* g, uint8_t page) {
+    uint8_t tx[2] __attribute__((aligned(2)));
+    tx[0] = IS31_COMMANDREGISTER;
+    tx[1] = page;
+    write_data(g, tx, 2);
+}
+
+static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) {
+    uint8_t tx[2] __attribute__((aligned(2)));
+    tx[0] = reg;
+    tx[1] = data;
+    write_page(g, page);
+    write_data(g, tx, 2);
+}
+
+static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) {
+    PRIV(g)->write_buffer_offset = offset;
+    write_page(g, page);
+    write_data(g, (uint8_t*)PRIV(g), length + 1);
+}
+
+LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
+       // The private area is the display surface.
+       g->priv = gfxAlloc(sizeof(PrivData));
+    __builtin_memset(PRIV(g), 0, sizeof(PrivData));
+       PRIV(g)->page = 0;
+
+       // Initialise the board interface
+       init_board(g);
+       gfxSleepMilliseconds(10);
+
+    // zero function page, all registers (assuming full_page is all zeroes)
+    write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE);
+    set_hardware_shutdown(g, false);
+    gfxSleepMilliseconds(10);
+    // software shutdown
+    write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
+    gfxSleepMilliseconds(10);
+    // zero function page, all registers
+    write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE);
+    gfxSleepMilliseconds(10);
+
+
+    // zero all LED registers on all 8 pages, and enable the mask
+    __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE);
+    for(uint8_t i=0; i<8; i++) {
+        write_ram(g, i, 0, IS31_FRAME_SIZE);
+        gfxSleepMilliseconds(1);
+    }
+
+    // software shutdown disable (i.e. turn stuff on)
+    write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
+    gfxSleepMilliseconds(10);
+
+    // Finish Init
+    post_init_board(g);
+
+       /* Initialise the GDISP structure */
+       g->g.Width = GDISP_SCREEN_WIDTH;
+       g->g.Height = GDISP_SCREEN_HEIGHT;
+       g->g.Orientation = GDISP_ROTATE_0;
+       g->g.Powermode = powerOn;
+       g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
+       g->g.Contrast = GDISP_INITIAL_CONTRAST;
+       return TRUE;
+}
+
+#if GDISP_HARDWARE_FLUSH
+       LLDSPEC void gdisp_lld_flush(GDisplay *g) {
+               // Don't flush if we don't need it.
+               if (!(g->flags & GDISP_FLG_NEEDFLUSH))
+                       return;
+
+               PRIV(g)->page++;
+               PRIV(g)->page %= 2;
+               // TODO: some smarter algorithm for this
+               // We should run only one physical page at a time
+               // This way we don't need to send so much data, and
+               // we could use slightly less memory
+               uint8_t* src = PRIV(g)->frame_buffer;
+               for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
+                   for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
+                       PRIV(g)->write_buffer[get_led_address(g, x, y)]=cie[*src];
+                       ++src;
+                   }
+               }
+        write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE);
+        gfxSleepMilliseconds(1);
+        write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page);
+
+               g->flags &= ~GDISP_FLG_NEEDFLUSH;
+       }
+#endif
+
+#if GDISP_HARDWARE_DRAWPIXEL
+       LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) {
+               coord_t         x, y;
+
+               switch(g->g.Orientation) {
+               default:
+               case GDISP_ROTATE_0:
+                       x = g->p.x;
+                       y = g->p.y;
+                       break;
+               case GDISP_ROTATE_180:
+                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
+                       y = g->p.y;
+                       break;
+               }
+               PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color);
+               g->flags |= GDISP_FLG_NEEDFLUSH;
+       }
+#endif
+
+#if GDISP_HARDWARE_PIXELREAD
+       LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
+               coord_t         x, y;
+
+               switch(g->g.Orientation) {
+               default:
+               case GDISP_ROTATE_0:
+                       x = g->p.x;
+                       y = g->p.y;
+                       break;
+               case GDISP_ROTATE_180:
+                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
+                       y = g->p.y;
+                       break;
+               }
+               return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]);
+       }
+#endif
+
+#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL
+       LLDSPEC void gdisp_lld_control(GDisplay *g) {
+               switch(g->p.x) {
+               case GDISP_CONTROL_POWER:
+                       if (g->g.Powermode == (powermode_t)g->p.ptr)
+                               return;
+                       switch((powermode_t)g->p.ptr) {
+                       case powerOff:
+                       case powerSleep:
+                       case powerDeepSleep:
+                write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
+                               break;
+                       case powerOn:
+                write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
+                               break;
+                       default:
+                               return;
+                       }
+                       g->g.Powermode = (powermode_t)g->p.ptr;
+                       return;
+
+               case GDISP_CONTROL_ORIENTATION:
+                       if (g->g.Orientation == (orientation_t)g->p.ptr)
+                               return;
+                       switch((orientation_t)g->p.ptr) {
+                       /* Rotation is handled by the drawing routines */
+                       case GDISP_ROTATE_0:
+                       case GDISP_ROTATE_180:
+                               g->g.Height = GDISP_SCREEN_HEIGHT;
+                               g->g.Width = GDISP_SCREEN_WIDTH;
+                               break;
+                       case GDISP_ROTATE_90:
+                       case GDISP_ROTATE_270:
+                               g->g.Height = GDISP_SCREEN_WIDTH;
+                               g->g.Width = GDISP_SCREEN_HEIGHT;
+                               break;
+                       default:
+                               return;
+                       }
+                       g->g.Orientation = (orientation_t)g->p.ptr;
+                       return;
+
+               case GDISP_CONTROL_CONTRAST:
+                       return;
+               }
+       }
+#endif // GDISP_NEED_CONTROL
+
+#endif // GFX_USE_GDISP
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h
new file mode 100644 (file)
index 0000000..bb28ad7
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _GDISP_LLD_CONFIG_H
+#define _GDISP_LLD_CONFIG_H
+
+#if GFX_USE_GDISP
+
+/*===========================================================================*/
+/* Driver hardware support.                                                  */
+/*===========================================================================*/
+
+#define GDISP_HARDWARE_FLUSH                   TRUE            // This controller requires flushing
+#define GDISP_HARDWARE_DRAWPIXEL               TRUE
+#define GDISP_HARDWARE_PIXELREAD               TRUE
+#define GDISP_HARDWARE_CONTROL                 TRUE
+
+#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_GRAY256
+
+#endif /* GFX_USE_GDISP */
+
+#endif /* _GDISP_LLD_CONFIG_H */
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk
new file mode 100644 (file)
index 0000000..16c3f80
--- /dev/null
@@ -0,0 +1,2 @@
+GFXINC += drivers/gdisp/emulator_lcd
+GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c
new file mode 100644 (file)
index 0000000..babfe2b
--- /dev/null
@@ -0,0 +1,10 @@
+#define GDISP_DRIVER_VMT                       GDISPVMT_EMULATOR_LCD_ERGODOX
+#define GDISP_HARDWARE_DRAWPIXEL               TRUE
+#define GDISP_HARDWARE_PIXELREAD               TRUE
+#define GDISP_HARDWARE_CONTROL                 TRUE
+#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
+#define GDISP_SCREEN_WIDTH                     128
+#define GDISP_SCREEN_HEIGHT                    32
+#define ROTATE_180_IS_FLIP
+
+#include "emulator/emulator_driver_impl.h"
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk
new file mode 100644 (file)
index 0000000..2554344
--- /dev/null
@@ -0,0 +1,2 @@
+GFXINC += drivers/gdisp/emulator_led
+GFXSRC += drivers/gdisp/emulator_led/emulator_led.c
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c
new file mode 100644 (file)
index 0000000..b0ebcdc
--- /dev/null
@@ -0,0 +1,10 @@
+#define GDISP_DRIVER_VMT                           GDISPVMT_EMULATOR_LED_ERGODOX
+#define GDISP_HARDWARE_DRAWPIXEL               TRUE
+#define GDISP_HARDWARE_PIXELREAD               TRUE
+#define GDISP_HARDWARE_CONTROL                 TRUE
+#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
+#define GDISP_SCREEN_WIDTH                     7
+#define GDISP_SCREEN_HEIGHT                    7
+#define ROTATE_180_IS_FLIP
+
+#include "emulator/emulator_driver_impl.h"
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h
new file mode 100644 (file)
index 0000000..290571c
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ *              http://ugfx.org/license.html
+ */
+
+#ifndef _GDISP_LLD_BOARD_H
+#define _GDISP_LLD_BOARD_H
+
+#include "print.h"
+
+#define ST7565_LCD_BIAS         ST7565_LCD_BIAS_9 // actually 6
+#define ST7565_ADC              ST7565_ADC_NORMAL
+#define ST7565_COM_SCAN         ST7565_COM_SCAN_DEC
+#define ST7565_PAGE_ORDER       0,1,2,3
+/*
+ * Custom page order for several LCD boards, e.g. HEM12864-99
+ * #define ST7565_PAGE_ORDER       4,5,6,7,0,1,2,3
+ */
+
+#define ST7565_GPIOPORT GPIOC
+#define ST7565_PORT PORTC
+#define ST7565_A0_PIN 7
+#define ST7565_RST_PIN 8
+#define ST7565_MOSI_PIN 6
+#define ST7565_SLCK_PIN 5
+#define ST7565_SS_PIN 4
+
+#define palSetPadModeRaw(portname, bits) \
+    ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits
+
+#define palSetPadModeNamed(portname, portmode) \
+    palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode)
+
+#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2)
+// DSPI Clock and Transfer Attributes
+// Frame Size: 8 bits
+// MSB First
+// CLK Low by default
+static const SPIConfig spi1config = {
+       NULL,
+       /* HW dependent part.*/
+       ST7565_GPIOPORT,
+    ST7565_SS_PIN,
+    SPIx_CTARn_FMSZ(7)
+    | SPIx_CTARn_ASC(7)
+    | SPIx_CTARn_DT(7)
+    | SPIx_CTARn_CSSCK(7)
+    | SPIx_CTARn_PBR(0)
+    | SPIx_CTARn_BR(7)
+       //SPI_CR1_BR_0
+};
+
+static bool_t st7565_is_data_mode = 1;
+
+static GFXINLINE void init_board(GDisplay *g) {
+    (void) g;
+    palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN);
+    st7565_is_data_mode = 1;
+    palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN);
+    palSetPadModeRaw(MOSI, ST7565_SPI_MODE);
+    palSetPadModeRaw(SLCK, ST7565_SPI_MODE);
+    palSetPadModeRaw(SS, ST7565_SPI_MODE);
+
+    spiInit();
+    spiStart(&SPID1, &spi1config);
+    spiSelect(&SPID1);
+}
+
+static GFXINLINE void post_init_board(GDisplay *g) {
+       (void) g;
+}
+
+static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) {
+    (void) g;
+    if (state) {
+        palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN);
+    }
+    else {
+        palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN);
+    }
+}
+
+static GFXINLINE void acquire_bus(GDisplay *g) {
+    (void) g;
+    // Only the LCD is using the SPI bus, so no need to acquire
+    // spiAcquireBus(&SPID1);
+}
+
+static GFXINLINE void release_bus(GDisplay *g) {
+    (void) g;
+    // Only the LCD is using the SPI bus, so no need to release
+    //spiReleaseBus(&SPID1);
+}
+
+static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) {
+       (void) g;
+       if (st7565_is_data_mode) {
+           // The sleeps need to be at lest 10 vs 25 ns respectively
+           // So let's sleep two ticks, one tick might not be enough
+           // if we are at the end of the tick
+           chThdSleep(2);
+        palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN);
+        chThdSleep(2);
+        st7565_is_data_mode = 0;
+       }
+       spiSend(&SPID1, 1, &cmd);
+}
+
+static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
+       (void) g;
+       if (!st7565_is_data_mode) {
+           // The sleeps need to be at lest 10 vs 25 ns respectively
+           // So let's sleep two ticks, one tick might not be enough
+           // if we are at the end of the tick
+           chThdSleep(2);
+        palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN);
+           chThdSleep(2);
+        st7565_is_data_mode = 1;
+       }
+       spiSend(&SPID1, length, data);
+}
+
+#endif /* _GDISP_LLD_BOARD_H */
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk
new file mode 100644 (file)
index 0000000..889a1a0
--- /dev/null
@@ -0,0 +1,2 @@
+GFXINC += drivers/gdisp/st7565ergodox
+GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
new file mode 100644 (file)
index 0000000..c33aea8
--- /dev/null
@@ -0,0 +1,292 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ *              http://ugfx.org/license.html
+ */
+
+#include "gfx.h"
+
+#if GFX_USE_GDISP
+
+#define GDISP_DRIVER_VMT                       GDISPVMT_ST7565_ERGODOX
+#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h"
+#include "src/gdisp/gdisp_driver.h"
+
+#include "board_ST7565.h"
+
+/*===========================================================================*/
+/* Driver local definitions.                                                 */
+/*===========================================================================*/
+
+#ifndef GDISP_SCREEN_HEIGHT
+       #define GDISP_SCREEN_HEIGHT             32
+#endif
+#ifndef GDISP_SCREEN_WIDTH
+       #define GDISP_SCREEN_WIDTH              128
+#endif
+#ifndef GDISP_INITIAL_CONTRAST
+       #define GDISP_INITIAL_CONTRAST  0
+#endif
+#ifndef GDISP_INITIAL_BACKLIGHT
+       #define GDISP_INITIAL_BACKLIGHT 100
+#endif
+
+#define GDISP_FLG_NEEDFLUSH                    (GDISP_FLG_DRIVER<<0)
+
+#include "drivers/gdisp/st7565ergodox/st7565.h"
+
+/*===========================================================================*/
+/* Driver config defaults for backward compatibility.                       */
+/*===========================================================================*/
+#ifndef ST7565_LCD_BIAS
+  #define ST7565_LCD_BIAS         ST7565_LCD_BIAS_7
+#endif
+#ifndef ST7565_ADC
+  #define ST7565_ADC              ST7565_ADC_NORMAL
+#endif
+#ifndef ST7565_COM_SCAN
+  #define ST7565_COM_SCAN         ST7565_COM_SCAN_INC
+#endif
+#ifndef ST7565_PAGE_ORDER
+  #define ST7565_PAGE_ORDER       0,1,2,3
+#endif
+
+/*===========================================================================*/
+/* Driver local functions.                                                   */
+/*===========================================================================*/
+
+typedef struct{
+    bool_t buffer2;
+    uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8];
+}PrivData;
+
+// Some common routines and macros
+#define PRIV(g)                         ((PrivData*)g->priv)
+#define RAM(g)                                                 (PRIV(g)->ram)
+#define write_cmd2(g, cmd1, cmd2)              { write_cmd(g, cmd1); write_cmd(g, cmd2); }
+#define write_cmd3(g, cmd1, cmd2, cmd3)        { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); }
+
+// Some common routines and macros
+#define delay(us)                      gfxSleepMicroseconds(us)
+#define delay_ms(ms)           gfxSleepMilliseconds(ms)
+
+#define xyaddr(x, y)           ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH)
+#define xybit(y)                       (1<<((y)&7))
+
+/*===========================================================================*/
+/* Driver exported functions.                                                */
+/*===========================================================================*/
+
+/*
+ * As this controller can't update on a pixel boundary we need to maintain the
+ * the entire display surface in memory so that we can do the necessary bit
+ * operations. Fortunately it is a small display in monochrome.
+ * 64 * 128 / 8 = 1024 bytes.
+ */
+
+LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
+       // The private area is the display surface.
+       g->priv = gfxAlloc(sizeof(PrivData));
+       PRIV(g)->buffer2 = false;
+
+       // Initialise the board interface
+       init_board(g);
+
+       // Hardware reset
+       setpin_reset(g, TRUE);
+       gfxSleepMilliseconds(20);
+       setpin_reset(g, FALSE);
+       gfxSleepMilliseconds(20);
+
+       acquire_bus(g);
+    write_cmd(g, ST7565_DISPLAY_OFF);
+       write_cmd(g, ST7565_LCD_BIAS);
+    write_cmd(g, ST7565_ADC);
+    write_cmd(g, ST7565_COM_SCAN);
+    
+    write_cmd(g, ST7565_START_LINE | 0);
+
+       write_cmd(g, ST7565_RESISTOR_RATIO | 0x6);
+
+       // turn on voltage converter (VC=1, VR=0, VF=0)
+       write_cmd(g, ST7565_POWER_CONTROL | 0x04);
+       delay_ms(50);
+
+       // turn on voltage regulator (VC=1, VR=1, VF=0)
+       write_cmd(g, ST7565_POWER_CONTROL | 0x06);
+       delay_ms(50);
+
+       // turn on voltage follower (VC=1, VR=1, VF=1)
+       write_cmd(g, ST7565_POWER_CONTROL | 0x07);
+       delay_ms(50);
+
+       write_cmd(g, 0xE2);
+    write_cmd(g, ST7565_COM_SCAN);
+       write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101);
+       //write_cmd2(g, ST7565_CONTRAST, 0);
+       write_cmd(g, ST7565_DISPLAY_ON);
+       write_cmd(g, ST7565_ALLON_NORMAL);
+       write_cmd(g, ST7565_INVERT_DISPLAY);
+
+       write_cmd(g, ST7565_RMW);
+
+    // Finish Init
+    post_init_board(g);
+
+       // Release the bus
+       release_bus(g);
+
+       /* Initialise the GDISP structure */
+       g->g.Width = GDISP_SCREEN_WIDTH;
+       g->g.Height = GDISP_SCREEN_HEIGHT;
+       g->g.Orientation = GDISP_ROTATE_0;
+       g->g.Powermode = powerOn;
+       g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
+       g->g.Contrast = GDISP_INITIAL_CONTRAST;
+       return TRUE;
+}
+
+#if GDISP_HARDWARE_FLUSH
+       LLDSPEC void gdisp_lld_flush(GDisplay *g) {
+               unsigned        p;
+
+               // Don't flush if we don't need it.
+               if (!(g->flags & GDISP_FLG_NEEDFLUSH))
+                       return;
+
+               acquire_bus(g);
+               unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0);
+               for (p = 0; p < 4; p++) {
+                       write_cmd(g, ST7565_PAGE | (p + dstOffset));
+                       write_cmd(g, ST7565_COLUMN_MSB | 0);
+                       write_cmd(g, ST7565_COLUMN_LSB | 0);
+                       write_cmd(g, ST7565_RMW);
+                       write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH);
+               }
+               unsigned line = (PRIV(g)->buffer2 ? 32 : 0);
+        write_cmd(g, ST7565_START_LINE | line);
+        PRIV(g)->buffer2 = !PRIV(g)->buffer2;
+               release_bus(g);
+
+               g->flags &= ~GDISP_FLG_NEEDFLUSH;
+       }
+#endif
+
+#if GDISP_HARDWARE_DRAWPIXEL
+       LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) {
+               coord_t         x, y;
+
+               switch(g->g.Orientation) {
+               default:
+               case GDISP_ROTATE_0:
+                       x = g->p.x;
+                       y = g->p.y;
+                       break;
+               case GDISP_ROTATE_90:
+                       x = g->p.y;
+                       y = GDISP_SCREEN_HEIGHT-1 - g->p.x;
+                       break;
+               case GDISP_ROTATE_180:
+                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
+                       y = GDISP_SCREEN_HEIGHT-1 - g->p.y;
+                       break;
+               case GDISP_ROTATE_270:
+                       x = GDISP_SCREEN_HEIGHT-1 - g->p.y;
+                       y = g->p.x;
+                       break;
+               }
+               if (gdispColor2Native(g->p.color) != Black)
+                       RAM(g)[xyaddr(x, y)] |= xybit(y);
+               else
+                       RAM(g)[xyaddr(x, y)] &= ~xybit(y);
+               g->flags |= GDISP_FLG_NEEDFLUSH;
+       }
+#endif
+
+#if GDISP_HARDWARE_PIXELREAD
+       LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
+               coord_t         x, y;
+
+               switch(g->g.Orientation) {
+               default:
+               case GDISP_ROTATE_0:
+                       x = g->p.x;
+                       y = g->p.y;
+                       break;
+               case GDISP_ROTATE_90:
+                       x = g->p.y;
+                       y = GDISP_SCREEN_HEIGHT-1 - g->p.x;
+                       break;
+               case GDISP_ROTATE_180:
+                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
+                       y = GDISP_SCREEN_HEIGHT-1 - g->p.y;
+                       break;
+               case GDISP_ROTATE_270:
+                       x = GDISP_SCREEN_HEIGHT-1 - g->p.y;
+                       y = g->p.x;
+                       break;
+               }
+               return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black;
+       }
+#endif
+
+#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL
+       LLDSPEC void gdisp_lld_control(GDisplay *g) {
+               switch(g->p.x) {
+               case GDISP_CONTROL_POWER:
+                       if (g->g.Powermode == (powermode_t)g->p.ptr)
+                               return;
+                       switch((powermode_t)g->p.ptr) {
+                       case powerOff:
+                       case powerSleep:
+                       case powerDeepSleep:
+                               acquire_bus(g);
+                               write_cmd(g, ST7565_DISPLAY_OFF);
+                               release_bus(g);
+                               break;
+                       case powerOn:
+                               acquire_bus(g);
+                               write_cmd(g, ST7565_DISPLAY_ON);
+                               release_bus(g);
+                               break;
+                       default:
+                               return;
+                       }
+                       g->g.Powermode = (powermode_t)g->p.ptr;
+                       return;
+
+               case GDISP_CONTROL_ORIENTATION:
+                       if (g->g.Orientation == (orientation_t)g->p.ptr)
+                               return;
+                       switch((orientation_t)g->p.ptr) {
+                       /* Rotation is handled by the drawing routines */
+                       case GDISP_ROTATE_0:
+                       case GDISP_ROTATE_180:
+                               g->g.Height = GDISP_SCREEN_HEIGHT;
+                               g->g.Width = GDISP_SCREEN_WIDTH;
+                               break;
+                       case GDISP_ROTATE_90:
+                       case GDISP_ROTATE_270:
+                               g->g.Height = GDISP_SCREEN_WIDTH;
+                               g->g.Width = GDISP_SCREEN_HEIGHT;
+                               break;
+                       default:
+                               return;
+                       }
+                       g->g.Orientation = (orientation_t)g->p.ptr;
+                       return;
+
+               case GDISP_CONTROL_CONTRAST:
+            if ((unsigned)g->p.ptr > 100)
+               g->p.ptr = (void *)100;
+                       acquire_bus(g);
+                       write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F);
+                       release_bus(g);
+            g->g.Contrast = (unsigned)g->p.ptr;
+                       return;
+               }
+       }
+#endif // GDISP_NEED_CONTROL
+
+#endif // GFX_USE_GDISP
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h
new file mode 100644 (file)
index 0000000..48587b9
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ *              http://ugfx.org/license.html
+ */
+
+#ifndef _GDISP_LLD_CONFIG_H
+#define _GDISP_LLD_CONFIG_H
+
+#if GFX_USE_GDISP
+
+/*===========================================================================*/
+/* Driver hardware support.                                                  */
+/*===========================================================================*/
+
+#define GDISP_HARDWARE_FLUSH                   TRUE            // This controller requires flushing
+#define GDISP_HARDWARE_DRAWPIXEL               TRUE
+#define GDISP_HARDWARE_PIXELREAD               TRUE
+#define GDISP_HARDWARE_CONTROL                 TRUE
+
+#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
+
+#endif /* GFX_USE_GDISP */
+
+#endif /* _GDISP_LLD_CONFIG_H */
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h
new file mode 100644 (file)
index 0000000..48636b3
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ *              http://ugfx.org/license.html
+ */
+
+#ifndef _ST7565_H
+#define _ST7565_H
+
+#define ST7565_CONTRAST             0x81
+#define ST7565_ALLON_NORMAL         0xA4
+#define ST7565_ALLON                0xA5
+#define ST7565_POSITIVE_DISPLAY     0xA6
+#define ST7565_INVERT_DISPLAY       0xA7
+#define ST7565_DISPLAY_OFF          0xAE
+#define ST7565_DISPLAY_ON           0xAF
+
+#define ST7565_LCD_BIAS_7           0xA3
+#define ST7565_LCD_BIAS_9           0xA2
+
+#define ST7565_ADC_NORMAL           0xA0
+#define ST7565_ADC_REVERSE          0xA1
+
+#define ST7565_COM_SCAN_INC         0xC0
+#define ST7565_COM_SCAN_DEC         0xC8
+
+#define ST7565_START_LINE           0x40
+#define ST7565_PAGE                 0xB0
+#define ST7565_COLUMN_MSB           0x10
+#define ST7565_COLUMN_LSB           0x00
+#define ST7565_RMW                  0xE0
+
+#define ST7565_RESISTOR_RATIO       0x20
+#define ST7565_POWER_CONTROL        0x28
+
+#endif /* _ST7565_H */
diff --git a/keyboards/ergodox/infinity/gfxconf.h b/keyboards/ergodox/infinity/gfxconf.h
new file mode 100644 (file)
index 0000000..8caa577
--- /dev/null
@@ -0,0 +1,331 @@
+/**
+ * This file has a different license to the rest of the uGFX system.
+ * You can copy, modify and distribute this file as you see fit.
+ * You do not need to publish your source modifications to this file.
+ * The only thing you are not permitted to do is to relicense it
+ * under a different license.
+ */
+
+/**
+ * Copy this file into your project directory and rename it as gfxconf.h
+ * Edit your copy to turn on the uGFX features you want to use.
+ * The values below are the defaults.
+ *
+ * Only remove the comments from lines where you want to change the
+ * default value. This allows definitions to be included from
+ * driver makefiles when required and provides the best future
+ * compatibility for your project.
+ *
+ * Please use spaces instead of tabs in this file.
+ */
+
+#ifndef _GFXCONF_H
+#define _GFXCONF_H
+
+
+///////////////////////////////////////////////////////////////////////////
+// GOS - One of these must be defined, preferably in your Makefile       //
+///////////////////////////////////////////////////////////////////////////
+//#define GFX_USE_OS_CHIBIOS                           TRUE
+//#define GFX_USE_OS_FREERTOS                          FALSE
+//    #define GFX_FREERTOS_USE_TRACE                   FALSE
+//#define GFX_USE_OS_WIN32                             FALSE
+//#define GFX_USE_OS_LINUX                             FALSE
+//#define GFX_USE_OS_OSX                               FALSE
+//#define GFX_USE_OS_ECOS                              FALSE
+//#define GFX_USE_OS_RAWRTOS                           FALSE
+//#define GFX_USE_OS_ARDUINO                           FALSE
+//#define GFX_USE_OS_KEIL                              FALSE
+//#define GFX_USE_OS_CMSIS                             FALSE
+//#define GFX_USE_OS_RAW32                             FALSE
+//    #define INTERRUPTS_OFF()                         optional_code
+//    #define INTERRUPTS_ON()                          optional_code
+// These are not defined by default for some reason
+#define GOS_NEED_X_THREADS     FALSE
+#define GOS_NEED_X_HEAP                FALSE
+
+// Options that (should where relevant) apply to all operating systems
+    #define GFX_NO_INLINE                            FALSE
+//    #define GFX_COMPILER                             GFX_COMPILER_UNKNOWN
+//    #define GFX_CPU                                  GFX_CPU_UNKNOWN
+//    #define GFX_OS_HEAP_SIZE                         0
+//    #define GFX_OS_NO_INIT                           FALSE
+//    #define GFX_OS_INIT_NO_WARNING                   FALSE
+//    #define GFX_OS_PRE_INIT_FUNCTION                 myHardwareInitRoutine
+//    #define GFX_OS_EXTRA_INIT_FUNCTION               myOSInitRoutine
+//    #define GFX_OS_EXTRA_DEINIT_FUNCTION             myOSDeInitRoutine
+
+
+///////////////////////////////////////////////////////////////////////////
+// GDISP                                                                 //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GDISP                                TRUE
+
+//#define GDISP_NEED_AUTOFLUSH                         FALSE
+//#define GDISP_NEED_TIMERFLUSH                        FALSE
+//#define GDISP_NEED_VALIDATION                        TRUE
+//#define GDISP_NEED_CLIP                              TRUE
+#define GDISP_NEED_CIRCLE                            TRUE
+#define GDISP_NEED_ELLIPSE                           TRUE
+#define GDISP_NEED_ARC                               TRUE
+#define GDISP_NEED_ARCSECTORS                        TRUE
+#define GDISP_NEED_CONVEX_POLYGON                    TRUE
+//#define GDISP_NEED_SCROLL                            FALSE
+#define GDISP_NEED_PIXELREAD                         TRUE
+#define GDISP_NEED_CONTROL                           TRUE
+//#define GDISP_NEED_QUERY                             FALSE
+//#define GDISP_NEED_MULTITHREAD                       FALSE
+//#define GDISP_NEED_STREAMING                         FALSE
+#define GDISP_NEED_TEXT                              TRUE
+//    #define GDISP_NEED_TEXT_WORDWRAP                 FALSE
+//    #define GDISP_NEED_ANTIALIAS                     FALSE
+//    #define GDISP_NEED_UTF8                          FALSE
+    #define GDISP_NEED_TEXT_KERNING                  TRUE
+//    #define GDISP_INCLUDE_FONT_UI1                   FALSE
+//    #define GDISP_INCLUDE_FONT_UI2                   FALSE           // The smallest preferred font.
+//    #define GDISP_INCLUDE_FONT_LARGENUMBERS          FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS10          FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS12          FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS16          FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS20          FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS24          FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS32          FALSE
+    #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12      TRUE
+//    #define GDISP_INCLUDE_FONT_FIXED_10X20           FALSE
+//    #define GDISP_INCLUDE_FONT_FIXED_7X14            FALSE
+    #define GDISP_INCLUDE_FONT_FIXED_5X8             TRUE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA       FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA       FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA       FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA       FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA       FALSE
+//    #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA   FALSE
+//    #define GDISP_INCLUDE_USER_FONTS                 FALSE
+
+//#define GDISP_NEED_IMAGE                             FALSE
+//    #define GDISP_NEED_IMAGE_NATIVE                  FALSE
+//    #define GDISP_NEED_IMAGE_GIF                     FALSE
+//    #define GDISP_NEED_IMAGE_BMP                     FALSE
+//        #define GDISP_NEED_IMAGE_BMP_1               FALSE
+//        #define GDISP_NEED_IMAGE_BMP_4               FALSE
+//        #define GDISP_NEED_IMAGE_BMP_4_RLE           FALSE
+//        #define GDISP_NEED_IMAGE_BMP_8               FALSE
+//        #define GDISP_NEED_IMAGE_BMP_8_RLE           FALSE
+//        #define GDISP_NEED_IMAGE_BMP_16              FALSE
+//        #define GDISP_NEED_IMAGE_BMP_24              FALSE
+//        #define GDISP_NEED_IMAGE_BMP_32              FALSE
+//    #define GDISP_NEED_IMAGE_JPG                     FALSE
+//    #define GDISP_NEED_IMAGE_PNG                     FALSE
+//    #define GDISP_NEED_IMAGE_ACCOUNTING              FALSE
+#ifdef EMULATOR
+#define GDISP_NEED_PIXMAP                            TRUE
+#endif
+//    #define GDISP_NEED_PIXMAP_IMAGE                  FALSE
+
+//#define GDISP_DEFAULT_ORIENTATION                    GDISP_ROTATE_LANDSCAPE    // If not defined the native hardware orientation is used.
+//#define GDISP_LINEBUF_SIZE                           128
+//#define GDISP_STARTUP_COLOR                          Black
+#define GDISP_NEED_STARTUP_LOGO                      FALSE
+
+//#define GDISP_TOTAL_DISPLAYS                          2
+
+#ifndef EMULATOR
+#define GDISP_DRIVER_LIST                            GDISPVMT_ST7565_ERGODOX, GDISPVMT_IS31FL3731C_ERGODOX
+#else
+#define GDISP_DRIVER_LIST                            GDISPVMT_EMULATOR_LCD_ERGODOX, GDISPVMT_EMULATOR_LED_ERGODOX
+#endif
+
+    #ifdef GDISP_DRIVER_LIST
+        // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability
+        #define GDISP_HARDWARE_STREAM_WRITE          FALSE
+        #define GDISP_HARDWARE_STREAM_READ           FALSE
+        #define GDISP_HARDWARE_STREAM_POS            FALSE
+        #define GDISP_HARDWARE_DRAWPIXEL             TRUE
+        #define GDISP_HARDWARE_CLEARS                FALSE
+        #define GDISP_HARDWARE_FILLS                 FALSE
+        #define GDISP_HARDWARE_BITFILLS              FALSE
+        #define GDISP_HARDWARE_SCROLL                FALSE
+        #define GDISP_HARDWARE_PIXELREAD             TRUE
+        #define GDISP_HARDWARE_CONTROL               TRUE
+        #define GDISP_HARDWARE_QUERY                 FALSE
+        #define GDISP_HARDWARE_CLIP                  FALSE
+
+        #define GDISP_PIXELFORMAT                    GDISP_PIXELFORMAT_RGB888
+    #endif
+
+// The custom format is not defined for some reason, so define it as error
+// so we don't get compiler warnings
+#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR
+
+#define GDISP_USE_GFXNET                             FALSE
+//    #define GDISP_GFXNET_PORT                        13001
+//    #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP         FALSE
+//    #define GDISP_DONT_WAIT_FOR_NET_DISPLAY          FALSE
+//    #define GDISP_GFXNET_UNSAFE_SOCKETS              FALSE
+
+
+///////////////////////////////////////////////////////////////////////////
+// GWIN                                                                  //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GWIN                                 FALSE
+
+//#define GWIN_NEED_WINDOWMANAGER                      FALSE
+//    #define GWIN_REDRAW_IMMEDIATE                    FALSE
+//    #define GWIN_REDRAW_SINGLEOP                     FALSE
+//    #define GWIN_NEED_FLASHING                       FALSE
+//        #define GWIN_FLASHING_PERIOD                 250
+
+//#define GWIN_NEED_CONSOLE                            FALSE
+//    #define GWIN_CONSOLE_USE_HISTORY                 FALSE
+//        #define GWIN_CONSOLE_HISTORY_AVERAGING       FALSE
+//        #define GWIN_CONSOLE_HISTORY_ATCREATE        FALSE
+//    #define GWIN_CONSOLE_ESCSEQ                      FALSE
+//    #define GWIN_CONSOLE_USE_BASESTREAM              FALSE
+//    #define GWIN_CONSOLE_USE_FLOAT                   FALSE
+//#define GWIN_NEED_GRAPH                              FALSE
+//#define GWIN_NEED_GL3D                               FALSE
+
+//#define GWIN_NEED_WIDGET                             FALSE
+//#define GWIN_FOCUS_HIGHLIGHT_WIDTH                   1
+//    #define GWIN_NEED_LABEL                          FALSE
+//        #define GWIN_LABEL_ATTRIBUTE                 FALSE
+//    #define GWIN_NEED_BUTTON                         FALSE
+//        #define GWIN_BUTTON_LAZY_RELEASE             FALSE
+//    #define GWIN_NEED_SLIDER                         FALSE
+//        #define GWIN_SLIDER_NOSNAP                   FALSE
+//        #define GWIN_SLIDER_DEAD_BAND                5
+//        #define GWIN_SLIDER_TOGGLE_INC               20
+//    #define GWIN_NEED_CHECKBOX                       FALSE
+//    #define GWIN_NEED_IMAGE                          FALSE
+//        #define GWIN_NEED_IMAGE_ANIMATION            FALSE
+//    #define GWIN_NEED_RADIO                          FALSE
+//    #define GWIN_NEED_LIST                           FALSE
+//        #define GWIN_NEED_LIST_IMAGES                FALSE
+//    #define GWIN_NEED_PROGRESSBAR                    FALSE
+//        #define GWIN_PROGRESSBAR_AUTO                FALSE
+//    #define GWIN_NEED_KEYBOARD                       FALSE
+//        #define GWIN_KEYBOARD_DEFAULT_LAYOUT         VirtualKeyboard_English1
+//        #define GWIN_NEED_KEYBOARD_ENGLISH1          TRUE
+//    #define GWIN_NEED_TEXTEDIT                       FALSE
+//    #define GWIN_FLAT_STYLING                        FALSE
+//    #define GWIN_WIDGET_TAGS                         FALSE
+
+//#define GWIN_NEED_CONTAINERS                         FALSE
+//    #define GWIN_NEED_CONTAINER                      FALSE
+//    #define GWIN_NEED_FRAME                          FALSE
+//    #define GWIN_NEED_TABSET                         FALSE
+//        #define GWIN_TABSET_TABHEIGHT                18
+
+
+///////////////////////////////////////////////////////////////////////////
+// GEVENT                                                                //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GEVENT                               TRUE
+
+//#define GEVENT_ASSERT_NO_RESOURCE                    FALSE
+//#define GEVENT_MAXIMUM_SIZE                          32
+//#define GEVENT_MAX_SOURCE_LISTENERS                  32
+
+
+///////////////////////////////////////////////////////////////////////////
+// GTIMER                                                                //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GTIMER                               FALSE
+
+//#define GTIMER_THREAD_PRIORITY                       HIGH_PRIORITY
+//#define GTIMER_THREAD_WORKAREA_SIZE                  2048
+
+
+///////////////////////////////////////////////////////////////////////////
+// GQUEUE                                                                //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GQUEUE                               FALSE
+
+//#define GQUEUE_NEED_ASYNC                            FALSE
+//#define GQUEUE_NEED_GSYNC                            FALSE
+//#define GQUEUE_NEED_FSYNC                            FALSE
+//#define GQUEUE_NEED_BUFFERS                          FALSE
+
+///////////////////////////////////////////////////////////////////////////
+// GINPUT                                                                //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GINPUT                               FALSE
+
+//#define GINPUT_NEED_MOUSE                            FALSE
+//    #define GINPUT_TOUCH_STARTRAW                    FALSE
+//    #define GINPUT_TOUCH_NOTOUCH                     FALSE
+//    #define GINPUT_TOUCH_NOCALIBRATE                 FALSE
+//    #define GINPUT_TOUCH_NOCALIBRATE_GUI             FALSE
+//    #define GINPUT_MOUSE_POLL_PERIOD                 25
+//    #define GINPUT_MOUSE_CLICK_TIME                  300
+//    #define GINPUT_TOUCH_CXTCLICK_TIME               700
+//    #define GINPUT_TOUCH_USER_CALIBRATION_LOAD       FALSE
+//    #define GINPUT_TOUCH_USER_CALIBRATION_SAVE       FALSE
+//    #define GMOUSE_DRIVER_LIST                       GMOUSEVMT_Win32, GMOUSEVMT_Win32
+//#define GINPUT_NEED_KEYBOARD                         FALSE
+//    #define GINPUT_KEYBOARD_POLL_PERIOD              200
+//    #define GKEYBOARD_DRIVER_LIST                    GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32
+//    #define GKEYBOARD_LAYOUT_OFF                     FALSE
+//        #define GKEYBOARD_LAYOUT_SCANCODE2_US        FALSE
+//#define GINPUT_NEED_TOGGLE                           FALSE
+//#define GINPUT_NEED_DIAL                             FALSE
+
+
+///////////////////////////////////////////////////////////////////////////
+// GFILE                                                                 //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GFILE                                FALSE
+
+//#define GFILE_NEED_PRINTG                            FALSE
+//#define GFILE_NEED_SCANG                             FALSE
+//#define GFILE_NEED_STRINGS                           FALSE
+//#define GFILE_NEED_FILELISTS                         FALSE
+//#define GFILE_NEED_STDIO                             FALSE
+//#define GFILE_NEED_NOAUTOMOUNT                       FALSE
+//#define GFILE_NEED_NOAUTOSYNC                        FALSE
+
+//#define GFILE_NEED_MEMFS                             FALSE
+//#define GFILE_NEED_ROMFS                             FALSE
+//#define GFILE_NEED_RAMFS                             FALSE
+//#define GFILE_NEED_FATFS                             FALSE
+//#define GFILE_NEED_NATIVEFS                          FALSE
+//#define GFILE_NEED_CHBIOSFS                          FALSE
+
+//#define GFILE_ALLOW_FLOATS                           FALSE
+//#define GFILE_ALLOW_DEVICESPECIFIC                   FALSE
+//#define GFILE_MAX_GFILES                             3
+
+///////////////////////////////////////////////////////////////////////////
+// GADC                                                                  //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GADC                                 FALSE
+
+//#define GADC_MAX_LOWSPEED_DEVICES                    4
+
+
+///////////////////////////////////////////////////////////////////////////
+// GAUDIO                                                                //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GAUDIO                               FALSE
+// There seems to be a bug in the ugfx code, the wrong define is used
+// So define it in order to avoid warnings
+#define GFX_USE_GAUDIN                               GFX_USE_GAUDIO
+//    #define GAUDIO_NEED_PLAY                         FALSE
+//    #define GAUDIO_NEED_RECORD                       FALSE
+
+
+///////////////////////////////////////////////////////////////////////////
+// GMISC                                                                 //
+///////////////////////////////////////////////////////////////////////////
+#define GFX_USE_GMISC                                TRUE
+
+//#define GMISC_NEED_ARRAYOPS                          FALSE
+//#define GMISC_NEED_FASTTRIG                          FALSE
+//#define GMISC_NEED_FIXEDTRIG                         FALSE
+//#define GMISC_NEED_INVSQRT                           FALSE
+//    #define GMISC_INVSQRT_MIXED_ENDIAN               FALSE
+//    #define GMISC_INVSQRT_REAL_SLOW                  FALSE
+#define GMISC_NEED_MATRIXFLOAT2D                     TRUE
+#define GMISC_NEED_MATRIXFIXED2D                     FALSE
+
+#endif /* _GFXCONF_H */
diff --git a/keyboards/ergodox/infinity/halconf.h b/keyboards/ergodox/infinity/halconf.h
new file mode 100644 (file)
index 0000000..55dd5e8
--- /dev/null
@@ -0,0 +1,353 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/**
+ * @file    templates/halconf.h
+ * @brief   HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ *          various device drivers from your application. You may also use
+ *          this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief   Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL                 TRUE
+#endif
+
+/**
+ * @brief   Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN                 FALSE
+#endif
+
+/**
+ * @brief   Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT                 FALSE
+#endif
+
+/**
+ * @brief   Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C                 TRUE
+#endif
+
+/**
+ * @brief   Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S                 FALSE
+#endif
+
+/**
+ * @brief   Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI             FALSE
+#endif
+
+/**
+ * @brief   Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM                 FALSE
+#endif
+
+/**
+ * @brief   Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL              TRUE
+#endif
+
+/**
+ * @brief   Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB          TRUE
+#endif
+
+/**
+ * @brief   Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI                 TRUE
+#endif
+
+/**
+ * @brief   Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART                FALSE
+#endif
+
+/**
+ * @brief   Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB                 TRUE
+#endif
+
+/**
+ * @brief   Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG                 FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT                TRUE
+#endif
+
+/**
+ * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION    TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE          TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION    TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY           FALSE
+#endif
+
+/**
+ * @brief   Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS              TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings.                                          */
+/*===========================================================================*/
+
+/**
+ * @brief   Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ *          routines releasing some extra CPU time for the threads with
+ *          lower priority, this may slow down the driver a bit however.
+ *          This option is recommended also if the SPI driver does not
+ *          use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING            TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Number of initialization attempts before rejecting the card.
+ * @note    Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY              100
+#endif
+
+/**
+ * @brief   Include support for MMC cards.
+ * @note    MMC support is not yet implemented so this option must be kept
+ *          at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT             FALSE
+#endif
+
+/**
+ * @brief   Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ *          routines releasing some extra CPU time for the threads with
+ *          lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING            TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings.                                           */
+/*===========================================================================*/
+
+/**
+ * @brief   Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ *          default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE      38400
+#endif
+
+/**
+ * @brief   Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ *          buffers depending on the requirements of your application.
+ * @note    The default is 64 bytes for both the transmission and receive
+ *          buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE         128
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting.                                        */
+/*===========================================================================*/
+
+/**
+ * @brief   Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ *          the USB data endpoint maximum packet size.
+ * @note    The default is 64 bytes for both the transmission and receive
+ *          buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE     256
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT                TRUE
+#endif
+
+/**
+ * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION    TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT                TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/ergodox/infinity/infinity.c b/keyboards/ergodox/infinity/infinity.c
new file mode 100644 (file)
index 0000000..02db67e
--- /dev/null
@@ -0,0 +1,158 @@
+#include "infinity.h"
+#include "ch.h"
+#include "hal.h"
+#include "serial_link/system/serial_link.h"
+#ifdef VISUALIZER_ENABLE
+#include "lcd_backlight.h"
+#endif
+
+void init_serial_link_hal(void) {
+    PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
+    PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2);
+    PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3);
+    PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3);
+}
+
+#define RED_PIN 1
+#define GREEN_PIN 2
+#define BLUE_PIN 3
+#define CHANNEL_RED FTM0->CHANNEL[0]
+#define CHANNEL_GREEN FTM0->CHANNEL[1]
+#define CHANNEL_BLUE FTM0->CHANNEL[2]
+
+#define RGB_PORT PORTC
+#define RGB_PORT_GPIO GPIOC
+
+// Base FTM clock selection (72 MHz system clock)
+// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period
+// Higher pre-scalar will use the most power (also look the best)
+// Pre-scalar calculations
+// 0 -      72 MHz -> 549 Hz
+// 1 -      36 MHz -> 275 Hz
+// 2 -      18 MHz -> 137 Hz
+// 3 -       9 MHz ->  69 Hz (Slightly visible flicker)
+// 4 -   4 500 kHz ->  34 Hz (Visible flickering)
+// 5 -   2 250 kHz ->  17 Hz
+// 6 -   1 125 kHz ->   9 Hz
+// 7 - 562 500  Hz ->   4 Hz
+// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
+// Which will reduce the brightness range
+#define PRESCALAR_DEFINE 0
+void lcd_backlight_hal_init(void) {
+       // Setup Backlight
+    SIM->SCGC6 |= SIM_SCGC6_FTM0;
+    FTM0->CNT = 0; // Reset counter
+
+       // PWM Period
+       // 16-bit maximum
+       FTM0->MOD = 0xFFFF;
+
+       // Set FTM to PWM output - Edge Aligned, Low-true pulses
+#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0)
+       CHANNEL_RED.CnSC = CNSC_MODE;
+       CHANNEL_GREEN.CnSC = CNSC_MODE;
+       CHANNEL_BLUE.CnSC = CNSC_MODE;
+
+       // System clock, /w prescalar setting
+       FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE);
+
+       CHANNEL_RED.CnV = 0;
+       CHANNEL_GREEN.CnV = 0;
+       CHANNEL_BLUE.CnV = 0;
+
+       RGB_PORT_GPIO->PDDR |= (1 << RED_PIN);
+       RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN);
+       RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN);
+
+#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4)
+    RGB_PORT->PCR[RED_PIN] = RGB_MODE;
+    RGB_PORT->PCR[GREEN_PIN] = RGB_MODE;
+    RGB_PORT->PCR[BLUE_PIN] = RGB_MODE;
+}
+
+void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
+       CHANNEL_RED.CnV = r;
+       CHANNEL_GREEN.CnV = g;
+       CHANNEL_BLUE.CnV = b;
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+       // The backlight always has to be initialized, otherwise it will stay lit
+#ifndef VISUALIZER_ENABLE
+       lcd_backlight_hal_init();
+#endif
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+void ergodox_board_led_on(void){
+}
+
+void ergodox_right_led_1_on(void){
+}
+
+void ergodox_right_led_2_on(void){
+}
+
+void ergodox_right_led_3_on(void){
+}
+
+void ergodox_right_led_on(uint8_t led){
+}
+
+void ergodox_board_led_off(void){
+}
+
+void ergodox_right_led_1_off(void){
+}
+
+void ergodox_right_led_2_off(void){
+}
+
+void ergodox_right_led_3_off(void){
+}
+
+void ergodox_right_led_off(uint8_t led){
+}
+
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+    {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}},
+    {{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 10}},
+    {{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 11}},
+    {{0, 12}, {1, 12}, {2, 12}, {3, 12}, {4, 12}},
+    {{0, 13}, {1, 13}, {2, 13}, {3, 13}, {4, 13}},
+    {{0, 14}, {1, 14}, {2, 14}, {3, 14}, {4, 14}},
+    {{0, 15}, {1, 15}, {2, 15}, {3, 15}, {4, 15}},
+    {{0, 16}, {1, 16}, {2, 16}, {3, 16}, {4, 16}},
+    {{0, 17}, {1, 17}, {2, 17}, {3, 17}, {4, 17}},
+    {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
+    {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
+    {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
+    {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}},
+    {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}},
+    {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}},
+    {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}},
+    {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}},
+    {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}},
+};
+#endif
diff --git a/keyboards/ergodox/infinity/infinity.h b/keyboards/ergodox/infinity/infinity.h
new file mode 100644 (file)
index 0000000..fec9e56
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_
+#define KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_
+
+#include "quantum.h"
+
+void ergodox_board_led_on(void);
+void ergodox_right_led_1_on(void);
+void ergodox_right_led_2_on(void);
+void ergodox_right_led_3_on(void);
+void ergodox_right_led_on(uint8_t led);
+
+void ergodox_board_led_off(void);
+void ergodox_right_led_1_off(void);
+void ergodox_right_led_2_off(void);
+void ergodox_right_led_3_off(void);
+void ergodox_right_led_off(uint8_t led);
+
+inline void ergodox_led_all_on(void)
+{
+    ergodox_board_led_on();
+    ergodox_right_led_1_on();
+    ergodox_right_led_2_on();
+    ergodox_right_led_3_on();
+}
+
+inline void ergodox_led_all_off(void)
+{
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+}
+
+inline void ergodox_right_led_1_set(uint8_t n){
+       if (n) {
+               ergodox_right_led_1_on();
+       } else {
+               ergodox_right_led_1_off();
+       }
+}
+
+inline void ergodox_right_led_2_set(uint8_t n){
+       if (n) {
+               ergodox_right_led_2_on();
+       } else {
+               ergodox_right_led_2_off();
+       }
+}
+
+inline void ergodox_right_led_3_set(uint8_t n){
+       if (n) {
+               ergodox_right_led_3_on();
+       } else {
+               ergodox_right_led_3_off();
+       }
+}
+
+inline void ergodox_right_led_set(uint8_t led, uint8_t n){
+       if (n) {
+               ergodox_right_led_on(led);
+       } else {
+               ergodox_right_led_off(led);
+       }
+}
+
+inline void ergodox_led_all_set(uint8_t n) {
+    ergodox_right_led_1_set(n);
+    ergodox_right_led_2_set(n);
+    ergodox_right_led_3_set(n);
+}
+
+#define KEYMAP( \
+    A80, A70, A60, A50, A40, A30, A20,  \
+    A81, A71, A61, A51, A41, A31, A21,  \
+    A82, A72, A62, A52, A42, A32,       \
+    A83, A73, A63, A53, A43, A33, A23,  \
+    A84, A74, A64, A54, A44,            \
+                                  A13, A03, \
+                                       A04, \
+                             A34, A24, A14, \
+         B20, B30, B40, B50, B60, B70, B80, \
+         B21, B31, B41, B51, B61, B71, B81, \
+              B32, B42, B52, B62, B72, B82, \
+         B23, B33, B43, B53, B63, B73, B83, \
+                   B44, B54, B64, B74, B84, \
+    B03, B13,     \
+    B04,          \
+    B14, B24, B34 \
+) { \
+    { KC_NO, KC_NO, KC_NO, A03,   A04 }, \
+    { KC_NO, KC_NO, KC_NO, A13,   A14 }, \
+    { A20,   A21,   KC_NO, A23,   A24 }, \
+    { A30,   A31,   A32,   A33,   A34 }, \
+    { A40,   A41,   A42,   A43,   A44 }, \
+    { A50,   A51,   A52,   A53,   A54 }, \
+    { A60,   A61,   A62,   A63,   A64 }, \
+    { A70,   A71,   A72,   A73,   A74 }, \
+    { A80,   A81,   A82,   A83,   A84 }, \
+    { KC_NO, KC_NO, KC_NO, B03,   B04 }, \
+    { KC_NO, KC_NO, KC_NO, B13,   B14 }, \
+    { B20,   B21,   KC_NO, B23,   B24 }, \
+    { B30,   B31,   B32,   B33,   B34 }, \
+    { B40,   B41,   B42,   B43,   B44 }, \
+    { B50,   B51,   B52,   B53,   B54 }, \
+    { B60,   B61,   B62,   B63,   B64 }, \
+    { B70,   B71,   B72,   B73,   B74 }, \
+    { B80,   B81,   B82,   B83,   B84 }  \
+}
+
+#endif /* KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ */
diff --git a/keyboards/ergodox/infinity/led.c b/keyboards/ergodox/infinity/led.c
new file mode 100644 (file)
index 0000000..8175c1c
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+
+#include "led.h"
+
+
+void led_set(uint8_t usb_led) {
+    //TODO: Add led emulation if there's no customized visualization
+    (void)usb_led;
+}
diff --git a/keyboards/ergodox/infinity/matrix.c b/keyboards/ergodox/infinity/matrix.c
new file mode 100644 (file)
index 0000000..1fda904
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
+Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include "hal.h"
+#include "timer.h"
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "matrix.h"
+
+
+/*
+ * Infinity ErgoDox Pinusage:
+ * Column pins are input with internal pull-down. Row pins are output and strobe with high.
+ * Key is high or 1 when it turns on.
+ *
+ *     col: { PTD1, PTD4, PTD5, PTD6, PTD7 }
+ *     row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC9, PTC10, PTC11, PTD0 }
+ */
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[LOCAL_MATRIX_ROWS];
+static bool debouncing = false;
+static uint16_t debouncing_time = 0;
+
+
+void matrix_init(void)
+{
+    /* Column(sense) */
+    palSetPadMode(GPIOD, 1,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 4,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 5,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 6,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 7,  PAL_MODE_INPUT_PULLDOWN);
+
+    /* Row(strobe) */
+    palSetPadMode(GPIOB, 2,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 3,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 0,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 9,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL);
+
+    memset(matrix, 0, MATRIX_ROWS);
+    memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS);
+
+    matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+    for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
+        matrix_row_t data = 0;
+
+        // strobe row
+        switch (row) {
+            case 0: palSetPad(GPIOB, 2);    break;
+            case 1: palSetPad(GPIOB, 3);    break;
+            case 2: palSetPad(GPIOB, 18);   break;
+            case 3: palSetPad(GPIOB, 19);   break;
+            case 4: palSetPad(GPIOC, 0);    break;
+            case 5: palSetPad(GPIOC, 9);    break;
+            case 6: palSetPad(GPIOC, 10);   break;
+            case 7: palSetPad(GPIOC, 11);   break;
+            case 8: palSetPad(GPIOD, 0);    break;
+        }
+
+        // need wait to settle pin state
+        // if you wait too short, or have a too high update rate
+        // the keyboard might freeze, or there might not be enough
+        // processing power to update the LCD screen properly.
+        // 20us, or two ticks at 100000Hz seems to be OK
+        wait_us(20);
+
+        // read col data: { PTD1, PTD4, PTD5, PTD6, PTD7 }
+        data = ((palReadPort(GPIOD) & 0xF0) >> 3) |
+               ((palReadPort(GPIOD) & 0x02) >> 1);
+
+        // un-strobe row
+        switch (row) {
+            case 0: palClearPad(GPIOB, 2);  break;
+            case 1: palClearPad(GPIOB, 3);  break;
+            case 2: palClearPad(GPIOB, 18); break;
+            case 3: palClearPad(GPIOB, 19); break;
+            case 4: palClearPad(GPIOC, 0);  break;
+            case 5: palClearPad(GPIOC, 9);  break;
+            case 6: palClearPad(GPIOC, 10); break;
+            case 7: palClearPad(GPIOC, 11); break;
+            case 8: palClearPad(GPIOD, 0);  break;
+        }
+
+        if (matrix_debouncing[row] != data) {
+            matrix_debouncing[row] = data;
+            debouncing = true;
+            debouncing_time = timer_read();
+        }
+    }
+
+    uint8_t offset = 0;
+#ifdef MASTER_IS_ON_RIGHT
+    if (is_serial_link_master()) {
+        offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS;
+    }
+#endif
+
+    if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
+        for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
+            matrix[offset + row] = matrix_debouncing[row];
+        }
+        debouncing = false;
+    }
+    matrix_scan_quantum();
+    return 1;
+}
+
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+    return (matrix[row] & (1<<col));
+}
+
+matrix_row_t matrix_get_row(uint8_t row)
+{
+    return matrix[row];
+}
+
+void matrix_print(void)
+{
+    xprintf("\nr/c 01234567\n");
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+        xprintf("%X0: ", row);
+        matrix_row_t data = matrix_get_row(row);
+        for (int col = 0; col < MATRIX_COLS; col++) {
+            if (data & (1<<col))
+                xprintf("1");
+            else
+                xprintf("0");
+        }
+        xprintf("\n");
+    }
+}
+
+void matrix_set_remote(matrix_row_t* rows, uint8_t index) {
+    uint8_t offset = 0;
+#ifdef MASTER_IS_ON_RIGHT
+    offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS * (index + 2);
+#else
+    offset = LOCAL_MATRIX_ROWS * (index + 1);
+#endif
+    for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
+        matrix[offset + row] = rows[row];
+    }
+}
diff --git a/keyboards/ergodox/infinity/mcuconf.h b/keyboards/ergodox/infinity/mcuconf.h
new file mode 100644 (file)
index 0000000..f6730b9
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+#define K20x7
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT             FALSE
+
+/* PEE mode - 48MHz system clock driven by external crystal. */
+#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY    72000000UL
+#define KINETIS_SYSCLK_FREQUENCY    72000000UL
+#define KINETIS_BUSCLK_FREQUENCY    36000000UL
+#define KINETIS_FLASHCLK_FREQUENCY  24000000UL
+
+#if 0
+/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1     1
+#define KINETIS_CLKDIV1_OUTDIV2     1
+#define KINETIS_CLKDIV1_OUTDIV4     2
+#define KINETIS_BUSCLK_FREQUENCY    KINETIS_SYSCLK_FREQUENCY
+#define KINETIS_FLASHCLK_FREQUENCY  KINETIS_SYSCLK_FREQUENCY/2
+#endif
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0            TRUE
+#define KINETIS_SERIAL_USE_UART1            TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0                TRUE
+/* Need to redefine this, since the default is for K20x */
+/* This is for Teensy LC; you should comment it out (or change to 5)
+ * for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY       2
+
+/*
+ * SPI driver system settings.
+ */
+#define KINETIS_SPI_USE_SPI0                TRUE
+
+#define KINETIS_I2C_USE_I2C0                TRUE
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/ergodox/infinity/rules.mk b/keyboards/ergodox/infinity/rules.mk
new file mode 100644 (file)
index 0000000..473a6df
--- /dev/null
@@ -0,0 +1,79 @@
+# project specific files
+SRC =  matrix.c \
+       led.c
+
+## chip/board settings
+# - the next two should match the directories in
+#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+# - For Teensies, FAMILY = KINETIS and SERIES is either
+#   KL2x (LC) or K20x (3.0,3.1,3.2).
+# - For Infinity KB, SERIES = K20x
+MCU_FAMILY = KINETIS
+MCU_SERIES = K20x
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
+# - LDSCRIPT =
+#   - MKL26Z64 for Teensy LC
+#   - MK20DX128 for Teensy 3.0
+#   - MK20DX256 for Teensy 3.1 and 3.2
+#   - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader
+#   - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
+MCU_LDSCRIPT = MK20DX256BLDR8
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+# - STARTUP =
+#   - kl2x for Teensy LC
+#   - k20x5 for Teensy 3.0 and Infinity 60%
+#   - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox
+MCU_STARTUP = k20x7
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+# - BOARD =
+#   - PJRC_TEENSY_LC for Teensy LC
+#   - PJRC_TEENSY_3 for Teensy 3.0
+#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
+#   - MCHCK_K20 for Infinity KB
+#BOARD = MCHCK_K20
+BOARD = PJRC_TEENSY_3_1
+
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+# I.e. 6 for Teensy LC; 7 for Teensy 3.x
+ARMV = 7
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000
+
+# Build Options
+#   comment out to disable the options.
+#
+CUSTOM_MATRIX ?= yes # Custom matrix file
+SERIAL_LINK_ENABLE = yes
+VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile
+LCD_ENABLE ?= yes
+LED_ENABLE ?= yes
+LCD_BACKLIGHT_ENABLE ?= yes
+MIDI_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
+
+ifdef LCD_ENABLE
+include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
+endif
+
+ifdef LED_ENABLE
+include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
+endif
diff --git a/keyboards/ergodox/keymaps/ab/Makefile b/keyboards/ergodox/keymaps/ab/Makefile
new file mode 100644 (file)
index 0000000..b673c5c
--- /dev/null
@@ -0,0 +1,9 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+COMMAND_ENABLE   = no  # Commands for debug and configuration
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/ab/keyboard-layout.json b/keyboards/ergodox/keymaps/ab/keyboard-layout.json
new file mode 100644 (file)
index 0000000..e2badad
--- /dev/null
@@ -0,0 +1,387 @@
+[
+  {
+    "name": "Beginner's Keymap for Ergodox-EZ",
+    "author": "Anand Babu Periasamy"
+  },
+  [
+    {
+      "x": 3.5
+    },
+    "#\n3\n\n\nF3",
+    {
+      "x": 10.5
+    },
+    ")\n0\n\n\nF10"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "@\n2\n\n\nF2",
+    {
+      "x": 1
+    },
+    "$\n4\n\n\nF4",
+    {
+      "x": 8.5
+    },
+    "(\n9\n\n\nF9",
+    {
+      "x": 1
+    },
+    "_\n-\n\n\nF11"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "%\n5\n\n\nF5",
+    "^\n6\n\n\nF6",
+    {
+      "x": 4.5
+    },
+    "&\n7\n\n\nF7",
+    "*\n8\n\n\nF8"
+  ],
+  [
+    {
+      "y": -0.875,
+      "w": 1.5
+    },
+    "~\n`\n\n\nEsc",
+    "!\n1\n\n\nF1",
+    {
+      "x": 14.5
+    },
+    "+\n=\n\n\nF12",
+    {
+      "a": 7,
+      "w": 1.5
+    },
+    "Backspace\n\n\n\nBackspace"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5
+    },
+    "E\n\n\n\n<i class=\"fa fa-caret-up\" aria-hidden=\"true\"></i>",
+    {
+      "x": 10.5
+    },
+    "I"
+  ],
+  [
+    {
+      "y": -0.8799999999999999,
+      "x": 2.5
+    },
+    "W"
+  ],
+  [
+    {
+      "y": -0.9950000000000001,
+      "x": 4.5,
+      "a": 4
+    },
+    "R",
+    {
+      "x": 8.5,
+      "a": 7
+    },
+    "U",
+    {
+      "x": 1
+    },
+    "O"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "T",
+    {
+      "h": 1.5
+    },
+    "<i class=\"fa fa-chevron-circle-left\" aria-hidden=\"true\"></i>",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "<i class=\"fa fa-chevron-circle-right\" aria-hidden=\"true\"></i>",
+    "Y"
+  ],
+  [
+    {
+      "y": -0.875,
+      "a": 6,
+      "w": 1.5
+    },
+    "Tab",
+    {
+      "a": 7
+    },
+    "Q",
+    {
+      "x": 14.5
+    },
+    "P",
+    {
+      "a": 4,
+      "w": 1.5
+    },
+    "|\n\\"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 7
+    },
+    "D\n\n\n\n<i class=\"fa fa-caret-down\" aria-hidden=\"true\"></i>",
+    {
+      "x": 10.5
+    },
+    "K"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "S\n\n\n\n<i class=\"fa fa-caret-left\" aria-hidden=\"true\"></i>",
+    {
+      "x": 1,
+      "c": "#c4bcbc"
+    },
+    "F\n\n\n\n<i class=\"fa fa-caret-right\" aria-hidden=\"true\"></i>",
+    {
+      "x": 8.5
+    },
+    "J",
+    {
+      "x": 1,
+      "c": "#cccccc"
+    },
+    "L"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "G",
+    {
+      "x": 6.5
+    },
+    "H"
+  ],
+  [
+    {
+      "y": -0.875,
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        0,
+        2
+      ],
+      "w": 1.5
+    },
+    "\n\n\nCtrl\n\n\nCaps",
+    {
+      "a": 7
+    },
+    "A",
+    {
+      "x": 14.5,
+      "a": 4
+    },
+    ":\n;",
+    {
+      "a": 7,
+      "w": 1.5
+    },
+    "Enter"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "h": 1.5
+    },
+    "PgDn",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "PgUp"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5
+    },
+    "C\n\n\n\n<i class=\"fa fa-hand-o-up\" aria-hidden=\"true\"></i>",
+    {
+      "x": 10.5,
+      "a": 4
+    },
+    "<\n,"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "a": 7
+    },
+    "X\n\n\n\n<i class=\"fa fa-hand-o-left\" aria-hidden=\"true\"></i>",
+    {
+      "x": 1
+    },
+    "V\n\n\n\n<i class=\"fa fa-hand-o-right\" aria-hidden=\"true\"></i>",
+    {
+      "x": 8.5
+    },
+    "M",
+    {
+      "x": 1,
+      "a": 4
+    },
+    ">\n."
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "a": 7
+    },
+    "B",
+    {
+      "x": 6.5
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "w": 1.5
+    },
+    "Shift",
+    "Z",
+    {
+      "x": 14.5,
+      "a": 4
+    },
+    "?\n/",
+    {
+      "w": 1.5
+    },
+    "\"\n'"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 7
+    },
+    "Alt\n\n\n\n<i class=\"fa fa-search-minus\" aria-hidden=\"true\"></i>",
+    {
+      "x": 10.5
+    },
+    "<i class=\"fa fa-long-arrow-down\" aria-hidden=\"true\"></i>\n\n\n\n<i class='fa fa-volume-down'></i>"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "<i class='fa fa-linux'></i>\n\n\n\n<i class=\"fa fa-search\" aria-hidden=\"true\"></i>",
+    {
+      "x": 1
+    },
+    "Alt\n\n\n\n<i class=\"fa fa-search-plus\" aria-hidden=\"true\"></i>",
+    {
+      "x": 8.5
+    },
+    "<i class=\"fa fa-long-arrow-left\" aria-hidden=\"true\"></i>\n\n\n\n<i class=\"fa fa-undo\" aria-hidden=\"true\"></i>",
+    {
+      "x": 1
+    },
+    "<i class=\"fa fa-long-arrow-up\" aria-hidden=\"true\"></i>\n\n\n\n<i class='fa fa-volume-up'></i>"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5
+    },
+    "Ctrl\n\n\n\n<i class='fa fa-download'></i>",
+    "Esc",
+    {
+      "x": 14.5
+    },
+    "<i class=\"fa fa-long-arrow-right\" aria-hidden=\"true\"></i>\n\n\n\n<i class='fa fa-volume-off'></i>",
+    "Fn"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1
+    },
+    "<i class=\"fa fa-clone\" aria-hidden=\"true\"></i>",
+    "("
+  ],
+  [
+    {
+      "h": 2
+    },
+    "Space",
+    {
+      "h": 2
+    },
+    "Del",
+    "["
+  ],
+  [
+    {
+      "x": 2
+    },
+    "{"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3
+    },
+    ")",
+    "<i class=\"fa fa-paste\" aria-hidden=\"true\"></i>"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "]",
+    {
+      "h": 2
+    },
+    "Enter",
+    {
+      "h": 2
+    },
+    "<i class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i>"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "}"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/ab/keyboard-layout.png b/keyboards/ergodox/keymaps/ab/keyboard-layout.png
new file mode 100644 (file)
index 0000000..7406844
Binary files /dev/null and b/keyboards/ergodox/keymaps/ab/keyboard-layout.png differ
diff --git a/keyboards/ergodox/keymaps/ab/keymap.c b/keyboards/ergodox/keymaps/ab/keymap.c
new file mode 100644 (file)
index 0000000..7938c9d
--- /dev/null
@@ -0,0 +1,155 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define FN1  1 // media layer
+
+#define CAPS_CTL CTL_T(KC_CAPS)  // Caps on tap, Ctrl on hold.
+#define COPY     LCTL(KC_V)      // C-c Copy
+#define PASTE    LCTL(KC_V)      // C-v Paste
+#define ZM_NRM   LCTL(KC_0)      // C-0 Zoom Normal
+#define ZM_OUT   LCTL(KC_MINS)   // C-- Zoom Out
+#define ZM_IN    LCTL(KC_PLUS)   // C-+ Zoom In
+#define EM_UNDO  LCTL(KC_UNDS)   // C-_ Emacs Undo
+
+#define _MOB  1 // Mobile#
+#define _CUS1 2 // Custom macro 1
+#define _CUS2 3 // Custom macro 2
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |   1  |   2  |   3  |   4  |   5  |  6   |           |   7  |   8  |   9  |   0  |   -  |   =  | BSpace |
+ * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  | Fwd  |           | Back |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Caps/Ctl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | Enter  |
+ * |--------+------+------+------+------+------| PgDn |           | PgUp |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  |   '    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Ctrl |  Esc | LGui | Alt  | Alt  |                                       | Left |  Dn  |  Up  | Right|  Fn  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | Copy |  (   |       |   )  | Paste|
+ *                                 ,------|------+------|       |------+------+------.
+ *                                 |      |      |  [   |       |   ]  |      |      |
+ *                                 |Space | Del  |------|       |------| Enter|BSpace|
+ *                                 |      |      |  {   |       |   }  |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+    [BASE] = KEYMAP(  // layer 0 : default
+       // Left hand
+       KC_GRV,   KC_1,    KC_2,    KC_3,     KC_4,     KC_5,    KC_6,
+       KC_TAB,   KC_Q,    KC_W,    KC_E,     KC_R,     KC_T,    KC_WBAK,
+       CAPS_CTL, KC_A,    KC_S,    KC_D,     KC_F,     KC_G,
+       KC_LSFT,  KC_Z,    KC_X,    KC_C,     KC_V,     KC_B,    KC_PGDN,
+       KC_LCTL,  KC_ESC,  KC_LGUI, KC_LALT,  KC_LALT,
+       COPY,     KC_LCBR,
+       KC_LPRN,
+       KC_SPC,   KC_DEL,  KC_LBRC,
+       // Right hand
+       KC_7,     KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,  KC_BSPC,
+       KC_WFWD,  KC_Y,    KC_U,    KC_I,     KC_O,     KC_P,    KC_BSLS,
+       KC_H,     KC_J,    KC_K,    KC_L,     KC_SCLN,  KC_ENT,
+       KC_PGUP,  KC_N,    KC_M,    KC_COMM,  KC_DOT,   KC_SLSH, KC_QUOT,
+       KC_LEFT,  KC_DOWN, KC_UP,   KC_RIGHT, TG(FN1),
+       KC_RCBR,  PASTE,
+       KC_RPRN,
+       KC_RBRC,  KC_ENT,  KC_BSPC),
+/* Keymap 1: Fn Keys, media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  Esc   |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 | BSpace |
+ * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      | LClk | MClk | RClk |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Teensy|      | ZmNrm| ZmOut| ZmIn |                                       | Undo |VolDn |VolUp | Mute |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------+------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// FN1 Layer
+    [FN1] = KEYMAP(
+       // Left hand
+       KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN3, KC_BTN2, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, ZM_NRM,  ZM_OUT,  ZM_IN,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       RESET,   KC_TRNS, KC_TRNS,
+       // Right hand
+       KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_BSPC,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS, M(_MOB), KC_TRNS, M(_CUS1),M(_CUS2),KC_TRNS, KC_TRNS,
+       EM_UNDO, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+       ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    // MACRODOWN only works in this function
+    switch(id) {
+    case _MOB: // Your mobile# here.
+       return MACRODOWN(T(1), T(2), T(3), T(MINS),
+                        T(1), T(2), T(3), T(MINS),
+                        T(1), T(2), T(3), T(4),
+                        END);
+    case _CUS1: // Your custom macro 1
+       return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(SPC), END);
+    case _CUS2: // Your custom macro 2
+       return MACRODOWN(T(L), T(S), T(SPC), T(MINS), T(L), T(ENT), END);
+    };
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+       // TODO: Make this relevant to the ErgoDox EZ.
+    case 1:
+       ergodox_right_led_1_on();
+       break;
+    case 2:
+       ergodox_right_led_2_on();
+       break;
+    default:
+       // none
+       break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/ab/readme.md b/keyboards/ergodox/keymaps/ab/readme.md
new file mode 100644 (file)
index 0000000..6b1ac2b
--- /dev/null
@@ -0,0 +1,21 @@
+# Beginner's keymap for Ergodox-EZ
+Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get comfortable with the Ergodox-EZ, you may fork this keymap and customize it for your own needs or find a suitable one from the community contributed keymaps. 
+
+![Beginner's Keymap](keyboard-layout.png)
+
+#### Pros
+* Easier to switch between regular keyboards and Ergodox-EZ.
+* Easy on beginners. It has everything you need for your day to day usage.
+
+#### Cons
+* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md)
+* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys.
+
+#### Notes
+* Ideally number key [6] should have started from the right-hand side of the keyboard. Doing so breaks the familiar QWERTY layout.
+* Quote key ['] should have been placed between [:] and [Enter]. Due to lack of key space, it is placed below [Enter].
+* Double [Alt] keys are placed adjacent to each other for convenience.
+* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users.
+* Additional bracket keys are placed in the center of the keyboard for programmer's convenience.
+
+
diff --git a/keyboards/ergodox/keymaps/absenth/absenth_highres.png b/keyboards/ergodox/keymaps/absenth/absenth_highres.png
new file mode 100644 (file)
index 0000000..c07aa88
Binary files /dev/null and b/keyboards/ergodox/keymaps/absenth/absenth_highres.png differ
diff --git a/keyboards/ergodox/keymaps/absenth/keymap.c b/keyboards/ergodox/keymaps/absenth/keymap.c
new file mode 100644 (file)
index 0000000..ded668e
--- /dev/null
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   | A/L2 |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LS/PO  |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RS/PC  |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        LT(MDIA, KC_A),         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSPO,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSPC,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------| left | down |  up  | down |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 | Lclk | Rclk |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT,KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/absenth/readme.md b/keyboards/ergodox/keymaps/absenth/readme.md
new file mode 100644 (file)
index 0000000..0c04bf4
--- /dev/null
@@ -0,0 +1,11 @@
+# ErgoDox EZ Absenth Configuration
+
+## Changelog
+
+
+* Sept. 14, 2016 (V0.2):
+  * Added Space Cadet to Left and Right Shift.  Pressing Left shift with no other key adds an "(" and pressing Right shift with no other key adds an ")"
+* Sept. 8, 2016 (V0.1): 
+  * Made A key double as MEDIA Layer change when you hold it.  Added mouse buttons to the large thumb buttons on the left side on the Media Layer.  Added vi/vim style arrow keys on HJKL on media layer.
+
+![Absenth](absenth_highres.png)
diff --git a/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c
new file mode 100644 (file)
index 0000000..31ae426
--- /dev/null
@@ -0,0 +1,185 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_german.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   K  |   .  |   O  |   ,  |   Y  |  L1  |           |  L1  |   V  |   G  |   C  |   L  |   ß  |   Z    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   H  |   A  |   E  |   I  |   U  |------|           |------|   D  |   T  |   R  |   N  |   S  |   F    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |X/Ctrl|   Q  |   Ä  |   Ü  |   Ö  |      |           |      |   B  |   P  |   W  |   M  |   J  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Enter |------|       |------|  Tab   |RShift|
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        DE_K,         DE_DOT, DE_O,   DE_COMM,DE_Y,   TG(SYMB),
+        KC_BSPC,        DE_H,         DE_A,   DE_E,   DE_I,   DE_U,
+        KC_LSFT,        CTL_T(DE_X),  DE_Q,   DE_AE,  DE_UE,  DE_OE,  ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_ENT ,KC_END,
+        // right hand
+        KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+        TG(SYMB),    DE_V,   DE_G,   DE_C,   DE_L,   DE_SS,            DE_Z,
+                     DE_D,   DE_T,   DE_R,   DE_N,   LT(MDIA, DE_S),   GUI_T(KC_F),
+        MEH_T(KC_NO),KC_B,   KC_P,   KC_W,   KC_M,   CTL_T(KC_J),      KC_RSFT,
+                          KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+        KC_LALT,        CTL_T(KC_ESC),
+        KC_PGUP,
+        KC_PGDN,KC_TAB, KC_RSFT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md b/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md
new file mode 100644 (file)
index 0000000..f0dd381
--- /dev/null
@@ -0,0 +1,7 @@
+# Basic implementation for k.o,y variant of the adnw layout
+
+adnw is a layout optimised for usage with german and english language
+k.o,y is a variant of this layout
+http://www.adnw.de/index.php?n=Main.SeitlicheNachbaranschl%C3%A4ge
+
+The os must use the de_DE layout
diff --git a/keyboards/ergodox/keymaps/alexjj/keymap.c b/keyboards/ergodox/keymaps/alexjj/keymap.c
new file mode 100644 (file)
index 0000000..ac954ba
--- /dev/null
@@ -0,0 +1,238 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define UNIC 3 // unicode entry layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   ESC  |  1!  |  2@  |  3#  |  4$  |  5%  |  6^  |           |  7&  |  8*  |  9(  |  0)  |  -_  |  +=  |  BkSp  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  {   |           |   }  |   Y  |   U  |   I  |   O  |   P  |  |\    |
+ * |--------+------+------+------+------+------|  [   |           |   ]  |------+------+------+------+------+--------|
+ * | Win    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  :;  |  '"    |
+ * |--------+------+------+------+------+------| Home |           | End  |------+------+------+------+------+--------|
+ * | LShift |Z/Alt |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | Alt  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |LCtrl | COPY | PASTE| Left | Right|                                       | Down |  Up  |Hyper |  `~  | RCtrl |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *   Hyper = Ctrl+Super+Alt+Shift         | ~L3  |  F5  |       |  F2  | ~L2  |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | PgUp |       | Ins  |      |      |
+ *                                 | Enter| BkSp |------|       |------| ~L1  |Space |
+ *                                 |      |      | PgDn |       | Del  |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_6,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_LBRC,
+        KC_LGUI,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        ALT_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   KC_HOME,
+        KC_LCTRL,       LCTL(KC_C), LCTL(KC_V),  KC_LEFT,KC_RGHT,
+                                                      KC_FN3,  KC_F5,
+                                                              KC_PGUP,
+                                               KC_ENT,KC_BSPC,KC_PGDN,
+        // right hand
+             KC_7,     KC_8,   KC_9,   KC_0,   KC_MINS,   KC_EQL,        KC_BSPC,
+             KC_RBRC,  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                       KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,
+             KC_END,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,   KC_RSFT,
+             KC_DOWN,KC_UP, ALL_T(KC_NO),KC_GRV,   KC_RCTRL,
+             KC_F2, KC_FN2,
+             KC_INS,
+             KC_DELT,KC_FN1, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |PrintScr|
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |   £  |      |      |      |                                       |      |    . |   0  |   =  |Alt+F4|
+ *   `----------------------------------'                                       `----------------------------------'
+ *              ↑                         ,-------------.       ,-------------.
+ *           THERE!                       |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *    CAD = Ctrl + Alt + Delete    |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       | CAD  |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,M(3),KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_F7, KC_F8,   KC_F9,  KC_F10,   KC_F11,   KC_F12,  KC_PSCR,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_TRNS,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  LALT(KC_F4),
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       LCTL(LALT(KC_DEL)), KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | TEENSY |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolDn |VolUp | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+/* Keymap 3: Unicode Entry
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  Alt   |  1   |   2  |  3   |  4   |   5  |  6   |           |   7  |  8   |   9  |  0   |  +   |  +   |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  Alt   |      |      |   E  |      |      |      |           |      |      |   7  |   8  |  9   |  +   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  Alt   |   A  |      |   D  |   F  |      |------|           |------|      |   4  |   5  |  6   |  +   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  Alt   |      |      |   C  |      |   B  |      |           |      |      |   1  |   2  |  3   |  +   |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Alt  |  Alt | Alt  |      |      |                                       |   0  |   0  |  0   |  +   |       |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *      WINDOWS ONLY SETUP!!              | ~L3  |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |  Alt |  Alt |------|       |------|  Alt | Alt  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[UNIC] = KEYMAP(  // layer 3 : Unicode Entry
+        // left hand
+       KC_LALT,       KC_P1,      KC_P2,      KC_P3,  KC_P4,     KC_P5,   KC_P6,
+      KC_LALT,       KC_TRNS,    KC_TRNS,    KC_E,   KC_TRNS,   KC_TRNS, KC_TRNS,
+      KC_LALT,       KC_A,       KC_TRNS,    KC_D,   KC_F,      KC_TRNS,
+      KC_LALT,       KC_TRNS,    KC_TRNS,    KC_C,   KC_TRNS,   KC_B,    KC_TRNS,
+      KC_LALT,       KC_LALT,    KC_LALT,    KC_TRNS,KC_TRNS,
+                                                     KC_TRNS,   KC_TRNS,
+                                                                KC_TRNS,
+                                             KC_LALT,KC_LALT,   KC_TRNS,
+        // right hand
+           KC_P7,    KC_P8,     KC_P9,   KC_P0,   KC_PPLS,KC_PPLS,      KC_TRNS,
+           KC_TRNS,  KC_TRNS,   KC_P7,   KC_P8,   KC_P9,  KC_PPLS,      KC_TRNS,
+                     KC_TRNS,   KC_P4,   KC_P5,   KC_P6,  KC_PPLS,      KC_TRNS,
+           KC_TRNS,  KC_TRNS,   KC_P1,   KC_P2,   KC_P3,  KC_PPLS,      KC_TRNS,
+                                KC_P0,   KC_P0,   KC_P0,  KC_PPLS,      KC_TRNS,
+           KC_TRNS, KC_TRNS,
+           KC_TRNS,
+           KC_TRNS,KC_LALT, KC_LALT
+                  ),
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),                // FN1 - Momentary Layer 1 (Symbols)
+    [2] = ACTION_LAYER_TAP_TOGGLE(MDIA),                // FN2 - Momentary Layer 2 (Media)
+    [3] = ACTION_LAYER_TAP_TOGGLE(UNIC)                 // FN3 - Momentary Layer 3 (Unicode entry)
+}; 
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+      case 3: // this would trigger when you hit a key mapped as M(3)
+        if (record->event.pressed) {
+          return MACRO( I(255), D(LALT), T(P1), T(P5), T(P6), U(LALT), END  );
+      }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        case 3:
+            ergodox_right_led_3_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/alexjj/readme.md b/keyboards/ergodox/keymaps/alexjj/readme.md
new file mode 100644 (file)
index 0000000..239e32d
--- /dev/null
@@ -0,0 +1,179 @@
+Englishman in New York
+===========================
+
+:microphone: :tea:
+
+About
+------
+
+After using the massdrop configurator to get the basics, I wanted to add a
+little extra to my ergodox. Notably the Hyper hotkey, the press and hold,
+and a way to have my beloved £ :pound: symbol available<sup>[1](#unicode)</sup>. Why not switch to a GB
+layout? Well the computers I use are US keymap'd and I can't always change
+that. Plus I've got used to 2/@ and 3/# and moving to the ergodox was hard
+enough. :sweat_smile:
+
+I started from the default and edited from there as I needed. It's somewhat
+similar to a regular layout, particularly R1 and shift/controls. I ended up
+with a few keys that were blank, so I'm testing out some shortcuts. Alt+F4 for
+quitting things in Windows, is one example, but I felt it was better placed on 
+the 1st layer - in case of fat fingers.
+
+Layout
+-------
+
+![Layout](rl-layout.jpg "Isn't it lovely")
+
+### Base Layer
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   ESC  |  1!  |  2@  |  3#  |  4$  |  5%  |  6^  |           |  7&  |  8*  |  9(  |  0)  |  -_  |  +=  |  BkSp  |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+| Tab    |   Q  |   W  |   E  |   R  |   T  |  {   |           |   }  |   Y  |   U  |   I  |   O  |   P  |  |\    |
+|--------+------+------+------+------+------|  [   |           |   ]  |------+------+------+------+------+--------|
+| Win    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  :;  |  '"    |
+|--------+------+------+------+------+------| Home |           | End  |------+------+------+------+------+--------|
+| LShift |Z/Alt |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | Alt  | RShift |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |LCtrl | COPY | PASTE| Left | Right|                                       | Down |  Up  |Hyper |  `~  | RCtrl |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+  Hyper = Ctrl+Super+Alt+Shift         | ~L3  |  F5  |       |  F2  | ~L2  |
+                                ,------|------|------|       |------+------+------.
+                                |      |      | PgUp |       | Ins  |      |      |
+                                | Enter| BkSp |------|       |------| ~L1  |Space |
+                                |      |      | PgDn |       | Del  |      |      |
+                                `--------------------'       `--------------------'
+``` 
+
+### Symbol Layer
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |PrintScr|
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |      |   £  |      |      |      |                                       |      |    . |   0  |   =  |Alt+F4|
+  `----------------------------------'                                       `----------------------------------'
+             ↑                         ,-------------.       ,-------------.
+          THERE!                       |      |      |       |      |      |
+                                ,------|------|------|       |------+------+------.
+   CAD = Ctrl + Alt + Delete    |      |      |      |       |      |      |      |
+                                |      |      |------|       |------|      |      |
+                                |      |      |      |       | CAD  |      |      |
+                                `--------------------'       `--------------------'
+```
+### Media Layer
+
+Not touched this, not used either.
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+| TEENSY |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |      |      |      | Lclk | Rclk |                                       |VolDn |VolUp | Mute |      |      |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |      |      |
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       |      |      |Brwser|
+                                |      |      |------|       |------|      |Back  |
+                                |      |      |      |       |      |      |      |
+                                `--------------------'       `--------------------'
+```
+### Unicode Layer
+
+Used to enter/test unicode input on Windows. All numbers are numpad keys.
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|  Alt   |  1   |   2  |  3   |  4   |   5  |  6   |           |   7  |  8   |   9  |  0   |  +   |  +   |        |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  Alt   |      |      |   E  |      |      |      |           |      |      |   7  |   8  |  9   |  +   |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|  Alt   |   A  |      |   D  |   F  |      |------|           |------|      |   4  |   5  |  6   |  +   |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|  Alt   |      |      |   C  |      |   B  |      |           |      |      |   1  |   2  |  3   |  +   |        |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  | Alt  |  Alt | Alt  |      |      |                                       |   0  |   0  |  0   |  +   |       |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+     WINDOWS ONLY SETUP!!              | ~L3  |      |       |      |      |
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       |      |      |      |
+                                |  Alt |  Alt |------|       |------|  Alt | Alt  |
+                                |      |      |      |       |      |      |      |
+                                `--------------------'       `--------------------'
+```
+
+
+Usage
+------
+
+~L1 / L2 / L3 will momentarily switch to a layer if held and another key is pressed.
+If pressed and released will remain on layer until pressed again.
+
+### Unicode
+
+This layout is for Windows only. To enter a character Press and Hold Alt, type + and hex code then release Alt.
+
+Changelog
+-----------
+
+### [0.2.1] - 2016-04-05
+
+* Changed £ to alt code in Windows. Windows sucks at unicode.
+
+### [0.2.0] - 2016-03-27
+
+* Added unicode layer
+* Moved Copy/Paste to left hand side
+* Switched Enter and Space (again)
+* Added L3 (unicode layer) toggle
+* Removed Press and Hold for Alt on right hand size (/)
+* Swapped Volume Up/Down to match arrows
+* Tried fixing £ macro
+* Removed * in the matrix function things (upstream change)
+
+### [0.1.1] - 2016-03-23
+
+* Changed £ input to a macro
+
+
+### [0.1.0] - 2016-03-22
+
+After actually using the keyboard, I've made some changes:
+
+* Swapped Enter and Space
+* Moved backspace to thumb keys (top right still remains)
+* Added Ctrl+Alt+Delete
+* Added Teensy Reset on 2nd layer
+* Switched Up and Down
+* Changed copy/paste to be Ctrl+c and Ctrl+v as KC_COPY/PASTE didn't work (in Windows)
+* Moved ~L2 to replace +L1 after learning how the function works (notes above)
+* Hopefully fixed GBP symbol (unicode enabled in MakeFile)
+
+### [0.0.1] - 2016-03-21
+
+First version
+
+
+Issues
+-------
+
+Space for feedback and notes for future improvements
+
+----
+<sup><a name="unicode">1</a></sup>: For Windows only, and you have to edit the [registry](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input).
diff --git a/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg b/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg
new file mode 100644 (file)
index 0000000..e4e92bf
Binary files /dev/null and b/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg differ
diff --git a/keyboards/ergodox/keymaps/algernon/COPYING b/keyboards/ergodox/keymaps/algernon/COPYING
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile
new file mode 100644 (file)
index 0000000..699add3
--- /dev/null
@@ -0,0 +1,45 @@
+BOOTMAGIC_ENABLE=no
+COMMAND_ENABLE=no
+SLEEP_LED_ENABLE=no
+FORCE_NKRO ?= yes
+DEBUG_ENABLE = no
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+KEYLOGGER_ENABLE ?= yes
+UCIS_ENABLE = yes
+MOUSEKEY_ENABLE = no
+
+AUTOLOG_ENABLE ?= no
+
+ifeq (${FORCE_NKRO},yes)
+OPT_DEFS += -DFORCE_NKRO
+endif
+
+ifeq (${AUTOLOG_ENABLE},yes)
+KEYLOGGER_ENABLE = yes
+OPT_DEFS += -DAUTOLOG_ENABLE
+endif
+
+ifeq (${KEYLOGGER_ENABLE},yes)
+OPT_DEFS += -DKEYLOGGER_ENABLE
+CONSOLE_ENABLE = yes
+endif
+
+OPT_DEFS += -DUSER_PRINT
+
+KEYMAP_VERSION = $(shell \
+ if [ -d "${KEYMAP_PATH}/.git" ]; then \
+  cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
+ else echo QMK; fi)
+
+KEYMAP_BRANCH = $(shell \
+ if [ -d "${KEYMAP_PATH}/.git" ]; then \
+  cd "${KEYMAP_PATH}"; \
+ fi; \
+ git rev-parse --abbrev-ref HEAD 2>/dev/null)
+
+OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\"
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/algernon/NEWS.md b/keyboards/ergodox/keymaps/algernon/NEWS.md
new file mode 100644 (file)
index 0000000..e119989
--- /dev/null
@@ -0,0 +1,175 @@
+<!-- -*- mode: markdown; fill-column: 8192 -*- -->
+
+## v1.9
+
+*2016-10-16*
+
+### Overall changes
+
+* `F12` was replaced by an `Fx` key, that activate the **Media** layer as a one-shot layer, and also `Alt` as a one-shot modifier.
+
+### Base layer changes
+
+* The `Media Stop` key is now a tap-dance key, and resets the device for programming on the fourth tap.
+
+### Miscellaneous
+
+* `π` can now be entered with UCIS.
+* `🐁` can now be entered with UCIS.
+
+### Tools
+
+* The `tools/layer-notify` tool was removed, it was an example, which I don't use.
+
+#### `tools/hid-commands`
+
+* Now looks at the `DISABLE_APPSEL_START` environment value, and does not display an AppSel notification if it is non-empty.
+* Will attempt to re-program the keyboard when receiving a `reflash` command.
+* No longer tries to select Emacs 24 on `APPSEL_EMACS`, rather, it goes for any Emacs.
+* The `APPSEL_MUSIC` command now includes Kodi in the list too, as the last choice.
+
+## v1.8
+
+*2016-10-03*
+
+### ADORE
+
+* Major rearrangements were made, to reduce pinky use, and to balance out the hand usage.
+
+### Tools
+
+* The `hid-commands` tool will now display a notification when the **AppSel** layer is triggered.
+* The `log-to-heatmap.py` tool now treats the innermost keys on the bottom row as thumb keys, as far as statistics are concerned.
+
+### Miscellaneous
+
+* Fixed the **Steno** toggle key.
+
+## v1.7
+
+*2016-09-18*
+
+### Overall changes
+
+* The number row has been completely rearranged on both the **Base** and the **ADORE** layers.
+* The number/function key behavior was changed: function keys are now on the **Media**.
+* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the **Base** and **ADORE** layers.
+* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped.
+* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it.
+
+### ADORE
+
+* `Y` and `X` have been swapped again.
+
+### Media/Navigation layer
+
+* The function keys are now on this layer.
+* Mouse keys have been removed.
+* Media start/stop/prev/next have been removed.
+* `Print screen` has been removed.
+* There is only one screen lock key now.
+
+### Heatmap
+
+* Fixed a few issues in the finger-stats calculation.
+* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool.
+* The heatmap tool will now colorize the stats by default.
+* The periodic stats are now printed in a more compact format.
+
+### Tools
+
+* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes.
+* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator.
+* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side.
+
+## v1.6
+
+*2016-08-24*
+
+### Base layer changes
+
+* The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`.
+* The `:;` and `-_` keys are now available on the base layer, on their **ADORE** location, too, just below `[{(`/`]})`.
+* The `Apps` key has been replaced by `F12`.
+* The `-`/`_` is no longer a tap-dance key.
+
+### ADORE layer changes
+
+* Adjustments were made to the **ADORE** layer, to separate some inconvenient combinations.
+
+### Miscellaneous changes
+
+* `LEAD u` now starts the symbolic unicode input system, instead of the OS-one.
+* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off.
+* When the **ARROW** layer is on, the *red* and *blue* LEDs light up now.
+
+### Heatmap
+
+* The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off.
+* The heatmap generator received a lot of updates.
+
+## v1.5
+
+*2016-08-12*
+
+* The **1HAND** layer has been removed.
+* A `Delete` key is now available on the right thumb cluster.
+* The **ADORE** layer received a major update, see the layout image above.
+* It is now possible to enable automatic logging for the **ADORE** layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default.
+* The `~` key and the `Media Next/Prev` key have been swapped on the **Base** layer.
+* On the **ARROW** layer, `Backspace` has been replaced by `Enter`.
+* There is some experimental support for entering Unicode symbols.
+
+## v1.4
+
+*2016-07-29*
+
+* When toggling the key logging on or off, the LEDs will do a little dance.
+* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
+* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key.
+* The `-`/`_` key was turned into a tap-dance key too.
+* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
+
+## v1.3
+
+*2016-07-06*
+
+* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a *heatmap* out of the logs.
+* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the **Base** layer for an image that shows where arrows are.
+* The **experimental** layer has been redone, and is now called **ADORE**, and as such, can be enabled by `LEAD a` now.
+* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot.
+
+## v1.2
+
+*2016-06-22*
+
+* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with certain operating systems.
+* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted.
+* The `=` and `\` keys were swapped, `=` moved to the home row, on both the **Base** and the **experimental** layers.
+* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access.
+* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer.
+* `LEAD v` types the firmware version, and the keymap version.
+* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped.
+* The **Steno** layer gained a few more `#` and `*` keys, to make it easier on my fingers.
+
+## v1.1
+
+*2016-06-14*
+
+* The keyboard starts in NKRO mode, bootmagic and other things are disabled.
+* A **Steno** layer was added, to be used with Plover.
+* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress.
+* `LEAD y` types `\o/`.
+* Some keys on the **Base** layer have been moved around:
+    - `?` moved to the left pinky, left of `Q`.
+    - `=` shifted one row down, but `F11` stayed where it was.
+    - `-` on the left half was replaced by `Tab`.
+    - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key.
+    - `:` now inputs `;` when shifted.
+* `ESC` cancels the **Hungarian** layer too, not just modifiers.
+
+## v1.0
+
+*2016-05-26*
+
+Initial version.
diff --git a/keyboards/ergodox/keymaps/algernon/config.h b/keyboards/ergodox/keymaps/algernon/config.h
new file mode 100644 (file)
index 0000000..9bb1025
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef CONFIG_ALGERNON_H
+#define CONFIG_ALGERNON_H
+
+#include "../../config.h"
+
+#undef MOUSEKEY_TIME_TO_MAX
+#undef MOUSEKEY_MAX_SPEED
+
+#define MOUSEKEY_TIME_TO_MAX 1
+#define MOUSEKEY_MAX_SPEED 2
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 0
+
+#undef MOUSEKEY_WHEEL_DELAY
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 3000
+
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
+
+#undef LEADER_TIMEOUT
+#define LEADER_TIMEOUT 1000
+
+#endif
diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png
new file mode 100644 (file)
index 0000000..f6c64ca
Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png
new file mode 100644 (file)
index 0000000..5bd0611
Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/base-layer.png differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/heatmap.png b/keyboards/ergodox/keymaps/algernon/images/heatmap.png
new file mode 100644 (file)
index 0000000..4f55c5a
Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/heatmap.png differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/hun-layer.png b/keyboards/ergodox/keymaps/algernon/images/hun-layer.png
new file mode 100644 (file)
index 0000000..104a954
Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/hun-layer.png differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png b/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png
new file mode 100644 (file)
index 0000000..16d29e1
Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png
new file mode 100644 (file)
index 0000000..9a2ba55
Binary files /dev/null and b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png differ
diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c
new file mode 100644 (file)
index 0000000..bad2403
--- /dev/null
@@ -0,0 +1,1108 @@
+/*
+ * algernon's ErgoDox EZ layout, please see the readme.md file!
+ */
+
+#include <stdarg.h>
+#include "ergodox.h"
+#include "led.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+#include "timer.h"
+#include "keymap_plover.h"
+#include "eeconfig.h"
+#include "wait.h"
+#include "version.h"
+
+/* Layers */
+
+enum {
+  BASE = 0,
+  ADORE,
+  ARRW,
+  APPSEL,
+  HUN,
+  NMDIA,
+  PLVR,
+};
+
+/* Macros */
+
+enum {
+  NONE = 0,
+  // Buttons that do extra stuff
+  A_GUI,
+  A_PLVR,
+  A_MPN,
+
+  // Application select keys
+  APP_SLK, // Slack
+  APP_EMCS, // Emacs
+  APP_TERM, // Terminal
+  APP_CHRM, // Chrome
+  APP_MSIC, // Music
+
+  // Hungarian layer keys
+  HU_AA, // Á
+  HU_OO, // Ó
+  HU_EE, // É
+  HU_UU, // Ú
+  HU_II, // Í
+  HU_OE, // Ö
+  HU_UE, // Ü
+  HU_OEE, // Ő
+  HU_UEE, // Ű
+
+  // number/symbol keys
+  A_1, // 1
+  A_2, // 2
+  A_3, // ...
+  A_4,
+  A_5,
+  A_6,
+  A_7,
+  A_8,
+  A_9,
+  A_0,
+
+  // Fx
+  Fx,
+};
+
+/* Fn keys */
+
+enum {
+  F_BSE = 0,
+  F_HUN,
+  F_GUI,
+  F_SFT,
+  F_ALT,
+  F_CTRL
+};
+
+/* Custom keycodes */
+
+enum {
+  CT_CLN = 0,
+  CT_TA,
+  CT_LBP,
+  CT_RBP,
+  CT_TMUX,
+  CT_TPS,
+  CT_SR,
+};
+
+/* States & timers */
+
+uint16_t gui_timer = 0;
+
+uint16_t kf_timers[12];
+
+#if KEYLOGGER_ENABLE
+# ifdef AUTOLOG_ENABLE
+bool log_enable = true;
+# else
+bool log_enable = false;
+# endif
+#endif
+
+bool time_travel = false;
+bool skip_leds = false;
+
+static uint8_t is_adore = 0;
+
+/* The Keymap */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Base Layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * | Next/Prev | 9    | 7  @ | 5  * | 3  ^ | 1  $ | F11  |           |  Fx  | 0  % | 2  ! | 4  # | 6  & | 8    |    Plover |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |         ~ |   '  |   ,  |   .  |   P  |   Y  |   (  |           |  )   |   F  |   G  |   C  |   R  |  L   | \         |
+ * |-----------+------+------+------+------+------|   [  |           |  ]   |------+------+------+------+------+-----------|
+ * | Tab/ARROW |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |  S   | = / Arrow |
+ * |-----------+------+------+------+------+------| tmux |           | tmux |------+------+------+------+------+-----------|
+ * | Play/Pause|   /  |   Q  |   J  |   K  |   X  |      |           | Pane |   B  |   M  |   W  |   V  |  Z   | Stop/Reset|
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *     |       |      |      |      |   :  |                                       |   -  |      |      |      |       |
+ *     `-----------------------------------'                                       `-----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         | LAlt | GUI  |           | MDIA | Del  |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      | Ctrl |           | LEAD |      |      |
+ *                                  |Backsp|LShift|------|           |------| Enter| Space|
+ *                                  |      |      | ESC  |           | HUN  |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+[BASE] = KEYMAP(
+// left hand
+ M(A_MPN)           ,M(A_9)      ,M(A_7)      ,M(A_5)  ,M(A_3)  ,M(A_1)  ,KC_F11
+,KC_GRV             ,KC_QUOT     ,KC_COMM     ,KC_DOT  ,KC_P    ,KC_Y    ,TD(CT_LBP)
+,TD(CT_TA)          ,KC_A        ,KC_O        ,KC_E    ,KC_U    ,KC_I
+,KC_MPLY            ,KC_SLSH     ,KC_Q        ,KC_J    ,KC_K    ,KC_X    ,TD(CT_TMUX)
+,KC_NO              ,KC_NO       ,KC_NO       ,KC_NO   ,TD(CT_CLN)
+
+                                                            ,F(F_ALT),F(F_GUI)
+                                                                     ,F(F_CTRL)
+                                                    ,KC_BSPC,F(F_SFT),KC_ESC
+
+                                                                // right hand
+                                                               ,M(Fx)     ,M(A_0)  ,M(A_2)    ,M(A_4)  ,M(A_6)  ,M(A_8)   ,M(A_PLVR)
+                                                               ,TD(CT_RBP),KC_F    ,KC_G      ,KC_C    ,KC_R    ,KC_L     ,KC_BSLS
+                                                                          ,KC_D    ,KC_H      ,KC_T    ,KC_N    ,KC_S     ,KC_EQL
+                                                               ,TD(CT_TPS),KC_B    ,KC_M      ,KC_W    ,KC_V    ,KC_Z     ,TD(CT_SR)
+                                                                                   ,KC_MINS   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
+
+                                                               ,OSL(NMDIA),KC_DEL
+                                                               ,KC_LEAD
+                                                               ,F(F_HUN)  ,KC_ENT ,KC_SPC
+    ),
+
+/* Keymap 1: Adore layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * | Play/Pause| 9    | 7  @ | 5  * | 3  ^ | 1  $ | F11  |           |  Fx  | 0  % | 2  ! | 4  # | 6  & | 8    |    Plover |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |         \ |   X  |   W  |   C  |   H  |   F  |   (  |           |  )   |   M  |   G  |   L  |   P  |  /   | `~        |
+ * |-----------+------+------+------+------+------|   [  |           |  ]   |------+------+------+------+------+-----------|
+ * | Tab/Arrow |   A  |   O  |   E  |   I  |   U  |------|           |------|   D  |   R  |   T  |   N  |  S   | =         |
+ * |-----------+------+------+------+------+------| tmux |           | tmux |------+------+------+------+------+-----------|
+ * |           |   Z  |   Q  |   '  |   ,  |   .  |      |           | pane |   B  |   K  |   V  |   Y  |  J   |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *     |       |      |      |      |   :  |                                       |   -  |      |      |      |       |
+ *     `-----------------------------------'                                       `-----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         | LAlt | GUI  |           | MDIA | Del  |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      | Ctrl |           | HUN  |      |      |
+ *                                  |Backsp|LShift|------|           |------| Enter| Space|
+ *                                  |      |      | ESC  |           | LEAD |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+[ADORE] = KEYMAP(
+// left hand
+ KC_MPLY            ,M(A_9)      ,M(A_7)      ,M(A_5)  ,M(A_3)  ,M(A_1) ,KC_F11
+,KC_BSLS            ,KC_X        ,KC_W        ,KC_C    ,KC_H    ,KC_F   ,TD(CT_LBP)
+,TD(CT_TA)          ,KC_A        ,KC_O        ,KC_E    ,KC_I    ,KC_U
+,KC_NO              ,KC_Z        ,KC_Q        ,KC_QUOT ,KC_COMM ,KC_DOT ,TD(CT_TMUX)
+,KC_NO              ,KC_NO       ,KC_NO       ,KC_NO   ,TD(CT_CLN)
+
+                                                            ,F(F_ALT),F(F_GUI)
+                                                                     ,F(F_CTRL)
+                                                    ,KC_BSPC,F(F_SFT),KC_ESC
+
+                                                                // right hand
+                                                               ,M(Fx)     ,M(A_0)   ,M(A_2)  ,M(A_4)  ,M(A_6)  ,M(A_8)  ,M(A_PLVR)
+                                                               ,TD(CT_RBP),KC_M     ,KC_G    ,KC_L    ,KC_P    ,KC_SLSH ,KC_GRV
+                                                                          ,KC_D     ,KC_R    ,KC_T    ,KC_N    ,KC_S    ,KC_EQL
+                                                               ,TD(CT_TPS),KC_B     ,KC_K    ,KC_V    ,KC_Y    ,KC_J    ,KC_NO
+                                                                                    ,KC_MINS ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+
+                                                               ,OSL(NMDIA),KC_DEL
+                                                               ,F(F_HUN)
+                                                               ,KC_LEAD   ,KC_ENT ,KC_SPC
+    ),
+
+/* Keymap 2: Arrow layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      | Home |  Up  |  End |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |------|           |------|      | Left | Down | Rght |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *      |      |      |      |      |      |                                       |      |      |      |      |      |
+ *      `----------------------------------'                                       `----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         |      |      |           |      |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |      |           |      |      |      |
+ *                                  | Enter|      |------|           |------| PgUp | PgDn |
+ *                                  |      |      |      |           |      |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+
+[ARRW] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS
+
+                                             ,KC_TRNS ,KC_TRNS
+                                                      ,KC_TRNS
+                                    ,KC_ENT  ,KC_TRNS ,KC_TRNS
+
+                                                                // right hand
+                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                               ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP   ,KC_END  ,KC_TRNS ,KC_TRNS
+                                                                        ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
+                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                                                 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+                                                               ,KC_TRNS ,KC_TRNS
+                                                               ,KC_TRNS
+                                                               ,KC_TRNS ,KC_PGUP ,KC_PGDN
+    ),
+
+/* Keymap 3: Application select layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |Music |Slack |Emacs |Term  |Chrome|      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |------|           |------|      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *      |      |      |      |      |      |                                       |      |      |      |      |      |
+ *      `----------------------------------'                                       `----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         |      |      |           |      |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |      |           |      |      |      |
+ *                                  |      |      |------|           |------|      |      |
+ *                                  |      |      |      |           |      |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+
+[APPSEL] = KEYMAP(
+// left hand
+ KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
+,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS
+
+                                             ,KC_TRNS ,KC_TRNS
+                                                      ,KC_TRNS
+                                    ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+                                                                // right hand
+                                                               ,KC_TRNS ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_TRNS
+                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                                        ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                                                 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+                                                               ,KC_TRNS ,KC_TRNS
+                                                               ,KC_TRNS
+                                                               ,KC_TRNS ,KC_TRNS  ,KC_TRNS
+    ),
+
+
+/* Keymap 4: Hungarian Layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           |      |  Ő   |      |  Ű   |      |      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |   Á  |  Ó   |  É   |  Ú   |  Í   |------|           |------|      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |  Ö   |      |  Ü   |      |      |           |      |      |      |      |      |      |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *      |      |      |      |      |      |                                       |      |      |      |      |      |
+ *      `----------------------------------'                                       `----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         |      |      |           |      |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |      |           |      |      |      |
+ *                                  |      |      |------|           |------|      |      |
+ *                                  |      |      |      |           | BASE |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+
+[HUN] = KEYMAP(
+// left hand
+ KC_NO   ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO
+,KC_NO   ,KC_NO   ,M(HU_OEE),KC_NO   ,M(HU_UEE),KC_NO   ,KC_NO
+,KC_NO   ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
+,KC_NO   ,KC_NO   ,M(HU_OE) ,KC_NO   ,M(HU_UE) ,KC_NO   ,KC_NO
+,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO
+
+                                             ,KC_NO   ,KC_NO
+                                                      ,KC_NO
+                                    ,KC_NO   ,KC_TRNS ,KC_TRNS
+
+                                                                // right hand
+                                                               ,KC_TRNS ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+                                                               ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+                                                                        ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+                                                               ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+                                                                                 ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+
+                                                               ,KC_NO   ,KC_NO
+                                                               ,KC_NO
+                                                               ,F(F_BSE),KC_TRNS  ,KC_TRNS
+    ),
+
+/* Keymap 5: Navigation & Media layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |  F9  |  F7  |  F5  |  F3  |  F1  |ScrLCK|           |      | F10  |  F2  |  F4  |  F6  |  F8  |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |------|           |------|      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *      |      |      |      |      |      |                                       |      |      |      |      |      |
+ *      `----------------------------------'                                       `----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         | Mute | VlUp |           | BASE |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      | VlDn |           |      |      |      |
+ *                                  |      |      |------|           |------|      |      |
+ *                                  |      |      |      |           |      |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+[NMDIA] = KEYMAP(
+// left hand
+ KC_NO      ,KC_F9       ,KC_F7      ,KC_F5   ,KC_F3   ,KC_F1   ,LGUI(KC_L)
+,KC_NO      ,KC_NO       ,KC_NO      ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+,KC_NO      ,KC_NO       ,KC_NO      ,KC_NO   ,KC_NO   ,KC_NO
+,KC_NO      ,KC_NO       ,KC_NO      ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
+,KC_NO      ,KC_NO       ,KC_NO      ,KC_NO   ,KC_NO
+                                                        ,KC_MUTE ,KC_VOLU
+                                                                 ,KC_VOLD
+                                                 ,KC_NO ,KC_NO   ,KC_TRNS
+
+                                                                     // right hand
+                                                                     ,KC_TRNS   ,KC_F10  ,KC_F2   ,KC_F4   ,KC_F6   ,KC_F8    ,KC_NO
+                                                                     ,KC_NO     ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
+                                                                                ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
+                                                                     ,KC_NO     ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
+                                                                                         ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
+
+                                                                     ,KC_TRNS   ,KC_NO
+                                                                     ,KC_NO
+                                                                     ,KC_NO     ,KC_NO   ,KC_NO
+    ),
+
+/* Keymap 6: Steno for Plover
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |  BASE  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   #  |   #  |   #  |   #  |   #  |   #  |           |  #   |  #   |  #   |   #  |   #  |  #   |   #    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |   T  |   P  |   H  |      |------|           |------|      |  F   |   P  |   L  |  T   |   D    |
+ * |--------+   S  +------+------+------+   *  |   *  |           |  *   |  *   +------+------+------+------+--------|
+ * |        |      |   K  |   W  |   R  |      |      |           |      |      |  R   |   B  |   G  |  S   |   Z    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   A  |   O  |------|       |------|  E   |  U   |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+
+[PLVR] = KEYMAP(
+// left hand
+KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,  KC_NO,   KC_NO,
+KC_NO,  PV_NUM, PV_NUM, PV_NUM,  PV_NUM, PV_NUM,  PV_NUM,
+KC_NO,  PV_LS,  PV_LT,  PV_LP,   PV_LH,  PV_STAR,
+KC_NO,  PV_LS,  PV_LK,  PV_LW,   PV_LR,  PV_STAR, PV_STAR,
+KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,
+                                           KC_NO, KC_NO,
+                                           KC_NO,
+                                           PV_A,  PV_O,  KC_NO,
+
+                                                 // right hand
+                                                 KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   M(A_PLVR),
+                                                 PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,
+                                                          PV_STAR, PV_RF,   PV_RP,   PV_RL,   PV_RT,   PV_RD,
+                                                 PV_STAR, PV_STAR, PV_RR,   PV_RB,   PV_RG,   PV_RS,   PV_RZ,
+                                                                   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+                                           KC_NO,      KC_NO,
+                                           KC_NO,
+                                           KC_NO,PV_E, PV_U
+ ),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+   [F_BSE]  = ACTION_LAYER_CLEAR(ON_PRESS)
+  ,[F_HUN]  = ACTION_LAYER_INVERT(HUN, ON_PRESS)
+  ,[F_GUI]  = ACTION_MACRO_TAP(A_GUI)
+  ,[F_SFT]  = ACTION_MODS_ONESHOT (MOD_LSFT)
+  ,[F_ALT]  = ACTION_MODS_ONESHOT (MOD_LALT)
+  ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
+};
+
+static void toggle_steno(int pressed)
+{
+  uint8_t layer = biton32(layer_state);
+
+  if (pressed) {
+    if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
+
+    register_code(PV_LP);
+    register_code(PV_LH);
+    register_code(PV_LR);
+    register_code(PV_O);
+    register_code(PV_RL);
+    register_code(PV_RG);
+  } else {
+    unregister_code(PV_LP);
+    unregister_code(PV_LH);
+    unregister_code(PV_LR);
+    unregister_code(PV_O);
+    unregister_code(PV_RL);
+    unregister_code(PV_RG);
+  }
+}
+
+static macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
+{
+  uint8_t need_shift = 0;
+  uint8_t hold_shift = 0;
+
+  if (!record->event.pressed)
+    return MACRO_NONE;
+
+  layer_off (HUN);
+
+  if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
+    hold_shift = 1;
+    need_shift = 1;
+    unregister_code (KC_LSFT);
+  }
+  if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
+    need_shift = 1;
+    hold_shift = 0;
+    unregister_code (KC_LSFT);
+  }
+
+  clear_oneshot_mods ();
+
+  register_code (KC_RALT);
+  unregister_code (KC_RALT);
+  if (accent == (KC_DQT)) {
+    register_code (KC_RSFT);
+  }
+  register_code (accent);
+  unregister_code (accent);
+  if (need_shift && accent != (KC_DQT)) {
+    register_code (KC_RSFT);
+  } else if (accent == (KC_DQT) && !need_shift) {
+    unregister_code (KC_RSFT);
+  }
+  register_code (hun_char);
+  unregister_code (hun_char);
+  if (need_shift || accent == (KC_DQT))
+    unregister_code (KC_RSFT);
+  if (hold_shift)
+    register_code (KC_LSFT);
+
+  return MACRO_NONE;
+}
+
+static void ang_handle_num_row(uint8_t id, keyrecord_t *record) {
+  uint8_t idx = id - A_1;
+  uint8_t kc;
+  static bool shifted[10];
+
+  if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
+      ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
+    if (record->event.pressed)
+      shifted[idx] = true;
+  }
+
+  if (!shifted[idx]) {
+    kc = idx + KC_1;
+  } else {
+    switch (id) {
+    case A_8:
+    case A_9:
+      shifted[idx] = false;
+      return;
+
+    case A_7:
+      kc = KC_2;
+      break;
+    case A_5:
+      kc = KC_8;
+      break;
+    case A_3:
+      kc = KC_6;
+      break;
+    case A_1:
+      kc = KC_4;
+      break;
+
+    case A_0:
+      kc = KC_5;
+      break;
+    case A_2:
+      kc = KC_1;
+      break;
+    case A_4:
+      kc = KC_3;
+      break;
+    case A_6:
+      kc = KC_7;
+      break;
+    }
+  }
+
+  if (record->event.pressed) {
+    register_code (kc);
+  } else {
+    unregister_code (kc);
+    shifted[idx] = false;
+  }
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+      case A_MPN:
+        if (record->event.pressed) {
+          if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
+              ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
+            int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
+
+            if (oneshot)
+              clear_oneshot_mods ();
+            unregister_code (KC_LSFT);
+
+            register_code (KC_MPRV);
+            unregister_code (KC_MPRV);
+
+            if (!oneshot)
+              register_code (KC_LSFT);
+          } else {
+            return MACRO (T(MNXT), END);
+          }
+        }
+        break;
+
+        /* Hungarian layer */
+      case HU_AA:
+        return ang_do_hun (record, KC_QUOT, KC_A);
+      case HU_OO:
+        return ang_do_hun (record, KC_QUOT, KC_O);
+      case HU_EE:
+        return ang_do_hun (record, KC_QUOT, KC_E);
+      case HU_UU:
+        return ang_do_hun (record, KC_QUOT, KC_U);
+      case HU_II:
+        return ang_do_hun (record, KC_QUOT, KC_I);
+      case HU_OE:
+        return ang_do_hun (record, KC_DQT, KC_O);
+      case HU_UE:
+        return ang_do_hun (record, KC_DQT, KC_U);
+      case HU_OEE:
+        return ang_do_hun (record, KC_EQL, KC_O);
+      case HU_UEE:
+        return ang_do_hun (record, KC_EQL, KC_U);
+
+        /* Plover base */
+      case A_PLVR:
+        toggle_steno(record->event.pressed);
+        break;
+
+        /* Fx */
+      case Fx:
+        if (record->event.pressed) {
+          set_oneshot_mods (MOD_LALT);
+          layer_on (NMDIA);
+          set_oneshot_layer (NMDIA, ONESHOT_START);
+        } else {
+          clear_oneshot_layer_state (ONESHOT_PRESSED);
+        }
+        break;
+
+        /* GUI & AppSel */
+      case A_GUI:
+        if (record->event.pressed) {
+          register_code (KC_LGUI);
+          if (record->tap.count && !record->tap.interrupted) {
+            if (record->tap.count >= 2) {
+              uprintf("CMD:appsel_start\n");
+              layer_on (APPSEL);
+              set_oneshot_layer (APPSEL, ONESHOT_START);
+            }
+          } else {
+            record->tap.count = 0;
+          }
+          gui_timer = 0;
+        } else {
+          if (record->tap.count >= 2)
+            {
+              clear_oneshot_layer_state (ONESHOT_PRESSED);
+            }
+          gui_timer = timer_read ();
+        }
+        break;
+
+      case APP_SLK:
+        if (record->event.pressed)
+          uprintf("CMD:appsel_slack\n");
+        break;
+
+      case APP_EMCS:
+        if (record->event.pressed)
+          uprintf("CMD:appsel_emacs\n");
+        break;
+
+      case APP_TERM:
+        if (record->event.pressed)
+          uprintf("CMD:appsel_term\n");
+        break;
+
+      case APP_CHRM:
+        if (record->event.pressed)
+          uprintf("CMD:appsel_chrome\n");
+        break;
+
+      case APP_MSIC:
+        if (record->event.pressed)
+          uprintf("CMD:appsel_music\n");
+        break;
+
+        // number row and symbols
+      case A_1 ... A_0:
+        ang_handle_num_row(id, record);
+        break;
+      }
+
+      return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+  uint8_t dl;
+
+  set_unicode_input_mode(UC_LNX);
+
+  ergodox_led_all_on();
+  for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
+    ergodox_led_all_set (i);
+    wait_ms (5);
+  }
+  wait_ms(1000);
+  for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
+    ergodox_led_all_set (i);
+    wait_ms (10);
+  }
+  ergodox_led_all_off();
+
+  if (!eeconfig_is_enabled())
+    eeconfig_init();
+  dl = eeconfig_read_default_layer ();
+  if (dl == (1UL << ADORE)) {
+    is_adore = 1;
+  }
+};
+
+LEADER_EXTERNS();
+
+static void ang_tap (uint16_t code, ...) {
+  uint16_t kc = code;
+  va_list ap;
+
+  va_start(ap, code);
+
+  do {
+    register_code16(kc);
+    unregister_code16(kc);
+    wait_ms(50);
+    kc = va_arg(ap, int);
+  } while (kc != 0);
+  va_end(ap);
+}
+
+#define TAP_ONCE(code)  \
+  register_code (code); \
+  unregister_code (code)
+
+typedef struct {
+  bool layer_toggle;
+  bool sticky;
+} td_ta_state_t;
+
+static void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+  if (td_ta->sticky) {
+    td_ta->sticky = false;
+    td_ta->layer_toggle = false;
+    layer_off (ARRW);
+    return;
+  }
+
+  if (state->count == 1 && !state->pressed) {
+    register_code (KC_TAB);
+    td_ta->sticky = false;
+    td_ta->layer_toggle = false;
+  } else {
+    td_ta->layer_toggle = true;
+    layer_on (ARRW);
+    td_ta->sticky = (state->count == 2);
+  }
+}
+
+static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
+  td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+  if (!td_ta->layer_toggle)
+    unregister_code (KC_TAB);
+  if (!td_ta->sticky)
+    layer_off (ARRW);
+}
+
+static void ang_tap_dance_tmux_finished (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    register_code(KC_LALT);
+    register_code(KC_SPC);
+    unregister_code(KC_SPC);
+    unregister_code(KC_LALT);
+  } else {
+    register_code(KC_LCTL);
+    register_code(KC_A);
+    unregister_code(KC_A);
+    unregister_code(KC_LCTL);
+  }
+}
+
+static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *user_data) {
+  uint8_t kc = KC_P;
+
+  if (state->count >= 2) {
+    kc = KC_Z;
+  }
+  
+  register_code(KC_LALT);
+  register_code(KC_SPC);
+  unregister_code(KC_SPC);
+  unregister_code(KC_LALT);
+
+  register_code(kc);
+  unregister_code(kc);
+}
+
+static void
+_td_sr_each (qk_tap_dance_state_t *state, void *user_data) {
+  skip_leds = true;
+
+  switch (state->count) {
+  case 1:
+    ergodox_right_led_3_on ();
+    break;
+  case 2:
+    ergodox_right_led_2_on ();
+    break;
+  case 3:
+    ergodox_right_led_1_on ();
+    break;
+  case 4:
+    ergodox_right_led_3_off ();
+    wait_ms (50);
+    ergodox_right_led_2_off ();
+    wait_ms (50);
+    ergodox_right_led_1_off ();
+    break;
+  }
+}
+
+static void
+_td_sr_finished (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    register_code (KC_MSTP);
+  }
+  if (state->count >= 4) {
+    uprintf("CMD:reflash\n");
+    wait_ms (1000);
+    reset_keyboard ();
+    reset_tap_dance (state);
+  }
+}
+
+static void
+_td_sr_reset (qk_tap_dance_state_t *state, void *user_data) {
+  ergodox_right_led_1_off ();
+  wait_ms (50);
+  ergodox_right_led_2_off ();
+  wait_ms (50);
+  ergodox_right_led_3_off ();
+
+  if (state->count == 1) {
+    unregister_code (KC_MSTP);
+  }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+   [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN)
+  ,[CT_TA]  = {
+     .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
+     .user_data = (void *)&((td_ta_state_t) { false, false })
+   }
+  ,[CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN)
+  ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN)
+  ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished)
+  ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select)
+  ,[CT_SR]  = ACTION_TAP_DANCE_FN_ADVANCED (_td_sr_each, _td_sr_finished, _td_sr_reset)
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+  bool is_arrow = false;
+
+  if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
+    unregister_code (KC_LGUI);
+
+  if (!skip_leds) {
+    if (layer == HUN) {
+      ergodox_right_led_2_on();
+      ergodox_right_led_3_on();
+    } else if (layer == NMDIA) {
+      ergodox_right_led_1_on();
+      ergodox_right_led_2_on();
+    } else if (layer == PLVR) {
+      ergodox_right_led_1_on ();
+      ergodox_right_led_2_on ();
+      ergodox_right_led_3_on ();
+    } else if (layer == ADORE) {
+      ergodox_right_led_1_on ();
+      ergodox_right_led_2_on ();
+      ergodox_right_led_3_on ();
+
+      ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
+    }
+  }
+
+  if (layer_state & (1UL << ARRW)) {
+    if (!skip_leds) {
+      ergodox_right_led_1_on ();
+      ergodox_right_led_3_on ();
+    }
+    is_arrow = true;
+  }
+
+  if (!skip_leds) {
+    if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
+        ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
+      ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
+      ergodox_right_led_1_on ();
+    } else {
+      ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
+      if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow)
+        ergodox_right_led_1_off ();
+    }
+
+    if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
+        ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
+      ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
+      ergodox_right_led_2_on ();
+    } else {
+      ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
+      if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE)
+        ergodox_right_led_2_off ();
+    }
+
+    if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
+        ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
+      ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
+      ergodox_right_led_3_on ();
+    } else {
+      ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
+      if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow)
+        ergodox_right_led_3_off ();
+    }
+  }
+
+  LEADER_DICTIONARY() {
+    leading = false;
+    leader_end ();
+
+    SEQ_ONE_KEY (KC_C) {
+      ang_tap (LSFT(KC_C), KC_S, KC_I, KC_L, KC_L, KC_RALT, KC_QUOT, KC_A, KC_M, KC_A, KC_S,
+               KC_S, KC_Z, KC_O, KC_N, KC_Y, KC_K, KC_RALT, KC_QUOT, KC_A, KC_M, 0);
+    }
+
+    SEQ_ONE_KEY (KC_G) {
+      ang_tap (LSFT(KC_G), KC_E, KC_J, KC_G, KC_RALT, KC_EQL, KC_O,
+               KC_RALT, KC_EQL, KC_O,
+               KC_RALT, KC_EQL, KC_O, 0);
+    }
+
+#if KEYLOGGER_ENABLE
+    SEQ_ONE_KEY (KC_D) {
+      ergodox_led_all_on();
+      wait_ms(100);
+      ergodox_led_all_off();
+      log_enable = !log_enable;
+    }
+#endif
+
+    SEQ_ONE_KEY (KC_T) {
+      time_travel = !time_travel;
+    }
+
+    SEQ_ONE_KEY (KC_U) {
+      qk_ucis_start();
+    }
+
+    SEQ_ONE_KEY (KC_V) {
+      SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
+    }
+
+    SEQ_ONE_KEY (KC_L) {
+      /* λ */
+      unicode_input_start();
+      register_hex(0x03bb);
+      unicode_input_finish();
+    }
+
+    SEQ_ONE_KEY (KC_Y) {
+      ang_tap (KC_BSLS, KC_O, KC_SLSH, 0);
+    }
+
+    SEQ_ONE_KEY (KC_S) {
+      unicode_input_start(); register_hex(0xaf); unicode_input_finish();
+      TAP_ONCE (KC_BSLS);
+      register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
+      unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
+      register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
+      TAP_ONCE (KC_SLSH);
+      unicode_input_start (); register_hex(0xaf); unicode_input_finish();
+    }
+
+    SEQ_TWO_KEYS (KC_W, KC_M) {
+      uprintf("CMD:wm\n");
+    }
+
+    SEQ_ONE_KEY (KC_A) {
+      if (is_adore == 0) {
+        default_layer_and (0);
+        default_layer_or ((1UL << ADORE));
+        eeconfig_update_default_layer ((1UL << ADORE));
+        is_adore = 1;
+
+        ergodox_led_all_off ();
+        ergodox_right_led_3_on ();
+        wait_ms (100);
+        ergodox_right_led_2_on ();
+        wait_ms (100);
+        ergodox_right_led_3_off ();
+        ergodox_right_led_1_on ();
+        wait_ms (100);
+        ergodox_right_led_2_off ();
+        wait_ms (100);
+        ergodox_right_led_1_off ();
+      } else {
+        is_adore = 0;
+        default_layer_and (0);
+        default_layer_or (1UL << BASE);
+        eeconfig_update_default_layer ((1UL << BASE));
+
+        ergodox_led_all_off ();
+        ergodox_right_led_1_on ();
+        wait_ms (100);
+        ergodox_right_led_2_on ();
+        wait_ms (100);
+        ergodox_right_led_1_off ();
+        ergodox_right_led_3_on ();
+        wait_ms (100);
+        ergodox_right_led_2_off ();
+        wait_ms (100);
+        ergodox_right_led_3_off ();
+      }
+    }
+  }
+}
+
+static uint16_t last4[4];
+
+const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE
+(
+ UCIS_SYM("poop", 0x1f4a9),
+ UCIS_SYM("rofl", 0x1f923),
+ UCIS_SYM("kiss", 0x1f619),
+ UCIS_SYM("snowman", 0x2603),
+ UCIS_SYM("coffee", 0x2615),
+ UCIS_SYM("heart", 0x2764),
+ UCIS_SYM("bolt", 0x26a1),
+ UCIS_SYM("pi", 0x03c0),
+ UCIS_SYM("mouse", 0x1f401)
+);
+
+bool process_record_user (uint16_t keycode, keyrecord_t *record) {
+#if KEYLOGGER_ENABLE
+  if (log_enable) {
+    uint8_t layer = biton32(layer_state);
+
+    if ((layer == ADORE) || (layer == BASE))
+      uprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col,
+               record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak");
+  }
+#endif
+
+  if (keycode == KC_ESC && record->event.pressed) {
+    bool queue = true;
+
+    if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
+      clear_oneshot_mods ();
+      queue = false;
+    }
+    if (layer_state & (1UL<<HUN)) {
+      layer_off (HUN);
+      queue = false;
+    }
+    return queue;
+  }
+
+  if (time_travel && !record->event.pressed) {
+    uint8_t p;
+
+    // shift cache one to the left
+    for (p = 0; p < 3; p++) {
+      last4[p] = last4[p + 1];
+    }
+    last4[3] = keycode;
+
+    if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
+      ang_tap (KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0);
+      register_code (KC_RSFT);
+      register_code (KC_EQL);
+      unregister_code (KC_EQL);
+      unregister_code (KC_RSFT);
+
+      ang_tap (KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0);
+
+      return false;
+    }
+  }
+
+  return true;
+}
+
+void qk_ucis_symbol_fallback (void) {
+  for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) {
+    uint8_t code;
+
+    if ((qk_ucis_state.codes[i] >= M(A_1)) && (qk_ucis_state.codes[i] <= M(A_0)))
+      code = qk_ucis_state.codes[i] - M(A_1) + KC_1;
+    else
+      code = qk_ucis_state.codes[i];
+    register_code(code);
+    unregister_code(code);
+    wait_ms (10);
+  }
+}
diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md
new file mode 100644 (file)
index 0000000..015bd7c
--- /dev/null
@@ -0,0 +1,146 @@
+<!-- -*- mode: markdown; fill-column: 8192 -*- -->
+
+algernon's layout
+=======================
+
+This is an unconventional layout for the [ErgoDox EZ][ez]. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox].
+
+ [ez]: https://ergodox-ez.com/
+ [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/
+
+Some of the things in the layout only work when one uses [Spacemacs][spacemacs] and [GNOME][gnome] under Linux. Your mileage may vary.
+
+ [spacemacs]: http://spacemacs.org/
+ [gnome]: https://www.gnome.org/
+
+## Table of Contents
+
+* [Layouts](#layouts)
+    - [Base layer](#base-layer)
+    - [ADORE layer](#adore-layer)
+    - [Steno layer](#steno-layer)
+    - [LED states](#led-states)
+* [Tools](#tools)
+    - [Heatmap](#heatmap)
+    - [Layer notification](#layer-notification)
+* [Special features](#special-features)
+    - [Unicode Symbol Input](#unicode-symbol-input)
+* [Building](#building)
+    - [Using on Windows](#using-on-windows)
+* [Changelog](https://github.com/algernon/ergodox-layout/blob/master/NEWS.md#readme)
+* [License](#license)
+
+# Layouts
+
+## Base layer
+
+[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b)
+
+At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave:
+
+* The number row is the same as in the [ADORE](#adore-layer) layer. The function keys are on the **Media** layer.
+* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap.
+* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout.
+* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode.
+* The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle.
+* The **Fx** key is one-shot, and activates the **Media** layer, along with a one-shot `Alt`.
+* When holding the `Tab`/**Arrow** key, the arrow layer activates while the key is held. Tapping the key produces the normal, `Tab` key. Double-tapping it toggles the **Arrow** layer on until a third tap.
+* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
+* Tapping the `[{(`/`)}]` keys once yields `[` (or `{` when shifted), tapping them twice yields `(`.
+* The **Lead** key allows me to type in a sequence of keys, and trigger some actions:
+    - `LEAD l` uses the unicode input method to enter a `λ`.
+    - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯`
+    - `LEAD y` types `\o/`.
+    - `LEAD w m` maximises the currently focused window.
+    - `LEAD a` makes the [ADORE layer](#adore-layer) the default.
+    - `LEAD v` prints the firmware version, the keyboard and the keymap.
+    - `LEAD d` toggles logging keypress positions to the HID console.
+    - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
+    - `LEAD u` enters the [Unicode symbol input](#unicode-symbol-input) mode.
+    
+The symbols on the front in the image above have the same color as the key that activates them, with the exception of the **Arrow** layer, which is just black on the front.
+
+## ADORE layer
+
+[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a)
+
+My experimental layout, that I keep tweaking. No full description here, because things are very much in flux.
+
+Note that the **HUN** layer does not work well with ADORE: it still has the same layout as on the [Base](#base-layer) layer. This will remain until ADORE becomes the default.
+
+## Steno layer
+
+[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
+
+This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too.
+
+## LED states
+
+The primary purpose of the LEDs is to show the modifier status, a secondary, to show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each have their designated LEDs: the *red*, *green* and *blue*, respectively. When a modifier is in a one-shot state, the respective LED will turn on with a dimmer light. If the modifier is toggled on, the brightness of the LED turns full.
+
+For the layers, the following rules apply:
+
+* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active.
+* When the **Hungarian** layer is active, the *green* and *blue* LEDs are on.
+* When the **Media** layer is active, the *red* and *green* ones are on.
+* When the **ARROW** layer is active, the *red* and *blue* ones are on.
+* For the [Steno layer](#steno-layer), all LEDs will be turned on.
+
+Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on.
+
+# Special features
+
+## Unicode Symbol Input
+
+Once in the Unicode Symbol Input mode, one is able to type in symbol names, press `Enter` or `Space`, and get the Unicode symbol itself back. When in the mode, a capital `U` is printed first. Once the sequence is finished, all of it is erased by sending enough `Backspace` taps, and the firmware starts the OS-specific unicode input sequence. Then, it looks up the symbol name, and enters the associated code. If it is not found, it will just replay the pressed keycodes.
+
+For the list of supported symbols, please see the source.
+
+This is an experimental feature, and may or may not work reliably.
+
+# Tools
+
+## Heatmap
+
+When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too.
+
+Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, either pipe the output of `hid_listen` into it, or pipe it an already saved log, and it will save the results into files in an output directory (given on the command-line). See the output of `tools/log-to-heatmap.py --help` for more information.
+
+ [kle]: http://www.keyboard-layout-editor.com/
+
+The generated heatmap looks somewhat like this:
+
+ ![Heatmap](images/heatmap.png)
+
+## Layer notification
+
+There is a very small tool in `tools/layer-notify`, that listens to the HID console, looking for layer change events, and pops up a notification for every detected change. It is a very simple tool, mainly serving as an example.
+
+# Building
+
+To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
+
+ [algernon:ez-layout]: https://github.com/algernon/ergodox-layout
+ [qmk]: https://github.com/jackhumbert/qmk_firmware
+
+```
+$ git clone https://github.com/jackhumbert/qmk_firmware.git
+$ cd qmk_firmware
+$ git clone https://github.com/algernon/ergodox-layout.git \
+            keyboards/ergodox/keymaps/algernon-master
+$ make keyboard=ergodox keymap=algernon-master
+```
+
+From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware):
+
+```
+$ make keyboard=ergodox keymap=algernon
+```
+
+## Using on Windows
+
+The keymap default to forcing NKRO, which seems to upset Windows, and except the modifiers, none of them work. If you experience this problem, recompile the firmware with `FORCE_NKRO=no` added to the `make` command line.
+
+# License
+
+The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version.
diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json
new file mode 100644 (file)
index 0000000..e09efec
--- /dev/null
@@ -0,0 +1,486 @@
+[
+  {
+    "backcolor": "#ffffff",
+    "name": "ErgoDox - algernon's layout: Heatmap",
+    "author": "Gergely Nagy <kbd@gergo.csillger.hu>",
+    "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.",
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Tea",
+    "pcb": true,
+    "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }"
+  },
+  [
+    {
+      "x": 3.5,
+      "fa": [
+        0,
+        0,
+        2
+      ]
+    },
+    "*\n5\nF5",
+    {
+      "x": 10.5,
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        2
+      ]
+    },
+    "#\n4\nF4"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "@\n7\nF7",
+    {
+      "x": 1
+    },
+    "^\n3\nF3",
+    {
+      "x": 8.5
+    },
+    "!\n2\nF2",
+    {
+      "x": 1
+    },
+    "&\n6\nF6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "$\n1\nF1",
+    {
+      "a": 7,
+      "f": 3
+    },
+    "F11",
+    {
+      "x": 4.5,
+      "f": 3
+    },
+    "Fx",
+    {
+      "a": 4,
+      "f": 3,
+      "fa": [
+        0,
+        0,
+        2
+      ]
+    },
+    "%\n0\nF10"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 9,
+      "a": 6,
+      "w": 1.5
+    },
+    "\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
+    {
+      "f": 3,
+      "a": 4,
+      "fa": [
+          0,
+          0,
+          2
+      ]
+    },
+    " \n9\nF9",
+    {
+      "x": 14.5
+    },
+    " \n8\nF8",
+    {
+      "a": 7,
+      "w": 1.5
+    },
+    "STENO"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 6
+    },
+    "C",
+    {
+      "x": 10.5
+    },
+    "L"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "a": 6
+    },
+    "W",
+    {
+      "x": 1,
+      "a": 6
+    },
+    "H",
+    {
+      "x": 8.5
+    },
+    "G",
+    {
+      "x": 1
+    },
+    "P"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "F",
+    {
+      "a": 4,
+      "fa": [0, 0, 0],
+      "h": 1.5
+    },
+    "{\n(\n[",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "}\n)\n]",
+    {
+      "a": 6
+    },
+    "M"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 3,
+      "a": 4,
+      "w": 1.5
+    },
+    "\n\n|\n\\",
+    {
+      "a": 6,
+      "f": 3
+    },
+    "X",
+    {
+      "x": 14.5,
+      "a": 4
+    },
+    "/\n?",
+    {
+      "a": 4,
+      "w": 1.5
+    },
+    "~\n`"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 6
+    },
+    "E",
+    {
+      "x": 10.5
+    },
+    "T"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "O",
+    {
+      "x": 1,
+      "n": true
+    },
+    "I",
+    {
+      "x": 8.5,
+      "n": true
+    },
+    "R",
+    {
+      "x": 1
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "U",
+    {
+      "x": 6.5
+    },
+    "D"
+  ],
+  [
+    {
+      "y": -0.875,
+      "fa": [
+        6
+      ],
+      "w": 1.5
+    },
+    "<i class='fa fa-arrows'></i>\n\nTab",
+    {
+      "f": 3
+    },
+    "A",
+    {
+      "x": 14.5,
+      "f": 3
+    },
+    "S",
+    {
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        6
+      ],
+      "w": 1.5
+    },
+    "+\n="
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "a": 7,
+      "f": 9,
+      "h": 1.5
+    },
+    "<i class='fa fa-columns'></i>",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "<i class='fa fa-table'></i>"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "a": 4,
+      "f": 3
+    },
+    "\"\n'",
+    {
+      "x": 10.5,
+      "a": 6,
+      "f": 3
+    },
+    "V"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "a": 6
+    },
+    "Q",
+    {
+      "x": 1,
+      "a": 4
+    },
+    "<\n,",
+    {
+      "x": 8.5,
+      "a": 6
+    },
+    "K",
+    {
+      "x": 1
+    },
+    "Y"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "a": 4
+    },
+    ">\n.",
+    {
+      "x": 6.5,
+      "a": 6
+    },
+    "B"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 9,
+      "w": 1.5,
+      "g": true
+    },
+    "",
+    {
+      "a": 6,
+      "f": 3,
+      "g": false
+    },
+    "Z",
+    {
+      "x": 14.5
+    },
+    "J",
+    {
+      "f": 9,
+      "g": true,
+      "w": 1.5,
+      "a": 4
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "g": true,
+      "a": 7,
+      "f": 3
+    },
+    "",
+    {
+      "x": 10.5
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "",
+    {
+      "x": 1,
+      "g": false,
+      "a": 5
+    },
+    ";\n:",
+    {
+      "x": 8.5
+    },
+    "_\n-",
+    {
+      "x": 1,
+      "g": true,
+      "a": 7
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5
+    },
+    "",
+    {},
+    "",
+    {
+      "x": 14.5
+    },
+    "",
+    {},
+    ""
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1,
+      "g": false
+    },
+    "Alt",
+    {
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        0,
+        9
+      ]
+    },
+    "\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>"
+  ],
+  [
+    {
+      "a": 7,
+      "f": 9,
+      "h": 2
+    },
+    "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
+    {
+      "h": 2
+    },
+    "<i class='fa fa-angle-double-up'></i>",
+    {
+      "f": 3
+    },
+    "Ctrl"
+  ],
+  [
+    {
+      "x": 2
+    },
+    "ESC"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3,
+      "f": 2
+    },
+    "MEDIA",
+    {},
+    "DEL"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "HUN",
+    {
+      "f": 9,
+      "h": 2
+    },
+    "<i class='kb kb-Return-2'></i>",
+    {
+      "f": 3,
+      "h": 2
+    },
+    "SPC"
+  ],
+  [
+    {
+      "x": -3,
+      "f": 2
+    },
+    "LEAD"
+  ]
+]
diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json
new file mode 100644 (file)
index 0000000..1e53281
--- /dev/null
@@ -0,0 +1,477 @@
+[
+  {
+    "backcolor": "#ffffff",
+    "name": "ErgoDox - algernon's layout: Heatmap",
+    "author": "Gergely Nagy <kbd@gergo.csillger.hu>",
+    "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.",
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Tea",
+    "pcb": true,
+    "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }"
+  },
+  [
+    {
+      "x": 3.5,
+      "fa": [
+        0,
+        0,
+        2
+      ]
+    },
+    "*\n5\nF5",
+    {
+      "x": 10.5,
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        2
+      ]
+    },
+    "#\n4\nF4"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "@\n7\nF7",
+    {
+      "x": 1
+    },
+    "^\n3\nF3",
+    {
+      "x": 8.5
+    },
+    "!\n2\nF2",
+    {
+      "x": 1
+    },
+    "&\n6\nF6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "$\n1\nF1",
+    {
+      "a": 7,
+      "f": 3
+    },
+    "F11",
+    {
+      "x": 4.5,
+      "f": 3
+    },
+    "Fx",
+    {
+      "a": 4,
+      "f": 3,
+      "fa": [
+        0,
+        0,
+        2
+      ]
+    },
+    "%\n0\nF10"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 6,
+      "a": 6,
+      "w": 1.5
+    },
+    "<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
+    {
+      "f": 3,
+      "a": 4,
+      "fa": [
+          0,
+          0,
+          2
+      ]
+
+    },
+    " \n9\nF9",
+    {
+      "x": 14.5
+    },
+    " \n8\nF8",
+    {
+      "a": 7,
+      "w": 1.5
+    },
+    "STENO"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 4
+    },
+    ">\n.",
+    {
+      "x": 10.5,
+      "a": 6
+    },
+    "C"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "a": 4
+    },
+    "<\n,",
+    {
+      "x": 1,
+      "a": 6
+    },
+    "P",
+    {
+      "x": 8.5
+    },
+    "G",
+    {
+      "x": 1
+    },
+    "R"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "Y",
+    {
+      "a": 4,
+      "h": 1.5
+    },
+    "{\n(\n[",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "}\n)\n]",
+    {
+      "a": 6
+    },
+    "F"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 3,
+      "a": 4,
+      "w": 1.5
+    },
+    "\n\n~\n`",
+    {
+      "a": 4,
+      "f": 3
+    },
+    "\"\n'",
+    {
+      "x": 14.5,
+      "a": 6
+    },
+    "L",
+    {
+      "a": 4,
+      "w": 1.5
+    },
+    "|\n\\"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 6
+    },
+    "E",
+    {
+      "x": 10.5
+    },
+    "T"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "O",
+    {
+      "x": 1,
+      "n": true
+    },
+    "U",
+    {
+      "x": 8.5,
+      "n": true
+    },
+    "H",
+    {
+      "x": 1
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "I",
+    {
+      "x": 6.5
+    },
+    "D"
+  ],
+  [
+    {
+      "y": -0.875,
+      "fa": [
+        6
+      ],
+      "w": 1.5
+    },
+    "<i class='fa fa-arrows'></i>\n\nTab",
+    {
+      "f": 3
+    },
+    "A",
+    {
+      "x": 14.5,
+      "f": 3
+    },
+    "S",
+    {
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        6
+      ],
+      "w": 1.5
+    },
+    "+\n="
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "a": 7,
+      "f": 9,
+      "h": 1.5
+    },
+    "<i class='fa fa-columns'></i>",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "<i class='fa fa-table'></i>"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "f": 3,
+      "a": 6
+    },
+    "J",
+    {
+      "x": 10.5
+    },
+    "W"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "Q",
+    {
+      "x": 1
+    },
+    "K",
+    {
+      "x": 8.5
+    },
+    "M",
+    {
+      "x": 1
+    },
+    "V"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "X",
+    {
+      "x": 6.5
+    },
+    "B"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 9,
+      "w": 1.5
+    },
+    "\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
+    {
+      "a": 4,
+      "f": 3
+    },
+    "?\n/",
+    {
+      "x": 14.5,
+      "a": 6
+    },
+    "Z",
+    {
+      "f": 9,
+      "w": 1.5
+    },
+    "<i class='kb kb-Multimedia-Stop'></i>"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "g": true,
+      "a": 7,
+      "f": 3
+    },
+    "",
+    {
+      "x": 10.5
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "",
+    {
+      "x": 1,
+      "g": false,
+      "a": 5
+    },
+    ";\n:",
+    {
+      "x": 8.5
+    },
+    "_\n-",
+    {
+      "x": 1,
+      "g": true,
+      "a": 7
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5
+    },
+    "",
+    {},
+    "",
+    {
+      "x": 14.5
+    },
+    "",
+    {},
+    ""
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1,
+      "g": false
+    },
+    "Alt",
+    {
+      "a": 4,
+      "fa": [
+        0,
+        0,
+        0,
+        9
+      ]
+    },
+    "\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>"
+  ],
+  [
+    {
+      "a": 7,
+      "f": 9,
+      "h": 2
+    },
+    "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
+    {
+      "h": 2
+    },
+    "<i class='fa fa-angle-double-up'></i>",
+    {
+      "f": 3
+    },
+    "Ctrl"
+  ],
+  [
+    {
+      "x": 2
+    },
+    "ESC"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3,
+      "f": 2
+    },
+    "MEDIA",
+    {},
+    "DEL"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "LEAD",
+    {
+      "f": 9,
+      "h": 2
+    },
+    "<i class='kb kb-Return-2'></i>",
+    {
+      "f": 3,
+      "h": 2
+    },
+    "SPC"
+  ],
+  [
+    {
+      "x": -3,
+      "f": 2
+    },
+    "HUN"
+  ]
+]
diff --git a/keyboards/ergodox/keymaps/algernon/tools/hid-commands b/keyboards/ergodox/keymaps/algernon/tools/hid-commands
new file mode 100755 (executable)
index 0000000..a29d38f
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/bash
+set -e
+
+LAST_APPSEL_START=0
+
+cmd_wm () {
+    WIN="$(xdotool getactivewindow)"
+    wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz
+    xdotool windowsize ${WIN} 100% 100%
+    wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz
+}
+
+_cmd_appsel () {
+    wmctrl -x -a $1 || true
+    xdotool key Escape
+}
+
+cmd_appsel_music () {
+    wmctrl -x -a rhythmbox || wmctrl -x -a spotify || wmctrl -x -a kodi || true
+    xdotool key Escape
+}
+
+cmd_appsel_slack () {
+    _cmd_appsel slack
+}
+
+cmd_appsel_emacs () {
+    _cmd_appsel emacs
+}
+
+cmd_appsel_term () {
+    _cmd_appsel gnome-terminal
+}
+
+cmd_appsel_chrome () {
+    _cmd_appsel chromium
+}
+
+cmd_appsel_start () {
+    if [ ! -z "${DISABLE_APPSEL_START}" ]; then
+        return
+    fi
+
+    APPSEL_START=$(date +%s)
+    if [ $APPSEL_START -lt $(expr $LAST_APPSEL_START + 10) ]; then
+        return
+    fi
+    LAST_APPSEL_START=$APPSEL_START
+    notify-send -t 1000 "Please select an application!" -c device -u low \
+                -i /usr/share/icons/Adwaita/24x24/devices/video-display.png
+}
+
+cmd_reflash () {
+    teensy_loader_cli -v -w ~/src/ext/qmk_firmware/algernon.hex --mcu atmega32u4 || true
+}
+
+cmd_help () {
+    cat <<EOF
+Use the source, Luke!
+EOF
+}
+
+while read l; do
+    case "$l" in
+        "CMD:"*)
+            ;;
+        *)
+            continue
+            ;;
+    esac
+
+    cmd="$(echo $l | cut -d: -f2-)"
+
+    echo "Got command: ${cmd}"
+
+    if type cmd_${cmd} >/dev/null 2>&1; then
+        cmd_${cmd}
+    fi
+done
diff --git a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py
new file mode 100755 (executable)
index 0000000..e927e0e
--- /dev/null
@@ -0,0 +1,344 @@
+#! /usr/bin/env python3
+import json
+import os
+import sys
+import re
+import argparse
+import time
+
+from math import floor
+from os.path import dirname
+from subprocess import Popen, PIPE, STDOUT
+from blessings import Terminal
+
+class Heatmap(object):
+    coords = [
+        [
+            # Row 0
+            [ 4,  0], [ 4,  2], [ 2,  0], [ 1,  0], [ 2,  2], [ 3,  0], [ 3,  2],
+            [ 3,  4], [ 3,  6], [ 2,  4], [ 1,  2], [ 2,  6], [ 4,  4], [ 4,  6],
+        ],
+        [
+            # Row 1
+            [ 8,  0], [ 8,  2], [ 6,  0], [ 5,  0], [ 6,  2], [ 7,  0], [ 7,  2],
+            [ 7,  4], [ 7,  6], [ 6,  4], [ 5,  2], [ 6,  6], [ 8,  4], [ 8,  6],
+        ],
+        [
+            # Row 2
+            [12,  0], [12,  2], [10,  0], [ 9,  0], [10,  2], [11, 0], [     ],
+            [      ], [11,  2], [10,  4], [ 9,  2], [10,  6], [12, 4], [12, 6],
+        ],
+        [
+            # Row 3
+            [17,  0], [17,  2], [15,  0], [14,  0], [15,  2], [16,  0], [13,  0],
+            [13,  2], [16,  2], [15,  4], [14,  2], [15,  6], [17,  4], [17,  6],
+        ],
+        [
+            # Row 4
+            [20,  0], [20,  2], [19,  0], [18,  0], [19,  2], [], [], [], [],
+            [19,  4], [18,  2], [19,  6], [20,  4], [20,  6], [], [], [], []
+        ],
+        [
+            # Row 5
+            [     ], [23,  0], [22,  2], [22,  0], [22,  4], [21,  0], [21,  2],
+            [24, 0], [24,  2], [25,  0], [25,  4], [25,  2], [26,  0], [      ],
+        ],
+    ]
+
+    def set_attr_at(self, block, n, attr, fn, val):
+        blk = self.heatmap[block][n]
+        if attr in blk:
+            blk[attr] = fn(blk[attr], val)
+        else:
+            blk[attr] = fn(None, val)
+
+    def coord(self, col, row):
+        return self.coords[row][col]
+
+    @staticmethod
+    def set_attr(orig, new):
+        return new
+
+    def set_bg(self, coords, color):
+        (block, n) = coords
+        self.set_attr_at(block, n, "c", self.set_attr, color)
+        #self.set_attr_at(block, n, "g", self.set_attr, False)
+
+    def set_tap_info(self, coords, count, cap):
+        (block, n) = coords
+        def _set_tap_info(o, _count, _cap):
+            ns = 4 - o.count ("\n")
+            return o + "\n" * ns + "%.02f%%" % (float(_count) / float(_cap) * 100)
+
+        if not cap:
+            cap = 1
+        self.heatmap[block][n + 1] = _set_tap_info (self.heatmap[block][n + 1], count, cap)
+
+    @staticmethod
+    def heatmap_color (v):
+        colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]]
+        fb = 0
+        if v <= 0:
+            idx1, idx2 = 0, 0
+        elif v >= 1:
+            idx1, idx2 = len(colors) - 1, len(colors) - 1
+        else:
+            val = v * (len(colors) - 1)
+            idx1 = int(floor(val))
+            idx2 = idx1 + 1
+            fb = val - float(idx1)
+
+        r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0]
+        g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1]
+        b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2]
+
+        r, g, b = [x * 255 for x in (r, g, b)]
+        return "#%02x%02x%02x" % (int(r), int(g), int(b))
+
+    def __init__(self, layout):
+        self.log = {}
+        self.total = 0
+        self.max_cnt = 0
+        self.layout = layout
+
+    def update_log(self, coords):
+        (c, r) = coords
+        if not (c, r) in self.log:
+            self.log[(c, r)] = 0
+        self.log[(c, r)] = self.log[(c, r)] + 1
+        self.total = self.total + 1
+        if self.max_cnt < self.log[(c, r)]:
+            self.max_cnt = self.log[(c, r)]
+
+    def get_heatmap(self):
+        with open("%s/heatmap-layout.%s.json" % (dirname(sys.argv[0]), self.layout), "r") as f:
+            self.heatmap = json.load (f)
+
+        ## Reset colors
+        for row in self.coords:
+            for coord in row:
+                if coord != []:
+                    self.set_bg (coord, "#d9dae0")
+
+        for (c, r) in self.log:
+            coords = self.coord(c, r)
+            b, n = coords
+            cap = self.max_cnt
+            if cap == 0:
+                cap = 1
+            v = float(self.log[(c, r)]) / cap
+            self.set_bg (coords, self.heatmap_color (v))
+            self.set_tap_info (coords, self.log[(c, r)], self.total)
+        return self.heatmap
+
+    def get_stats(self):
+        usage = [
+            # left hand
+            [0, 0, 0, 0, 0],
+            # right hand
+            [0, 0, 0, 0, 0]
+        ]
+        finger_map = [0, 0, 1, 2, 3, 3, 3, 1, 1, 1, 2, 3, 4, 4]
+        for (c, r) in self.log:
+            if r == 5: # thumb cluster
+                if c <= 6: # left side
+                    usage[0][4] = usage[0][4] + self.log[(c, r)]
+                else:
+                    usage[1][0] = usage[1][0] + self.log[(c, r)]
+            elif r == 4 and (c == 4 or c == 9): # bottom row thumb keys
+                if c <= 6: # left side
+                    usage[0][4] = usage[0][4] + self.log[(c, r)]
+                else:
+                    usage[1][0] = usage[1][0] + self.log[(c, r)]
+            else:
+                fc = c
+                hand = 0
+                if fc >= 7:
+                    hand = 1
+                fm = finger_map[fc]
+                usage[hand][fm] = usage[hand][fm] + self.log[(c, r)]
+        hand_usage = [0, 0]
+        for f in usage[0]:
+            hand_usage[0] = hand_usage[0] + f
+        for f in usage[1]:
+            hand_usage[1] = hand_usage[1] + f
+
+        total = self.total
+        if total == 0:
+            total = 1
+        stats = {
+            "total-keys": total,
+            "hands": {
+                "left": {
+                    "usage": round(float(hand_usage[0]) / total * 100, 2),
+                    "fingers": {
+                        "pinky": 0,
+                        "ring": 0,
+                        "middle": 0,
+                        "index": 0,
+                        "thumb": 0,
+                    }
+                },
+                "right": {
+                    "usage": round(float(hand_usage[1]) / total * 100, 2),
+                    "fingers": {
+                        "thumb": 0,
+                        "index": 0,
+                        "middle": 0,
+                        "ring": 0,
+                        "pinky": 0,
+                    }
+                },
+            }
+        }
+
+        hmap = ['left', 'right']
+        fmap = ['pinky', 'ring', 'middle', 'index', 'thumb',
+                'thumb', 'index', 'middle', 'ring', 'pinky']
+        for hand_idx in range(len(usage)):
+            hand = usage[hand_idx]
+            for finger_idx in range(len(hand)):
+                stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = round(float(hand[finger_idx]) / total * 100, 2)
+        return stats
+
+def dump_all(out_dir, heatmaps):
+    stats = {}
+    t = Terminal()
+    t.clear()
+    sys.stdout.write("\x1b[2J\x1b[H")
+
+    print ('{t.underline}{outdir}{t.normal}\n'.format(t=t, outdir=out_dir))
+
+    keys = list(heatmaps.keys())
+    keys.sort()
+
+    for layer in keys:
+        if len(heatmaps[layer].log) == 0:
+            continue
+
+        with open ("%s/%s.json" % (out_dir, layer), "w") as f:
+            json.dump(heatmaps[layer].get_heatmap(), f)
+        stats[layer] = heatmaps[layer].get_stats()
+
+        left = stats[layer]['hands']['left']
+        right = stats[layer]['hands']['right']
+
+        print ('{t.bold}{layer}{t.normal} ({total:,} taps):'.format(t=t, layer=layer,
+                                                                    total=int(stats[layer]['total-keys'] / 2)))
+        print (('{t.underline}        | ' + \
+                'left ({l[usage]:6.2f}%)  | ' + \
+                'right ({r[usage]:6.2f}%) |{t.normal}').format(t=t, l=left, r=right))
+        print ((' {t.bright_magenta}pinky{t.white}  |     {left[pinky]:6.2f}%     |     {right[pinky]:6.2f}%     |\n' + \
+                ' {t.bright_cyan}ring{t.white}   |     {left[ring]:6.2f}%     |     {right[ring]:6.2f}%     |\n' + \
+                ' {t.bright_blue}middle{t.white} |     {left[middle]:6.2f}%     |     {right[middle]:6.2f}%     |\n' + \
+                ' {t.bright_green}index{t.white}  |     {left[index]:6.2f}%     |     {right[index]:6.2f}%     |\n' + \
+                ' {t.bright_red}thumb{t.white}  |     {left[thumb]:6.2f}%     |     {right[thumb]:6.2f}%     |\n' + \
+                '').format(left=left['fingers'], right=right['fingers'], t=t))
+
+def process_line(line, heatmaps, opts, stamped_log = None):
+    m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line)
+    if not m:
+        return False
+    if stamped_log is not None:
+        if line.startswith("KL:"):
+            print ("%10.10f %s" % (time.time(), line),
+                   file = stamped_log, end = '')
+        else:
+            print (line,
+                   file = stamped_log, end = '')
+        stamped_log.flush()
+
+    (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4))
+    if (c, r) not in opts.allowed_keys:
+        return False
+
+    heatmaps[l].update_log ((c, r))
+
+    return True
+
+def setup_allowed_keys(opts):
+    if len(opts.only_key):
+        incmap={}
+        for v in opts.only_key:
+            m = re.search ('(\d+),(\d+)', v)
+            if not m:
+                continue
+            (c, r) = (int(m.group(1)), int(m.group(2)))
+            incmap[(c, r)] = True
+    else:
+        incmap={}
+        for r in range(0, 6):
+            for c in range(0, 14):
+                incmap[(c, r)] = True
+
+        for v in opts.ignore_key:
+            m = re.search ('(\d+),(\d+)', v)
+            if not m:
+                continue
+            (c, r) = (int(m.group(1)), int(m.group(2)))
+            del(incmap[(c, r)])
+
+    return incmap
+
+def main(opts):
+    heatmaps = {"Dvorak": Heatmap("Dvorak"),
+                "ADORE": Heatmap("ADORE")
+    }
+    cnt = 0
+    out_dir = opts.outdir
+
+    if not os.path.exists(out_dir):
+        os.makedirs(out_dir)
+
+    opts.allowed_keys = setup_allowed_keys(opts)
+
+    if not opts.one_shot:
+
+        try:
+            with open("%s/stamped-log" % out_dir, "r") as f:
+                while True:
+                    line = f.readline()
+                    if not line:
+                        break
+                    if not process_line(line, heatmaps, opts):
+                        continue
+        except:
+            pass
+
+        stamped_log = open ("%s/stamped-log" % (out_dir), "a+")
+    else:
+        stamped_log = None
+
+    while True:
+        line = sys.stdin.readline()
+        if not line:
+            break
+        if not process_line(line, heatmaps, opts, stamped_log):
+            continue
+
+        cnt = cnt + 1
+
+        if opts.dump_interval != -1 and cnt >= opts.dump_interval and not opts.one_shot:
+            cnt = 0
+            dump_all(out_dir, heatmaps)
+
+    dump_all (out_dir, heatmaps)
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser (description = "keylog to heatmap processor")
+    parser.add_argument ('outdir', action = 'store',
+                         help = 'Output directory')
+    parser.add_argument ('--dump-interval', dest = 'dump_interval', action = 'store', type = int,
+                         default = 100, help = 'Dump stats and heatmap at every Nth event, -1 for dumping at EOF only')
+    parser.add_argument ('--ignore-key', dest = 'ignore_key', action = 'append', type = str,
+                         default = [], help = 'Ignore the key at position (x, y)')
+    parser.add_argument ('--only-key', dest = 'only_key', action = 'append', type = str,
+                         default = [], help = 'Only include key at position (x, y)')
+    parser.add_argument ('--one-shot', dest = 'one_shot', action = 'store_true',
+                         help = 'Do not load previous data, and do not update it, either.')
+    args = parser.parse_args()
+    if len(args.ignore_key) and len(args.only_key):
+        print ("--ignore-key and --only-key are mutually exclusive, please only use one of them!",
+               file = sys.stderr)
+        sys.exit(1)
+    main(args)
diff --git a/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py
new file mode 100755 (executable)
index 0000000..f080c32
--- /dev/null
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+
+charmap = {
+    '9': [[1, 0]],
+    '7': [[2, 0]], '@': [[2, 5], [2, 0]],
+    '5': [[3, 0]], '*': [[2, 5], [3, 0]],
+    '3': [[4, 0]], '^': [[2, 5], [4, 0]],
+    '1': [[5, 0]], '$': [[2, 5], [5, 0]],
+    '0': [[8, 0]], '%': [[2, 5], [8, 0]],
+    '2': [[9, 0]], '!': [[2, 5], [9, 0]],
+    '4': [[10, 0]], '#': [[2, 5], [10, 0]],
+    '6': [[11, 0]], '&': [[2, 5], [11, 0]],
+    '8': [[12, 0]],
+
+    '\\': [[0, 1]], '|': [[2, 5], [0, 1]],
+    'x': [[1, 1]], 'X': [[2, 5], [1, 1]],
+    'w': [[2, 1]], 'W': [[2, 5], [2, 1]],
+    'c': [[3, 1]], 'C': [[2, 5], [3, 1]],
+    'h': [[4, 1]], 'H': [[2, 5], [4, 1]],
+    'f': [[5, 1]], 'F': [[2, 5], [5, 1]],
+    '[': [[6, 1]], '{': [[2, 5], [6, 1]], '(': [[6, 1], [6, 1]],
+    ']': [[7, 1]], '}': [[2, 5], [7, 1]], ')': [[7, 1], [7, 1]],
+    'm': [[8, 1]], 'M': [[2, 5], [8, 1]],
+    'g': [[9, 1]], 'G': [[2, 5], [9, 1]],
+    'l': [[10, 1]], 'L': [[2, 5], [10, 1]],
+    'p': [[11, 1]], 'P': [[2, 5], [11, 1]],
+    '/': [[12, 1]], '?': [[2, 5], [12, 1]],
+    '`': [[13, 1]], '~': [[2, 5], [13, 1]],
+
+    '\t': [[0, 2]],
+    'a': [[1, 2]], 'A': [[2, 5], [1, 2]],
+    'o': [[2, 2]], 'O': [[2, 5], [2, 2]],
+    'e': [[3, 2]], 'E': [[2, 5], [3, 2]],
+    'i': [[4, 2]], 'I': [[2, 5], [4, 2]],
+    'u': [[5, 2]], 'U': [[2, 5], [5, 2]],
+    'd': [[8, 2]], 'D': [[2, 5], [8, 2]],
+    'r': [[9, 2]], 'R': [[2, 5], [9, 2]],
+    't': [[10, 2]], 'T': [[2, 5], [10, 2]],
+    'n': [[11, 2]], 'N': [[2, 5], [11, 2]],
+    's': [[12, 2]], 'S': [[2, 5], [12, 2]],
+    '=': [[13, 2]], '+': [[2, 5], [13, 2]],
+
+    'z': [[1, 3]], 'Z': [[2, 5], [1, 3]],
+    'q': [[2, 3]], 'Q': [[2, 5], [2, 3]],
+    '\'': [[3, 3]], '"': [[2, 5], [3, 3]],
+    ',': [[4, 3]], '<': [[2, 5], [4, 3]],
+    '.': [[5, 3]], '>': [[2, 5], [5, 3]],
+    'b': [[8, 3]], 'B': [[2, 5], [8, 3]],
+    'k': [[9, 3]], 'K': [[2, 5], [9, 3]],
+    'v': [[10, 3]], 'V': [[2, 5], [10, 3]],
+    'y': [[11, 3]], 'Y': [[2, 5], [11, 3]],
+    'j': [[12, 3]], 'J': [[2, 5], [12, 3]],
+
+    ':': [[4, 4]], ';': [[4, 4], [4, 4]],
+    '-': [[9, 4]], '_': [[2, 5], [9, 4]],
+
+    ' ': [[10, 5]],
+    '\n': [[11, 5]],
+
+    ## Layered things
+    # Hungarian
+    'á': [[9, 5], [1, 2]],  'Á': [[2, 5], [9, 5], [1, 2]],
+    'ó': [[9, 5], [2, 2]],  'Ó': [[2, 5], [9, 5], [2, 2]],
+    'ő': [[9, 5], [2, 1]],  'Ő': [[2, 5], [9, 5], [2, 1]],
+    'ö': [[9, 5], [2, 3]],  'Ö': [[2, 5], [9, 5], [2, 3]],
+    'é': [[9, 5], [3, 2]],  'É': [[2, 5], [9, 5], [3, 2]],
+    'ú': [[9, 5], [4, 2]],  'Ú': [[2, 5], [9, 5], [4, 2]],
+    'ű': [[9, 5], [4, 1]],  'Ű': [[2, 5], [9, 5], [4, 1]],
+    'ü': [[9, 5], [4, 3]],  'Ü': [[2, 5], [9, 5], [4, 3]],
+    'í': [[9, 5], [5, 2]],  'Í': [[2, 5], [9, 5], [5, 2]],
+}
+
+def lookup_char(layer, ch):
+    if ch in charmap:
+        return charmap[ch]
+    return None
+
+def process_char(layer, ch, out=sys.stdout):
+    keys = lookup_char(layer, ch)
+    if not keys:
+        print ("Unknown char: %s" % ch, file=sys.stderr)
+    else:
+        for (c, r) in keys:
+            print ("KL: col=%d, row=%d, pressed=1, layer=%s" % (r, c, layer), file=out)
+            print ("KL: col=%d, row=%d, pressed=0, layer=%s" % (r, c, layer), file=out)
+
+def process_file(fn, layer, out=sys.stdout):
+    with open(fn, "r") as f:
+        ch = f.read(1)
+        while ch:
+            process_char(layer, ch, out)
+            ch = f.read(1)
+
+if sys.argv[1] == '-':
+    out='/dev/stdin'
+else:
+    out=sys.argv[1]
+
+if len(sys.argv) >= 2:
+    layer = 'ADORE'
+else:
+    layer = sys.argv[2]
+
+process_file(out, layer = layer)
diff --git a/keyboards/ergodox/keymaps/alphadox/Makefile b/keyboards/ergodox/keymaps/alphadox/Makefile
new file mode 100644 (file)
index 0000000..633499d
--- /dev/null
@@ -0,0 +1,17 @@
+BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  = no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
+CONSOLE_ENABLE   = no  # Console for debug(+400)
+COMMAND_ENABLE   = no  # Commands for debug and configuration
+NKRO_ENABLE      = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ # nkro-doesnt-work
+BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality
+MIDI_ENABLE      = no  # MIDI controls
+AUDIO_ENABLE     = no  # Audio output on port C6
+UNICODE_ENABLE   = no  # Unicode
+BLUETOOTH_ENABLE = no  # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no  # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/alphadox/config.h b/keyboards/ergodox/keymaps/alphadox/config.h
new file mode 100644 (file)
index 0000000..deb218d
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define FORCE_NKRO
+#define PREVENT_STUCK_MODIFIERS
+
+#undef TAPPING_TERM
+#undef IGNORE_MOD_TAP_INTERRUPT
+
+#endif
diff --git a/keyboards/ergodox/keymaps/alphadox/keymap.c b/keyboards/ergodox/keymaps/alphadox/keymap.c
new file mode 100644 (file)
index 0000000..731e62c
--- /dev/null
@@ -0,0 +1,107 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define ETC  2 // etc
+
+enum macro_id {
+    TEENSY,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[BASE] = KEYMAP(
+    KC_NO,          KC_NO,         KC_NO,   KC_NO,    KC_NO,          KC_NO,  KC_NO,
+    KC_TAB,         KC_Q,          KC_W,    KC_D,     KC_F,           KC_K,   KC_PGUP,
+    CTL_T(KC_ESC),  LT(ETC,KC_A),  KC_S,    KC_E,     KC_T,           KC_G,
+    KC_LSFT,        KC_Z,          KC_X,    KC_C,     KC_V,           KC_B,   KC_PGDN,
+    KC_GRV,         KC_DEL,        KC_DEL,  KC_LALT,  GUI_T(KC_TAB),
+                                                                      KC_NO,  KC_NO,
+                                                                              KC_NO,
+                                           LT(SYMB,KC_BSPC),  CTL_T(KC_ESC),  KC_NO,
+
+    KC_NO,    KC_NO,  KC_NO,          KC_NO,    KC_NO,    KC_NO,    KC_NO,
+    KC_VOLU,  KC_J,   KC_U,           KC_R,     KC_L,     KC_SCLN,  KC_BSLS,
+              KC_Y,   KC_N,           KC_I,     KC_O,     KC_H,     KC_QUOT,
+    KC_VOLD,  KC_P,   KC_M,           KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,
+                      GUI_T(KC_TAB),  KC_LEFT,  KC_DOWN,  KC_UP,    LCAG_T(KC_RGHT),
+    KC_NO,  KC_NO,
+    KC_NO,
+    KC_NO,  SFT_T(KC_ENT),  LT(SYMB,KC_SPC)
+),
+
+[SYMB] = KEYMAP(
+    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,
+    KC_TRNS,  KC_EXLM,  KC_AT,    KC_LCBR,  KC_RCBR,  KC_PIPE,  KC_TRNS,
+    KC_TRNS,  KC_HASH,  KC_DLR,   KC_LPRN,  KC_RPRN,  KC_BSLS,
+    KC_TRNS,  KC_PERC,  KC_CIRC,  KC_LBRC,  KC_RBRC,  KC_ASTR,  KC_TRNS,
+    KC_TILD,  KC_AMPR,  KC_AMPR,  KC_TRNS,  KC_TRNS,
+                                                      KC_TRNS,  KC_TRNS,
+                                                                KC_TRNS,
+                                              KC_TRNS, KC_TRNS, KC_TRNS,
+
+    KC_NO,    KC_NO,    KC_NO,  KC_NO,  KC_NO,   KC_NO,    KC_NO,
+    KC_TRNS,  KC_EQL,   KC_7,   KC_8,   KC_9,    KC_PLUS,  KC_NO,
+              KC_MINS,  KC_4,   KC_5,   KC_6,    KC_QUOT,  KC_NO,
+    KC_TRNS,  KC_UNDS,  KC_1,   KC_2,   KC_3,    KC_DQUO,  KC_TRNS,
+                        KC_0,   KC_NO,  KC_DOT,  KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS
+),
+
+[ETC] = KEYMAP(
+    RESET,    KC_NO,         KC_NO,  KC_NO,    KC_NO,    KC_NO,    KC_NO,
+    KC_TRNS,  KC_NO,         KC_NO,  KC_NO,    KC_NO,    KC_PGUP,  KC_TRNS,
+    KC_TRNS,  LT(ETC,KC_A),  KC_NO,  KC_NO,    KC_NO,    KC_PGDN,
+    KC_TRNS,  KC_NO,         KC_NO,  KC_NO,    KC_NO,    KC_DEL,   KC_TRNS,
+    KC_TRNS,  KC_TRNS,       KC_NO,  KC_TRNS,  KC_TRNS,
+                                                         KC_TRNS,  KC_TRNS,
+                                                                   KC_TRNS,
+                                                 KC_TRNS, KC_TRNS, KC_TRNS,
+
+    KC_NO,    KC_NO,    KC_NO,  KC_NO,  KC_NO,   KC_NO,    KC_NO,
+    KC_TRNS,  KC_VOLU,  KC_F7,  KC_F8,  KC_F9,   KC_HOME,  KC_NO,
+              KC_VOLD,  KC_F4,  KC_F5,  KC_F6,   KC_END,   KC_NO,
+    KC_TRNS,  KC_MUTE,  KC_F1,  KC_F2,  KC_F3,   KC_INS,   KC_TRNS,
+                        KC_NO,  KC_NO,  KC_NO,   KC_NO,    KC_NO,
+    KC_TRNS,  KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch(id) {
+    case TEENSY:
+      break;
+  }
+  return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+};
+
+void matrix_scan_user(void) {
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            break;
+    }
+};
diff --git a/keyboards/ergodox/keymaps/andrew_osx/keymap.c b/keyboards/ergodox/keymaps/andrew_osx/keymap.c
new file mode 100644 (file)
index 0000000..750155d
--- /dev/null
@@ -0,0 +1,187 @@
+// Netable differences vs. the default firmware for the ErgoDox EZ:
+// 1. The Cmd key is now on the right side, making Cmd+Space easier.
+// 2. The media keys work on OSX (But not on Windows).
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  |  '"  |           |  '"  |   6  |   7  |   8  |   9  |   0  | BkSp   |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  | ~L1  |           | ~L1  |   Y  |   U  |   I  |   O  |   P  |   -    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   /    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1| Alt  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  |  L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Esc  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |  (   |       |  {   |        |      |
+ *                                 | Space| LGui |------|       |------| RGui   |Enter |
+ *                                 |      |      |  )   |       |  }   |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_QUOT,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_FN1,
+        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_LALT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_LPRN,
+                                               KC_SPC,KC_LGUI,KC_RPRN,
+        // right hand
+             KC_QUOT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSPC,
+             KC_FN1,      KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_MINS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_BSLS,
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          TG(1),
+             KC_ESC,        CTL_T(KC_ESC),
+             KC_LCBR,
+             KC_RCBR,KC_RGUI, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/bepo/Makefile b/keyboards/ergodox/keymaps/bepo/Makefile
new file mode 100644 (file)
index 0000000..b673c5c
--- /dev/null
@@ -0,0 +1,9 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+COMMAND_ENABLE   = no  # Commands for debug and configuration
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/bepo/bepo.png b/keyboards/ergodox/keymaps/bepo/bepo.png
new file mode 100644 (file)
index 0000000..54992f5
Binary files /dev/null and b/keyboards/ergodox/keymaps/bepo/bepo.png differ
diff --git a/keyboards/ergodox/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c
new file mode 100644 (file)
index 0000000..05250ee
--- /dev/null
@@ -0,0 +1,368 @@
+#include "ergodox.h"
+#include "keymap_bepo.h"
+#include "keymap_french.h"
+
+// keymaps
+#define BEPO 0 // default layer, for bepo compatible systems
+#define QW_B 1 // bepo to qwerty base compat layer, for qwerty systems
+#define QW_A 2 // bepo with altgr key to qwerty compat layer
+#define QW_S 3 // bepo with shift key to qwerty compat layer
+#define AZ_B 4 // bepo to azerty base compat layer, for azerty systems
+#define AZ_A 5 // bepo with altgr key to azerty compat layer
+#define AZ_S 6 // bepo with shift key to azerty compat layer
+#define FNAV 7 // function / navigation / mouse layer
+#define NUMK 8 // numeric keypad layer
+
+// macros
+#define KP_00 0        // keypad "double 0"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: default layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   $    |   "  |   <  |   >  |   (  |   )  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   %    |   B  |E_ACUT|   P  |   O  |E_GRAV|Backsp|                                  |CapsLo|   ^  |   V  |   D  |   L  |   J  |   Z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   W    |   A  |   U  |   I  |   E  |   ,  |------|                                  |------|   C  |   T  |   S  |   R  |   N  |   M    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * | E_CIRC |A_GRAV|   Y  |   X  |   .  |   K  |      |                                  |      |   '  |   Q  |   G  |   H  |   F  | C_CEDIL|
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             | Space|LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[BEPO] = KEYMAP(
+// Left hand
+BP_DOLLAR,     BP_DQOT,        BP_LGIL,        BP_RGIL,        BP_LPRN,        BP_RPRN,        KC_DEL,
+BP_PERCENT,    BP_B,           BP_E_ACUTE,     BP_P,           BP_O,           BP_E_GRAVE,     KC_BSPC,
+BP_W,          BP_A,           BP_U,           BP_I,           BP_E,           BP_COMMA,
+BP_ECRC,       BP_A_GRAVE,     BP_Y,           BP_X,           BP_DOT,         BP_K,           KC_TAB,
+KC_ESC,                KC_INS,         KC_LGUI,        KC_LCTL,        KC_LALT,
+                                                                                                               DF(BEPO),       DF(QW_B),
+                                                                                                                               MO(NUMK),
+                                                                                               KC_SPC,         KC_LSHIFT,      MO(FNAV),
+// Right hand
+                               KC_SLCK,        BP_AT,          BP_PLUS,        BP_MINUS,       BP_SLASH,       BP_ASTR,        BP_EQUAL,
+                               KC_CAPSLOCK,    BP_DCRC,        BP_V,           BP_D,           BP_L,           BP_J,           BP_Z,
+                                               BP_C,           BP_T,           BP_S,           BP_R,           BP_N,           BP_M,
+                               KC_NUMLOCK,     BP_APOS,        BP_Q,           BP_G,           BP_H,           BP_F,           BP_CCED,
+                                                               BP_ALGR,        KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
+DF(AZ_B),      DF(BEPO),
+MO(NUMK),
+MO(FNAV),      KC_RSHIFT,      KC_ENTER),
+/* Keymap 1: bepo to qwerty base compat layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   $    |   "  |   <  |   >  |   (  |   )  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   %    |   b  |   e  |   p  |   o  |   e  |Backsp|                                  |CapsLo|   ^  |   v  |   d  |   l  |   j  |   z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   w    |   a  |   u  |   i  |   e  |   ,  |------|                                  |------|   c  |   t  |   s  |   r  |   n  |   m    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * |   e    |   a  |   y  |   x  |   .  |   k  |      |                                  |      |   '  |   q  |   g  |   h  |   f  |   c    |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             | Space|LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[QW_B] = KEYMAP(
+// Left hand
+KC_DOLLAR,     S(KC_QUOT),     S(KC_COMM),     S(KC_DOT),      KC_LPRN,        KC_RPRN,        KC_DEL,
+KC_PERCENT,    KC_B,           KC_E,           KC_P,           KC_O,           KC_E,           KC_BSPC,
+KC_W,          KC_A,           KC_U,           KC_I,           KC_E,           KC_COMMA,
+KC_E,          KC_A,           KC_Y,           KC_X,           KC_DOT,         KC_K,           KC_TAB,
+KC_ESC,                KC_INS,         KC_LGUI,        KC_LCTL,        KC_LALT,
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_SPC,         MO(QW_S),       KC_TRNS,
+// Right hand
+                               KC_SLCK,        KC_AT,          KC_PLUS,        KC_MINUS,       KC_SLASH,       KC_ASTR,        KC_EQUAL,
+                               KC_CAPSLOCK,    KC_CIRC,        KC_V,           KC_D,           KC_L,           KC_J,           KC_Z,
+                                               KC_C,           KC_T,           KC_S,           KC_R,           KC_N,           KC_M,
+                               KC_NUMLOCK,     KC_QUOT,        KC_Q,           KC_G,           KC_H,           KC_F,           KC_C,
+                                                               MO(QW_A),       KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       MO(QW_S),       KC_ENTER),
+/* Keymap 2: bepo with altgr key to qwerty compat layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   $    |   "  |   <  |   >  |   [  |   ]  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   %    |   |  |   e  |   &  |   o  |   e  |Backsp|                                  |CapsLo|   ^  |   v  |   d  |   l  |   j  |   z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   w    |   a  |   u  |   i  |   €  |   ,  |------|                                  |------|   c  |   t  |   s  |   r  |   n  |   m    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * |   e    |   \  |   {  |   }  |   .  |   ~  |      |                                  |      |   '  |   q  |   g  |   h  |   f  |   c    |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             |   _  |LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[QW_A] = KEYMAP(
+// Left hand
+KC_DOLLAR,     S(KC_QUOT),     S(KC_COMM),     S(KC_DOT),      KC_LBRC,        KC_RBRC,        KC_DEL,
+KC_PERCENT,    KC_PIPE,        KC_E,           KC_AMPR,        KC_O,           KC_E,           KC_BSPC,
+KC_W,          KC_A,           KC_U,           KC_I,           RALT(KC_5),     KC_COMMA,
+KC_E,          KC_BSLASH,      KC_LCBR,        KC_RCBR,        KC_DOT,         KC_TILDE,       KC_TAB,
+KC_ESC,                KC_INS,         KC_LGUI,        KC_LCTL,        KC_LALT,
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_UNDS,        MO(QW_S),       KC_TRNS,
+// Right hand
+                               KC_SLCK,        KC_AT,          KC_PLUS,        KC_MINUS,       KC_SLASH,       KC_ASTR,        KC_EQUAL,
+                               KC_CAPSLOCK,    KC_CIRC,        KC_V,           KC_D,           KC_L,           KC_J,           KC_Z,
+                                               KC_C,           KC_T,           KC_S,           KC_R,           KC_N,           KC_M,
+                               KC_NUMLOCK,     KC_QUOT,        KC_Q,           KC_G,           KC_H,           KC_F,           KC_C,
+                                                               KC_TRNS,        KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       MO(QW_S),       KC_ENTER),
+/* Keymap 3: bepo with shift key to qwerty compat layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   #    |   1  |   2  |   3  |   4  |   5  |Delete|                                  |ScroLo|   6  |   7  |   8  |   9  |   0  |   =    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   `    |   B  |   E  |   P  |   O  |   E  |Backsp|                                  |CapsLo|   !  |   V  |   D  |   L  |   J  |   Z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   W    |   A  |   U  |   I  |   E  |   ;  |------|                                  |------|   C  |   T  |   S  |   R  |   N  |   M    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * |   E    |   A  |   Y  |   X  |   :  |   K  |      |                                  |      |   ?  |   Q  |   G  |   H  |   F  |   C    |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             | Space|LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[QW_S] = KEYMAP(
+// Left hand
+KC_HASH,       KC_1,           KC_2,           KC_3,           KC_4,           KC_5,           KC_TRNS,
+KC_GRV,                S(KC_B),        S(KC_E),        S(KC_P),        S(KC_O),        S(KC_E),        KC_TRNS,
+S(KC_W),       S(KC_A),        S(KC_U),        S(KC_I),        S(KC_E),        KC_SCOLON,
+S(KC_E),       S(KC_A),        S(KC_Y),        S(KC_X),        KC_COLON,       S(KC_K),        S(KC_TAB),
+S(KC_ESC),     S(KC_INS),      S(KC_LGUI),     S(KC_LCTL),     S(KC_LALT),
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_TRNS,        KC_TRNS,        KC_TRNS,
+// Right hand
+                               KC_TRNS,        KC_6,           KC_7,           KC_8,           KC_9,           KC_0,           KC_TRNS,
+                               KC_TRNS,        KC_EXLM,        S(KC_V),        S(KC_D),        S(KC_L),        S(KC_J),        S(KC_Z),
+                                               S(KC_C),        S(KC_T),        S(KC_S),        S(KC_R),        S(KC_N),        S(KC_M),
+                               KC_TRNS,        S(KC_SLASH),    S(KC_Q),        S(KC_G),        S(KC_H),        S(KC_F),        S(KC_C),
+                                                               S(KC_RALT),     S(KC_RCTL),     S(KC_RGUI),     KC_TRNS,        KC_TRNS,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       KC_TRNS,        KC_TRNS),
+/* Keymap 4: bepo to azerty base compat layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   $    |   "  |   <  |   >  |   (  |   )  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   %    |   b  |e_acut|   p  |   o  |e_grav|Backsp|                                  |CapsLo|   ^  |   v  |   d  |   l  |   j  |   z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   w    |   a  |   u  |   i  |   e  |   ,  |------|                                  |------|   c  |   t  |   s  |   r  |   n  |   m    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * |   e    |a_grav|   y  |   x  |   .  |   k  |      |                                  |      |   '  |   q  |   g  |   h  |   f  | c_cedil|
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             | Space|LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[AZ_B] = KEYMAP(
+// Left hand
+FR_DLR,                FR_QUOT,        FR_LESS,        FR_GRTR,        FR_LPRN,        FR_RPRN,        KC_DEL,
+FR_PERC,       KC_B,           FR_EACU,        KC_P,           KC_O,           FR_EGRV,        KC_BSPC,
+FR_W,          FR_A,           KC_U,           KC_I,           KC_E,           FR_COMM,
+KC_E,          FR_AGRV,        KC_Y,           KC_X,           FR_DOT,         KC_K,           KC_TAB,
+KC_ESC,                KC_INS,         KC_LGUI,        KC_LCTL,        KC_LALT,
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_SPC,         MO(AZ_S),       KC_TRNS,
+// Right hand
+                               KC_SLCK,        FR_AT,          FR_PLUS,        FR_MINS,        FR_SLSH,        FR_ASTR,        FR_EQL,
+                               KC_CAPSLOCK,    KC_LBRC,        KC_V,           KC_D,           KC_L,           KC_J,           FR_Z,
+                                               KC_C,           KC_T,           KC_S,           KC_R,           KC_N,           FR_M,
+                               KC_NUMLOCK,     FR_APOS,        FR_Q,           KC_G,           KC_H,           KC_F,           FR_CCED,
+                                                               MO(AZ_A),       KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       MO(AZ_S),       KC_ENTER),
+/* Keymap 5: bepo with altgr key to azerty compat layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   $    |   "  |   <  |   >  |   [  |   ]  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   %    |   |  |   e  |   &  |   o  |   e  |Backsp|                                  |CapsLo|   ^  |   v  |   d  |   l  |   j  |   z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   w    |   a  |u_grav| trem |   €  |   ,  |------|                                  |------|   c  |   t  |   s  |   r  |   n  |   m    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * |   /    |   \  |   {  |   }  |   .  |   ~  |      |                                  |      |   '  |   q  |   g  |   h  |   f  |   c    |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             |   _  |LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[AZ_A] = KEYMAP(
+// Left hand
+FR_DLR,                FR_QUOT,        FR_LESS,        FR_GRTR,        FR_LBRC,        FR_RBRC,        KC_DEL,
+FR_PERC,       FR_PIPE,        FR_EACU,        FR_AMP,         KC_O,           FR_EGRV,        KC_BSPC,
+FR_W,          FR_A,           FR_UGRV,        S(KC_LBRC),     FR_EURO,        FR_COMM,
+FR_SLSH,       FR_BSLS,        FR_LCBR,        FR_RCBR,        FR_DOT,         FR_TILD,        KC_TAB,
+KC_ESC,                KC_INS,         KC_LGUI,        KC_LCTL,        KC_LALT,
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               FR_UNDS,        MO(AZ_S),       KC_TRNS,
+// Right hand
+                               KC_SLCK,        FR_AT,          FR_PLUS,        FR_MINS,        FR_SLSH,        FR_ASTR,        FR_EQL,
+                               KC_CAPSLOCK,    KC_LBRC,        KC_V,           KC_D,           KC_L,           KC_J,           FR_Z,
+                                               KC_C,           KC_T,           KC_S,           KC_R,           KC_N,           FR_M,
+                               KC_NUMLOCK,     FR_APOS,        FR_Q,           KC_G,           KC_H,           KC_F,           FR_CCED,
+                                                               KC_TRNS,        KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       MO(AZ_S),       KC_ENTER),
+/* Keymap 6: bepo with shift key to azerty compat layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |   #    |   1  |   2  |   3  |   4  |   5  |Delete|                                  |ScroLo|   6  |   7  |   8  |   9  |   0  |   °    |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |   `    |   B  |   E  |   P  |   O  |   E  |Backsp|                                  |CapsLo|   !  |   V  |   D  |   L  |   J  |   Z    |
+ * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
+ * |   W    |   A  |   U  |   I  |   E  |   ;  |------|                                  |------|   C  |   T  |   S  |   R  |   N  |   M    |
+ * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
+ * |   E    |   A  |   Y  |   X  |   :  |   K  |      |                                  |      |   ?  |   Q  |   G  |   H  |   F  |   C    |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |Escape|Insert|LSuper| LCtrl|  LAlt|             | BEPO |QWERTY|      |AZERTY| BEPO |             | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |L_NumK|      |L_NumK|      |      |
+ *                                             | Space|LShift|------|      |------|RShift|Enter |
+ *                                             |      |      |L_FNav|      |L_FNav|      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[AZ_S] = KEYMAP(
+// Left hand
+FR_HASH,       FR_1,           FR_2,           FR_3,           FR_4,           FR_5,           KC_TRNS,
+FR_GRV,                S(KC_B),        S(KC_E),        S(KC_P),        S(KC_O),        S(KC_E),        KC_TRNS,
+S(FR_W),       S(FR_A),        S(KC_U),        S(KC_I),        S(KC_E),        FR_SCLN,
+S(KC_E),       S(FR_A),        S(KC_Y),        S(KC_X),        FR_COLN,        S(KC_K),        S(KC_TAB),
+S(KC_ESC),     S(KC_INS),      S(KC_LGUI),     S(KC_LCTL),     S(KC_LALT),
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_TRNS,        KC_TRNS,        KC_TRNS,
+// Right hand
+                               KC_TRNS,        FR_6,           FR_7,           FR_8,           FR_9,           FR_0,           FR_OVRR,
+                               KC_TRNS,        FR_EXLM,        S(KC_V),        S(KC_D),        S(KC_L),        S(KC_J),        S(FR_Z),
+                                               S(KC_C),        S(KC_T),        S(KC_S),        S(KC_R),        S(KC_N),        S(FR_M),
+                               KC_TRNS,        FR_QUES,        S(FR_Q),        S(KC_G),        S(KC_H),        S(KC_F),        S(KC_C),
+                                                               S(KC_RALT),     S(KC_RCTL),     S(KC_RGUI),     KC_TRNS,        KC_TRNS,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       KC_TRNS,        KC_TRNS),
+/* Keymap 7: function / navigation / mouse layer
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |VolMut|                                  |      |  F6  |  F7  |  F8  |  F9  |  F10 |        |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |        | Next |LClick|  Up  |RClick| WhUp |VolDwn|                                  |      | PgUp | Home |  Up  |  End |  F11 |        |
+ * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
+ * |        | Prev | Left | Down | Right|WhDown|------|                                  |------| PgDn | Left | Down | Right|  F12 |        |
+ * |--------+------+------+------+------+------| VolUp|                                  |      |------+------+------+------+------+--------|
+ * |        | Undo |  Cut | Copy | Paste|      |      |                                  |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |             |      |      |      |      |      |             |      |      |      |      |      |
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |      |      |      |      |      |
+ *                                             |      |      |------|      |------|      |      |
+ *                                             |      |      |      |      |      |      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[FNAV] = KEYMAP(
+// Left hand
+KC_NO,         KC_F1,          KC_F2,          KC_F3,          KC_F4,          KC_F5,          KC_MUTE,
+KC_NO,         KC_MS_BTN5,     KC_MS_BTN1,     KC_MS_UP,       KC_MS_BTN2,     KC_MS_WH_UP,    KC_VOLU,
+KC_NO,         KC_MS_BTN4,     KC_MS_LEFT,     KC_MS_DOWN,     KC_MS_RIGHT,    KC_MS_WH_DOWN,
+KC_NO,         KC_UNDO,        KC_CUT,         KC_COPY,        KC_PASTE,       KC_NO,          KC_VOLD,
+KC_NO,         KC_NO,          KC_TRNS,        KC_TRNS,        KC_TRNS,
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_NO,          KC_TRNS,        KC_TRNS,
+// Right hand
+                               KC_NO,          KC_F6,          KC_F7,          KC_F8,          KC_F9,          KC_F10,         KC_NO,
+                               KC_NO,          KC_PGUP,        KC_HOME,        KC_UP,          KC_END,         KC_F11,         KC_NO,
+                                               KC_PGDOWN,      KC_LEFT,        KC_DOWN,        KC_RIGHT,       KC_F12,         KC_NO,
+                               KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
+                                                               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_NO,          KC_NO,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       KC_TRNS,        KC_NO),
+/* Keymap 8: numeric keypad layer, sends keypad codes
+ *
+ * ,--------------------------------------------------.                                  ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |                                  |      |      | NumLo|   /  |   *  |   -  |        |
+ * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |                                  |      |      |   7  |   8  |   9  |   +  |        |
+ * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|                                  |------|      |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |                                  |      |      |   1  |   2  |   3  | Enter|        |
+ * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |             |      |      |      |      |      |             |   0  |  00  |   .  | Enter|      |
+ *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
+ *                                             |      |      |      |      |      |      |      |
+ *                                             |      |      |------|      |------|      |      |
+ *                                             |      |      |      |      |      |      |      |
+ *                                             `--------------------'      `--------------------'
+ */
+[NUMK] = KEYMAP(
+// Left hand
+KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
+KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
+KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
+KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
+KC_NO,         KC_NO,          KC_TRNS,        KC_TRNS,        KC_TRNS,
+                                                                                                               KC_TRNS,        KC_TRNS,
+                                                                                                                               KC_TRNS,
+                                                                                               KC_NO,          KC_TRNS,        KC_TRNS,
+// Right hand
+                               KC_NO,          KC_NO,          KC_NUMLOCK,     KC_KP_SLASH,    KC_KP_ASTERISK, KC_KP_MINUS,    KC_NO,
+                               KC_NO,          KC_NO,          KC_KP_7,        KC_KP_8,        KC_KP_9,        KC_KP_PLUS,     KC_NO,
+                                               KC_NO,          KC_KP_4,        KC_KP_5,        KC_KP_6,        KC_KP_PLUS,     KC_NO,
+                               KC_NO,          KC_NO,          KC_KP_1,        KC_KP_2,        KC_KP_3,        KC_KP_ENTER,    KC_NO,
+                                                               KC_KP_0,        M(KP_00),       KC_KP_COMMA,    KC_KP_ENTER,    KC_NO,
+KC_TRNS,       KC_TRNS,
+KC_TRNS,
+KC_TRNS,       KC_TRNS,        KC_NO)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  switch(id) {
+    // keypad "double 0"
+    case KP_00:
+      if (record->event.pressed) {
+        return MACRO( T(KP_0), D(KP_0), END );
+      } else {
+        return MACRO( U(KP_0), END );
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
diff --git a/keyboards/ergodox/keymaps/bepo/readme.md b/keyboards/ergodox/keymaps/bepo/readme.md
new file mode 100644 (file)
index 0000000..2959ac8
--- /dev/null
@@ -0,0 +1,34 @@
+# BEPO keymap for the ErgoDox
+
+This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french.
+
+# Disposition BÉPO pour l'ErgoDox
+
+Cette keymap a été pensée pour la disposition BÉPO (http://bepo.fr), qui est une disposition de clavier francophone, ergonomique et libre, élaborée selon la méthode Dvorak. L'adaptation de cette disposition à l'ErgoDox a été réalisée en conservant les points forts du clavier TypeMatrix 2030 (très répandu dans la communauté bépo, avec un excellent rapport ergonomie / prix) voir en réglant certains de ses défauts (3 colonnes pour l'auriculaire droit et touche "Ê") et en apportant son lot de nouveautés (compatibilité avec les systèmes azerty et qwerty).
+
+Particularités
+--------------
+
+Touches de repos des pouces : "espace" à gauche et "entrée" à droite.
+
+Placement des touches de combinaison ("Shift", "Alt", "Ctrl"...) adapté aux pouces, et permettant de conserver chaque doigt pour les rangées de lettres auxquelles ils sont assignés sans avoir à changer la touche de combinaison de côté (exemple : "A" majuscule puis "M" majuscule avec les auriculaires et un seul appui d'une touche "Shift").
+
+Les touches "Alt" et "Alt Gr" sont accessibles avec les pouces sur la rangée du bas comme sur la TypeMatrix 2030, avec une symétrie gauche / droite.
+
+Les touches "Ctrl" sont placées sur la même ligne que les touche "Alt" et "Alt Gr" comme sur un clavier clasique, elles sont accessibles aux pouces sur la rangée du bas (moins éloigné que le groupe de touches de pouces pour des petites mains).
+
+Les touches "Backspace" et "Delete" sont placées comme sur la TypeMatrix 2030, du côté gauche uniquement (pour laisser celles de la main droite servir de {caps,num,scroll}lock puisqu'elles ont des LED).
+
+La touche "Tab" est placée comme sur la TypeMatrix 2020.
+
+Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO".
+
+Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite et d'effectuer des actions souris avec uniquement la main gauche. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long).
+
+Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0".
+
+Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle et pour des accès BIOS ou console en QWERTY.
+
+Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier AZERTY. Cette compatibilité n'est pas parfaite (pas de gestion des caractères non présents sur le clavier AZERTY, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle et pour faire du bureau à distance vers un système Windows sans BEPO.
+
+> Olivier Smedts <olivier@gid0.org>
diff --git a/keyboards/ergodox/keymaps/bepo_csa/keymap.c b/keyboards/ergodox/keymaps/bepo_csa/keymap.c
new file mode 100644 (file)
index 0000000..495242a
--- /dev/null
@@ -0,0 +1,527 @@
+/* TypeMatrix-2030-like keymap  */
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+#include "led.h"
+#include "keymap_extras/keymap_bepo.h"
+#include "keymap_extras/keymap_canadian_multilingual.h"
+
+enum layers {
+    LR_BASE, // default layer
+    LR_CSA, // BÉPO over Canadian Multilingual (CSA)
+    LR_CSA_SFT, // shifted BÉPO over CSA
+    LR_CSA_AGR, // altgr-ed BÉPO over CSA
+    LR_CSA_AGR_SFT, // altgr-shifted BÉPO over CSA
+    LR_NUMR, // numeric layer
+    LR_FN, // fn layer
+};
+
+#define IS_CA_MULT_ENABLED()    (layer_state & (1 << LR_CSA))
+
+enum macros {
+    // Characters that do not exist in CSA and must be implemented based on unicode support
+    // Note: these are intentionally declared first to be used as indexes in spec_chars below
+    UC_NDSH, // –
+    UC_MDSH, // —
+    UC_ELPS, // …
+    END_UC, // indicates the last unicode character macro
+    // other macros
+    M_CSA_SFT, // toggle shift on CSA
+    M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT)
+    M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT)
+    // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT
+    M_1,
+    M_2,
+    M_3,
+    M_4,
+    M_5,
+    M_6,
+    M_7,
+    M_8,
+    M_9,
+    M_0,
+    M_DEGR,
+    M_SCLN,
+    M_GRV,
+    M_NBSP,
+    // macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR
+    M_CRC,
+    // other layer macros
+    M_DBL0, // double 0
+    M_FNLR, // fn layer
+    M_NMAL, // num+alt
+};
+
+#define CSA(name)   M(M_CSA_##name)     // calls a CSA macro
+
+const uint16_t unicode_chars[] = {
+        [UC_NDSH] = L'–',
+        [UC_MDSH] = L'—',
+        [UC_ELPS] = L'…',
+};
+
+/* shortcut for unicode character macros */
+#define MUC(name)   M(UC_##name)    // calls a unicode macro
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   $    |   "  |   «  |   »  |   (  |   )  | Del  |           | Del  |   @  |   +  |   -  |   /  |   *  |   W    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   B  |   É  |   P  |   O  |   È  |Backsp|           |Backsp|   ^  |   V  |   D  |   L  |   J  |   Z    |
+ * |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
+ * |   =    |   A  |   U  |   I  |   E  |   ,  |------|           |------|   C  |   T  |   S  |   R  |   N  |   M    |
+ * |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
+ * | LShift |   À  |   Y  |   X  |   .  |   K  |      |           |      |   '  |   Q  |   G  |   H  |   F  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |LCtrl |  fn  | LGui |numAlt| LAlt |                                       |Alt Gr|   %  |  App |   Ç  | RCtrl|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                       ,--------------.       ,-------------.
+ *                                       |  Esc  | num  |       | Left |Right |
+ *                                ,------+-------+------|       |------+------+------.
+ *                                |      |       | PgUp |       |  Up  |      |      |
+ *                                |Space | Home  |------|       |------| End  |Space |
+ *                                |      |       | PgDn |       | Down |      |      |
+ *                                `---------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[LR_BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        BP_DLR,     KC_1,      KC_2,    KC_3,      KC_4,     KC_5,    KC_DELT,
+        KC_TAB,     BP_B,      BP_ECUT, BP_P,      BP_O,     BP_EGRV, KC_BSPC,
+        BP_EQL,     BP_A,      BP_U,    BP_I,      BP_E,     BP_COMM,
+        KC_LSFT,    BP_AGRV,   BP_Y,    BP_X,      BP_DOT,   BP_K,    KC_ENT,
+        KC_LCTL,    M(M_FNLR), KC_LGUI, M(M_NMAL), KC_LALT,
+
+                                                   KC_ESC,   TG(LR_NUMR),
+                                                             KC_PGUP,
+                                          KC_SPC,  KC_HOME,  KC_PGDN,
+
+        // right hand
+        KC_DELT,   KC_6,     KC_7,    KC_8,    KC_9,    KC_0,     BP_W,
+        KC_BSPC,   BP_DCRC,  BP_V,    BP_D,    BP_L,    BP_J,     BP_Z,
+                   BP_C,     BP_T,    BP_S,    BP_R,    BP_N,     BP_M,
+        KC_ENT,    BP_APOS,  BP_Q,    BP_G,    BP_H,    BP_F,     KC_RSFT,
+                             BP_ALGR, BP_PERC, KC_APP,  BP_CCED,  KC_RCTL,
+
+        KC_LEFT, KC_RGHT,
+        KC_UP,
+        KC_DOWN, KC_END,   KC_SPC
+    ),
+/**
+ * Same as default but for use with Canadian Multilingual on OS side
+ */
+[LR_CSA] = KEYMAP(
+        // left hand
+        KC_DLR,      CSA_DQOT,   CSA_LGIL,  CSA_RGIL,  KC_LPRN,  KC_RPRN,   KC_TRNS,
+        KC_TRNS,     KC_B,       CSA_ECUT,  KC_P,      KC_O,     CSA_EGRV,  KC_TRNS,
+        KC_EQL,      KC_A,       KC_U,      KC_I,      KC_E,     KC_COMM,
+        CSA(SFT),    CSA_AGRV,   KC_Y,      KC_X,      KC_DOT,   KC_K,      KC_TRNS,
+        KC_TRNS,     KC_TRNS,    KC_TRNS,   KC_TRNS,   KC_TRNS,
+
+                                                       KC_TRNS,  KC_TRNS,
+                                                                 KC_TRNS,
+                                            KC_TRNS,   KC_TRNS,  KC_TRNS,
+
+        // right hand
+        KC_TRNS,  KC_AT,     KC_PLUS,  KC_MINS,  CSA_SLSH,  KC_ASTR,   KC_W,
+        KC_TRNS,  CSA_DCRC,  KC_V,     KC_D,     KC_L,      KC_J,      KC_Z,
+                  KC_C,      KC_T,     KC_S,     KC_R,      KC_N,      KC_M,
+        KC_TRNS,  CSA_APOS,  KC_Q,     KC_G,     KC_H,      KC_F,      CSA(SFT),
+                      MO(LR_CSA_AGR),  KC_PERC,  KC_TRNS,   CSA_CCED,  KC_LCTL, // RCTL has a special behaviour in CSA so use LCTL
+
+        KC_TRNS,  KC_TRNS,
+        KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS
+    ),
+/* Shifted BÉPO over Canadian Multilingual
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   #    |   1  |   2  |   3  |   4  |   5  |      |           |      |   6  |   7  |   8  |   9  |   0  |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |   !  |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |   °    |      |      |      |      |   ;  |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |   :  |      |      |           |      |   ?  |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |   `  |      |      |       |
+ *   `----------------------------------'                                       `-----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[LR_CSA_SFT] = KEYMAP(
+        // left hand
+        KC_HASH,  M(M_1),   M(M_2),   M(M_3),  M(M_4),   M(M_5),   KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,
+        M(M_DEGR),KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,  M(M_SCLN),
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_COLN,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,
+
+                                                      KC_TRNS,  KC_TRNS,
+                                                                KC_TRNS,
+                                          M(M_NBSP),  KC_TRNS,  KC_TRNS,
+
+        // right hand
+        KC_TRNS,  M(M_6),    M(M_7),   M(M_8),   M(M_9),   M(M_0),   KC_TRNS,
+        KC_TRNS,  KC_EXLM,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  CSA_QEST,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                        CSA(SFT_AGR),  M(M_GRV), KC_TRNS,  KC_TRNS,  KC_TRNS,
+
+        KC_TRNS,  KC_TRNS,
+        KC_TRNS,
+        KC_TRNS,  KC_TRNS,  M(M_NBSP)
+    ),
+/* AltGr-ed BÉPO over Canadian Multilingual
+ * "////" indicates that the key is disabled (unsupported bépo character)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |    –   |   —  |   <  |   >  |   [  |   ]  |      |           |      |   ^  |   ±  | //// |   ÷  |   ×  | dead ˘ |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   |  |dead '|   &  |   œ  |dead `|      |           |      |   ¡  |dead ˇ|   ð  | //// |   ij  | ////// |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | ////// |   æ  |   ù  |dead "|   €  |   ̛’  |------|           |------|   ©  |   þ  |   ß  |   ®  |dead ~| dead ¯ |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   \  |   {  |   }  |   …  |   ~  |      |           |      |   ¿  |dead °|   μ  | //// |dead ˛|        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      | //// |      |dead ¸|       |
+ *   `----------------------------------'                                       `-----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   _  |      |------|       |------|      |  _   |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[LR_CSA_AGR] = KEYMAP(
+        // left hand
+        MUC(NDSH),    MUC(MDSH),  CSA_LESS,  CSA_GRTR,  CSA_LBRC,   CSA_RBRC,  KC_TRNS,
+        KC_TRNS,      CSA_PIPE,   CSA_DACT,  KC_AMPR,   CSA_OE,     CSA_DGRV,  KC_TRNS,
+        KC_NO,        CSA_AE,     CSA_UGRV,  CSA_DTRM,  CSA_EURO,   CSA_RQOT,
+        CSA(AGR_SFT), CSA_BSLS,   CSA_LCBR,  CSA_RCBR,  MUC(ELPS),  CSA_TILD,  KC_TRNS,
+        KC_TRNS,      KC_TRNS,    KC_TRNS,   KC_TRNS,   KC_TRNS,
+
+                                                      KC_TRNS,  KC_TRNS,
+                                                                KC_TRNS,
+                                        KC_UNDS, CSA(AGR_SFT),  KC_TRNS,
+
+        // right hand
+        KC_TRNS,  M(M_CRC),  CSA_PSMS,  KC_NO,     CSA_DVSN, CSA_TIMS,  CSA_DBRV,
+        KC_TRNS,  CSA_IXLM,  CSA_DCAR,  CSA_ETH,   KC_NO,    CSA_IJ,    KC_NO,
+                  CSA_CPRT,  CSA_THRN,  CSA_SRPS,  CSA_RTM,  CSA_DTLD,  CSA_DMCR,
+        KC_TRNS,  CSA_IQST,  CSA_DRNG,  CSA_MU,    KC_NO,    CSA_DOGO,  CSA(AGR_SFT),
+                             KC_TRNS,   KC_NO,     KC_TRNS,  CSA_DCED,  KC_TRNS,
+
+        KC_TRNS,  KC_TRNS,
+        KC_TRNS,
+        KC_TRNS,  CSA(AGR_SFT),  KC_UNDS
+    ),
+/* AltGr-shifted BÉPO over Canadian Multilingual
+ * "////" indicates that the key is disabled (unsupported bépo character or unused in bépo)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |    ¶   | //// |   “  |   ”  | //// | //// |      |           |      | //// |   ¬  |   ¼  |   ½  |   ¾  | ////// |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   ¦  |   ˝  |   §  |   Œ  |   `  |      |           |      | //// | //// |   Ð  | //// |   IJ  | ////// |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | ////// |   Æ  |   Ù  |dead-˙| //// | //// |------|           |------| //// |   Þ  |   ẞ   |   ™  | //// |   º    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | //// |   ‘  |   ’  | //// | //// |      |           |      | //// | //// | //// | //// |   ª  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[LR_CSA_AGR_SFT] = KEYMAP(
+        // left hand
+        CSA_PARG,      KC_NO,     CSA_LDQT,    CSA_RDQT,  KC_NO,     KC_NO,     KC_TRNS,
+        KC_TRNS,       CSA_BPIP,  CSA_DDCT,    CSA_SECT,  S(CSA_OE), M(M_GRV),  KC_TRNS,
+        KC_NO,         S(CSA_AE), S(CSA_UGRV), CSA_DDTA,  KC_NO,     KC_NO,
+        CSA(AGR_SFT),  KC_NO,     CSA_LQOT,    CSA_RQOT,  KC_NO,     KC_NO,     KC_TRNS,
+        KC_TRNS,       KC_TRNS,   KC_TRNS,     KC_TRNS,   KC_TRNS,
+
+        KC_TRNS,  KC_TRNS,
+        KC_TRNS,
+        KC_TRNS,  CSA(AGR_SFT),  KC_TRNS,
+
+        // right hand
+        KC_TRNS,  KC_NO,     CSA_NEGT,    CSA_1QRT,    CSA_1HLF,  CSA_3QRT,   KC_NO,
+        KC_TRNS,  KC_NO,     KC_NO,       S(CSA_ETH),  KC_NO,     S(CSA_IJ),  KC_NO,
+                  KC_NO,     S(CSA_THRN), S(CSA_SRPS), CSA_TM,    KC_NO,      CSA_ORDO,
+        KC_TRNS,  KC_NO,     KC_NO,       KC_NO,       KC_NO,     CSA_ORDA,   CSA(AGR_SFT),
+                        CSA(SFT_AGR),     KC_TRNS,     KC_TRNS,   KC_TRNS,    KC_TRNS,
+
+        KC_TRNS,  KC_TRNS,
+        KC_TRNS,
+        KC_TRNS,  CSA(AGR_SFT),  KC_TRNS
+    ),
+/* Numeric Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
+ *   `----------------------------------'                                       `-----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |n.lock|c.lock|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[LR_NUMR] = KEYMAP(
+       // left hand
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
+       KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_TRNS,
+       KC_TRNS, KC_F11,  KC_F12,  KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                              KC_TRNS, KC_TRNS,KC_TRNS,
+
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,   KC_TAB,  KC_PSLS,  KC_PAST, KC_PMNS,
+       KC_TRNS, KC_TRNS, KC_HOME, KC_P7,   KC_P8,    KC_P9,   KC_PPLS,
+                KC_UP,   KC_END,  KC_P4,   KC_P5,    KC_P6,   KC_PPLS,
+       KC_LEFT, KC_DOWN, KC_RGHT, KC_P1,   KC_P2,    KC_P3,   KC_PENT,
+                         KC_TRNS, KC_P0,   M(M_DBL0),KC_PDOT, CTL_T(KC_PENT),
+
+       KC_NLCK, KC_CAPS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* fn layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |~CA-mult|      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  RESET |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | App  | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Next |       |      |      |      |
+ *                                 | Mute | play |------|       |------|      |      |
+ *                                 |      |      | Prev |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[LR_FN] = KEYMAP(
+       TG(LR_CSA), KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_INS,
+       KC_TRNS,    KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_VOLU,
+       RESET,      KC_TRNS, KC_TRNS,      KC_CALC,     KC_MAIL,      KC_WHOM,
+       KC_TRNS,    KC_APP,  S(KC_DELT),   LCTL(KC_INS),S(KC_INS),    KC_MUTE, KC_VOLD,
+       KC_TRNS,    KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,
+
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_MPRV,
+                                  KC_MUTE, KC_MPLY, KC_MNXT,
+
+    // right hand
+       KC_INS,   KC_EJCT, KC_PWR,  KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+void hold_shift(void) {
+    register_code(KC_LSHIFT);
+}
+
+void release_shift(void) {
+    unregister_code(KC_LSHIFT);
+}
+
+uint16_t hextokeycode(int hex) {
+    if (hex == 0x0) {
+        return KC_P0;
+    } else if (hex < 0xA) {
+        return KC_P1 + (hex - 0x1);
+    } else {
+        return KC_A + (hex - 0xA);
+    }
+}
+
+void send_unicode(uint16_t unicode)
+{
+    // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
+    // Implemented for Windows:
+    // Pressing ALT followed by + followed by the unicode code point in hex.
+    // Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1
+    register_code(KC_LALT);
+    register_code(KC_PPLS);
+    unregister_code(KC_PPLS);
+
+    for (int i = 12; i >= 0; i -= 4) {
+        register_code(hextokeycode((unicode >> i) & 0xF));
+        unregister_code(hextokeycode((unicode >> i) & 0xF));
+    }
+
+    unregister_code(KC_LALT);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+    switch(id) {
+        case 0 ... END_UC:
+            if (record->event.pressed) {
+                send_unicode(unicode_chars[id]);
+            }
+            break;
+        case M_CSA_SFT:
+            // BÉPO over CSA: toggle shift layer
+            layer_invert(LR_CSA_SFT);
+            if (record->event.pressed) {
+                hold_shift();
+            } else {
+                release_shift();
+            }
+            break;
+        case M_CSA_SFT_AGR:
+            // BÉPO over CSA: from shift layer, momentary altgr+shift layer
+            layer_invert(LR_CSA_AGR);
+            layer_invert(LR_CSA_AGR_SFT);
+            if (record->event.pressed) {
+                // shift not needed for LR_CSA_AGR_SFT
+                release_shift();
+            } else {
+                // back to shift layer
+                hold_shift();
+            }
+            break;
+        case M_CSA_AGR_SFT:
+            // BÉPO over CSA: from altgr layer, momentary altgr+shift layer
+            layer_invert(LR_CSA_SFT);
+            layer_invert(LR_CSA_AGR_SFT);
+            break;
+        case M_1 ... M_0:
+        case M_DEGR:
+        case M_SCLN:
+        case M_GRV:
+        case M_NBSP:
+            // macros of the shift layer that require to release shift
+            if (record->event.pressed) {
+                release_shift();
+                switch (id) {
+                    case M_1 ... M_0:
+                        register_code(KC_1 + (id - M_1));
+                        break;
+                    case M_DEGR:
+                        return MACRO(DOWN(CSA_ALTGR), D(SCLN), END);
+                    case M_SCLN:
+                        return MACRO(D(SCLN), END);
+                    case M_GRV:
+                        return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END);
+                    case M_NBSP:
+                        // use weak mod such that pressing another key will not be affected
+                        add_weak_mods(MOD_BIT(CSA_ALTGR));
+                        return MACRO(D(SPACE), END);
+                }
+            } else {
+                hold_shift();
+                switch (id) {
+                    case M_1 ... M_0:
+                        unregister_code(KC_1 + (id - M_1));
+                        break;
+                    case M_DEGR:
+                        return MACRO(UP(CSA_ALTGR), U(SCLN), END);
+                    case M_SCLN:
+                        return MACRO(U(SCLN), END);
+                    case M_NBSP:
+                        del_weak_mods(MOD_BIT(CSA_ALTGR));
+                        return MACRO(U(SPACE), END);
+                }
+            }
+            break;
+        case M_CRC:
+            if (record->event.pressed) {
+                return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END);
+            }
+            break;
+        case M_DBL0:
+            if (record->event.pressed) {
+                return MACRO( I(25), T(P0), T(P0), END );
+            }
+        break;
+        case M_FNLR:
+            layer_invert(LR_NUMR);
+            layer_invert(LR_FN);
+            break;
+        case M_NMAL:
+            layer_invert(LR_NUMR);
+            if (record->event.pressed) {
+                register_code(KC_LALT);
+            } else {
+                unregister_code(KC_LALT);
+            }
+            break;
+    }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    // led 1: numeric layer
+    if (layer_state & (1 << LR_NUMR)) {
+        ergodox_right_led_1_on();
+    }
+    // led 2: BÉPO over Canadian Multilingual
+    if (IS_CA_MULT_ENABLED()) {
+        ergodox_right_led_2_on();
+    }
+    // led 3: caps lock
+    if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+      ergodox_right_led_3_on();
+    }
+};
diff --git a/keyboards/ergodox/keymaps/bepo_csa/readme.md b/keyboards/ergodox/keymaps/bepo_csa/readme.md
new file mode 100644 (file)
index 0000000..d4975b2
--- /dev/null
@@ -0,0 +1,162 @@
+# BÉPO Keymap with firmware-remapping for software CSA layout
+
+This is a keymap intended to be used with the [BÉPO layout](http://bepo.fr), a French ergonomic layout designed by following Dvorak's principles.
+
+The particularity of this keymap is that it supports using the [Canadian Multilingual Standard layout](https://en.wikipedia.org/wiki/QWERTY#Canadian_Multilingual_Standard) (also known as _ACNOR keyboard_ or _CSA keyboard_, see also the [French page](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) which contains more details) on the OS side, by enabling the _CSA_ layer. This is especially useful for operating systems that natively provide CSA, but not BÉPO, like Windows. The CSA layout was chosen because it is probably the standard layout that provides the best character set coverage.
+
+This keymap is based on the [tm2030](../tm2030/) keymap, whose goal was to have a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ.
+
+As this keyboard is intended for French people, the rest of this page will be in French.
+
+# Keymap BÉPO avec support en firmware pour utilisation avec la disposition CSA en software
+
+Cette keymap a été conçue pour être utilisée avec la [disposition BÉPO](http://bepo.fr), la disposition francophone, ergonomique et libre basée sure les principes de Dvorak.
+
+La particularité de cette keymap est qu'elle supporte l'utilisation du [clavier canadien multilingue standard](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) (aussi appelé _clavier ACNOR_ ou _clavier CSA_) du côté du système d'exploitation, en activant la couche _CSA_. Ceci s'avère particulièrement utile pour les systèmes d'exploitations qui fournissent nativement le CSA, mais pas le BÉPO, comme Windows. Le clavier CSA a été choisi comme base car c'est probablement la disposition standard qui fournit la meilleure couverture en termes de caractères disponibles.
+
+Cette keymap est basée sur la keymap [tm2030](../tm2030/), dont le but est de fournir une disposition inspirée du [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) pour l'ErgoDox EZ.
+
+## Couche de base
+C'est la couche par défaut, proche du TypeMatrix, avec les différences suivantes:
+- La ligne du haut (les touches `F`) et la colonne de droite sont retirées, les touches correspondantes étant déplacées ailleurs.
+- Les touches situés en bas à gauche sont redisposées dans cet ordre: `Ctrl`, `fn`, `Gui`, `num+Alt`, `Alt`
+- Les touches `shuffle` (`Alt+Tab`) et `desktop` ne sont pas supportés
+- `W` est déplacé à la place de `=`
+- `=` est déplacé sous `Tab` (au lieu d'avoir un grand `Shift`)
+- `%` et `Ç` sont déplacés à la place de `Home` et `End` respectivement
+- Les flèches ainsi que `PgUp`/`PgDown`/`Home`/`End` sont déplacées sur les pouces
+
+À noter que pour `W` et `Ç`, le but a été de ne pas les déplacer trop par rapport à la disposition BÉPO _standard_, afin de pouvoir repasser facilement sur un TypeMatrix ou un clavier traditionnel.
+
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   $    |   "  |   «  |   »  |   (  |   )  | Del  |           | Del  |   @  |   +  |   -  |   /  |   *  |   W    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+| Tab    |   B  |   É  |   P  |   O  |   È  |Backsp|           |Backsp|   ^  |   V  |   D  |   L  |   J  |   Z    |
+|--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
+|   =    |   A  |   U  |   I  |   E  |   ,  |------|           |------|   C  |   T  |   S  |   R  |   N  |   M    |
+|--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
+| LShift |   À  |   Y  |   X  |   .  |   K  |      |           |      |   '  |   Q  |   G  |   H  |   F  | RShift |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |LCtrl |  fn  | LGui |numAlt| LAlt |                                       |Alt Gr|   %  |  App |   Ç  | RCtrl|
+  `----------------------------------'                                       `----------------------------------'
+                                      ,--------------.       ,-------------.
+                                      |  Esc  | num  |       | Left |Right |
+                               ,------+-------+------|       |------+------+------.
+                               |      |       | PgUp |       |  Up  |      |      |
+                               |Space | Home  |------|       |------| End  |Space |
+                               |      |       | PgDn |       | Down |      |      |
+                               `---------------------'       `--------------------'
+```
+
+### Changer de couche
+
+- Utilisez `num` pour activer/désactiver [la couche numérique](#couche-numérique)
+- Maintenez `fn` pour activer temporairement [les couches numériques et Fn](#couche-fn)
+- Maintenez `numAlt` pour activer temporairement la couche numérique combinée avec `Alt` (facilite l'utilisation des raccourcis tels que `Alt`+`F4`)
+
+### Diodes
+Les diodes de l'ErgoDox EZ (côté droit) sont utilisées de la façon suivante :
+
+- diode de gauche (rouge) : indique l'activation de [la couche numérique](#couche-numérique)
+- diode du milieu (verte) : indique l'activation du [mode CSA](#couche-csa)
+- diode de droite (bleue) : indique le verrouillage majuscules
+
+## Couche CSA
+La couche _CSA_ est la même que la couche de base, pour une utilisation avec un clavier Canadien Multilingue configuré dans le système d'exploitation.
+
+Pour l'activer, appuyez sur `fn`+`$`. La [diode](#diodes) verte indique que la couche CSA est activée.
+
+### Limitations
+Seuls les caractères présents dans le clavier CSA sont parfaitement supportés. De manière générale, il s'agit des caractères suivants :
+
+- toute la couche de base
+- tous les caractères accessibles en `Shift`
+- tous les caractères de la main gauche accessibles en `AltGr` à l'exception du `≠`
+- environ la moitié des caractères de la main droite accessibles en `AltGr` et la moitié des caractères accessibles en `AltGr`+`Shift` (consultez [le fichier source](keymap.c) pour voir les caractères supportés)
+
+En particulier, les caractères suivants sont émulés via le support Unicode (Windows seulement):
+
+- le tiret cadratin (tiret long) : —
+- le tiret demi-cadratin (demi tiret) : –
+- les points de suspension : …
+
+L'implémentation actuelle ne fonctionne pas dans toutes les applications, en particulier les applications MS Office.
+
+Il est probable que l'utilisation de la couche CSA ne fonctionne pas correctement dans certains jeux vidéos.
+
+Cette fonctionnalité a été conçue et testée essentiellment pour Windows (7).
+
+### Détails techniques
+Techniquement, la couche CSA est en réalité composée de 4 couches servant à émuler la couche de base, les appuis sur `Shift` ou `Alt` et la combinaison des deux.
+
+Le changement de couches se fait par des macros afin d'activer ou désactiver plusieurs couches et la touche `Shift` en même temps.
+
+Certains caractères sont également implémentés par des macros, notamment ceux de la couche `Shift` qui n'ont pas besoin de cette touche en CSA, comme les chiffres.
+
+Les caractères Unicode se basent sur une implémentation spécifique et non celle fournie dans QMK — il faudrait sans doute migrer le code. Notez la façon dont ces caractères sont déclarés tels quels dans [le code source](keymap.c) (tableau `unicode_char`).
+
+## Couche numérique
+Couche numérique proche du TM lorsqu'on active `num`, avec les différences suivantes :
+
+- Le clavier numérique est déplacés de 1 vers le haut et vers la droite.
+- Les flèches sont décalées de 1 vers la gauche.
+- Fournit l'accès aux touches `F1` à `F12`, `caps-lock` et `num-lock`.
+
+La couche numérique est indiquée par la [diode](#diodes) de gauche (rouge). Caps-lock est indiqué par la diode de droite (bleue).
+
+La touche `numAlt` de [la couche de base](#couche-de-base) permet d'activer la couche numérique et la touche `Alt` simultanément, afin de faciliter les raccourcis claviers comme `Alt`+`F4`.
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
+  `----------------------------------'                                       `-----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |n.lock|c.lock|
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       |      |      |      |
+                                |      |      |------|       |------|      |      |
+                                |      |      |      |       |      |      |      |
+                                `--------------------'       `--------------------'
+```
+
+## Couche Fn
+Activée simultanément avec la couche numérique lorsque l'on maintient la touche `fn`. Comme sur le TM, elle fournit l'accès aux fonctionnalités suivantes :
+
+- `couper`, `copier` et `coller` — attention: ne pas utiliser dans l'explorateur de fichiers.
+- monter/baisser/couper le volume — seulement accessible en main gauche, contrairement au TM.
+- piste précédente/suivante
+- calculatrice, e-mail et page d'accueil du navigateur web
+- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` et `pause`
+- ~CSA: (dés)activation de [la couche CSA](#couche-csa) sur `$`
+- RESET: rechargement du firmware avec Teensy-Loader (pour les développeurs)
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|  ~CSA  |      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|  RESET |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        | App  | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |      |      |      |      |      |                                       |      |      |      |      |      |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |      |      |
+                                ,------|------|------|       |------+------+------.
+                                |      |      | Next |       |      |      |      |
+                                | Mute | play |------|       |------|      |      |
+                                |      |      | Prev |       |      |      |      |
+                                `--------------------'       `--------------------'
+```
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile
new file mode 100644 (file)
index 0000000..b0fe90a
--- /dev/null
@@ -0,0 +1,3 @@
+SLEEP_LED_ENABLE = no
+UNICODE_ENABLE = yes
+COMMAND_ENABLE = no
diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c
new file mode 100644 (file)
index 0000000..b62b144
--- /dev/null
@@ -0,0 +1,317 @@
+#include "ergodox.h"
+#include "action_layer.h"
+#include "led.h"
+#include "keymap_extras/keymap_neo2.h"
+
+// Layer names
+#define BASE 0      // default layer
+#define PMQ  1      // poor man’s QWERTZ
+#define PMN  2      // poor man’s Neo
+#define FMU  3      // FMU layer
+#define NHL  4      // Neo’s software layer 4 rebuilt in Hardware
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Layer 0: default
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │     │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │ CTL │ ALT │ MO1 │ Win │ Mod4│                             │ Mod4│ Win │ MO1 │ Alt │ CTL │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │  ←  │  ↑  │ │  ↓  │  →  │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │  ─  │ │  ─  │     │     │
+ *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
+ *                             │     │     │ HYP │ │ MEH │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[BASE] = KEYMAP(
+        // left hand
+        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   NEO_GRV,
+        NEO_Y,      NEO_X,  NEO_V,  NEO_L,  NEO_C,  NEO_W,  KC_HOME,
+        NEO_L1_L,   NEO_U,  NEO_I,  NEO_A,  NEO_E,  NEO_O,
+        KC_LSFT,    NEO_UE, NEO_OE, NEO_AE, NEO_P,  NEO_Z,  TG(PMQ),
+        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L,
+                                                    KC_LEFT,    KC_UP,
+                                                                KC_MINS,
+                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
+        // right hand
+        NEO_ACUT,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
+        KC_END,     NEO_K,  NEO_H,  NEO_G,  NEO_F,  NEO_Q,  NEO_SS,
+                    NEO_S,  NEO_N,  NEO_R,  NEO_T,  NEO_D,  NEO_L1_R,
+        TG(PMN),    NEO_B,  NEO_M,  KC_COMM,KC_DOT, NEO_J,  KC_RSFT,
+                            NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
+        KC_DOWN,    KC_RGHT,
+        KC_MINS,
+        MEH_T(KC_NO),KC_ENT,KC_SPC
+    ),
+
+/* Layer 1: poor man’s QWERTZ
+ * based on kaimi’s layout
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │   C   │  P  │  T  │  F  │  K  │  L  │ HOM │     │ END │  B  │  A  │  S  │  G  │  V  │  Y    │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │ Mod3  │  D  │  H  │  Ö  │  O  │  I  ├─────┤     ├─────┤  U  │  -  │  Z  │  E  │  X  │ Mod3  │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │ LSHFT │  Ä  │  Q  │  R  │  W  │  N  │     │     │     │  J  │  M  │  ,  │  .  │  ẞ  │ Shift │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │  ←  │  ↑  │ │  ↓  │  →  │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │  ─  │ │  ─  │     │     │
+ *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
+ *                             │     │     │ HYP │ │ MEH │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[PMQ] = KEYMAP(
+        // left hand
+        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
+        DE_C,       DE_P,   DE_T,   DE_F,   DE_K,   DE_L,   KC_HOME,
+        NEO_L1_L,   DE_D,   DE_H,   DE_OE,  DE_O,   DE_I,
+        KC_LSFT,    DE_AE,  DE_Q,   DE_R,   DE_W,   DE_N,   KC_TRNS,
+        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
+                                                    KC_LEFT,    KC_UP,
+                                                                KC_MINS,
+                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
+        // right hand
+        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
+        KC_END,     DE_B,   DE_A,   DE_S,   DE_G,   DE_V,   DE_Y,
+                    DE_U,   DE_MINS,DE_Z,   DE_E,   DE_X,   NEO_L1_R,
+        KC_TRNS,    DE_J,   DE_M,   DE_COMM,DE_DOT, DE_SS,  KC_RSFT,
+                            MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
+        KC_DOWN,    KC_RGHT,
+        KC_MINS,
+        MEH_T(KC_NO),KC_ENT,KC_SPC
+    ),
+
+/* Layer 2: poor man’s Neo
+ * based on kaimi’s layout
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │  ←  │  ↑  │ │  ↓  │  →  │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │  ─  │ │  ─  │     │     │
+ *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
+ *                             │     │     │ HYP │ │ MEH │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[PMN] = KEYMAP(
+        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
+        DE_Y,       DE_X,   DE_V,   DE_L,   DE_C,   DE_W,   KC_HOME,
+        KC_NO,      DE_U,   DE_I,   DE_A,   DE_E,   DE_O,
+        KC_LSFT,    DE_UE,  DE_OE,  DE_AE,  DE_P,   DE_Z,   KC_TRNS,
+        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
+                                                    KC_LEFT,    KC_UP,
+                                                                KC_MINS,
+                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
+        // right hand
+        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
+        KC_END,     DE_K,   DE_H,   DE_G,   DE_F,   DE_Q,   DE_SS,
+                    DE_S,   DE_N,   DE_R,   DE_T,   DE_D,   KC_NO,
+        KC_TRNS,    DE_B,   DE_M,   KC_COMM,KC_DOT, DE_J,   KC_RSFT,
+                            MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
+        KC_DOWN,    KC_RGHT,
+        KC_MINS,
+        MEH_T(KC_NO),KC_ENT,KC_SPC
+    ),
+
+/* Layer 3: F-keys, Mouse and Unicode
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │       │  ┌  │  ┬  │  ┐  │  ─  │  │  │     │     │     │     │ F9  │ F10 │ F11 │ F12 │       │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │       │  ├  │  ┼  │  ┤  │  ✓  │  ✕  ├─────┤     ├─────┤     │ F5  │ F6  │ F7  │ F8  │       │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │       │  └  │  ┴  │  ┘  │  ↔  │  ⇔  │     │     │     │     │ F1  │ F2  │ F3  │ F4  │       │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │     │     │(MO1)│     │(MO4)│                             │(MO4)│     │(MO1)│     │     │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │ MLC │ │ MRC │     │     │
+ *                             │     │     ├─────┤ ├─────┤     │     │
+ *                             │     │     │     │ │     │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[FMU] = KEYMAP(
+        // left hand
+        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+        KC_TRNS,    UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502),KC_TRNS,
+        KC_TRNS,    UC(0x251C),UC(0x253C),UC(0x2524),UC(0x2713),UC(0x2715),
+        KC_TRNS,    UC(0x2514),UC(0x2534),UC(0x2518),UC(0x2194),UC(0x21D4),KC_TRNS,
+        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                                    KC_MS_L,    KC_MS_U,
+                                                                KC_BTN1,
+                                            KC_TRNS,KC_TRNS,    KC_TRNS,
+        // right hand
+        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+        KC_TRNS,    KC_TRNS,KC_F9,  KC_F10, KC_F11, KC_F12, KC_TRNS,
+                    KC_TRNS,KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_TRNS,
+        KC_TRNS,    KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_TRNS,
+                            KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+        KC_MS_D,    KC_MS_R,
+        KC_BTN2,
+        KC_TRNS,    KC_TRNS,KC_TRNS
+    ),
+
+/* Layer 4: Neo’s software layer 4 rebuilt in Hardware
+ * based on kaimi’s layout
+ * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
+ * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
+ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
+ * │       │ PgUp│ BSpc│  ↑  │ Del │ PgDn│     │     │     │     │  7  │  8  │  9  │  +  │   −   │
+ * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
+ * │       │ Home│  ←  │  ↓  │  →  │ End ├─────┤     ├─────┤     │  4  │  5  │  6  │  ,  │   .   │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │       │ Esc │ Tab │ Ins │ Ret │ Undo│     │     │     │     │  1  │  2  │  3  │     │       │
+ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
+ *   │     │     │(MO1)│     │(MO4)│                             │(MO4)│     │(MO1)│     │     │
+ *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
+ *                                   │     │     │ │     │     │
+ *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
+ *                             │     │     │     │ │     │     │     │
+ *                             │     │     ├─────┤ ├─────┤     │     │
+ *                             │     │     │     │ │     │     │     │
+ *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ */
+[NHL] = KEYMAP(
+        // left hand
+        KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+        KC_NO,      KC_PGUP,KC_BSPC,KC_UP,  KC_DELT,KC_PGDN,KC_NO,
+        KC_NO,      KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END,
+        KC_NO,      KC_ESC, KC_TAB, KC_INS, KC_ENT, KC_UNDO,KC_TRNS,
+        KC_NO,      KC_NO,  KC_TRNS,KC_NO,  KC_TRNS,
+                                                    KC_NO,      KC_NO,
+                                                                KC_NO,
+                                            KC_NO,  KC_NO,      KC_NO,
+        // right hand
+        KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+        KC_NO,      KC_NO,  KC_7,   KC_8,   KC_9,   DE_PLUS,DE_MINS,
+                    KC_NO,  KC_4,   KC_5,   KC_6,   KC_COMM,KC_DOT,
+        KC_TRNS,    KC_NO,  KC_1,   KC_2,   KC_3,   KC_NO,  KC_NO,
+                            KC_TRNS,KC_NO,  KC_TRNS,KC_NO,  KC_NO,
+        KC_NO,      KC_NO,
+        KC_NO,
+        KC_NO,      KC_NO,  KC_NO
+    ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [BASE] = ACTION_FUNCTION(BASE),
+    [PMQ]  = ACTION_FUNCTION(PMQ),
+    [PMN]  = ACTION_FUNCTION(PMN),
+    [FMU]  = ACTION_LAYER_TAP_TOGGLE(FMU),
+    [NHL]  = ACTION_LAYER_TAP_TOGGLE(NHL)
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    // MACRODOWN only works in this function
+    switch(id) {
+        case 0:
+            if (record->event.pressed) {
+                register_code(KC_RSFT);
+            }
+            else {
+                unregister_code(KC_RSFT);
+            }
+        break;
+    }
+
+    return MACRO_NONE;
+};
+
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+    set_unicode_input_mode(UC_LNX);
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void)
+{
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case FMU:
+            ergodox_right_led_1_on();
+        break;
+        case PMQ:
+            ergodox_right_led_2_on();
+        break;
+        case PMN:
+            ergodox_right_led_3_on();
+        break;
+        default:
+            if(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) {
+                ergodox_led_all_set(LED_BRIGHTNESS_HI);
+                ergodox_right_led_1_on();
+            }
+            else {
+                ergodox_board_led_off();
+            }
+        break;
+    }
+
+};
+
+
+// Override Unicode start method to use NEO_U instead of KC_U
+void unicode_input_start (void) {
+    register_code(KC_LCTL);
+    register_code(KC_LSFT);
+    register_code(NEO_U);
+    unregister_code(NEO_U);
+    unregister_code(KC_LSFT);
+    unregister_code(KC_LCTL);
+};
+
+// Override method to use NEO_A instead of KC_A
+uint16_t hex_to_keycode(uint8_t hex)
+{
+  if (hex == 0x0) {
+    return KC_0;
+  } else if (hex < 0xA) {
+    return KC_1 + (hex - 0x1);
+  } else {
+    switch(hex) {
+      case 0xA:
+        return NEO_A;
+      case 0xB:
+        return NEO_B;
+      case 0xC:
+        return NEO_C;
+      case 0xD:
+        return NEO_D;
+      case 0xE:
+        return NEO_E;
+      case 0xF:
+        return NEO_F;
+    }
+  }
+}
diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md
new file mode 100644 (file)
index 0000000..2a4d3a5
--- /dev/null
@@ -0,0 +1,31 @@
+# coderkun’s Neo2 layout for the ErgoDox EZ
+
+The idea of this layout is to use it for [Neo2](http://www.neo-layout.org) but also provide layers to use QWERTZ with activated Neo driver and to use (basic) Neo when no driver is available (standard QWERTZ driver is active) (e. g. on other computers, in virtual machines) and to make heavily use of thumb keys.
+
+The main goal of the default layer is to provide a complete symmetric layout with each modifier equally placed for both hands (mirror, of course).
+
+It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols.
+
+
+## Layers
+
+0. Default layer for Neo2
+1. Poor man’s QWERTZ
+2. Poor man’s Neo
+3. F-keys, mouse keys und Unicode symbols
+4. Neo’s software layers 4 rebuilt in hardware
+
+
+## Build
+
+1. Enable Unicode in Makefile
+
+    ```
+    UNICODE_ENABLE   = yes
+    ```
+2. Build as usual
+
+    ```
+    make clean
+    make KEYMAP=coderkun_neo2
+    ```
diff --git a/keyboards/ergodox/keymaps/colemak/keymap.c b/keyboards/ergodox/keymaps/colemak/keymap.c
new file mode 100644 (file)
index 0000000..7ef81ab
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |O / L2|   '    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_F,   KC_P,   KC_G,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_R,   KC_S,   KC_T,   KC_D,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_J,   KC_L,   KC_U,   KC_Y,   KC_SCLN,          KC_BSLS,
+                          KC_H,   KC_N,   KC_E,   KC_I,   LT(MDIA, KC_O),   KC_QUOT,
+             MEH_T(KC_NO),KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/colemak/readme.md b/keyboards/ergodox/keymaps/colemak/readme.md
new file mode 100644 (file)
index 0000000..e28b2f0
--- /dev/null
@@ -0,0 +1,4 @@
+# ErgoDox EZ Colemak Configuration
+
+Colemak layout with same layers as default ergodox ez keymap.
+
diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png
new file mode 100644 (file)
index 0000000..57df5a1
Binary files /dev/null and b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png differ
diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c
new file mode 100644 (file)
index 0000000..eb0156c
--- /dev/null
@@ -0,0 +1,264 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_norwegian.h"
+
+#define BASE 0 // default layer
+#define BASE_MAC 1 // default layer mac
+#define NUMB_SYMB 2 // numbers and symbols
+#define NUMB_SYMB_MAC 3 // numbers and symbols mac
+#define FUNCTION 4 // function keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Basic layer PC
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |    \   |   [  |   ]  |   {  |   }  |   *  |Mac/PC|           |   ^  |   $  |   (  |   )  |   <  |   >  |   @    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |    ?   |   Q  |   W  |   F  |   P  |   G  |  "   |           |   '  |   J  |   L  |   U  |   Y  |   Å  |   Æ    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |    :   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |   O  |   Ø    |
+ * |--------+------+------+------+------+------|  ;   |           |   =  |------+------+------+------+------+--------|
+ * |    !   |   Z  |   X  |   C  |   V  |   B  |      |           |      |   K  |   M  | RIGHT| DOWN |   UP |   _    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Func | Lclk | Rclk | TAB  |,/CTRL|                                       | LEFT | Esc  |   `  |   #  | Num  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,--------------.
+ *                                        |   &  |   |  |       |Insert|   /   |
+ *                                 ,------|------|------|       |------+-------+------.
+ *                                 |      |      |   +  |       |  Del |        |     |
+ *                                 | Shift| ./Spc|------|       |------|  Enter |Space|
+ *                                 |      |      |-/Alt |       | Bspc |        |     |
+ *                                 `--------------------'       `---------------------'
+ */
+[BASE] = KEYMAP(
+        // left hand
+        NO_BSLS,       NO_LBRC, NO_RBRC, NO_LCBR,  NO_RCBR, NO_ASTR,  TG(1),
+        NO_QUES,         KC_Q,         KC_W,    KC_F,   KC_P,   KC_G,   NO_QUO2,
+        NO_COLN,         KC_A,         KC_R,    KC_S,   KC_T,   KC_D,
+        KC_EXLM,        KC_Z,         KC_X,    KC_C,   KC_V,   KC_B,   NO_SCLN,
+        MO(4),     KC_BTN1,      KC_BTN2, KC_TAB,GUI_T(KC_COMMA),
+                                                      NO_AMPR, NO_PIPE,
+                                                              NO_PLUS,
+                                               KC_FN1,CTL_T(KC_DOT),ALT_T(NO_MINS),
+        // right hand
+             KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
+             NO_APOS,      KC_J,    KC_L,    KC_U,      KC_Y,     NO_AA,   NO_AE  ,
+                           KC_H,    KC_N,    KC_E,      KC_I,      KC_O,    NO_OSLH,
+             NO_EQL,        KC_K,    KC_M, KC_RIGHT,  KC_DOWN,   KC_UP, NO_UNDS,
+                                  KC_LEFT,  KC_ESC,   KC_FN7,   KC_HASH,   MO(2),
+             KC_INSERT,  NO_SLSH,
+             KC_DELT,
+             KC_BSPC,KC_ENT,KC_SPC
+    ),
+/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   \    |      |      |   {  |   }  |      |      |           |      |   $  |      |      |  <   |   >  |    @   |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |  '   |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Func |      |      |      |,/Ctrl|                                       |      |      |  `   |      | Num  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |  |   |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |./Cmd |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[BASE_MAC] = KEYMAP(
+       NO_BSLS_MAC, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CTL_T(KC_COMMA),
+                                           KC_TRNS, NO_PIPE_MAC,
+                                                    KC_TRNS,
+                                  KC_TRNS,GUI_T(KC_DOT) , KC_TRNS,
+    // right hand
+       KC_TRNS,  NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
+       NO_APOS_MAC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, NO_GRV_MAC, KC_TRNS, MO(3),
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Number ++ layer pc
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |   %  |      |      |           |      |      |   ~  |   ´  |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   3  |  2   |  1   |   0  |      |------|           |------|      |   5  |   6  |   7  |   8  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |   4  |      |      |           |      |      |   9  |  END | PGDWN| PGUP |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[NUMB_SYMB] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS,
+       KC_TRNS, KC_3   , KC_2   , KC_1   , KC_0   , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_FN2, KC_FN6 , KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS,
+       KC_TRNS,  KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
+                          KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 3: Number ++ layer mac. Some keys have to be repeated from the pc symbol layer, since transient keys inherit from the layer we jump from, not the layer above.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |   %  |      |      |           |      |      |   ~  |   ´  |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   3  |  2   |  1   |   0  |      |------|           |------|      |   5  |   6  |   7  |   8  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |   4  |      |      |           |      |      |   9  |  END | PGDWN| PGUP |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[NUMB_SYMB_MAC] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS,
+       KC_TRNS, KC_3   , KC_2   , KC_1   , KC_0   , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_FN2, KC_FN10, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS,
+       KC_TRNS,  KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
+                          KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 4: Function layer mac + pc
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |  F3  |  F2  |  F1  |     |      |------|           |------|       |  F5  |  F6  |  F7  |  F8  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |  F4  |      |      |           |      |      |  F9  |  F10 |  F11 |  F12 |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[FUNCTION] = KEYMAP(
+       KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
+       KC_TRNS, KC_F3   , KC_F2   , KC_F1 , KC_TRNS   , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F4, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
+       KC_TRNS,  NO_TILD, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
+
+enum macro_id {
+    TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO,  GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+    [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
+    [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
+    [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
+    [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
+    [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
+    [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
+    [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
+    [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
+    [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    keyevent_t event = record->event;
+
+    switch (id) {
+        case TILDE_NO:
+            return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
+        case LESS_NO:
+            return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
+        case GRTR_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
+        case CIRC_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
+        case ACUT_NO:
+            return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC),  END ) : MACRO_NONE);
+        case GRV_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT),  END ) : MACRO_NONE);
+        case LESS_NO_MAC:
+            return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
+        case GRTR_NO_MAC:
+            return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
+        case ACUT_NO_MAC:
+            return (event.pressed ? MACRO( T(EQL), T(SPC),  END ) : MACRO_NONE);
+    }
+    return MACRO_NONE;
+};
diff --git a/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md b/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md
new file mode 100644 (file)
index 0000000..48f095c
--- /dev/null
@@ -0,0 +1,23 @@
+# Norwegian Colemak setup with osx/pc toggle
+
+## Motivation
+I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I  also wanted it to translate from a standard Norwegian keyboard OS setup.
+
+## Overview
+The setup is created to be programmer friendly.
+- Most of the symbols used in code can be activated without using layers or shift key.
+- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb.
+- Navigation is prioritized, arrows are right below the home row.
+
+## PC/Mac toggle
+The default setup is for Norwegian keyboard setting(not colemak variants) on a PC(Windows or Linux). Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard.
+
+## Layers
+Numbers and function buttons are on their own layers. The easiest way to switch layers(at least with my hands) in this setup, is to push your hand right below the little finger, on the layer switches. You will then have all your fingers free to type numbers or press function buttons.
+
+## Shift-key
+Tap for the next character to be shifted, hold down for regular shift functionality
+
+## Layout
+
+![keyboard-layout](keyboard-layout.png)
diff --git a/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png
new file mode 100644 (file)
index 0000000..6fba568
Binary files /dev/null and b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png differ
diff --git a/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png
new file mode 100644 (file)
index 0000000..b0a1c51
Binary files /dev/null and b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png differ
diff --git a/keyboards/ergodox/keymaps/csharp_dev/keymap.c b/keyboards/ergodox/keymaps/csharp_dev/keymap.c
new file mode 100644 (file)
index 0000000..e0c66f4
--- /dev/null
@@ -0,0 +1,239 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define FKEYS 1 // F keys + macros
+
+#define MACRO_PUBLIC 10
+#define MACRO_PRIVATE 11
+
+#define MACRO_STATIC 12
+#define MACRO_CONST 13
+
+#define MACRO_VOID 14
+#define MACRO_VAR 15
+#define MACRO_STRING 16
+
+#define MACRO_INT 17
+#define MACRO_FLOAT 18
+#define MACRO_BOOL 19
+
+#define MACRO_RETURN 20
+#define MACRO_NULL 21
+#define MACRO_BREAK 22
+
+#define MACRO_TODO 23
+#define MACRO_NEW 24
+#define MACRO_PARENTHESE 25
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   (    |   1  |   2  |   3  |   4  |   5  |  "   |           | Save |   6  |   7  |   8  |   9  |   0  |   [    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   )    |   Q  |   W  |   E  |   R  |   T  |Bkspa |           | Del  |   Y  |   U  |   I  |   O  |   P  |   ]    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |   {    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   _  |   Redo |
+ * |--------+------+------+------+------+------|   /  |           |  ;   |------+------+------+------+------+--------|
+ * |   }    |Z~Alt |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   '  |   !  |   ?  |   Undo |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Tab~CL|  <   |  >   |   |  |  &   |                                       |   =  |   +  |   -  |   *  |  L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |. ~L1 | ,    |       |Home  |End~L1|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Copy |       | UP   |      |      |
+ *                                 | Enter| Space|------|       |------| Space|Enter |
+ *                                 | ~WIN | ~LSFT| Past |       | DOWN | ~LSFT| ~WIN |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_LPRN,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   LSFT(KC_QUOTE),
+        KC_RPRN,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_BSPACE,
+        KC_LCBR,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_RCBR,        ALT_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   KC_SLASH,
+        CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR, 
+                                              LT(1,KC_DOT),  KC_COMM,
+                                                              LCTL(KC_C),
+                                               GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V),
+        // right hand
+             LCTL(KC_S)  ,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_LBRACKET,
+             KC_DELETE,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_RBRACKET,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_UNDS,LCTL(KC_Y),
+             KC_SCOLON,KC_N,   KC_M, KC_QUOTE  ,KC_EXLM , LSFT(KC_SLASH),   LCTL(KC_Z),
+                                  KC_EQUAL,KC_PLUS  ,  KC_MINUS,KC_ASTR  ,     TG(1),
+             KC_HOME,         LT(1,KC_END),
+             KC_UP,
+             KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER)
+    ),
+
+/* Keymap 1:  F keys + macros
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  ESC   |  F1  |  F2  |  F3  |  F4  |  F5  |  `   |           | Calc |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  Tab   |Public|Static|string|int   |return|      |           |      |//TODO|      |      |      |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |Privat|Const |var   |float |null  |------|           |------|new   |      |      |      |      |        |
+ * |--------+------+------+------+------+------|  \   |           |  ~   |------+------+------+------+------+--------|
+ * |        |      |      |void  |bool  |break;|      |           |      |();   |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |  WIN | Alt  |      |      |                                       | PgUp | PgDw | Ins  | PtSc |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      | Cut  |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------| Left | Right|
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// FKEYS + MACROS
+[FKEYS] = KEYMAP(
+       // left hand
+       KC_ESCAPE,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_GRAVE,
+       KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC),  M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
+       KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL),
+       KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH,
+       KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,LCTL(KC_X),
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_CALCULATOR, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, M(MACRO_TODO),   KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_F12,
+                M(MACRO_NEW), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+       KC_TILD, M(MACRO_PARENTHESE), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
+                         KC_PGUP,KC_PGDOWN,  KC_INSERT,   KC_PSCREEN,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_LEFT, KC_RIGHT
+),
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(FKEYS)                // FN1 - Momentary Layer 1
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+               case MACRO_PUBLIC:
+                       if (record->event.pressed) {
+                               return MACRO( T(P), T(U), T(B), T(L), T(I), T(C), T(SPACE),END);
+                       } 
+                       break;
+               case MACRO_PRIVATE:
+                       if (record->event.pressed) {
+                               return MACRO( T(P), T(R), T(I), T(V), T(A), T(T), T(E), T(SPACE),END);
+                       } 
+                       break;
+               case MACRO_STATIC:
+                       if (record->event.pressed) {
+                               return MACRO( T(S), T(T), T(A), T(T), T(I), T(C), T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_CONST:
+                       if (record->event.pressed) {
+                               return MACRO( T(C), T(O), T(N), T(S), T(T), T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_VOID:
+                       if (record->event.pressed) {
+                               return MACRO( T(V), T(O), T(I), T(D), T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_VAR:
+                       if (record->event.pressed) {
+                               return MACRO( T(V), T(A), T(R), T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_STRING:
+                       if (record->event.pressed) {
+                               return MACRO( T(S), T(T), T(R), T(I), T(N), T(G), T(SPACE), END);
+                       } 
+                       break;          
+               case MACRO_BOOL:
+                       if (record->event.pressed) {
+                               return MACRO( T(B), T(O), T(O), T(L), T(SPACE), END);
+                       } 
+                       break;          
+               case MACRO_INT:
+                       if (record->event.pressed) {
+                               return MACRO( T(I), T(N), T(T), T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_FLOAT:
+                       if (record->event.pressed) {
+                               return MACRO( T(F), T(L), T(O), T(A),T(T),T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_RETURN:
+                       if (record->event.pressed) {
+                               return MACRO( T(R), T(E), T(T), T(U),T(R),T(N), END);
+                       } 
+                       break;
+               case MACRO_NULL:
+                       if (record->event.pressed) {
+                               return MACRO( T(N), T(U), T(L), T(L), END);
+                       } 
+               case MACRO_BREAK:
+                       if (record->event.pressed) {
+                               return MACRO( T(B), T(R), T(E), T(A), T(K), T(SCOLON), END);
+                       } 
+                       break;
+               case MACRO_TODO:
+                       if (record->event.pressed) {
+                               return MACRO( T(SLASH), T(SLASH), D(LSHIFT) ,T(T), T(O), T(D), T(O),U(LSHIFT), T(SPACE),END);
+                       } 
+                       break;
+               case MACRO_NEW:
+                       if (record->event.pressed) {
+                               return MACRO( T(N), T(E), T(W), T(SPACE), END);
+                       } 
+                       break;
+               case MACRO_PARENTHESE:
+                       if (record->event.pressed) {
+                               return MACRO(  D(LSHIFT),T(9), T(0),U(LSHIFT), T(SCOLON), END);
+                       } 
+                       break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/csharp_dev/readme.md b/keyboards/ergodox/keymaps/csharp_dev/readme.md
new file mode 100644 (file)
index 0000000..96af077
--- /dev/null
@@ -0,0 +1,47 @@
+# ErgoDox EZ C# Developer configuration
+
+## Changelog
+
+* Feb 12, 2016 (V1): 
+  * First version commit
+* Mar 20, 2016 (V2):
+  * Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter
+
+## About
+This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions.
+
+I came to the realization that my main tool as a developer, the qwerty keyboard was something that did not evolved at its core in almost 150 years.
+There are a lot of reasons to this, and it would be a massive entreprise to change a standard so strongly anchored, but I wanted to give it a try and see how would look an input device dedicated to developers, more specifically a C# developer in my case.
+The biggest flaw in standard QWERTY keyboards was that I always needed to perform key combination to access commonly used characters or actions. Think about it a minute, how many times a day do you press a modifier key such as Ctrl or Shift, it's insane and could be so easily optimized to require only one key press.
+
+Then I came across the ErgoDox EZ project, that allowed a full customization of its firmware, and a unique 2 parts design.
+
+![CSharpDev](csharp_dev_legend.png)
+
+## Layout design principles
+* No key combination required for the most common input characters ( (),[],{},<> ... )
+* No key combination required for the most common actions (copy/paste/undo/save)
+* Regroup characters by usage ( + - * =  ...)
+* Easy access to the most commonly used characters: ; / " . ,
+* Preregistered macro for the most common C# langage instructions: public / private / string / int / float ...
+
+## Why is it specific to C Sharp
+I defined the characters priority based on their usage in C# language, most of this characters are also used in other coding languages but it may require some tweaking. 
+For example there is no direct access to ~ or $ keys which can be very common in some languages.
+Note it is also specific to Windows environement as the shortcut used in action keys would not work on Mac Os
+
+## In usage
+It was relatively easy to get used to the layout, but it's hard for me to define how easy it was as I was getting used to a blank Ergodox keyboard at the same time.
+Still it's extremely satisfying to Save your file with just one easily accessible key or to have one big key to end your code line ( ; )
+
+## Improvements
+This layout was shared after a bunch of iterations and only once I was happy with it.
+Still there are many way to improve or iterate on this:
+* Make it language agnostic
+* Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g.  https://dzone.com/articles/most-pressed-keys-various )
+* QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur
+
+## Issues 
+One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold )
+
+
diff --git a/keyboards/ergodox/keymaps/dave/keymap.c b/keyboards/ergodox/keymaps/dave/keymap.c
new file mode 100644 (file)
index 0000000..23c4e04
--- /dev/null
@@ -0,0 +1,199 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define PROG 1 // programming
+#define NAVI 2 // navigation
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Esc    |   1  |   2  |   3  |   4  |   5  |   6  |           |   6  |   7  |   8  |   9  |   0  |   -  | BkSpce |
+ * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |   Y  |           |   G  |   Y  |   U  |   I  |   O  |   P  | Enter  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LCtrl  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | Enter  |
+ * |--------+------+------+------+------+------|   H  |           |   B  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |`/Ctrl|   \  |      |      | LAlt |                                       | RAlt |   [  |   ]  |      |'/Ctrl|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | PrtS | PrtS |       | CtAl | CtAl |
+ *                                 ,------+------+------|       |------+------+------.
+ *                                 |      |      |  L1  |       |  L1  |      |      |
+ *                                 | Spce | ~L2  +------|       |------+  ~L1 | Spce |
+ *                                 |      |      | LGui |       | RGui |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,   KC_1,     KC_2,    KC_3,    KC_4,    KC_5,   KC_6,
+        KC_TAB,   KC_Q,     KC_W,    KC_E,    KC_R,    KC_T,   KC_Y,
+        KC_LCTRL, KC_A,     KC_S,    KC_D,    KC_F,    KC_G,
+        KC_LSFT,  KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,   KC_H,
+        CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO,   KC_LALT,
+                                                  KC_PSCREEN, KC_PSCREEN,
+                                                      TO(PROG),
+                                               KC_SPC, MO(NAVI), KC_LGUI,
+        // right hand
+             KC_6,    KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS, KC_BSPC,
+             KC_G,    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,    KC_ENTER,
+                      KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN, KC_ENTER,
+             KC_B,    KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
+                              KC_RALT,KC_LBRC,KC_RBRC,KC_NO,   CTL_T(KC_QUOT),
+             MT(0x5, KC_NO), MT(0x5, KC_NO),
+             TO(PROG),
+             KC_RGUI, MO(PROG), KC_SPC
+    ),
+
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |  K/  |  K*  |  K-  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   (  |   )  |   |  |      |           |      |      |  K7  |  K8  |  K9  |  K+  |   #    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   {  |   }  |   `  |------|           |------|      |  K4  |  K5  |  K6  |  K+  |   '    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |      |  K1  |  K2  |  K3  |  K=  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |  K0  |  K0  |  K.  |  K=  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |  L2  |       |  L2  |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// PROGRAMMING
+[PROG] = KEYMAP(
+       // left hand
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+       KC_TRNS, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,
+       KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                        KC_TRNS, KC_TRNS,
+                                      TO(NAVI),
+                               KC_TRNS, KC_TRNS, KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS, KC_NO,  KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL,
+       KC_TRNS, KC_TRNS, KC_P7,  KC_P8,   KC_P9,   KC_PPLS, KC_NUHS,
+                KC_TRNS, KC_P4,  KC_P5,   KC_P6,   KC_PPLS, KC_QUOT,
+       KC_TRNS, KC_TRNS, KC_P1,  KC_P2,   KC_P3,   KC_PENT, KC_TRNS,
+                         KC_P0,  KC_P0,   KC_PDOT, KC_PENT, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       TO(NAVI),
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Navigation and system keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  | F10  | F11  | F12  |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        | Home |  Up  | End  | Ins  | PgUp |      |           |      |      |      | Ins  |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | Left | Down | Rght | Del  | PgDn |------|           |------|      | Back | Del  | Fwrd |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | Lclk | MsUp | Rclk |      |      |      |           |      |      | Prev | Play | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      | MsLt | MsDn | MsRt |      |                                       |VolDn | Mute |VolUp |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |  L0  |       |  L0  |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// NAVIGATION
+[NAVI] = KEYMAP(
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
+       KC_TRNS, KC_HOME, KC_UP,   KC_END,  KC_INS,  KC_PGUP, KC_TRNS,
+       KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN,
+       KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                         TO(BASE),
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_INS,  KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       TO(BASE),
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    //[1] = ACTION_LAYER_TAP_TOGGLE(PROG),               // FN1 - Momentary Layer 1 (Symbols)
+    //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI)                // FN2 - Momentary Layer 2 (Navigation)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    /* leds is a static array holding the current brightness of each of the
+     * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and
+     * -1s in the code below, and because wasting a byte really doesn't matter
+     * that much (no, it *doesn't*, stop whinging!). Note that because it's
+     * static it'll maintain state across invocations of this routine.
+     */
+    static uint8_t leds[4];
+    uint8_t led;
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+
+    /* Loop over each LED/layer */
+    for (led = 1; led <= 3; ++led) {
+        /* If the current layer matches the current LED, increment its
+         * brightness by 1 up to a maximum of 255. If the current layer doesn't
+         * match, decrement its brightness by 1 down to a minimum of zero.
+         */
+        leds[led] += (layer == led) ?
+            (leds[led] < 255 ? 1 : 0):
+            (leds[led] > 0 ? -1 : 0);
+        /* Set LED state according to the new brightness */
+        if (leds[led]) {
+            ergodox_right_led_on(led);
+            ergodox_right_led_set(led, leds[led]);
+        }
+        else {
+            ergodox_right_led_off(led);
+        }
+    }
+
+
+};
diff --git a/keyboards/ergodox/keymaps/dave/readme.md b/keyboards/ergodox/keymaps/dave/readme.md
new file mode 100644 (file)
index 0000000..aa0f9bd
--- /dev/null
@@ -0,0 +1,38 @@
+This keymap is my preferred layout (after a certain amount of experimentation).
+The rationale behind the design is as follows:
+
+I grew up typing from a very early age and thus never learned the "correct" way
+to touch type (essentially, I'm self-taught). As a, result my fingers don't
+tend to stay on the "home keys" and occasionally my right hand wants to type
+keys that are on the left of the keyboard, and vice versa.
+
+Hence, despite liking the idea of split keyboards in principle, I've never been
+able to get on with them because the split simply doesn't work with my style of
+typing. The Ergodox solves this neatly by virtue of having a few extra keys in
+the "middle" of the keyboard which I can utilise for deliberate redundancy.
+Thus in this keymap there are two "6" keys (one on the left, one on the right)
+and likewise Y, H, G, and B are all duplicated to enable one-handed patterns
+that I use frequently (e.g. "byobu" with the right hand, "yes" with the left,
+etc.).
+
+I occasionally use the numeric pad for data entry, thus this is duplicated
+under the natural home position of the right hand in layer 1 (activated by
+holding one of the right thumb buttons), while the cursor keys are duplicated
+under the classic WASD gaming layout of the left hand in layer 2 (activated by
+holding one of the left thumb buttons). Various other useful keys also appear
+in these layers (brackets and symbols for coding in layer 1, navigation and
+F-keys in layer 2, etc.).
+
+Finally, modifier keys like Ctrl, Shift, and Alt, along with Backspace and
+Enter are all in traditional locations in an effort to reuse existing muscle
+memory as much as possible (keys like =, #, and ' are in layer 1). The layout
+maps are in the comments of keymap_dave.c so I won't bother duplicating them
+here.
+
+Oh, and the LEDs are rather pimped ... because I could!
+
+Anyway, although I'm sure this keymap won't be to many people's taste you might
+find some interesting ideas in here for your own layouts. Do tweet me
+(@waveform80) if you have any questions / suggestions / bugs.
+
+Dave.
diff --git a/keyboards/ergodox/keymaps/default/default.png b/keyboards/ergodox/keymaps/default/default.png
new file mode 100644 (file)
index 0000000..6575f7b
Binary files /dev/null and b/keyboards/ergodox/keymaps/default/default.png differ
diff --git a/keyboards/ergodox/keymaps/default/default_highres.png b/keyboards/ergodox/keymaps/default/default_highres.png
new file mode 100644 (file)
index 0000000..7d9f045
Binary files /dev/null and b/keyboards/ergodox/keymaps/default/default_highres.png differ
diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..4eff280
--- /dev/null
@@ -0,0 +1,223 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+  PLACEHOLDER = SAFE_RANGE, // can always be here
+  EPRM,
+  VRSN,
+  RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |J/Alt |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,        KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,        KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   ALT_T(KC_J), KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,        KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,       KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------.           ,--------------------------------------------------.
+ * |Version  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * |         |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | EPRM  |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `-----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |Animat|      |       |Toggle|Solid |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |Bright|Bright|      |       |      |Hue-  |Hue+  |
+ *                                 |ness- |ness+ |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+          EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       RGB_MOD,KC_TRNS,
+                                               KC_TRNS,
+                               RGB_VAD,RGB_VAI,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       RGB_TOG, RGB_SLD,
+       KC_TRNS,
+       KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+        case 1:
+        if (record->event.pressed) { // For resetting EEPROM
+          eeconfig_init();
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // dynamically generate these.
+    case EPRM:
+      if (record->event.pressed) {
+        eeconfig_init();
+      }
+      return false;
+      break;
+    case VRSN:
+      if (record->event.pressed) {
+        SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+      }
+      return false;
+      break;
+    case RGB_SLD:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          rgblight_mode(1);
+        #endif
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/default/readme.md b/keyboards/ergodox/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..f68138e
--- /dev/null
@@ -0,0 +1,12 @@
+# ErgoDox EZ Default Configuration
+
+## Changelog
+
+* Sep 22, 2016:
+  * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM.
+* Feb 2, 2016 (V1.1): 
+  * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
+
+This is what we ship with out of the factory. :) The image says it all:
+
+![Default](default_highres.png)
diff --git a/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png b/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png
new file mode 100644 (file)
index 0000000..04f46bb
Binary files /dev/null and b/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png differ
diff --git a/keyboards/ergodox/keymaps/default_osx/keymap.c b/keyboards/ergodox/keymaps/default_osx/keymap.c
new file mode 100644 (file)
index 0000000..e9a242e
--- /dev/null
@@ -0,0 +1,187 @@
+// Netable differences vs. the default firmware for the ErgoDox EZ:
+// 1. The Cmd key is now on the right side, making Cmd+Space easier.
+// 2. The media keys work on OSX (But not on Windows).
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  LGui  |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_LGUI,
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/default_osx/readme.md b/keyboards/ergodox/keymaps/default_osx/readme.md
new file mode 100644 (file)
index 0000000..aa749aa
--- /dev/null
@@ -0,0 +1,8 @@
+# The OSX Friendly Version of the Default Firmware
+
+So, I took the default firmware and just made a couple of tweaks that make it easier to use with OS X:
+
+1. The Cmd key is now on the right side, making Cmd+Space easier.
+2. The media keys work on OSX (But not on Windows).
+
+![default osx](default_osx_highres.png)
diff --git a/keyboards/ergodox/keymaps/dragon788/keymap.c b/keyboards/ergodox/keymaps/dragon788/keymap.c
new file mode 100644 (file)
index 0000000..d33bc6a
--- /dev/null
@@ -0,0 +1,229 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define PLVR 3 // Plover layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LGui |           |Plover|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L2  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | '"/Ctrl|
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | ~L1  | Grv  |  '"  | Left |Rgt/L2|                                       | Up/L2| Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | Home |       | PgUp |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 |Backsp|Delete|------|       |------| Enter  |Space |
+ *                                 | ace  |      | LAlt |       |TabCtl|        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LGUI,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
+        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+         KC_FN1,      KC_GRV,      KC_QUOT,KC_LEFT, LT(MDIA, KC_RGHT),
+                                                     KC_APP,  KC_HOME,
+                                                               KC_END,
+                                              KC_BSPC,KC_DELT,KC_LALT,
+        // right hand
+             TG(3),       KC_6,   KC_7,   KC_8,   KC_9,   KC_0,           KC_MINS,
+             TG(2),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,           KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN, CTL_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,        KC_RSFT,
+                       LT(MDIA, KC_UP),   KC_DOWN,KC_LBRC,KC_RBRC,         KC_FN1,
+             KC_PGUP,        CTL_T(KC_ESC),
+             KC_PGDN,
+             CTL_T(KC_TAB),KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      | Calc |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_CALC,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | Rclk | Lclk |      |      |           |      |      | Lclk | Rclk |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft| MsUp |MsDown|MsRght|------|           |------|MsLeft|MsDown| MsUp |MsRght|      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      | Prev |       |VolUp |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Play |       | Mute |Brwser|Brwser|
+ *                                 | Lclk | Rclk |------|       |------|Fwd   |Back  |
+ *                                 |      |      | Next |       |VolDn |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+         RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_MPRV,
+                                                    KC_MPLY,
+                                  KC_BTN1, KC_BTN2, KC_MNXT,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_VOLU,  KC_TRNS,
+       KC_MUTE,
+       KC_VOLD,  KC_WBAK, KC_WFWD
+),
+
+/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   1  |   2  |   3  |   4  |   5  |      |           |      |  6   |  7   |   8  |   9  |  0   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   q  |   w  |   e  |   r  |   t  |------|           |------|  y   |  u   |   i  |   o  |  p   |   [    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   a  |   s  |   d  |   f  |   g  |      |           |      |  h   |  j   |   k  |   l  |  ;   |   '    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   c  |   v  |------|       |------|  n   |  m   |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+
+[PLVR] = KEYMAP(  // layout: layer 4: Steno for Plover
+        // left hand
+        KC_NO, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+        KC_NO,  KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
+        KC_NO,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,
+        KC_NO,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_NO,
+        KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+                                      KC_FN4, KC_NO,
+                                           KC_NO,
+                                 KC_C,   KC_V,   KC_NO,
+        // right hand
+             KC_TRNS,  KC_NO,   KC_NO,   KC_NO,  KC_NO,   KC_NO,   KC_TRNS,
+               KC_NO,   KC_6,    KC_7,    KC_8,   KC_9,    KC_0,   KC_TRNS,
+                        KC_Y,   KC_U,    KC_I,    KC_O,   KC_P,    KC_LBRC,
+               KC_NO,   KC_H,    KC_J,    KC_K,   KC_L, KC_SCLN,   KC_QUOT,
+                              KC_TRNS, KC_TRNS,  KC_NO,   KC_NO,     KC_NO,
+        KC_TRNS, KC_TRNS,
+        KC_TRNS,
+        KC_NO,  KC_N,   KC_M
+),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/dvorak/dvorak.png b/keyboards/ergodox/keymaps/dvorak/dvorak.png
new file mode 100644 (file)
index 0000000..cb83163
Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak/dvorak.png differ
diff --git a/keyboards/ergodox/keymaps/dvorak/keymap.c b/keyboards/ergodox/keymaps/dvorak/keymap.c
new file mode 100644 (file)
index 0000000..d3609c6
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   \    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   '  |   ,  |   .  |   P  |   Y  |  L1  |           |  L1  |   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |S / L2|   -    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |:/Ctrl|   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   TG(1),
+        KC_BSPC,        KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
+        KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSLS,
+             TG(1),       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
+                          KC_D,   KC_H,   KC_T,   KC_N,   LT(MDIA, KC_S),   KC_MINS,
+             MEH_T(KC_NO),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c
new file mode 100755 (executable)
index 0000000..d33c6e5
--- /dev/null
@@ -0,0 +1,165 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+/******************************************************************************************
+ * DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
+ * Layer 1: auxiliary keys
+ * Layer 2: full qwerty layout
+ *****************************************************************************************/
+
+// LAYERS
+#define BASE    0 // dvorak layout (default)
+#define AUX     1 // auxiliary keys
+
+// MACROS
+/* #define OBRACE 0 // key { or shift */
+/* #define CBRACE 1 // key } or shift */
+/* #define OBRACK 2 // key [ or left alt */
+/* #define CBRACK 3 // key ] or left alt */
+/* #define CAPS   4 // caps lock */
+
+// LEDS
+#define USB_LED_NUM_LOCK    0
+#define USB_LED_CAPS_LOCK   1
+#define USB_LED_SCROLL_LOCK 2
+#define USB_LED_COMPOSE     3
+#define USB_LED_KANA        4
+
+// TIMERS
+#define KEY_TAP_FAST 85
+#define KEY_TAP_SLOW 95
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Base layer
+ * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
+ *
+  * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |   1  |   2  |   3  |   4  |   5  |  Esc |           |  Esc |   6  |   7  |   8  |   9  |   0  | = / +  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   ~    |" / ' |, / < |. / > |   P  |   Y  |   [  |           |   ]  |   F  |   G  |   C  |   H  |   L  | / / ?  |
+ * |--------+------+------+------+------+------|   {  |           |   }  |------+------+------+------+------+--------|
+ * |  Tab   |   A  |   O  |   E  |U/LSft| I/L1 |------|           |------|  D/L1|R/RSft|   T  |   N  |   S  | - / _  |
+ * |--------+------+------+------+------+------| LGUI |           | LGUI |------+------+------+------+------+--------|
+ * | {/LSft |; / : |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      | ~L1  |                                       | ~L1  |      |      | \ / ||        |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | HOME |  END |       | LEFT | RIGHT|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 | BSPC |  DEL | PGUP |       |  UP  | SPACE  |RETURN|
+ *                                 |  /   |  /   |------|       |------|   /    |  /   |
+ *                                 | LCTL | LALT |PGDWN |       | DOWN | LALT   | LCTL |
+ *                                 `--------------------'       `----------------------'
+ *
+ */
+[BASE] = KEYMAP(
+        // left hand
+        KC_NO,          KC_1,     KC_2,   KC_3,   KC_4,          KC_5,           KC_ESC,
+        KC_TILD,        KC_QUOTE, KC_COMM,KC_DOT, KC_P,          KC_Y,           KC_LBRACKET,
+        KC_TAB,         KC_A,     KC_O,   KC_E,   SFT_T(KC_U),   LT(AUX, KC_I),
+        SFT_T(KC_LBRC), KC_SCLN,  KC_Q,   KC_J,   KC_K,          KC_X,           KC_LGUI,
+        KC_NO,          KC_NO,    KC_NO,  KC_NO,  MO(AUX),
+                                                           KC_HOME, KC_END,
+                                                                    KC_PGUP,
+                                      CTL_T(KC_BSPC), ALT_T(KC_DEL), KC_PGDN,
+        // right hand
+                    KC_ESC,          KC_6,           KC_7,         KC_8,   KC_9,   KC_0,   KC_EQL,
+                    KC_RBRACKET,     KC_F,           KC_G,         KC_C,   KC_R,   KC_L,   KC_SLASH,
+                                     LT(AUX, KC_D),  SFT_T(KC_H),  KC_T,   KC_N,   KC_S,   KC_MINUS,
+                    KC_LGUI,         KC_B,           KC_M,         KC_W,   KC_V,   KC_Z,   SFT_T(KC_RBRC),
+                                                                 MO(AUX), KC_NO,   KC_NO,  KC_BSLASH, KC_NO,
+        KC_LEFT, KC_RIGHT,
+        KC_UP,
+        KC_DOWN, ALT_T(KC_ENT), CTL_T(KC_SPC)
+    ),
+/* Keymap 1: Aux layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  VolUp |      |      |      |      |      | SLEEP            | PWR  |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  VolDn |  F1  |  F2  |  F3  |  F4  |      |      |           |      |      |   7  |   8  |   9  |   *  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |  F5  |  F6  |  F7  |  F8  | TRANS|------|           |------|TRANS |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+ * |  TRANS |  F9  |  F10 |  F11 |  F12 |      |      |           |      |      |   1  |   2  |   3  |   /  |  TRANS |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS|                                       | TRANS|    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | TRANS| TRANS|       | TRANS| TRANS|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | TRANS|       | TRANS|      |      |
+ *                                 |TRANS |TRANS |------|       |------| TRANS| TRANS|
+ *                                 |      |      | TRANS|       | TRANS|      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[AUX] = KEYMAP(
+       // left hand
+       KC_VOLU, KC_NO, KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_SLEP,
+       KC_VOLD, KC_F1, KC_F2,  KC_F3,  KC_F4,  KC_NO,   KC_NO,
+       KC_NO  , KC_F5, KC_F6,  KC_F7,  KC_F8,  KC_TRNS,
+       KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO,   KC_NO,
+       LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), KC_TRNS,
+                                                            KC_TRNS  , KC_TRNS,
+                                                                     KC_TRNS,
+                                                KC_TRNS, KC_TRNS, KC_TRNS,
+       // right hand
+            KC_PWR,  KC_NO,   KC_NO,  KC_NO,  KC_NO,   KC_NO,   KC_NO,
+            KC_NO,   KC_NO,   KC_7,   KC_8,   KC_9,    KC_PAST, KC_NO,
+                     KC_TRNS, KC_4,   KC_5,   KC_6,    KC_PPLS, KC_NO,
+            KC_PSCR, KC_NO,   KC_1,   KC_2,   KC_3,    KC_PSLS, KC_TRNS,
+                              KC_TRNS,KC_DOT, KC_0,    KC_PEQL, KC_NO,
+       KC_TRNS  , KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(AUX)                // FN1 - Momentary Layer 1 (Aux)
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+}
diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/readme.md b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md
new file mode 100644 (file)
index 0000000..a3fc34a
--- /dev/null
@@ -0,0 +1,70 @@
+# Ergodox Dvorak Layout with emacs binding in mind
+ * Control & Alt key on the thumbs (activated if pressed with another key).
+ * In the same way, "U" and "R" are the shift modifier if pressed with another key.
+ * "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key.
+ * Software layout set to english.
+
+## Keymap Layers
+ - L0: dvorak with some customizations (see layout below)
+ - L1: auxiliary keys (includes function keys, numpad...)
+
+
+### Keymap 0: Base layer
+Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'held' key, respectively
+
+<pre><code>
+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |   1  |   2  |   3  |   4  |   5  |  Esc |           |  Esc |   6  |   7  |   8  |   9  |   0  |   =    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|   ~    |  '   |   ,  |   .  |   P  |   Y  |   [  |           |   ]  |   F  |   G  |   C  |   H  |   L  |   /    |
+|--------+------+------+------+------+------|   {  |           |   }  |------+------+------+------+------+--------|
+|  Tab   |   A  |   O  |   E  |U/LSft| I/L1 |------|           |------|  D/L1|R/RSft|   T  |   N  |   S  |   -    |
+|--------+------+------+------+------+------| LGUI |           | LGUI |------+------+------+------+------+--------|
+| {/LSft |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |      |      |      |      | ~L1  |                                       | ~L1  |      |      |   \  |      |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       | HOME |  END |       | LEFT | RIGHT|
+                                ,------|------|------|       |------+--------+------.
+                                | BSPC |  DEL | PGUP |       |  UP  | SPACE  |RETURN|
+                                |  /   |  /   |------|       |------|   /    |  /   |
+                                | LCTL | LALT |PGDWN |       | DOWN | LALT   | LCTL |
+                                `--------------------'       `----------------------'
+
+</pre></code>
+
+### Keymap 1: Aux layer
+
+<pre><code>
+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|  VolUp |      |      |      |      |      | SLEEP            | PWR  |      |      |      |      |      |        |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  VolDn |  F1  |  F2  |  F3  |  F4  |      |      |           |      |      |   7  |   8  |   9  |   *  |        |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |  F5  |  F6  |  F7  |  F8  | TRANS|------|           |------|TRANS |   4  |   5  |   6  |   +  |        |
+|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+|  TRANS |  F9  |  F10 |  F11 |  F12 |      |      |           |      |      |   1  |   2  |   3  |   /  |  TRANS |
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS|                                       | TRANS|    . |   0  |   =  |      |
+  `----------------------------------'                                       `----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       | TRANS| TRANS|       | TRANS| TRANS|
+                                ,------|------|------|       |------+------+------.
+                                |      |      | TRANS|       | TRANS|      |      |
+                                |TRANS |TRANS |------|       |------| TRANS| TRANS|
+                                |      |      | TRANS|       | TRANS|      |      |
+                                `--------------------'       `--------------------'
+
+</pre></code>
+
+
+
+## Generation of .hex file
+> In the "qmk_firmware/keyboards/ergodox" directory.
+
+> Execute "make dvorak_emacs". Then the hex file "ergodox_ez_dvorak_emacs.hex" is in the root directory : "qmk_firmware".
+
+> Flash with `teensy_loader` binary
diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png
new file mode 100644 (file)
index 0000000..6a36f9b
Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png differ
diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png
new file mode 100644 (file)
index 0000000..c6e6d91
Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png differ
diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png
new file mode 100644 (file)
index 0000000..23f56ff
Binary files /dev/null and b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png differ
diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c
new file mode 100644 (file)
index 0000000..89eae52
--- /dev/null
@@ -0,0 +1,185 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | BrBck|           | Play |   6  |   7  |   8  |   9  |   0  | \ / L2 |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Esc    |   '  |   ,  |   .  |   P  |   Y  | Del  |           | Ins  |   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  |   -    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |:/Ctrl|   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1| LAlt | LGui | Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,---------------.
+ *                                        | App  | L1   |       | L2   |PrntScr |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space| Tab  |------|       |------| AltShf |Enter |
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_WBAK,
+        KC_ESC,         KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   KC_DELT,
+        KC_BSPC,        KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
+        KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_LALT,      KC_LGUI,  KC_LEFT,KC_RGHT,
+                                              CTL_T(KC_APP),  TG(1),
+                                                              KC_HOME,
+                                               KC_SPC,KC_TAB,KC_END,
+        // right hand
+             KC_MPLY,      KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             LT(MDIA, KC_BSLS),
+             KC_INS,       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
+                          KC_D,   KC_H,   KC_T,   KC_N,   KC_S,             KC_MINS,
+             MEH_T(KC_NO),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             TG(2),        KC_PSCREEN,
+             KC_PGUP,
+             KC_PGDN,RALT(KC_RSFT), KC_ENT
+    ), 
+/* Keymap 1: Symbol & Media Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Prev | Next |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |VolUp |      |      |
+ *                                 |      |      |------|       |------| Mute |      |
+ *                                 |      |      |      |       |VolDn |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MNXT,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_VOLU,
+       KC_VOLD, KC_MUTE, KC_TRNS
+),
+/* Keymap 2: QWERTY Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl|        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(  // layer 0 : default
+        // left hand
+        KC_TRNS,        KC_TRNS,      KC_TRNS,   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+        KC_TRNS,        KC_Q,         KC_W,      KC_E,   KC_R,   KC_T,   KC_TRNS,
+        KC_TRNS,        KC_A,         KC_S,      KC_D,   KC_F,   KC_G,
+        KC_TRNS,        CTL_T(KC_Z),  KC_X,      KC_C,   KC_V,   KC_B,   KC_TRNS,
+        KC_TRNS,        KC_TRNS,      KC_TRNS,   KC_TRNS,KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+        // right hand
+        KC_TRNS,     KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,
+        KC_TRNS,     KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_TRNS,
+                     KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_TRNS,
+        KC_TRNS,     KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_TRNS,
+                             KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,
+        KC_TRNS, KC_TRNS,
+        KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md b/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md
new file mode 100644 (file)
index 0000000..984106f
--- /dev/null
@@ -0,0 +1,29 @@
+# ErgoDox EZ Dvorak International Squisher
+
+Dvorak layout adjusted with several (linux) applications in mind:
+
+* Easier Escape for VIM
+* Windows/Super key for awesome WM
+* Alt+Shift for international characters
+* PrintScreen for sys-rq
+* Insert for the X11 clip-board
+
+Major layer changes:
+
+* Common multimedia keys are integrated into layer 0, less common into layer 1
+* No mouse keys
+* Layer 2 is qwerty (for easier gaming & less fortunate keyboard users)
+
+Known issues:
+
+* Alt+Shift does not work reliably (depends on the X11 kb layout? Not
+  entirely clear...)
+
+![layer0](keyboard-layout0.png)
+![layer1](keyboard-layout1.png)
+![layer2](keyboard-layout2.png)
+
+## Changelog
+
+* 2016-03-29
+  * Initial release
diff --git a/keyboards/ergodox/keymaps/dvorak_plover/README.md b/keyboards/ergodox/keymaps/dvorak_plover/README.md
new file mode 100644 (file)
index 0000000..c8287b0
--- /dev/null
@@ -0,0 +1,14 @@
+Dvorak support, plover support, gaming support
+
+I'm used to the Kinesis, so originally I was just going to patch up
+the thumb keys to be more familiar. But the ergodox is really well
+suited to NKRO support in Plover, so I added a layer for that, and
+then I remembered that dvorak can be really annoying for video
+games (try to reach WASD), so I added a layer for that.
+
+The result is probably a bit idiosyncratic, but it works for me.
+
+(I also don't have any press/hold distinction keys, because that
+confuses my fuzzy little brain.)
+
+Contributed by seebs (seebs@seebs.net)
diff --git a/keyboards/ergodox/keymaps/dvorak_plover/keymap.c b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c
new file mode 100644 (file)
index 0000000..d050560
--- /dev/null
@@ -0,0 +1,230 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define PLVR 2 // media keys
+#define QWRT 3 // qwerty layer for gaming
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | Esc  |           | Esc  |   6  |   7  |   8  |   9  |   0  |   \    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   '  |   ,  |   .  |   P  |   Y  |  L1  |           |  L2  |   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LGui   |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  |   -    |
+ * |--------+------+------+------+------+------| Esc  |           |  L3  |------+------+------+------+------+--------|
+ * | LShift |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Lalt  |  Grv |      | Left | Right|                                       |  Up  | Down |   [  |   ]  | RAlt |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,---------------.
+ *                                        | LCtrl| Alt  |       | LGui | RCtrl  |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 |Backsp|Delete|------|       |------| Enter  |Space |
+ *                                 |   ace|      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_ESC,
+        KC_TAB,         KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   MO(SYMB),
+        KC_LGUI,        KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
+        KC_LSFT,        KC_SCLN,        KC_Q,    KC_J,   KC_K,   KC_X,   KC_ESC,
+        KC_LALT,        KC_GRV,         KC_ESC,  KC_LEFT,KC_RGHT,
+                                               KC_LCTL,  KC_LALT,
+                                                              KC_HOME,
+                                               KC_BSPC,KC_DEL,KC_END,
+        // right hand
+            KC_ESC,      KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSLS,
+             TG(PLVR),       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
+                          KC_D,   KC_H,   KC_T,   KC_N,   KC_S,             KC_MINS,
+             TG(QWRT),KC_B,   KC_M,   KC_W,   KC_V,   KC_Z,             KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_RALT,
+             KC_LGUI,        KC_RCTL,
+             KC_PGUP,
+             KC_PGDN,KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |  KP7 |  KP8 | KP9  |  KP* |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |  KP4 |  KP5 | KP6  |  KP+ |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |  KP1 |  KP2 | KP3  |  KP/ |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |  KP. | KP0  |  KP= |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_P7,  KC_P8,   KC_P9,   KC_PAST, KC_F12,
+                KC_DOWN, KC_P4,  KC_P5,   KC_P6,   KC_PPLS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_P1,  KC_P2,   KC_P3,   KC_PSLS, KC_TRNS,
+                         KC_TRNS,KC_PDOT,  KC_P0,   KC_PEQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   1  |   2  |   3  |   4  |   5  |      |           | L2   |  6   |  7   |   8  |   9  |  0   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   q  |   w  |   e  |   r  |   t  |------|           |------|  y   |  u   |   i  |   o  |  p   |   [    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   a  |   s  |   d  |   f  |   g  |      |           |      |  h   |  j   |   k  |   l  |  ;   |   '    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   c  |   v  |------|       |------|  n   |  m   |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+
+[PLVR] = KEYMAP(  // layout: layer 2: Steno for Plover
+        // left hand
+        KC_NO, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+        KC_NO,  KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_TRNS,
+        KC_NO,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,
+        KC_NO,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_NO,
+        KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+                                      KC_FN4, KC_NO,
+                                           KC_NO,
+                                 KC_C,   KC_V,   KC_NO,
+        // right hand
+               KC_NO,  KC_NO,   KC_NO,   KC_NO,  KC_NO,   KC_NO,   KC_TRNS,
+               TG(2),   KC_6,    KC_7,    KC_8,   KC_9,    KC_0,   KC_TRNS,
+                        KC_Y,   KC_U,    KC_I,    KC_O,   KC_P,    KC_LBRC,
+               KC_NO,   KC_H,    KC_J,    KC_K,   KC_L, KC_SCLN,   KC_QUOT,
+                              KC_TRNS, KC_TRNS,  KC_NO,   KC_NO,     KC_NO,
+        KC_TRNS, KC_TRNS,
+        KC_TRNS,
+        KC_NO,  KC_N,   KC_M
+),
+/* Keymap 3: qwerty-ish
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | Esc  |           | Esc  |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LGui   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |  LGui  |
+ * |--------+------+------+------+------+------| Spc  |           |  L3  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Lalt |  Grv |  '"  | Left | Right|                                       |  Up  | Down |   [  |   ]  | RAlt |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,---------------.
+ *                                        | LCtrl| LAlt |       | LGui | RCtrl  |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 |Backsp|Delete|------|       |------| Enter  |Space |
+ *                                 |   ace|      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+[QWRT] = KEYMAP(  // layer 3: qwerty for gaming
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_ESC,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_LGUI,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_SPACE,
+        KC_LALT,      KC_GRV,      KC_QUOT,  KC_LEFT,KC_RGHT,
+                                                                                       KC_LCTL,  KC_LALT,
+                                                                                                      KC_HOME,
+                                                                                       KC_BSPC,KC_DEL,KC_END,
+        // right hand
+             KC_ESC,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             KC_NO,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          KC_QUOT,
+             TG(QWRT),    KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_RALT,
+              KC_LGUI,        KC_RCTL,
+              KC_PGUP,
+              KC_PGDN,KC_ENT, KC_SPC
+    ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+               case 3:
+                       ergodox_right_led_3_on();
+                       break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile
new file mode 100644 (file)
index 0000000..3c65e25
--- /dev/null
@@ -0,0 +1,8 @@
+BOOTMAGIC_ENABLE=no
+COMMAND_ENABLE=no
+SLEEP_LED_ENABLE=no
+FORCE_NKRO ?= yes
+DEBUG_ENABLE = no
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md
new file mode 100644 (file)
index 0000000..3e4a254
--- /dev/null
@@ -0,0 +1,29 @@
+Dvorak Programmer Layout
+========================
+
+This is a dvorak-only layout. The overall philosophy is that the left hand contains a number of layer-switching shortcuts, and the right hand key codes vary based on the layer selected.
+
+Layers
+------
+
+* BASE: this is where you type.
+* SHELL_NAV: hold down the Tab key to access shell/terminal navigation shorcuts such as forward/backward word, history, Ctrl+C, screen tab movement.
+* KEY_NAV: arrow key movement with backward/forward word support, and copy/paste.
+* KEY_SEL: same as above, but every movement shift-selects.
+* NUMBER: keypad layer.
+* SYMBOL: all the symbols.
+* BRACKET: special brackets-only layer for programming
+* SHORTCUTS: sends Hyper keys for Autohotkey to interpret. I use this to switch between specific apps.
+* MOUSE: use mouse keys
+
+Updates
+-------
+
+2016/12/10:
+* toggle for brackets layer is now on left thumb cluster.
+
+2016/11/05:
+* removed brackets anywhere but in brackets layer
+* added mouse layer back in
+* put semicolon-newline and end-newline on symbol layer
+* replaced all HYPR with MEH, added more shortcut keys
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c
new file mode 100644 (file)
index 0000000..f3d02f6
--- /dev/null
@@ -0,0 +1,424 @@
+
+#include "ergodox.h"
+#include "led.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_code.h"
+
+#define BASE    0 // default layer
+#define SHELL_NAV 1
+#define KEY_NAV 3 // key navigation layer
+#define KEY_SEL 4 // key selection layer
+#define NUMBER  5  // number layer
+#define SYMBOL  6
+#define BRACKETS  7
+#define SHORTCUTS 8
+#define MOUSE 9
+
+// macros
+#define MC_COPY_LINE  0
+#define MC_CUT_LINE   1
+#define MC_PASTE_LINE 2
+#define MC_NEW_SEARCH_TAB 3
+#define SCREEN_TAB_LEFT 4
+#define SCREEN_TAB_RIGHT 5
+#define SCREEN_NEW_TAB 6
+#define SWITCH_NDS 7
+#define SCREEN_COPY_MODE 8
+#define SCREEN_PASTE 9
+#define OPEN_CLOSE_PAREN 10
+#define OPEN_CLOSE_BRACKET 11
+#define OPEN_CLOSE_CURLY 12
+#define OPEN_CLOSE_SINGLE_QUOTE 13
+#define OPEN_CLOSE_DOUBLE_QUOTE 14
+#define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 15
+#define SEMICOLON_NEWLINE 16
+#define END_NEWLINE 17
+
+
+const uint16_t PROGMEM fn_actions[] = {
+  [1] = ACTION_LAYER_TAP_TOGGLE(KEY_NAV), // FN1 - keynav layer
+  [2] = ACTION_LAYER_TAP_TOGGLE(NUMBER), // FN2 - number layer
+  [3] = ACTION_MODS_ONESHOT(MOD_LSFT),   // FN3 - shift modifier / oneshot
+  [4] = ACTION_MODS_ONESHOT(MOD_LCTL),   // FN4 - ctrl modifier / oneshot
+  [5] = ACTION_MODS_ONESHOT(MOD_LALT),   // FN5 - alt modifier / oneshot
+};
+
+//Tap Dance Declarations
+enum {
+  TD_SHIFT_CAPSLOCK = 0,
+  TD_BRK_LEFT = 1,
+  TD_BRK_RIGHT = 2
+};
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// base layer
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,                    KC_F1,          KC_F2,       KC_F3,        KC_F4,       KC_F5,       KC_F6,
+        LT(MOUSE,KC_TAB),       KC_QUOT,        KC_COMM,     KC_DOT,       KC_P,        KC_Y,        MO(KEY_SEL),
+        MO(SHELL_NAV),             KC_A,           KC_O,        KC_E,         KC_U,        KC_I,
+        KC_FN3,                    KC_SCLN,        KC_Q,        KC_J,         KC_K,        KC_X,        MO(KEY_NAV),
+                   OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER),  
+                                              // thumb cluster
+                                               MO(BRACKETS), RCTL(KC_S),
+                                                                      RCTL(KC_DEL),
+                                               KC_BSPC,RCTL(KC_BSPC),KC_DEL,
+        // right hand
+             KC_F7,       KC_F8,       KC_F9,       KC_F10,        KC_F11,       KC_F12,       KC_BSLS,
+             KC_PGUP,     KC_F,        KC_G,        KC_C,          KC_R,         KC_L,         KC_SLSH,
+                          KC_D,        KC_H,        KC_T,          KC_N,         KC_S,         KC_MINS,
+             KC_PGDN,     KC_B,        KC_M,        KC_W,          KC_V,         KC_Z,         TD(TD_SHIFT_CAPSLOCK),
+                                  // lower keys - browser tab control
+                                  RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), RCTL(KC_W),
+             // thumb cluster
+             KC_HOME,KC_END,
+             KC_UP,
+             KC_DOWN,KC_ENT, KC_SPC
+    ),
+     
+
+// shell navigation layer
+[SHELL_NAV] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+               // bottom row
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       // thumb cluster
+                                       KC_TRNS,KC_TRNS,
+                                               LALT(KC_D),
+                               KC_TRNS,RCTL(KC_W),KC_TRNS,
+       // right hand
+       KC_TRNS,    KC_TRNS,        KC_TRNS,             KC_TRNS,         KC_TRNS,         KC_TRNS,        KC_TRNS,
+       RCTL(KC_L), RCTL(KC_W),     KC_HOME,             KC_UP,           KC_END,          LALT(KC_D),     RCTL(KC_R),
+                   LALT(KC_B),     KC_LEFT,             KC_DOWN,         KC_RIGHT,        LALT(KC_F),     LALT(KC_DOT),
+       RCTL(KC_C), RCTL(KC_U),     M(SCREEN_COPY_MODE), M(SCREEN_PASTE), MEH(KC_V),      RCTL(KC_K),     M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND),
+                // bottom row
+                 M(SCREEN_TAB_LEFT), M(SCREEN_TAB_RIGHT), M(SCREEN_NEW_TAB),  KC_TRNS,    KC_TRNS,
+       // thumb cluster
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+    
+// key navigation layer
+[KEY_NAV] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+               // bottom row
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       // thumb cluster
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS,        KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,        KC_TRNS,
+       KC_TRNS, KC_PGDN,        KC_HOME,    KC_UP,      KC_END,     KC_PGUP,        M(MC_COPY_LINE),
+                RCTL(KC_LEFT),  KC_LEFT,    KC_DOWN,    KC_RIGHT,   RCTL(KC_RIGHT), M(MC_CUT_LINE),
+       KC_TRNS, KC_TRNS,        RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_TRNS,        M(MC_PASTE_LINE),
+                // bottom row
+                KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,
+       // thumb cluster
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+// key selection layer
+[KEY_SEL] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+               // bottom row
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       // thumb cluster
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS,       KC_TRNS,             KC_TRNS,       KC_TRNS,       KC_TRNS,        KC_TRNS,              KC_TRNS,
+       RSFT(KC_PGUP), RSFT(KC_PGDN),       RSFT(KC_HOME), RSFT(KC_UP),   RSFT(KC_END),   RSFT(KC_PGUP),        M(MC_COPY_LINE),
+                      RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), M(MC_CUT_LINE),
+       RSFT(KC_PGDN), KC_TRNS,             RCTL(KC_C),    RCTL(KC_X),    RCTL(KC_V),     KC_TRNS,              M(MC_PASTE_LINE),
+                // bottom row
+                KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,
+       // thumb cluster
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+// number layer
+[NUMBER] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+               // bottom row
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       // thumb cluster
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_PLUS,  KC_7,    KC_8,    KC_9,     KC_ASTR, KC_TRNS,
+                KC_MINS,  KC_4,    KC_5,    KC_6,     KC_SLSH, KC_TRNS,
+       KC_TRNS, KC_EQUAL, KC_1,    KC_2,    KC_3,     KC_COLN, KC_TRNS,
+                               // bottom row
+                                KC_0, KC_DOT, KC_COMMA, KC_TRNS,  KC_TRNS,
+       // thumb cluster
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+
+[SYMBOL] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,       
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_PLUS, KC_AMPR, KC_ASTR, KC_GRAVE,KC_TILD, KC_TRNS,
+                KC_MINS, KC_DLR,  KC_PERC, KC_CIRC, KC_PIPE, KC_TRNS,
+       KC_TRNS, KC_EQUAL,KC_EXLM, KC_AT,   KC_HASH, KC_TRNS, KC_TRNS,
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+       M(SEMICOLON_NEWLINE), M(END_NEWLINE),
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+[BRACKETS] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,       
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS, KC_TRNS, M(OPEN_CLOSE_BRACKET),M(OPEN_CLOSE_PAREN),M(OPEN_CLOSE_CURLY),KC_TRNS,KC_TRNS,
+                KC_TRNS, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+[SHORTCUTS] = KEYMAP(
+       // left hand
+       KC_NO,  MEH(KC_F1), MEH(KC_F2), MEH(KC_F3),  MEH(KC_F4), MEH(KC_F5), MEH(KC_F6),
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,       
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                         MEH(KC_0),MEH(KC_1),
+                                                   MEH(KC_2),
+                               MEH(KC_3),MEH(KC_4),MEH(KC_5),
+       // right hand
+       MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10),  MEH(KC_F11), MEH(KC_F12),  M(SWITCH_NDS),
+       KC_TRNS, MEH(KC_A), MEH(KC_B),    MEH(KC_C),    MEH(KC_D),    MEH(KC_E), MEH(KC_F),
+                MEH(KC_G), MEH(KC_H),    MEH(KC_I),    MEH(KC_J),    MEH(KC_K), MEH(KC_L),
+       KC_TRNS, MEH(KC_M), MEH(KC_N),    MEH(KC_O),    MEH(KC_P),    MEH(KC_Q), MEH(KC_R),
+                           MEH(KC_S),    MEH(KC_T),    MEH(KC_U),    MEH(KC_V), MEH(KC_X),
+       MEH(KC_6), MEH(KC_7),
+       MEH(KC_8),
+       MEH(KC_9), MEH(KC_Y), MEH(KC_Z)
+),
+
+
+[MOUSE] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+          KC_TRNS, KC_BTN1, KC_BTN2
+),
+
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case MC_COPY_LINE:
+            if (record->event.pressed) {
+                return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(C), U(LCTL), END);
+            }
+            break;
+        case MC_CUT_LINE:
+            if (record->event.pressed) {
+                return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(X), U(LCTL), END);
+            }        
+            break;
+        case MC_PASTE_LINE:
+            if (record->event.pressed) {
+                return MACRO( T(END), T(ENTER), D(LCTL), T(V), U(LCTL), END);
+            }                
+            break;
+        case MC_NEW_SEARCH_TAB:
+             if (record->event.pressed) {
+                return MACRO( D(LCTL), T(T), T(K), U(LCTL), END);
+            }
+            break;
+        case SCREEN_TAB_LEFT:
+             if (record->event.pressed) {
+                return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
+            }        
+            break;
+        case SCREEN_TAB_RIGHT:
+             if (record->event.pressed) {
+                return MACRO( D(LCTL), T(A), U(LCTL), T(N), END);
+            }                    
+            break;
+        case SCREEN_NEW_TAB:
+             if (record->event.pressed) {
+                return MACRO( D(LCTL), T(A), U(LCTL), T(C), END);
+            }                                
+        break;
+        case SCREEN_COPY_MODE:
+            if (record->event.pressed) {
+                return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END);
+            }
+        break;
+        case SCREEN_PASTE:
+            if (record->event.pressed) {
+                return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END); 
+            }
+        break;        
+        case SWITCH_NDS:
+             if (record->event.pressed) {
+                return MACRO( D(LSFT), T(F11), U(LSFT), W(500), D(LALT), T(TAB), U(LALT), END); 
+            }                                
+        break;        
+        case OPEN_CLOSE_PAREN:
+            if (record->event.pressed) {
+                return MACRO( D(LSFT), T(LPRN), T(RPRN), U(LSFT), T(LEFT), END);
+            }
+        break;
+        case OPEN_CLOSE_BRACKET:
+            if (record->event.pressed) {
+                return MACRO( T(LBRC), T(RBRC), T(LEFT), END);
+            }
+        break;        
+        case OPEN_CLOSE_CURLY:
+            if (record->event.pressed) {
+                return MACRO( D(LSFT), T(LCBR), T(RCBR), U(LSFT), T(LEFT), END);
+            }
+        break;                
+        case OPEN_CLOSE_SINGLE_QUOTE:
+            if (record->event.pressed) {
+                return MACRO( T(QUOT), T(QUOT), T(LEFT), END);
+            }
+        break;        
+        case OPEN_CLOSE_DOUBLE_QUOTE:
+            if (record->event.pressed) {
+                return MACRO( D(LSFT), T(QUOT), T(QUOT), U(LSFT), T(LEFT), END);
+            }
+        break;                        
+        case SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND:
+            if (record->event.pressed) {
+                return MACRO( T(UP), T(HOME), D(LALT), T(D), U(LALT), END);
+            }
+        break;                                
+               case SEMICOLON_NEWLINE:
+            if (record->event.pressed) {
+                return MACRO( T(END), T(SCLN), T(ENTER), END);
+            }          
+               break;
+               case END_NEWLINE:
+            if (record->event.pressed) {
+                return MACRO( T(END), T(ENTER), END);
+            }          
+               break;          
+        
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+    return;
+};
+
+void led_set_user(uint8_t usb_led) {
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        ergodox_right_led_1_on();
+    } else {
+        ergodox_right_led_1_off();
+    }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_SHIFT_CAPSLOCK]  = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK),
+  [TD_BRK_LEFT]  = ACTION_TAP_DANCE_DOUBLE (KC_LPRN, KC_LCBR),
+  [TD_BRK_RIGHT] = ACTION_TAP_DANCE_DOUBLE (KC_RPRN, KC_RCBR)
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case NUMBER:
+        case SYMBOL:
+            ergodox_right_led_2_on();
+            break;
+        case KEY_NAV:
+        case KEY_SEL:
+            ergodox_right_led_3_on();
+            break;        
+        case SHORTCUTS:
+            ergodox_right_led_2_on();
+            ergodox_right_led_3_on();
+            break;
+        default:
+            // none
+            break;
+    } 
+    return;
+};
diff --git a/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c
new file mode 100755 (executable)
index 0000000..6d7adf9
--- /dev/null
@@ -0,0 +1,284 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+/******************************************************************************************
+ * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
+ * Layer 1: auxiliary keys
+ * Layer 2: full qwerty layout
+ ******************************************************************************************
+ * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly
+ *****************************************************************************************/
+
+// LAYERS
+#define BASE    0 // dvorak layout (default)
+#define AUX     1 // auxiliary keys
+#define QWERTY  2 // qwerty layout
+
+// MACROS
+#define OBRACE 0 // key { or shift
+#define CBRACE 1 // key } or shift
+#define OBRACK 2 // key [ or left alt
+#define CBRACK 3 // key ] or left alt
+#define CAPS   4 // caps lock
+
+// LEDS
+#define USB_LED_NUM_LOCK    0
+#define USB_LED_CAPS_LOCK   1
+#define USB_LED_SCROLL_LOCK 2
+#define USB_LED_COMPOSE     3
+#define USB_LED_KANA        4
+
+// TIMERS
+#define KEY_TAP_FAST 85
+#define KEY_TAP_SLOW 95
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Base layer
+ * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | F1/~L1 |   .  |   ,  |   Ñ  |   P  |   Y  |MEH_T |           |  L1  |   F  |   G  |   C  |   H  |   L  |ALL_T/+ |
+ * |--------+------+------+------+------+------| DEL  |           | ~L1  |------+------+------+------+------+--------|
+ * |Esc/Ctrl|   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   R  |   T  |   N  |   S  |'/RCtrl |
+ * |--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+ * | {/LSft |   -  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |F5/CAG|F6/~L1|       |F7/~L1|F8/CAG|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |F4/CA |       |F11/CA|        |      |
+ *                                 | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+ *                                 |      |      |F3/SA |       |F12/SA|        |      |
+ *                                 `--------------------'       `----------------------'
+ *  CAG = CTRL-ALT-GUI
+ *   CA = CTRL-ALT
+ *   SA = SHIFT-ALT
+ *
+ */
+[BASE] = KEYMAP(
+        // left hand
+        KC_GRAVE,       KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NONUS_BSLASH,
+        LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P,   KC_Y,   MEH_T(KC_DEL),
+        CTL_T(KC_ESC),  KC_A,   KC_O,   KC_E,   KC_U,   KC_I,
+        M(OBRACE),      KC_SLSH,KC_Q,   KC_J,   KC_K,   KC_X,   KC_LGUI,
+        M(OBRACK),      KC_HOME,KC_PGDN,KC_PGUP,KC_END,
+                                                           LCAG_T(KC_F5),  LT(AUX, KC_F6),
+                                                           MT((MOD_LALT | MOD_LCTL), KC_F4),
+                                           KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3),
+        // right hand
+                    KC_EQL,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINUS,
+                    KC_FN1,    KC_F,   KC_G,   KC_C,   KC_H,   KC_L,   ALL_T(KC_RBRACKET),
+                               KC_D,   KC_R,   KC_T,   KC_N,   KC_S,   CTL_T(KC_QUOTE),
+                    KC_RALT,   KC_B,   KC_M,   KC_W,   KC_V,   KC_Z,   M(CBRACE),
+                                       KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,M(CBRACK),
+        LT(AUX, KC_F7), LCAG_T(KC_F8),
+        MT((MOD_LALT | MOD_LCTL), KC_F11),
+        MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC
+    ),
+/* Keymap 1: Aux layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP            | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  `^    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
+ * |--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+ * |CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      | Play |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       | VolUp|      |      |
+ *                                 | Lclk | Rclk |------|       |------| Prev | Next |
+ *                                 |      |      |  L2  |       | VolDn|      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[AUX] = KEYMAP(
+       // left hand
+       KC_NO  , KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_SLEP,
+       KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO,
+       KC_NO  , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO  ,
+       M(CAPS), KC_NO, KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO,
+       LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V),
+                                                            KC_NO  , KC_TRNS,
+                                                                       KC_NO,
+                                                KC_BTN1, KC_BTN2, TG(QWERTY),
+       // right hand
+            KC_PWR,  KC_F6,   KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11,
+            KC_TRNS, KC_NO,   KC_7,   KC_8,   KC_9,    KC_PAST, KC_LBRACKET,
+                     KC_NO,   KC_4,   KC_5,   KC_6,    KC_PPLS, KC_BSLASH,
+            KC_PSCR, KC_NO,   KC_1,   KC_2,   KC_3,    KC_PSLS, KC_NO,
+                              KC_NO  ,KC_DOT, KC_0,    KC_PEQL, KC_NO,
+       KC_TRNS, KC_MPLY,
+       KC_VOLU,
+       KC_VOLD, KC_MPRV, KC_MNXT
+),
+/* Keymap 2: QWERTY layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
+ * |--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
+ * |Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
+ * |--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+ * | {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |F5/CAG| TRANS|       | TRANS|F8/CAG|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |F4/CA |       |F11/CA|        |      |
+ *                                 | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+ *                                 |      |      | TRANS|       |F12/SA|        |      |
+ *                                 `--------------------'       `----------------------'
+ *  CAG = CTRL-ALT-GUI
+ *   CA = CTRL-ALT
+ *   SA = SHIFT-ALT
+ *
+ */
+[QWERTY] = KEYMAP(
+        // left hand
+        KC_GRAVE,       KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NONUS_BSLASH,
+        KC_TRNS,        KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   MEH_T(KC_DEL),
+        CTL_T(KC_ESC),  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,
+        M(OBRACE),      KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
+        M(OBRACK),      KC_HOME,KC_PGDN,KC_PGUP,KC_END,
+                                                                  LCAG_T(KC_F5),  KC_TRNS,
+                                                           MT((MOD_LALT | MOD_LCTL), KC_F4),
+                                                                    KC_ENT,KC_TAB,KC_TRNS,
+        // right hand
+                    KC_EQL,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINUS,
+                    KC_TRNS,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   ALL_T(KC_RBRACKET),
+                               KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,CTL_T(KC_QUOTE),
+                    KC_RALT,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,M(CBRACE),
+                                       KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,M(CBRACK),
+        KC_TRNS, LCAG_T(KC_F8),
+        MT((MOD_LALT | MOD_LCTL), KC_F11),
+        MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(AUX)                // FN1 - Momentary Layer 1 (Aux)
+};
+
+static uint16_t key_timer;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case OBRACE: {
+            if (record->event.pressed) {
+                key_timer = timer_read();
+                register_code(KC_RSFT);
+            } else {
+                unregister_code(KC_RSFT);
+                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) {
+                    register_code(KC_RALT);
+                    register_code(KC_QUOTE);
+                    unregister_code(KC_QUOTE);
+                    unregister_code(KC_RALT);
+                }
+            }
+            break;
+        }
+        case CBRACE: {
+            if (record->event.pressed) {
+                key_timer = timer_read();
+                register_code(KC_RSFT);
+            } else { 
+                unregister_code(KC_RSFT);
+                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { 
+                    register_code(KC_RALT); 
+                    register_code(KC_BSLS); 
+                    unregister_code(KC_BSLS); 
+                    unregister_code(KC_RALT); 
+                }
+            }
+            break;
+        }
+        case OBRACK: {
+            if (record->event.pressed) {
+                key_timer = timer_read();
+                register_code(KC_LALT);
+            } else { 
+                unregister_code(KC_LALT);
+                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { 
+                    register_code(KC_RALT); 
+                    register_code(KC_LBRACKET); 
+                    unregister_code(KC_LBRACKET); 
+                    unregister_code(KC_RALT); 
+                }
+            }
+            break;
+        }
+        case CBRACK: {
+            if (record->event.pressed) {
+                key_timer = timer_read();
+                register_code(KC_LALT);
+            } else { 
+                unregister_code(KC_LALT);
+                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { 
+                    register_code(KC_RALT); 
+                    register_code(KC_RBRACKET); 
+                    unregister_code(KC_RBRACKET); 
+                    unregister_code(KC_RALT); 
+                }
+            }
+            break;
+        }
+        case CAPS: {
+            if (record->event.pressed) {
+                register_code(KC_CAPSLOCK);
+            } else { 
+                unregister_code(KC_CAPSLOCK);
+            }
+            break;
+        }
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_right_led_3_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+    
+    // Turn the caps lock led on
+    if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+        ergodox_right_led_1_on();
+    }
+
+}
+
diff --git a/keyboards/ergodox/keymaps/dvorak_spanish/readme.md b/keyboards/ergodox/keymaps/dvorak_spanish/readme.md
new file mode 100644 (file)
index 0000000..e075e3c
--- /dev/null
@@ -0,0 +1,99 @@
+# Ergodox Spanish Dvorak Layout
+ * See spanish dvorak layout [here](http://djelibeibi.unex.es/dvorak/)
+ * Software layout must be set to SPANISH QWERTY to work properly
+
+## Keymap Layers
+ - L0: spanish dvorak with some customizations (see layout below)
+ - L1: auxiliary keys (includes qwerty shortcuts, numpad...)
+ - L2: qwerty layout with customizations
+
+
+### Keymap 0: Base layer
+Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
+
+<pre><code>
+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+| F1/~L1 |   .  |   ,  |   Ñ  |   P  |   Y  |MEH_T |           |  L1  |   F  |   G  |   C  |   H  |   L  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           | ~L1  |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   R  |   T  |   N  |   S  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   -  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG|F6/~L1|       |F7/~L1|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      |F3/SA |       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+</pre></code>
+
+### Keymap 1: Aux layer
+
+<pre><code>
+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP|           | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  '^    |
+|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
+|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
+|CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |      |      |       |      | Play |
+                                ,------|------|------|       |------+------+------.
+                                |      |      |      |       | VolUp|      |      |
+                                | Lclk | Rclk |------|       |------| Prev | Next |
+                                |      |      |  L2  |       | VolDn|      |      |
+                                '--------------------'       '--------------------'
+
+</pre></code>
+
+### Keymap 2: QWERTY layer
+
+<pre><code>
+
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+|  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
+|--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
+|Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
+|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
+| {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
+'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
+  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
+  '----------------------------------'                                       '----------------------------------'
+                                       ,-------------.       ,-------------.
+                                       |F5/CAG| TRANS|       | TRANS|F8/CAG|
+                                ,------|------|------|       |------+--------+------.
+                                |      |      |F4/CA |       |F11/CA|        |      |
+                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
+                                |      |      | TRANS|       |F12/SA|        |      |
+                                '--------------------'       '----------------------'
+ CAG = CTRL-ALT-GUI
+  CA = CTRL-ALT
+  SA = SHIFT-ALT
+
+</pre></code>
+
+
+## Generation of .hex file
+> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox)
+
+> Execute install.sh and generate.sh scripts.
+
+> Flash with `teensy_loader` binary (should be installed from previous step)
diff --git a/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png b/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png
new file mode 100644 (file)
index 0000000..1d25837
Binary files /dev/null and b/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png differ
diff --git a/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c b/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c
new file mode 100644 (file)
index 0000000..e80f08d
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   Grv  |   1  |   2  |   3  |   4  |   5  |  L1  |           |  L2  |   6  |   7  |   8  |   9  |   0  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   Tab  |   Q  |   W  |   E  |   R  |   T  |  [   |           |   ]  |   Y  |   U  |   I  |   O  |   P  |   -    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | \/LCtrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |'/RCtrl |
+ * |--------+------+------+------+------+------| RAlt |           | RAlt |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | ~L1  | LCtrl|  Left| Right| LAlt |                                       | LAlt | Up   | Down | RCtrl|  ~L2 |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | Del  | Ins  |       | Esc  | App  |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  LGui  |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   TG(SYMB),
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_LBRC,
+        CTL_T(KC_BSLS), KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_RALT,
+        MO(SYMB),       KC_LCTRL,     KC_LEFT,KC_RGHT,KC_LALT,
+                                                      KC_DELT,KC_INS,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             TG(MDIA),    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_EQL,
+             KC_RBRC,     KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_MINS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          CTL_T(KC_QUOT),
+             KC_RALT,     KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                                  KC_LALT,KC_UP,  KC_DOWN,KC_RCTRL,         MO(MDIA),
+             KC_ESC,      KC_APP,
+             KC_PGUP,
+             KC_PGDN,     KC_LGUI, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |   0  |    0 |   .  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_0,   KC_0,    KC_DOT,  KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md b/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md
new file mode 100644 (file)
index 0000000..4839988
--- /dev/null
@@ -0,0 +1,10 @@
+# ErgoDox EZ Emacs-OSX-DeadKeys Configuration
+
+Since I'm an Emacs user, ctrl keys are very important and gets a placement where the usual caps_lock is. There
+are an extra pair of ctrls, just in case there where problems with the holding one's, but not as comfortable.
+
+Gui button takes a predominant place on the thumb cluster, as I'm using a mac os x and it relies heavily on it.
+
+Finally there is also two Right Alts to easily access to accented letters of the spanish alphabet.
+
+![Default](default_highres.png)
diff --git a/keyboards/ergodox/keymaps/erez_experimental/Makefile b/keyboards/ergodox/keymaps/erez_experimental/Makefile
new file mode 100644 (file)
index 0000000..51a0c74
--- /dev/null
@@ -0,0 +1,11 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+COMMAND_ENABLE   = no  # Commands for debug and configuration
+RGBLIGHT_ENABLE ?= yes
+MIDI_ENABLE ?= yes
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/erez_experimental/config.h b/keyboards/ergodox/keymaps/erez_experimental/config.h
new file mode 100644 (file)
index 0000000..4da18c6
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 300
+
+#undef LEADER_TIMEOUT
+#define LEADER_TIMEOUT 300
+
+#endif
diff --git a/keyboards/ergodox/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c
new file mode 100644 (file)
index 0000000..13b8240
--- /dev/null
@@ -0,0 +1,223 @@
+#include <keymap_extras/keymap_colemak.h>
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+  PLACEHOLDER = SAFE_RANGE, // can always be here
+  RGB_FF00BB // always start with RGB_
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  |Ctrl- |           | Ctrl+|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  | Alt/J|   K  |   L  |; / L2| LGui/' |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * |LShift/(|Z/Ctrl|   X  |   C  |   V  |   B  |   [  |           |  ]   |   N  |   M  |   ,  |   .  |//Ctrl|RShift/)|
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | -/L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Leader|------|       |------| Tab/L1 |Enter |
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,     KC_5,   LCTL(KC_MINS),
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,     KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,     KC_G,
+        KC_LSPO,       CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,     KC_B,   ALL_T(KC_LBRC),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,  KC_RGHT,
+                                              ALT_T(KC_APP),    KC_LGUI,
+                                                                KC_HOME,
+                                                 KC_SPC,KC_LEAD,KC_END,
+        // right hand
+             LCTL(KC_EQL),       KC_6,KC_7,       KC_8,   KC_9,   KC_0,            KC_MINS,
+             TG(SYMB),      KC_Y,KC_U,       KC_I,   KC_O,   KC_P,            KC_BSLS,
+                            KC_H,ALT_T(KC_J),KC_K,   KC_L,   LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_RBRC),KC_N,KC_M,       KC_COMM,KC_DOT, CTL_T(KC_SLSH),  KC_RSPC,
+                            KC_UP,           KC_DOWN,KC_LBRC,KC_RBRC,         LT(SYMB,KC_MINS),
+             KC_LALT,       CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,LT(SYMB, KC_TAB), KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   1  |   2  |   3  |   4  |   5  |------|           |------|   &  |   _  |   -  |   ;  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   6  |   7  |   8  |   9  |   0  |      |           |      |   |  |   @  |   =  |   %  |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |NxtTab|PrvTab|                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |TOG   |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |VAI   |VAD   |HUI   |       |SAI   |      |MOD   |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |HUD   |       |SAD   |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       RGB_FF00BB, KC_F1,  KC_F2,  KC_F3,      KC_F4,        KC_F5,   KC_TRNS,
+       KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,       KC_TRNS,      KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_1,   KC_2,   KC_3,          KC_4,         KC_5,
+       KC_TRNS, KC_6,   KC_7,   KC_8,          KC_9,         KC_0,    KC_TRNS,
+       KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN),
+                                                                              KC_TRNS,KC_TRNS,
+                                                                                      RGB_HUI,
+                                                                      RGB_VAI,RGB_VAD,RGB_HUD,
+               // right hand
+       KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
+                KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_PIPE, KC_AT,   KC_EQL,  KC_PERC,   KC_TRNS, KC_TRNS,
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       RGB_TOG, KC_TRNS,
+       RGB_SAI,
+       RGB_SAD, KC_TRNS, RGB_MOD
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | PgUp | Home | End  | PgDn |      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_PGUP, KC_HOME, KC_END,  KC_PGDN, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),               // FN1 - Momentary Layer 1 (Symbols)
+    [2] = ACTION_MACRO_TAP(0),                         // Eric Tang's Famous Macro!
+    [3] = ACTION_MACRO_TAP(1)                          // Eric Tang's Famous Macro!
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // dynamically generate these.
+    case RGB_FF00BB:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          rgblight_enable();
+          rgblight_mode(1);
+          rgblight_setrgb(0xff,0x00,0xbb);
+        #endif
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+LEADER_EXTERNS();
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+  uint8_t layer = biton32(layer_state);
+
+  ergodox_board_led_off();
+  ergodox_right_led_1_off();
+  ergodox_right_led_2_off();
+  ergodox_right_led_3_off();
+  switch (layer) {
+    // TODO: Make this relevant to the ErgoDox EZ.
+    case 1:
+      ergodox_right_led_1_on();
+      break;
+    case 2:
+      ergodox_right_led_2_on();
+      break;
+    default:
+      // none
+      break;
+  }
+
+  LEADER_DICTIONARY() {
+    leading = false;
+    leader_end();
+
+    SEQ_ONE_KEY(KC_W) {
+      register_code(KC_LALT);
+      register_code(KC_F4);
+      unregister_code(KC_F4);
+      unregister_code(KC_LALT);
+    }
+    SEQ_ONE_KEY(KC_O) {
+      register_code(KC_LCTL);
+      register_code(KC_LSFT);
+      register_code(KC_O);
+      unregister_code(KC_O);
+      unregister_code(KC_LSFT);
+      unregister_code(KC_LCTL);
+    }
+  }
+}
+
diff --git a/keyboards/ergodox/keymaps/erez_experimental/readme.md b/keyboards/ergodox/keymaps/erez_experimental/readme.md
new file mode 100644 (file)
index 0000000..f0738d9
--- /dev/null
@@ -0,0 +1,55 @@
+# Erez's experimental layout
+
+This is my personal layout which I use to test out ideas which may or may not make it onto the default layout we ship with. It's based off the default layout, with various tweaks.
+
+Changelog:
+
+## Nov 1, 2016:
+
+* Adds dedicated text zooming keys in inner corners
+
+## May 24, 2016:
+
+* Implements Leader key example
+  * Leader, W sends Alt-F4
+  * Leader, O sends Ctrl-shift-o (a shortcut I use in FrontApp) 
+
+## May 8, 2016:
+
+* Makes bottom-right key send minus/underscore when tapped, L1 temporary toggle when held
+* Tweaked the positions of the numbers on the symbol layer. Basically, 12345 are now directly under their number-row counterparts in layer 0. You can imagine pulling the number row down to the home row. And 67890 are directly under 12345 - so it's a matter of just adding 5 and going to the next row (1+5 = 6, 2+5 = 7 and so on).
+* Tweaks media/nav layer
+  * Removes mouse control, as I don't use it
+  * Makes left home row keys PgUp, Home, End, PgDn
+
+## Apr 29, 2016:
+
+* Tweaks the Hyper and Meh key to send brackets when tapped
+* Turns bottom-right key into a minus/underscore (easy to reach with the right pinky)
+
+## Apr 25, 2016:
+
+* Made it so that the right and left Shift keys send opening and closing parens ( ) when tapped
+
+## Feb 11, 2016:
+
+* Updated ASCII legend for thumb clusters
+* Made it so outer left-hand thumb key is L1 momentary toggle
+* Added % and @ to L1
+* Swapped positions for _ and - on L1
+
+## Feb 5, 2016:
+
+* A whole new design for the symbol layer. Specifically:
+  * Put the minus, underscore, and semicolon right in the homerow for the right hand
+  * Parens are in better places for me
+  * The arrow keys now send Ctrl-PgUp and Ctrl-PgDn, for switching browser tabs with the arrows when in symbol layer
+  * Tab (right-hand outer thumb key) now does double duty to toggle symbol layer when held down
+  * Backspace (left-hand outer thumb key) now just toggles symbol layer (I wasn't using it as a backspace)
+  
+
+## Jan 19, 2016:
+
+* Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic.
+* Made ' into dual-action key (Win/Cmd when held down).
+
diff --git a/keyboards/ergodox/keymaps/galson/Makefile b/keyboards/ergodox/keymaps/galson/Makefile
new file mode 100644 (file)
index 0000000..f008f50
--- /dev/null
@@ -0,0 +1,2 @@
+COMMAND_ENABLE   = no  # Commands for debug and configuration
+
diff --git a/keyboards/ergodox/keymaps/galson/keymap.c b/keyboards/ergodox/keymaps/galson/keymap.c
new file mode 100644 (file)
index 0000000..0d3e756
--- /dev/null
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   +    |   1  |   2  |   3  |   4  |   5  | rclk |           | lclk |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   =    |   Q  |   W  |   E  |   R  |cmd/T |shift |           |shift |cmd/Y |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|  (   |           |  )   |------+------+------+------+------+--------|
+ * |   "    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|    '   |
+ * |--------+------+------+------+------+------| ctrl |           | ctrl |------+------+------+------+------+--------|
+ * |   {    |   Z  |   X  |   C  |   V  |   B  |  [   |           |   ]  |   N  |   M  |   ,  |   .  |   /  |    }   |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |  _   |   `  |  $   | Left | Right|                                       |  Up  | Down |   :  |   *  |  !     |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |   <  |  |   |       |   &  |   >   |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |  #   |       |   @  |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   |  %   |       |  ESC |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_PLUS,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_BTN2,
+        KC_EQL,          KC_Q,         KC_W,   KC_E,   KC_R,   GUI_T(KC_T),   KC_LSPO,
+        KC_DQUO,  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LCBR,  CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   CTL_T(KC_LBRC),
+        KC_UNDS,         KC_GRV,       KC_DLR, KC_LEFT,KC_RGHT,
+                                                               KC_LABK,  KC_PIPE,
+                                                                       KC_HASH,
+                                                       KC_SPC, KC_BSPC,KC_PERC,
+        // right hand
+        KC_BTN1,         KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+        KC_RSPC,  GUI_T(KC_Y),   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                         KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN), KC_QUOT,
+        CTL_T(KC_RBRC),  KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,   KC_RCBR,
+                                 KC_UP,  KC_DOWN,KC_COLN,KC_ASTR,          KC_EXLM,
+        KC_AMPR,          KC_RABK,
+        KC_AT,
+        KC_ESC,         KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. 
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/galson/readme.md b/keyboards/ergodox/keymaps/galson/readme.md
new file mode 100644 (file)
index 0000000..ebc9167
--- /dev/null
@@ -0,0 +1,11 @@
+# Galson keymap
+
+
+Sep 26, 2016.
+
+This is an ergonomic layout for programming for those with typing-related injuries. Key features:
+
+- As many symbol keys as possible are accessible without shifting. These should be accessed by moving the entire hand and pressing with a strong finger.
+- Arrow keys and left and right mouse clicks for mouse-free navigation when combined with head mouse or eyetracker.
+- Modifier keys are dual role and relocated to positions convenient for the index finger.
+- Positions are more convenient when the keyboard is vertically mounted (as it should be!)
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/german-kinergo/keymap.c b/keyboards/ergodox/keymaps/german-kinergo/keymap.c
new file mode 100644 (file)
index 0000000..971318d
--- /dev/null
@@ -0,0 +1,210 @@
+// German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan.
+//
+// chschmitz, 2016-01-27
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_german.h"
+
+// Layer names
+#define BASE 0 // default layer
+#define SYMB 1 // symbol layer
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * X'es mark the spots where this is different from the "german" layout which it is based on.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |X Esc  X|   1  |   2  |   3  |   4  |   5  |X `  X|           |XPRSCX|   6  |   7  |   8  |   9  |   0  |   ß    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |X Tab  X|   Q  |   W  |   E  |   R  |   T  |X L1 X|           |X L1 X|   Z  |   U  |   I  |   O  |   P  |   Ü    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  Caps  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ö  |  Ä/L2  |
+ * |--------+------+------+------+------+------|X L2 X|           |X L2 X|------+------+------+------+------+--------|
+ * | LShift |   Y  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |X -  X| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |XLGuiX|X  ^ X|X  < X|XLEFTX|XRIGHT|                                       |XDownX|X Up X|X #  X|X  + X|XRGuiX|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |XCTRLX|XALTX |       | Alt  |Ctrl/Esc|
+ *                                 ,------+------+------|       |------+--------+------.
+ *                                 |XXX   |XXX   | Home |       | PgUp |XXX     |XXX   |
+ *                                 | Bkspc|Del   |------|       |------|  Enter | Space|
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,         KC_1,           KC_2,     KC_3,     KC_4,     KC_5,   DE_ACUT,
+        KC_TAB,         KC_Q,           KC_W,     KC_E,     KC_R,     KC_T,   MO(1),
+        KC_CAPS,         KC_A,           KC_S,     KC_D,     KC_F,     KC_G,
+        KC_LSFT,         DE_Y,           KC_X,     KC_C,     KC_V,     KC_B,   MO(2),
+        KC_LGUI,      DE_CIRC, DE_LESS,  KC_LEFT,  KC_RIGHT,
+                                               KC_LCTRL, KC_LALT,
+                                                              KC_HOME,
+                                               KC_BSPC,KC_DELT,KC_END,
+        // right hand
+        KC_PSCREEN,  KC_6,   KC_7,    KC_8,    KC_9,   KC_0,             KC_MINS,
+        MO(1),       DE_Z,   KC_U,    KC_I,    KC_O,   KC_P,             DE_UE,
+                     KC_H,   KC_J,    KC_K,    KC_L,   DE_OE,            LT(MDIA,DE_AE),
+        MO(2),       KC_N,   KC_M,    KC_COMM, KC_DOT, DE_MINS,          KC_RSFT,
+                             KC_DOWN, KC_UP,   DE_HASH,  DE_PLUS,          KC_RGUI,
+        KC_RALT, KC_RCTRL,
+        KC_PGUP,
+        KC_PGDN, KC_ENT, KC_SPC
+    ),
+// [BASE] = KEYMAP(  // layer 0 : default
+//         // left hand
+//         KC_CIRC,         KC_1,           KC_2,     KC_3,     KC_4,     KC_5,   KC_MPLY,
+//         KC_DELT,         KC_Q,           KC_W,     KC_E,     KC_R,     KC_T,   TG(1),
+//         KC_CAPS,         KC_A,           KC_S,     KC_D,     KC_F,     KC_G,
+//         KC_LSFT,         DE_Y,           KC_X,     KC_C,     KC_V,     KC_B,   ALL_T(KC_NO),
+//         LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT,  DE_MINS,  DE_PLUS,
+//                                                ALT_T(KC_APP), KC_LGUI,
+//                                                               KC_HOME,
+//                                                KC_SPC,KC_BSPC,KC_END,
+//         // right hand
+//         KC_MNXT,     KC_6,   KC_7,    KC_8,    KC_9,   KC_0,             KC_MINS,
+//         TG(2),       DE_Z,   KC_U,    KC_I,    KC_O,   KC_P,             DE_UE,
+//                      KC_H,   KC_J,    KC_K,    KC_L,   DE_OE,            LT(MDIA,DE_AE),
+//         MEH_T(KC_NO),KC_N,   KC_M,    KC_COMM, KC_DOT, CTL_T(DE_MINS),   KC_RSFT,
+//                              KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT,          KC_FN1,
+//         KC_LALT,CTL_T(KC_ESC),
+//         KC_PGUP,
+//         KC_PGDN,KC_TAB, KC_ENT
+//     ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,DE_EXLM,DE_AT,  DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS,
+       KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV,
+       KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    DE_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    DE_PLUS, KC_TRNS,
+       KC_TRNS, DE_AMPR, KC_1,   KC_2,    KC_3,    DE_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    DE_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      | Lclk | MsUp | Rclk |      |      |           |      |      |VolDwn| Mute |VolUp |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------|           |------|      | Prev | Stop | Play | Next |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |WhRght|WhDown| WhUp |WhLeft|WhClk |      |           |      |BwSrch|BwBack|BwHome|BwRefr|BwFwd |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |MsAcl0|MsAcl1|MsAcl2|                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |Brwser|Brwser|
+ *                                 | Lclk | Rclk |------|       |------|Back  |Forwd |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
+       KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS, KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11,
+       KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
+                KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
+       KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_WBAK, KC_WFWD
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case SYMB:
+            ergodox_right_led_1_on();
+            break;
+        case MDIA:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            ergodox_board_led_off();
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/german-kinergo/layout-code.png b/keyboards/ergodox/keymaps/german-kinergo/layout-code.png
new file mode 100644 (file)
index 0000000..a0ef551
Binary files /dev/null and b/keyboards/ergodox/keymaps/german-kinergo/layout-code.png differ
diff --git a/keyboards/ergodox/keymaps/german-kinergo/layout-media.png b/keyboards/ergodox/keymaps/german-kinergo/layout-media.png
new file mode 100644 (file)
index 0000000..56aea1d
Binary files /dev/null and b/keyboards/ergodox/keymaps/german-kinergo/layout-media.png differ
diff --git a/keyboards/ergodox/keymaps/german-kinergo/layout.png b/keyboards/ergodox/keymaps/german-kinergo/layout.png
new file mode 100644 (file)
index 0000000..76a1aa5
Binary files /dev/null and b/keyboards/ergodox/keymaps/german-kinergo/layout.png differ
diff --git a/keyboards/ergodox/keymaps/german-kinergo/readme.md b/keyboards/ergodox/keymaps/german-kinergo/readme.md
new file mode 100644 (file)
index 0000000..557d85a
--- /dev/null
@@ -0,0 +1,35 @@
+# German Layout for the ErgoDox
+
+This layout is inspired by the "kinesis-qwerty-mod" from benblazak's
+[ergodox-firmware](https://github.com/benblazak/ergodox-firmware), as well as by the "german" layout from the 
+[qmk_firmware](https://github.com/jackhumbert/qmk_firmware).
+The goal was to have a layout that is pretty close to an ordinary German
+keyboard, so I don't have to make adjustments on the operating system level
+and I keep some of the muscle memory to use a regular keyboard.
+
+Modifications I made with regard to the aforementioned layouts:
+
+* The key layout is pretty close to the layout of a German Kinesis Ergo Elan.
+  The only exception I made is that I reversed the "up" and "down" cursor keys,
+  since that feels more natural to me.
+
+* All layer changes are "momentary", i.e. they only last as long as the respective key is pressed.
+
+* I sacrificed the Hyper and Meh keys, which I don't use, and put layer change keys in their place.
+
+* I added a PrintScreen key which I use quite regularly for screenshots.
+
+## Default Layer
+
+![Layout of the default layer](layout.png "Layout of the default layer")
+
+## Code Layer
+
+![Layout of the code layer](layout-code.png "Layout of the code layer")
+
+## Media Layer
+
+![Layout of the media layer](layout-media.png "Layout of the media layer")
+
+Christoph Schmitz &lt;schm4704 at web dot de&gt;
+2016-01-28
diff --git a/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py b/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py
new file mode 100644 (file)
index 0000000..7076a6e
--- /dev/null
@@ -0,0 +1,710 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Compiler for keymap.c files
+
+This scrip will generate a keymap.c file from a simple
+markdown file with a specific layout.
+
+Usage:
+    python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
+"""
+from __future__ import division
+from __future__ import print_function
+from __future__ import absolute_import
+from __future__ import unicode_literals
+
+import os
+import io
+import re
+import sys
+import json
+import unicodedata
+import collections
+import itertools as it
+
+PY2 = sys.version_info.major == 2
+
+if PY2:
+    chr = unichr
+
+
+KEYBOARD_LAYOUTS = {
+    # These map positions in the parsed layout to
+    # positions in the KEYMAP MATRIX
+    'ergodox_ez': [
+        [ 0,  1,  2,  3,  4,  5,  6],  [38, 39, 40, 41, 42, 43, 44],
+        [ 7,  8,  9, 10, 11, 12, 13],  [45, 46, 47, 48, 49, 50, 51],
+        [14, 15, 16, 17, 18, 19    ],  [    52, 53, 54, 55, 56, 57],
+        [20, 21, 22, 23, 24, 25, 26],  [58, 59, 60, 61, 62, 63, 64],
+        [27, 28, 29, 30, 31        ],  [        65, 66, 67, 68, 69],
+        [                    32, 33],  [70, 71                    ],
+        [                        34],  [72                        ],
+        [                35, 36, 37],  [73, 74, 75                ],
+    ]
+}
+
+ROW_INDENTS = {
+    'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0]
+}
+
+BLANK_LAYOUTS = [
+# Compact Layout
+"""
+.------------------------------------.------------------------------------.
+|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+|     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
+!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ |    |    |    |    |    |                     !    |    |    |    |    |
+ '------------------------'                     '------------------------'
+                        .-----------. .-----------.
+                        |     |     | !     |     |
+                  .-----+-----+-----! !-----+-----+-----.
+                  !     !     |     | !     |     !     !
+                  !     !     !-----! !-----!     !     !
+                  |     |     |     | !     |     |     |
+                  '-----------------' '-----------------'
+""",
+
+# Wide Layout
+"""
+.---------------------------------------------. .---------------------------------------------.
+|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
+!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
+!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
+|       |     |     |     |     |     |-------! !-------!     |     |     |     |     |       |
+!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
+|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
+'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ |      |     |     |     |     |                             !     |     |     |     |      |
+ '------------------------------'                             '------------------------------'
+                              .---------------. .---------------.
+                              |       |       | !       |       |
+                      .-------+-------+-------! !-------+-------+-------.
+                      !       !       |       | !       |       !       !
+                      !       !       !-------! !-------!       !       !
+                      |       |       |       | !       |       |       |
+                      '-----------------------' '-----------------------'
+""",
+]
+
+
+DEFAULT_CONFIG = {
+    "keymaps_includes": [
+        "keymap_common.h",
+    ],
+    'filler': "-+.'!:x",
+    'separator': "|",
+    'default_key_prefix': ["KC_"],
+}
+
+
+SECTIONS = [
+    'layout_config',
+    'layers',
+]
+
+
+#       Markdown Parsing
+
+ONELINE_COMMENT_RE = re.compile(r"""
+    ^                       # comment must be at the start of the line
+    \s*                     # arbitrary whitespace
+    //                      # start of the comment
+    (.*)                    # the comment
+    $                       # until the end of line
+""", re.MULTILINE | re.VERBOSE
+)
+
+INLINE_COMMENT_RE = re.compile(r"""
+    ([\,\"\[\]\{\}\d])      # anythig that might end a expression
+    \s+                     # comment must be preceded by whitespace
+    //                      # start of the comment
+    \s                      # and succeded by whitespace
+    (?:[^\"\]\}\{\[]*)      # the comment (except things which might be json)
+    $                       # until the end of line
+""", re.MULTILINE | re.VERBOSE)
+
+TRAILING_COMMA_RE = re.compile(r"""
+    ,                       # the comma
+    (?:\s*)                 # arbitrary whitespace
+    $                       # only works if the trailing comma is followed by newline
+    (\s*)                   # arbitrary whitespace
+    ([\]\}])                # end of an array or object
+""", re.MULTILINE | re.VERBOSE)
+
+
+def loads(raw_data):
+    if isinstance(raw_data, bytes):
+        raw_data = raw_data.decode('utf-8')
+
+    raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
+    raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
+    raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
+    return json.loads(raw_data)
+
+
+def parse_config(path):
+    def reset_section():
+        section.update({
+            'name': section.get('name', ""),
+            'sub_name': "",
+            'start_line': -1,
+            'end_line': -1,
+            'code_lines': [],
+        })
+
+    def start_section(line_index, line):
+        end_section()
+        if line.startswith("# "):
+            name = line[2:]
+        elif line.startswith("## "):
+            name = line[3:]
+        else:
+            name = ""
+
+        name = name.strip().replace(" ", "_").lower()
+        if name in SECTIONS:
+            section['name'] = name
+        else:
+            section['sub_name'] = name
+        section['start_line'] = line_index
+
+    def end_section():
+        if section['start_line'] >= 0:
+            if section['name'] == 'layout_config':
+                config.update(loads("\n".join(
+                    section['code_lines']
+                )))
+            elif section['sub_name'].startswith('layer'):
+                layer_name = section['sub_name']
+                config['layer_lines'][layer_name] = section['code_lines']
+
+        reset_section()
+
+    def amend_section(line_index, line):
+        section['end_line'] = line_index
+        section['code_lines'].append(line)
+
+    config = DEFAULT_CONFIG.copy()
+    config.update({
+        'layer_lines': collections.OrderedDict(),
+        'macro_ids': {'UM'},
+        'unicode_macros': {},
+    })
+
+    section = {}
+    reset_section()
+
+    with io.open(path, encoding="utf-8") as fh:
+        for i, line in enumerate(fh):
+            if line.startswith("#"):
+                start_section(i, line)
+            elif line.startswith("    "):
+                amend_section(i, line[4:])
+            else:
+                # TODO: maybe parse description
+                pass
+
+    end_section()
+    assert 'layout' in config
+    return config
+
+#       header file parsing
+
+IF0_RE = re.compile(r"""
+    ^
+    #if 0
+    $.*?
+    #endif
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+COMMENT_RE = re.compile(r"""
+    /\*
+    .*?
+    \*/"
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+def read_header_file(path):
+    with io.open(path, encoding="utf-8") as fh:
+        data = fh.read()
+    data, _ = COMMENT_RE.subn("", data)
+    data, _ = IF0_RE.subn("", data)
+    return data
+
+
+def regex_partial(re_str_fmt, flags):
+    def partial(*args, **kwargs):
+        re_str = re_str_fmt.format(*args, **kwargs)
+        return re.compile(re_str, flags)
+    return partial
+
+
+KEYDEF_REP = regex_partial(r"""
+    #define
+    \s
+    (
+        (?:{})          # the prefixes
+        (?:\w+)         # the key name
+    )                   # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+ENUM_RE = re.compile(r"""
+    (
+        enum
+        \s\w+\s
+        \{
+        .*?             # the enum content
+        \}
+        ;
+    )                   # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+ENUM_KEY_REP = regex_partial(r"""
+    (
+        {}              # the prefixes
+        \w+             # the key name
+    )                   # capture group end
+""", re.MULTILINE | re.DOTALL | re.VERBOSE)
+
+
+def parse_keydefs(config, data):
+    prefix_options = "|".join(config['key_prefixes'])
+    keydef_re = KEYDEF_REP(prefix_options)
+    enum_key_re = ENUM_KEY_REP(prefix_options)
+    for match in keydef_re.finditer(data):
+        yield match.groups()[0]
+
+    for enum_match in ENUM_RE.finditer(data):
+        enum = enum_match.groups()[0]
+        for key_match in enum_key_re.finditer(enum):
+            yield key_match.groups()[0]
+
+
+def parse_valid_keys(config, out_path):
+    basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
+    dirpaths = []
+    subpaths = []
+    while len(subpaths) < 6:
+        path = os.path.join(basepath, *subpaths)
+        dirpaths.append(path)
+        dirpaths.append(os.path.join(path, "tmk_core", "common"))
+        dirpaths.append(os.path.join(path, "quantum"))
+        subpaths.append('..')
+
+    includes = set(config['keymaps_includes'])
+    includes.add("keycode.h")
+
+    valid_keycodes = set()
+    for dirpath, include in it.product(dirpaths, includes):
+        include_path = os.path.join(dirpath, include)
+        if os.path.exists(include_path):
+            header_data = read_header_file(include_path)
+            valid_keycodes.update(
+                parse_keydefs(config, header_data)
+            )
+    return valid_keycodes
+
+
+#       Keymap Parsing
+
+def iter_raw_codes(layer_lines, filler, separator):
+    filler_re = re.compile("[" + filler + " ]")
+    for line in layer_lines:
+        line, _ = filler_re.subn("", line.strip())
+        if not line:
+            continue
+        codes = line.split(separator)
+        for code in codes[1:-1]:
+            yield code
+
+
+def iter_indexed_codes(raw_codes, key_indexes):
+    key_rows = {}
+    key_indexes_flat = []
+
+    for row_index, key_indexes in enumerate(key_indexes):
+        for key_index in key_indexes:
+            key_rows[key_index] = row_index
+        key_indexes_flat.extend(key_indexes)
+    assert len(raw_codes) == len(key_indexes_flat)
+    for raw_code, key_index in zip(raw_codes, key_indexes_flat):
+        # we keep track of the row mostly for layout purposes
+        yield raw_code, key_index, key_rows[key_index]
+
+
+LAYER_CHANGE_RE = re.compile(r"""
+    (DF|TG|MO)\(\d+\)
+""", re.VERBOSE)
+
+
+MACRO_RE = re.compile(r"""
+    M\(\w+\)
+""", re.VERBOSE)
+
+
+UNICODE_RE = re.compile(r"""
+    U[0-9A-F]{4}
+""", re.VERBOSE)
+
+
+NON_CODE = re.compile(r"""
+    ^[^A-Z0-9_]$
+""", re.VERBOSE)
+
+
+def parse_uni_code(raw_code):
+    macro_id = "UC_" + (
+        unicodedata.name(raw_code)
+        .replace(" ", "_")
+        .replace("-", "_")
+    )
+    code = "M({})".format(macro_id)
+    uc_hex = "{:04X}".format(ord(raw_code))
+    return code, macro_id, uc_hex
+
+
+def parse_key_code(raw_code, key_prefixes, valid_keycodes):
+    if raw_code in valid_keycodes:
+        return raw_code
+
+    for prefix in key_prefixes:
+        code = prefix + raw_code
+        if code in valid_keycodes:
+            return code
+
+
+def parse_code(raw_code, key_prefixes, valid_keycodes):
+    if not raw_code:
+        return 'KC_TRNS', None, None
+
+    if LAYER_CHANGE_RE.match(raw_code):
+        return raw_code, None, None
+
+    if MACRO_RE.match(raw_code):
+        macro_id = raw_code[2:-1]
+        return raw_code, macro_id, None
+
+    if UNICODE_RE.match(raw_code):
+        hex_code = raw_code[1:]
+        return parse_uni_code(chr(int(hex_code, 16)))
+
+    if NON_CODE.match(raw_code):
+        return parse_uni_code(raw_code)
+
+    code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
+    return code, None, None
+
+
+def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
+    keymap = {}
+    raw_codes = list(iter_raw_codes(
+        layer_lines, config['filler'], config['separator']
+    ))
+    indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
+    key_prefixes = config['key_prefixes']
+    for raw_code, key_index, row_index in indexed_codes:
+        code, macro_id, uc_hex = parse_code(
+            raw_code, key_prefixes, valid_keycodes
+        )
+        # TODO: line numbers for invalid codes
+        err_msg = "Could not parse key '{}' on row {}".format(
+            raw_code, row_index
+        )
+        assert code is not None, err_msg
+        # print(repr(raw_code), repr(code), macro_id, uc_hex)
+        if macro_id:
+            config['macro_ids'].add(macro_id)
+        if uc_hex:
+            config['unicode_macros'][macro_id] = uc_hex
+        keymap[key_index] = (code, row_index)
+    return keymap
+
+
+def parse_keymaps(config, valid_keycodes):
+    keymaps = collections.OrderedDict()
+    key_indexes = config.get(
+        'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
+    )
+    # TODO: maybe validate key_indexes
+
+    for layer_name, layer_lines, in config['layer_lines'].items():
+        keymaps[layer_name] = parse_keymap(
+            config, key_indexes, layer_lines, valid_keycodes
+        )
+    return keymaps
+
+#       keymap.c output
+
+USERCODE = """
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case L1:
+            ergodox_right_led_1_on();
+            break;
+        case L2:
+            ergodox_right_led_2_on();
+            break;
+        case L3:
+            ergodox_right_led_3_on();
+            break;
+        case L4:
+            ergodox_right_led_1_on();
+            ergodox_right_led_2_on();
+            break;
+        case L5:
+            ergodox_right_led_1_on();
+            ergodox_right_led_3_on();
+            break;
+        // case L6:
+        //     ergodox_right_led_2_on();
+        //     ergodox_right_led_3_on();
+        //     break;
+        // case L7:
+        //     ergodox_right_led_1_on();
+        //     ergodox_right_led_2_on();
+        //     ergodox_right_led_3_on();
+        //     break;
+        default:
+            ergodox_board_led_off();
+            break;
+    }
+};
+"""
+
+MACROCODE = """
+#define UC_MODE_WIN 0
+#define UC_MODE_LINUX 1
+#define UC_MODE_OSX 2
+
+// TODO: allow default mode to be configured
+static uint16_t unicode_mode = UC_MODE_WIN;
+
+uint16_t hextokeycode(uint8_t hex) {{
+    if (hex == 0x0) {{
+        return KC_P0;
+    }}
+    if (hex < 0xA) {{
+        return KC_P1 + (hex - 0x1);
+    }}
+    return KC_A + (hex - 0xA);
+}}
+
+void unicode_action_function(uint16_t hi, uint16_t lo) {{
+    switch (unicode_mode) {{
+    case UC_MODE_WIN:
+        register_code(KC_LALT);
+
+        register_code(KC_PPLS);
+        unregister_code(KC_PPLS);
+
+        register_code(hextokeycode((hi & 0xF0) >> 4));
+        unregister_code(hextokeycode((hi & 0xF0) >> 4));
+        register_code(hextokeycode((hi & 0x0F)));
+        unregister_code(hextokeycode((hi & 0x0F)));
+        register_code(hextokeycode((lo & 0xF0) >> 4));
+        unregister_code(hextokeycode((lo & 0xF0) >> 4));
+        register_code(hextokeycode((lo & 0x0F)));
+        unregister_code(hextokeycode((lo & 0x0F)));
+
+        unregister_code(KC_LALT);
+        break;
+    case UC_MODE_LINUX:
+        register_code(KC_LCTL);
+        register_code(KC_LSFT);
+
+        register_code(KC_U);
+        unregister_code(KC_U);
+
+        register_code(hextokeycode((hi & 0xF0) >> 4));
+        unregister_code(hextokeycode((hi & 0xF0) >> 4));
+        register_code(hextokeycode((hi & 0x0F)));
+        unregister_code(hextokeycode((hi & 0x0F)));
+        register_code(hextokeycode((lo & 0xF0) >> 4));
+        unregister_code(hextokeycode((lo & 0xF0) >> 4));
+        register_code(hextokeycode((lo & 0x0F)));
+        unregister_code(hextokeycode((lo & 0x0F)));
+
+        unregister_code(KC_LCTL);
+        unregister_code(KC_LSFT);
+        break;
+    case UC_MODE_OSX:
+        break;
+    }}
+}}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
+    if (!record->event.pressed) {{
+        return MACRO_NONE;
+    }}
+    // MACRODOWN only works in this function
+    switch(id) {{
+        case UM:
+            unicode_mode = (unicode_mode + 1) % 2;
+            break;
+{macro_cases}
+{unicode_macro_cases}
+        default:
+            break;
+    }}
+    return MACRO_NONE;
+}};
+"""
+
+
+UNICODE_MACRO_TEMPLATE = """
+case {macro_id}:
+    unicode_action_function(0x{hi:02x}, 0x{lo:02x});
+    break;
+""".strip()
+
+
+def unicode_macro_cases(config):
+    for macro_id, uc_hex in config['unicode_macros'].items():
+        hi = int(uc_hex, 16) >> 8
+        lo = int(uc_hex, 16) & 0xFF
+        unimacro_keys = ", ".join(
+            "T({})".format(
+                "KP_" + digit if digit.isdigit() else digit
+            ) for digit in uc_hex
+        )
+        yield UNICODE_MACRO_TEMPLATE.format(
+            macro_id=macro_id, hi=hi, lo=lo
+        )
+
+
+def iter_keymap_lines(keymap, row_indents=None):
+    col_widths = {}
+    col = 0
+    # first pass, figure out the column widths
+    prev_row_index = None
+    for code, row_index in keymap.values():
+        if row_index != prev_row_index:
+            col = 0
+            if row_indents:
+                col = row_indents[row_index]
+        col_widths[col] = max(len(code), col_widths.get(col, 0))
+        prev_row_index = row_index
+        col += 1
+
+    # second pass, yield the cell values
+    col = 0
+    prev_row_index = None
+    for key_index in sorted(keymap):
+        code, row_index = keymap[key_index]
+        if row_index != prev_row_index:
+            col = 0
+            yield "\n"
+            if row_indents:
+                for indent_col in range(row_indents[row_index]):
+                    pad = " " * (col_widths[indent_col] - 4)
+                    yield (" /*-*/" + pad)
+                col = row_indents[row_index]
+        else:
+            yield pad
+        yield " {}".format(code)
+        if key_index < len(keymap) - 1:
+            yield ","
+            # This will be yielded on the next iteration when
+            # we know that we're not at the end of a line.
+            pad = " " * (col_widths[col] - len(code))
+        prev_row_index = row_index
+        col += 1
+
+
+def iter_keymap_parts(config, keymaps):
+    # includes
+    for include_path in config['keymaps_includes']:
+        yield '#include "{}"\n'.format(include_path)
+
+    yield "\n"
+
+    # definitions
+    for i, macro_id in enumerate(sorted(config['macro_ids'])):
+        yield "#define {} {}\n".format(macro_id, i)
+
+    yield "\n"
+
+    for i, layer_name in enumerate(config['layer_lines']):
+        yield '#define L{0:<3} {0:<5}  // {1}\n'.format(i, layer_name)
+
+    yield "\n"
+
+    # keymaps
+    yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
+
+    for i, layer_name in enumerate(config['layer_lines']):
+        # comment
+        layer_lines = config['layer_lines'][layer_name]
+        prefixed_lines = " * " + " * ".join(layer_lines)
+        yield "/*\n{} */\n".format(prefixed_lines)
+
+        # keymap codes
+        keymap = keymaps[layer_name]
+        row_indents = ROW_INDENTS.get(config['layout'])
+        keymap_lines = "".join(iter_keymap_lines(keymap, row_indents))
+        yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
+
+    yield "};\n\n"
+
+    # no idea what this is for
+    yield "const uint16_t PROGMEM fn_actions[] = {};\n"
+
+    # macros
+    yield MACROCODE.format(
+        macro_cases="",
+        unicode_macro_cases="\n".join(unicode_macro_cases(config)),
+    )
+
+    # TODO: dynamically create blinking lights
+    yield USERCODE
+
+
+def main(argv=sys.argv[1:]):
+    if not argv or '-h' in argv or '--help' in argv:
+        print(__doc__)
+        return 0
+
+    in_path = os.path.abspath(argv[0])
+    if not os.path.exists(in_path):
+        print("No such file '{}'".format(in_path))
+        return 1
+
+    if len(argv) > 1:
+        out_path = os.path.abspath(argv[1])
+    else:
+        dirname = os.path.dirname(in_path)
+        out_path = os.path.join(dirname, "keymap.c")
+
+    config = parse_config(in_path)
+    valid_keys = parse_valid_keys(config, out_path)
+    keymaps = parse_keymaps(config, valid_keys)
+
+    with io.open(out_path, mode="w", encoding="utf-8") as fh:
+        for part in iter_keymap_parts(config, keymaps):
+            fh.write(part)
+
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/keyboards/ergodox/keymaps/german-manuneo/keymap.c b/keyboards/ergodox/keymaps/german-manuneo/keymap.c
new file mode 100644 (file)
index 0000000..16e92bc
--- /dev/null
@@ -0,0 +1,783 @@
+#include "ergodox.h"
+#include "action_layer.h"
+#include "keymap.h"
+#include "keymap_german.h"
+
+#define UC_ASYMPTOTICALLY_EQUAL_TO 0
+#define UC_DIVISION_SIGN 1
+#define UC_DOWNWARDS_ARROW 2
+#define UC_ELEMENT_OF 3
+#define UC_EMPTY_SET 4
+#define UC_FOR_ALL 5
+#define UC_GREEK_CAPITAL_LETTER_ALPHA 6
+#define UC_GREEK_CAPITAL_LETTER_BETA 7
+#define UC_GREEK_CAPITAL_LETTER_CHI 8
+#define UC_GREEK_CAPITAL_LETTER_DELTA 9
+#define UC_GREEK_CAPITAL_LETTER_EPSILON 10
+#define UC_GREEK_CAPITAL_LETTER_ETA 11
+#define UC_GREEK_CAPITAL_LETTER_GAMMA 12
+#define UC_GREEK_CAPITAL_LETTER_IOTA 13
+#define UC_GREEK_CAPITAL_LETTER_KAPPA 14
+#define UC_GREEK_CAPITAL_LETTER_LAMDA 15
+#define UC_GREEK_CAPITAL_LETTER_MU 16
+#define UC_GREEK_CAPITAL_LETTER_NU 17
+#define UC_GREEK_CAPITAL_LETTER_OMEGA 18
+#define UC_GREEK_CAPITAL_LETTER_OMICRON 19
+#define UC_GREEK_CAPITAL_LETTER_PHI 20
+#define UC_GREEK_CAPITAL_LETTER_PI 21
+#define UC_GREEK_CAPITAL_LETTER_PSI 22
+#define UC_GREEK_CAPITAL_LETTER_RHO 23
+#define UC_GREEK_CAPITAL_LETTER_SIGMA 24
+#define UC_GREEK_CAPITAL_LETTER_TAU 25
+#define UC_GREEK_CAPITAL_LETTER_THETA 26
+#define UC_GREEK_CAPITAL_LETTER_UPSILON 27
+#define UC_GREEK_CAPITAL_LETTER_XI 28
+#define UC_GREEK_CAPITAL_LETTER_ZETA 29
+#define UC_GREEK_SMALL_LETTER_ALPHA 30
+#define UC_GREEK_SMALL_LETTER_BETA 31
+#define UC_GREEK_SMALL_LETTER_CHI 32
+#define UC_GREEK_SMALL_LETTER_DELTA 33
+#define UC_GREEK_SMALL_LETTER_EPSILON 34
+#define UC_GREEK_SMALL_LETTER_ETA 35
+#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36
+#define UC_GREEK_SMALL_LETTER_GAMMA 37
+#define UC_GREEK_SMALL_LETTER_IOTA 38
+#define UC_GREEK_SMALL_LETTER_KAPPA 39
+#define UC_GREEK_SMALL_LETTER_LAMDA 40
+#define UC_GREEK_SMALL_LETTER_MU 41
+#define UC_GREEK_SMALL_LETTER_NU 42
+#define UC_GREEK_SMALL_LETTER_OMEGA 43
+#define UC_GREEK_SMALL_LETTER_OMICRON 44
+#define UC_GREEK_SMALL_LETTER_PHI 45
+#define UC_GREEK_SMALL_LETTER_PI 46
+#define UC_GREEK_SMALL_LETTER_PSI 47
+#define UC_GREEK_SMALL_LETTER_RHO 48
+#define UC_GREEK_SMALL_LETTER_SIGMA 49
+#define UC_GREEK_SMALL_LETTER_TAU 50
+#define UC_GREEK_SMALL_LETTER_THETA 51
+#define UC_GREEK_SMALL_LETTER_UPSILON 52
+#define UC_GREEK_SMALL_LETTER_XI 53
+#define UC_GREEK_SMALL_LETTER_ZETA 54
+#define UC_INFINITY 55
+#define UC_LEFTWARDS_ARROW 56
+#define UC_MULTIPLICATION_SIGN 57
+#define UC_NOT_AN_ELEMENT_OF 58
+#define UC_NOT_EQUAL_TO 59
+#define UC_PLUS_MINUS_SIGN 60
+#define UC_RIGHTWARDS_ARROW 61
+#define UC_SUBSCRIPT_EIGHT 62
+#define UC_SUBSCRIPT_FIVE 63
+#define UC_SUBSCRIPT_FOUR 64
+#define UC_SUBSCRIPT_NINE 65
+#define UC_SUBSCRIPT_ONE 66
+#define UC_SUBSCRIPT_SEVEN 67
+#define UC_SUBSCRIPT_SIX 68
+#define UC_SUBSCRIPT_THREE 69
+#define UC_SUBSCRIPT_TWO 70
+#define UC_SUBSCRIPT_ZERO 71
+#define UC_SUPERSCRIPT_EIGHT 72
+#define UC_SUPERSCRIPT_FIVE 73
+#define UC_SUPERSCRIPT_FOUR 74
+#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75
+#define UC_SUPERSCRIPT_NINE 76
+#define UC_SUPERSCRIPT_ONE 77
+#define UC_SUPERSCRIPT_SEVEN 78
+#define UC_SUPERSCRIPT_SIX 79
+#define UC_SUPERSCRIPT_THREE 80
+#define UC_SUPERSCRIPT_TWO 81
+#define UC_SUPERSCRIPT_ZERO 82
+#define UC_THERE_DOES_NOT_EXIST 83
+#define UC_THERE_EXISTS 84
+#define UC_UPWARDS_ARROW 85
+#define UC_VULGAR_FRACTION_ONE_EIGHTH 86
+#define UC_VULGAR_FRACTION_ONE_FIFTH 87
+#define UC_VULGAR_FRACTION_ONE_HALF 88
+#define UC_VULGAR_FRACTION_ONE_QUARTER 89
+#define UC_VULGAR_FRACTION_ONE_SIXTH 90
+#define UC_VULGAR_FRACTION_ONE_THIRD 91
+#define UC_VULGAR_FRACTION_THREE_QUARTERS 92
+#define UC_VULGAR_FRACTION_TWO_THIRDS 93
+#define UM 94
+
+#define L0   0      // layer_0
+#define L1   1      // layer_1
+#define L2   2      // layer_2
+#define L3   3      // layer_3
+#define L4   4      // layer_4
+#define L5   5      // layer_5
+#define L6   6      // layer_6
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * .------------------------------------.------------------------------------.
+ * |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT|
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |INS  |TG(2)| !M(UM)|DELT |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     | APP | ! PGUP|     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
+ *                   '-----------------' '-----------------'
+ */
+[L0] = KEYMAP(
+ MO(5),   DE_1,     DE_2,     DE_3,    DE_4,    DE_5,    DE_ACUT,
+ MO(4),   DE_X,     DE_P,     DE_F,    DE_W,    DE_G,    KC_HOME,
+ MO(1),   DE_U,     DE_I,     DE_A,    DE_E,    DE_O,
+ MO(3),   DE_UE,    DE_OE,    DE_AE,   DE_C,    DE_V,    KC_END,
+ KC_TRNS, KC_TRNS,  KC_LGUI,  KC_LALT, KC_LCTL,
+ /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    KC_INS,  TG(2),
+ /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    /*-*/    KC_APP,
+ /*-*/    /*-*/     /*-*/     /*-*/    KC_BSPC, KC_LSFT, KC_ESC,
+ DE_GRV,  DE_6,     DE_7,     DE_8,    DE_9,    DE_0,    DE_CIRC,
+ TG(2),   DE_H,     DE_J,     DE_K,    DE_L,    DE_Q,    DE_Z,
+ /*-*/    DE_S,     DE_N,     DE_R,    DE_T,    DE_D,    DE_SS,
+ KC_TAB,  DE_B,     DE_M,     DE_COMM, DE_DOT,  KC_UP,   DE_Y,
+ /*-*/    /*-*/     KC_RCTL,  KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT,
+ M(UM),   KC_DELT,
+ KC_PGUP,
+ KC_PGDN, KC_ENTER, KC_SPACE
+),
+/*
+ * .------------------------------------.------------------------------------.
+ * |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |    |    |    |                     !    |    | ←  | ↓  | →  |
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |     |     | !     |     |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     |     | !     |     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |     |     |     | !     |     |     |
+ *                   '-----------------' '-----------------'
+ */
+[L1] = KEYMAP(
+ KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS,               KC_TRNS,               KC_TRNS,
+ KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR,               DE_RCBR,               KC_TRNS,
+ KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC,               DE_RBRC,
+ KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL,  KC_TRNS,               KC_TRNS,               KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  KC_TRNS,               KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  /*-*/                  KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,               KC_TRNS,               KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,               DE_RING,               KC_TRNS,
+ KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS,               DE_DQOT,               KC_TRNS,
+ /*-*/    DE_DLR,  DE_LPRN, DE_RPRN, DE_TILD,               DE_QUOT,               DE_QST,
+ KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN,               M(UC_UPWARDS_ARROW),   KC_TRNS,
+ /*-*/    /*-*/    KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW),
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/*
+ * .------------------------------------.------------------------------------.
+ * |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT|
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |     |     | !     |     |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     |     | !     |     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |     |     |     | !     |     |     |
+ *                   '-----------------' '-----------------'
+ */
+[L2] = KEYMAP(
+ KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PEQL,
+ KC_TRNS, KC_TRNS, KC_P7,   KC_P8,   KC_P9,   KC_PAST, KC_PSLS,
+ /*-*/    KC_TRNS, KC_P4,   KC_P5,   KC_P6,   KC_PMNS, KC_PMNS,
+ KC_NLCK, KC_TRNS, KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PPLS,
+ /*-*/    /*-*/    KC_P0,   KC_PCMM, KC_PDOT, KC_PENT, KC_PENT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/*
+ * .------------------------------------.------------------------------------.
+ * |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |    |    |    |                     !    |    |    |    |    |
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |     |     | !     |     |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     |     | !     |     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |     |     |     | !     |     |     |
+ *                   '-----------------' '-----------------'
+ */
+[L3] = KEYMAP(
+ KC_TRNS, M(UC_SUPERSCRIPT_ONE),           M(UC_SUPERSCRIPT_TWO),                  M(UC_SUPERSCRIPT_THREE),          M(UC_SUPERSCRIPT_FOUR),               M(UC_SUPERSCRIPT_FIVE),          M(UC_FOR_ALL),
+ KC_TRNS, M(UC_MULTIPLICATION_SIGN),       M(UC_VULGAR_FRACTION_ONE_HALF),         M(UC_DIVISION_SIGN),              M(UC_VULGAR_FRACTION_ONE_QUARTER),    M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS,
+ KC_TRNS, KC_TRNS,                         M(UC_PLUS_MINUS_SIGN),                  DE_AT,                            DE_EURO,                              M(UC_EMPTY_SET),
+ KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO),                     M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO),   KC_TRNS,
+ KC_TRNS, KC_TRNS,                         KC_TRNS,                                KC_TRNS,                          KC_TRNS,
+ /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 KC_TRNS,                         KC_TRNS,
+ /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 /*-*/                            KC_TRNS,
+ /*-*/    /*-*/                            /*-*/                                   /*-*/                             KC_TRNS,                              KC_TRNS,                         KC_TRNS,
+ KC_TRNS, M(UC_SUPERSCRIPT_SIX),           M(UC_SUPERSCRIPT_SEVEN),                M(UC_SUPERSCRIPT_EIGHT),          M(UC_SUPERSCRIPT_NINE),               M(UC_SUPERSCRIPT_ZERO),          KC_TRNS,
+ KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS,                                M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS,                              KC_TRNS,                         KC_TRNS,
+ /*-*/    M(UC_INFINITY),                  M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS),               M(UC_ELEMENT_OF),                     KC_TRNS,                         KC_TRNS,
+ KC_TRNS, DE_EXLM,                         KC_TRNS,                                M(UC_THERE_DOES_NOT_EXIST),       M(UC_NOT_AN_ELEMENT_OF),              KC_TRNS,                         KC_TRNS,
+ /*-*/    /*-*/                            KC_TRNS,                                KC_TRNS,                          KC_TRNS,                              KC_TRNS,                         KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS,                         KC_TRNS
+),
+/*
+ * .------------------------------------.------------------------------------.
+ * |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |    |    |    |                     !    |    |    |    |    |
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |     |     | !     |     |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     |     | !     |     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |     |     |     | !     |     |     |
+ *                   '-----------------' '-----------------'
+ */
+[L4] = KEYMAP(
+ KC_TRNS, M(UC_SUBSCRIPT_ONE),              M(UC_SUBSCRIPT_TWO),            M(UC_SUBSCRIPT_THREE),          M(UC_SUBSCRIPT_FOUR),             M(UC_SUBSCRIPT_FIVE),             KC_TRNS,
+ KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI),     M(UC_GREEK_SMALL_LETTER_PI),    M(UC_GREEK_SMALL_LETTER_PHI),   M(UC_GREEK_SMALL_LETTER_OMEGA),   M(UC_GREEK_SMALL_LETTER_GAMMA),   KC_TRNS,
+ KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA),  M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON),
+ KC_TRNS, KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS,
+ KC_TRNS, KC_TRNS,                          KC_TRNS,                        KC_TRNS,                        KC_TRNS,
+ /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             KC_TRNS,                          KC_TRNS,
+ /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             /*-*/                             KC_TRNS,
+ /*-*/    /*-*/                             /*-*/                           /*-*/                           KC_TRNS,                          KC_TRNS,                          KC_TRNS,
+ KC_TRNS, M(UC_SUBSCRIPT_SIX),              M(UC_SUBSCRIPT_SEVEN),          M(UC_SUBSCRIPT_EIGHT),          M(UC_SUBSCRIPT_NINE),             M(UC_SUBSCRIPT_ZERO),             KC_TRNS,
+ KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA),     M(UC_GREEK_SMALL_LETTER_XI),    M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA),   KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_ZETA),
+ /*-*/    M(UC_GREEK_SMALL_LETTER_SIGMA),   M(UC_GREEK_SMALL_LETTER_NU),    M(UC_GREEK_SMALL_LETTER_RHO),   M(UC_GREEK_SMALL_LETTER_TAU),     M(UC_GREEK_SMALL_LETTER_DELTA),   M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA),
+ KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA),    M(UC_GREEK_SMALL_LETTER_MU),    KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_PSI),
+ /*-*/    /*-*/                             KC_TRNS,                        KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS,                          KC_TRNS
+),
+/*
+ * .------------------------------------.------------------------------------.
+ * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |    |    |    |                     !    |    |    |    |    |
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |     |     | !     |     |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     |     | !     |     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |     |     |     | !     |     |     |
+ *                   '-----------------' '-----------------'
+ */
+[L5] = KEYMAP(
+ KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
+ KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI),     M(UC_GREEK_CAPITAL_LETTER_PI),    M(UC_GREEK_CAPITAL_LETTER_PHI),   M(UC_GREEK_CAPITAL_LETTER_OMEGA),   M(UC_GREEK_CAPITAL_LETTER_GAMMA),   KC_TRNS,
+ KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA),  M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON),
+ KC_TRNS, KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
+ KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,
+ /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               KC_TRNS,                            KC_TRNS,
+ /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               /*-*/                               KC_TRNS,
+ /*-*/    /*-*/                               /*-*/                             /*-*/                             KC_TRNS,                            KC_TRNS,                            KC_TRNS,
+ KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
+ KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA),     M(UC_GREEK_CAPITAL_LETTER_XI),    M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA),   KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_ZETA),
+ /*-*/    M(UC_GREEK_CAPITAL_LETTER_SIGMA),   M(UC_GREEK_CAPITAL_LETTER_NU),    M(UC_GREEK_CAPITAL_LETTER_RHO),   M(UC_GREEK_CAPITAL_LETTER_TAU),     M(UC_GREEK_CAPITAL_LETTER_DELTA),   KC_TRNS,
+ KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA),    M(UC_GREEK_CAPITAL_LETTER_MU),    KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_PSI),
+ /*-*/    /*-*/                               KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS,                            KC_TRNS
+),
+/*
+ * .------------------------------------.------------------------------------.
+ * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+ * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+ * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
+ * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+ * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+ * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+ *  |    |    |    |    |    |                     !    |    |    |    |    |
+ *  '------------------------'                     '------------------------'
+ *                         .-----------. .-----------.
+ *                         |     |     | !     |     |
+ *                   .-----+-----+-----! !-----+-----+-----.
+ *                   !     !     |     | !     |     !     !
+ *                   !     !     !-----! !-----!     !     !
+ *                   |     |     |     | !     |     |     |
+ *                   '-----------------' '-----------------'
+ */
+[L6] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+ /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {};
+
+#define UC_MODE_WIN 0
+#define UC_MODE_LINUX 1
+#define UC_MODE_OSX 2
+
+// TODO: allow default mode to be configured
+static uint16_t unicode_mode = UC_MODE_WIN;
+
+uint16_t hextokeycode(uint8_t hex) {
+    if (hex == 0x0) {
+        return KC_P0;
+    }
+    if (hex < 0xA) {
+        return KC_P1 + (hex - 0x1);
+    }
+    return KC_A + (hex - 0xA);
+}
+
+void unicode_action_function(uint16_t hi, uint16_t lo) {
+    switch (unicode_mode) {
+    case UC_MODE_WIN:
+        register_code(KC_LALT);
+
+        register_code(KC_PPLS);
+        unregister_code(KC_PPLS);
+
+        register_code(hextokeycode((hi & 0xF0) >> 4));
+        unregister_code(hextokeycode((hi & 0xF0) >> 4));
+        register_code(hextokeycode((hi & 0x0F)));
+        unregister_code(hextokeycode((hi & 0x0F)));
+        register_code(hextokeycode((lo & 0xF0) >> 4));
+        unregister_code(hextokeycode((lo & 0xF0) >> 4));
+        register_code(hextokeycode((lo & 0x0F)));
+        unregister_code(hextokeycode((lo & 0x0F)));
+
+        unregister_code(KC_LALT);
+        break;
+    case UC_MODE_LINUX:
+        register_code(KC_LCTL);
+        register_code(KC_LSFT);
+
+        register_code(KC_U);
+        unregister_code(KC_U);
+
+        register_code(hextokeycode((hi & 0xF0) >> 4));
+        unregister_code(hextokeycode((hi & 0xF0) >> 4));
+        register_code(hextokeycode((hi & 0x0F)));
+        unregister_code(hextokeycode((hi & 0x0F)));
+        register_code(hextokeycode((lo & 0xF0) >> 4));
+        unregister_code(hextokeycode((lo & 0xF0) >> 4));
+        register_code(hextokeycode((lo & 0x0F)));
+        unregister_code(hextokeycode((lo & 0x0F)));
+
+        unregister_code(KC_LCTL);
+        unregister_code(KC_LSFT);
+        break;
+    case UC_MODE_OSX:
+        break;
+    }
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+    if (!record->event.pressed) {
+        return MACRO_NONE;
+    }
+    // MACRODOWN only works in this function
+    switch(id) {
+        case UM:
+            unicode_mode = (unicode_mode + 1) % 2;
+            break;
+
+case UC_GREEK_SMALL_LETTER_OMICRON:
+    unicode_action_function(0x03, 0xbf);
+    break;
+case UC_LEFTWARDS_ARROW:
+    unicode_action_function(0x21, 0x90);
+    break;
+case UC_GREEK_CAPITAL_LETTER_RHO:
+    unicode_action_function(0x03, 0xa1);
+    break;
+case UC_SUBSCRIPT_THREE:
+    unicode_action_function(0x20, 0x83);
+    break;
+case UC_VULGAR_FRACTION_ONE_EIGHTH:
+    unicode_action_function(0x21, 0x5b);
+    break;
+case UC_GREEK_SMALL_LETTER_LAMDA:
+    unicode_action_function(0x03, 0xbb);
+    break;
+case UC_VULGAR_FRACTION_ONE_THIRD:
+    unicode_action_function(0x21, 0x53);
+    break;
+case UC_GREEK_SMALL_LETTER_XI:
+    unicode_action_function(0x03, 0xbe);
+    break;
+case UC_THERE_DOES_NOT_EXIST:
+    unicode_action_function(0x22, 0x04);
+    break;
+case UC_SUPERSCRIPT_ONE:
+    unicode_action_function(0x00, 0xb9);
+    break;
+case UC_GREEK_SMALL_LETTER_BETA:
+    unicode_action_function(0x03, 0xb2);
+    break;
+case UC_SUBSCRIPT_FIVE:
+    unicode_action_function(0x20, 0x85);
+    break;
+case UC_GREEK_CAPITAL_LETTER_IOTA:
+    unicode_action_function(0x03, 0x99);
+    break;
+case UC_VULGAR_FRACTION_ONE_FIFTH:
+    unicode_action_function(0x21, 0x55);
+    break;
+case UC_GREEK_SMALL_LETTER_PSI:
+    unicode_action_function(0x03, 0xc8);
+    break;
+case UC_SUBSCRIPT_NINE:
+    unicode_action_function(0x20, 0x89);
+    break;
+case UC_SUPERSCRIPT_FOUR:
+    unicode_action_function(0x20, 0x74);
+    break;
+case UC_RIGHTWARDS_ARROW:
+    unicode_action_function(0x21, 0x92);
+    break;
+case UC_SUPERSCRIPT_SIX:
+    unicode_action_function(0x20, 0x76);
+    break;
+case UC_DOWNWARDS_ARROW:
+    unicode_action_function(0x21, 0x93);
+    break;
+case UC_GREEK_SMALL_LETTER_PI:
+    unicode_action_function(0x03, 0xc0);
+    break;
+case UC_SUPERSCRIPT_TWO:
+    unicode_action_function(0x00, 0xb2);
+    break;
+case UC_GREEK_CAPITAL_LETTER_OMEGA:
+    unicode_action_function(0x03, 0xa9);
+    break;
+case UC_GREEK_CAPITAL_LETTER_PSI:
+    unicode_action_function(0x03, 0xa8);
+    break;
+case UC_SUBSCRIPT_FOUR:
+    unicode_action_function(0x20, 0x84);
+    break;
+case UC_GREEK_CAPITAL_LETTER_NU:
+    unicode_action_function(0x03, 0x9d);
+    break;
+case UC_DIVISION_SIGN:
+    unicode_action_function(0x00, 0xf7);
+    break;
+case UC_GREEK_SMALL_LETTER_SIGMA:
+    unicode_action_function(0x03, 0xc3);
+    break;
+case UC_GREEK_SMALL_LETTER_RHO:
+    unicode_action_function(0x03, 0xc1);
+    break;
+case UC_VULGAR_FRACTION_ONE_SIXTH:
+    unicode_action_function(0x21, 0x59);
+    break;
+case UC_GREEK_SMALL_LETTER_GAMMA:
+    unicode_action_function(0x03, 0xb3);
+    break;
+case UC_VULGAR_FRACTION_TWO_THIRDS:
+    unicode_action_function(0x21, 0x54);
+    break;
+case UC_GREEK_SMALL_LETTER_NU:
+    unicode_action_function(0x03, 0xbd);
+    break;
+case UC_GREEK_SMALL_LETTER_ZETA:
+    unicode_action_function(0x03, 0xb6);
+    break;
+case UC_GREEK_SMALL_LETTER_EPSILON:
+    unicode_action_function(0x03, 0xb5);
+    break;
+case UC_GREEK_SMALL_LETTER_KAPPA:
+    unicode_action_function(0x03, 0xba);
+    break;
+case UC_SUPERSCRIPT_SEVEN:
+    unicode_action_function(0x20, 0x77);
+    break;
+case UC_GREEK_CAPITAL_LETTER_PI:
+    unicode_action_function(0x03, 0xa0);
+    break;
+case UC_GREEK_SMALL_LETTER_FINAL_SIGMA:
+    unicode_action_function(0x03, 0xc2);
+    break;
+case UC_GREEK_CAPITAL_LETTER_XI:
+    unicode_action_function(0x03, 0x9e);
+    break;
+case UC_GREEK_SMALL_LETTER_THETA:
+    unicode_action_function(0x03, 0xb8);
+    break;
+case UC_GREEK_SMALL_LETTER_ETA:
+    unicode_action_function(0x03, 0xb7);
+    break;
+case UC_SUBSCRIPT_TWO:
+    unicode_action_function(0x20, 0x82);
+    break;
+case UC_ASYMPTOTICALLY_EQUAL_TO:
+    unicode_action_function(0x22, 0x43);
+    break;
+case UC_GREEK_SMALL_LETTER_ALPHA:
+    unicode_action_function(0x03, 0xb1);
+    break;
+case UC_GREEK_CAPITAL_LETTER_PHI:
+    unicode_action_function(0x03, 0xa6);
+    break;
+case UC_GREEK_SMALL_LETTER_PHI:
+    unicode_action_function(0x03, 0xc6);
+    break;
+case UC_INFINITY:
+    unicode_action_function(0x22, 0x1e);
+    break;
+case UC_GREEK_CAPITAL_LETTER_OMICRON:
+    unicode_action_function(0x03, 0x9f);
+    break;
+case UC_ELEMENT_OF:
+    unicode_action_function(0x22, 0x08);
+    break;
+case UC_MULTIPLICATION_SIGN:
+    unicode_action_function(0x00, 0xd7);
+    break;
+case UC_SUBSCRIPT_ZERO:
+    unicode_action_function(0x20, 0x80);
+    break;
+case UC_GREEK_CAPITAL_LETTER_SIGMA:
+    unicode_action_function(0x03, 0xa3);
+    break;
+case UC_GREEK_SMALL_LETTER_OMEGA:
+    unicode_action_function(0x03, 0xc9);
+    break;
+case UC_SUBSCRIPT_ONE:
+    unicode_action_function(0x20, 0x81);
+    break;
+case UC_GREEK_CAPITAL_LETTER_ZETA:
+    unicode_action_function(0x03, 0x96);
+    break;
+case UC_GREEK_SMALL_LETTER_TAU:
+    unicode_action_function(0x03, 0xc4);
+    break;
+case UC_SUPERSCRIPT_FIVE:
+    unicode_action_function(0x20, 0x75);
+    break;
+case UC_THERE_EXISTS:
+    unicode_action_function(0x22, 0x03);
+    break;
+case UC_PLUS_MINUS_SIGN:
+    unicode_action_function(0x00, 0xb1);
+    break;
+case UC_VULGAR_FRACTION_THREE_QUARTERS:
+    unicode_action_function(0x00, 0xbe);
+    break;
+case UC_SUPERSCRIPT_THREE:
+    unicode_action_function(0x00, 0xb3);
+    break;
+case UC_EMPTY_SET:
+    unicode_action_function(0x22, 0x05);
+    break;
+case UC_UPWARDS_ARROW:
+    unicode_action_function(0x21, 0x91);
+    break;
+case UC_SUPERSCRIPT_NINE:
+    unicode_action_function(0x20, 0x79);
+    break;
+case UC_GREEK_SMALL_LETTER_DELTA:
+    unicode_action_function(0x03, 0xb4);
+    break;
+case UC_GREEK_SMALL_LETTER_MU:
+    unicode_action_function(0x03, 0xbc);
+    break;
+case UC_GREEK_CAPITAL_LETTER_KAPPA:
+    unicode_action_function(0x03, 0x9a);
+    break;
+case UC_SUBSCRIPT_EIGHT:
+    unicode_action_function(0x20, 0x88);
+    break;
+case UC_GREEK_CAPITAL_LETTER_ALPHA:
+    unicode_action_function(0x03, 0x91);
+    break;
+case UC_SUBSCRIPT_SEVEN:
+    unicode_action_function(0x20, 0x87);
+    break;
+case UC_GREEK_CAPITAL_LETTER_BETA:
+    unicode_action_function(0x03, 0x92);
+    break;
+case UC_GREEK_CAPITAL_LETTER_ETA:
+    unicode_action_function(0x03, 0x97);
+    break;
+case UC_SUPERSCRIPT_EIGHT:
+    unicode_action_function(0x20, 0x78);
+    break;
+case UC_SUPERSCRIPT_ZERO:
+    unicode_action_function(0x20, 0x70);
+    break;
+case UC_NOT_AN_ELEMENT_OF:
+    unicode_action_function(0x22, 0x09);
+    break;
+case UC_GREEK_SMALL_LETTER_UPSILON:
+    unicode_action_function(0x03, 0xc5);
+    break;
+case UC_NOT_EQUAL_TO:
+    unicode_action_function(0x22, 0x60);
+    break;
+case UC_GREEK_CAPITAL_LETTER_CHI:
+    unicode_action_function(0x03, 0xa7);
+    break;
+case UC_FOR_ALL:
+    unicode_action_function(0x22, 0x00);
+    break;
+case UC_GREEK_CAPITAL_LETTER_TAU:
+    unicode_action_function(0x03, 0xa4);
+    break;
+case UC_VULGAR_FRACTION_ONE_QUARTER:
+    unicode_action_function(0x00, 0xbc);
+    break;
+case UC_GREEK_SMALL_LETTER_CHI:
+    unicode_action_function(0x03, 0xc7);
+    break;
+case UC_GREEK_CAPITAL_LETTER_THETA:
+    unicode_action_function(0x03, 0x98);
+    break;
+case UC_GREEK_SMALL_LETTER_IOTA:
+    unicode_action_function(0x03, 0xb9);
+    break;
+case UC_GREEK_CAPITAL_LETTER_LAMDA:
+    unicode_action_function(0x03, 0x9b);
+    break;
+case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N:
+    unicode_action_function(0x20, 0x7f);
+    break;
+case UC_GREEK_CAPITAL_LETTER_UPSILON:
+    unicode_action_function(0x03, 0xa5);
+    break;
+case UC_GREEK_CAPITAL_LETTER_MU:
+    unicode_action_function(0x03, 0x9c);
+    break;
+case UC_GREEK_CAPITAL_LETTER_EPSILON:
+    unicode_action_function(0x03, 0x95);
+    break;
+case UC_GREEK_CAPITAL_LETTER_GAMMA:
+    unicode_action_function(0x03, 0x93);
+    break;
+case UC_SUBSCRIPT_SIX:
+    unicode_action_function(0x20, 0x86);
+    break;
+case UC_GREEK_CAPITAL_LETTER_DELTA:
+    unicode_action_function(0x03, 0x94);
+    break;
+case UC_VULGAR_FRACTION_ONE_HALF:
+    unicode_action_function(0x00, 0xbd);
+    break;
+        default:
+            break;
+    }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case L1:
+            ergodox_right_led_1_on();
+            break;
+        case L2:
+            ergodox_right_led_2_on();
+            break;
+        case L3:
+            ergodox_right_led_3_on();
+            break;
+        case L4:
+            ergodox_right_led_1_on();
+            ergodox_right_led_2_on();
+            break;
+        case L5:
+            ergodox_right_led_1_on();
+            ergodox_right_led_3_on();
+            break;
+        // case L6:
+        //     ergodox_right_led_2_on();
+        //     ergodox_right_led_3_on();
+        //     break;
+        // case L7:
+        //     ergodox_right_led_1_on();
+        //     ergodox_right_led_2_on();
+        //     ergodox_right_led_3_on();
+        //     break;
+        default:
+            ergodox_board_led_off();
+            break;
+    }
+};
diff --git a/keyboards/ergodox/keymaps/german-manuneo/keymap.md b/keyboards/ergodox/keymaps/german-manuneo/keymap.md
new file mode 100644 (file)
index 0000000..837b254
--- /dev/null
@@ -0,0 +1,188 @@
+# ManuNeo Ergodox Keyboard Layout
+
+Compile this file to a `keymap.c` file using `compile_keymap.py`
+
+    python compile_keymap.py keymaps/german-manuneo/keymap.md
+
+Tested with python 2.7 and python 3.4
+
+
+# Layout Config
+
+    {
+        "layout": "ergodox_ez",
+        "keymaps_includes": [
+            "ergodox.h",
+            "action_layer.h",
+            "keymap_common.h",
+            "keymap_extras/keymap_german.h",
+        ],
+        "key_prefixes": ["DE_", "KC_"],
+        "macros": {
+            // TODO: implement macros
+            // "MUC": "",
+        },
+        // TODO: implement default unicode mode
+    }
+
+
+# Layers
+
+
+## Layer 0
+
+    .------------------------------------.------------------------------------.
+    |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT|
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |INS  |TG(2)| !M(UM)|DELT |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     | APP | ! PGUP|     !     !
+                      !     !     !-----! !-----!     !     !
+                      |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
+                      '-----------------' '-----------------'
+
+
+## Layer 1
+
+    .------------------------------------.------------------------------------.
+    |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |    |    |    |                     !    |    | ←  | ↓  | →  |
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |     |     | !     |     |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     |     | !     |     !     !
+                      !     !     !-----! !-----!     !     !
+                      |     |     |     | !     |     |     |
+                      '-----------------' '-----------------'
+
+
+## Layer 2
+
+    .------------------------------------.------------------------------------.
+    |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT|
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |     |     | !     |     |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     |     | !     |     !     !
+                      !     !     !-----! !-----!     !     !
+                      |     |     |     | !     |     |     |
+                      '-----------------' '-----------------'
+
+
+
+## Layer 3
+
+http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html
+
+    .------------------------------------.------------------------------------.
+    |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |    |    |    |                     !    |    |    |    |    |
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |     |     | !     |     |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     |     | !     |     !     !
+                      !     !     !-----! !-----!     !     !
+                      |     |     |     | !     |     |     |
+                      '-----------------' '-----------------'
+
+
+## Layer 4
+
+
+    .------------------------------------.------------------------------------.
+    |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |    |    |    |                     !    |    |    |    |    |
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |     |     | !     |     |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     |     | !     |     !     !
+                      !     !     !-----! !-----!     !     !
+                      |     |     |     | !     |     |     |
+                      '-----------------' '-----------------'
+
+
+## Layer 5
+
+    .------------------------------------.------------------------------------.
+    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |    |    |    |                     !    |    |    |    |    |
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |     |     | !     |     |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     |     | !     |     !     !
+                      !     !     !-----! !-----!     !     !
+                      |     |     |     | !     |     |     |
+                      '-----------------' '-----------------'
+
+
+## Layer 6
+
+    .------------------------------------.------------------------------------.
+    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
+    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
+    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
+    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
+    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
+     |    |    |    |    |    |                     !    |    |    |    |    |
+     '------------------------'                     '------------------------'
+                            .-----------. .-----------.
+                            |     |     | !     |     |
+                      .-----+-----+-----! !-----+-----+-----.
+                      !     !     |     | !     |     !     !
+                      !     !     !-----! !-----!     !     !
+                      |     |     |     | !     |     |     |
+                      '-----------------' '-----------------'
+
diff --git a/keyboards/ergodox/keymaps/german/keymap.c b/keyboards/ergodox/keymaps/german/keymap.c
new file mode 100644 (file)
index 0000000..9b2f6ff
--- /dev/null
@@ -0,0 +1,185 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_german.h"
+
+// Layer names
+#define BASE 0 // default layer
+#define SYMB 1 // symbol layer
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   ^    |   1  |   2  |   3  |   4  |   5  | Play |           | Next |   6  |   7  |   8  |   9  |   0  |   ß    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  Del   |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L2  |   Z  |   U  |   I  |   O  |   P  |   Ü    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  Caps  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ö  |  Ä/L2  |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Y  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |-/Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | </L1 |#/Ctrl|   ´  |   -  |   +  |                                       | Right| Down |  Up  | Left | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------+------+------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_CIRC,         KC_1,           KC_2,     KC_3,     KC_4,     KC_5,   KC_MPLY,
+        KC_DELT,         KC_Q,           KC_W,     KC_E,     KC_R,     KC_T,   TG(1),
+        KC_CAPS,         KC_A,           KC_S,     KC_D,     KC_F,     KC_G,
+        KC_LSFT,         DE_Y,           KC_X,     KC_C,     KC_V,     KC_B,   ALL_T(KC_NO),
+        LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT,  DE_MINS,  DE_PLUS,
+                                               ALT_T(KC_APP), KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+        KC_MNXT,     KC_6,   KC_7,    KC_8,    KC_9,   KC_0,             KC_MINS,
+        TG(2),       DE_Z,   KC_U,    KC_I,    KC_O,   KC_P,             DE_UE,
+                     KC_H,   KC_J,    KC_K,    KC_L,   DE_OE,            LT(MDIA,DE_AE),
+        MEH_T(KC_NO),KC_N,   KC_M,    KC_COMM, KC_DOT, CTL_T(DE_MINS),   KC_RSFT,
+                             KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT,          KC_FN1,
+        KC_LALT,CTL_T(KC_ESC),
+        KC_PGUP,
+        KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,DE_EXLM,DE_AT,  DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS,
+       KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV,
+       KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    DE_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    DE_PLUS, KC_TRNS,
+       KC_TRNS, DE_AMPR, KC_1,   KC_2,    KC_3,    DE_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    DE_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      | Lclk | MsUp | Rclk |      |      |           |      |      |VolDwn| Mute |VolUp |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------|           |------|      | Prev | Stop | Play | Next |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |WhRght|WhDown| WhUp |WhLeft|WhClk |      |           |      |BwSrch|BwBack|BwHome|BwRefr|BwFwd |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |MsAcl0|MsAcl1|MsAcl2|                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |Brwser|Brwser|
+ *                                 | Lclk | Rclk |------|       |------|Back  |Forwd |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
+       KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS, KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11,
+       KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
+                KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
+       KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_WBAK, KC_WFWD
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case SYMB:
+            ergodox_right_led_1_on();
+            break;
+        case MDIA:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            ergodox_board_led_off();
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/j3rn/keymap.c b/keyboards/ergodox/keymaps/j3rn/keymap.c
new file mode 100644 (file)
index 0000000..2069f26
--- /dev/null
@@ -0,0 +1,188 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Grv    |   1  |   2  |   3  |   4  |   5  |  [   |           |  ]   |   6  |   7  |   8  |   9  |   0  |  BkSp  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  -   |           |  =   |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | ~L1  | Alt  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | Home |       | PgUp |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 |Space | LGui |------|       |------|  Tab   |Enter |
+ *                                 |      |      | ~L2  |       | ~L1  |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LBRC,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_MINS,
+        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        MO(SYMB),       KC_LALT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+
+                                              ALT_T(KC_APP),  KC_HOME,
+                                                              KC_END,
+                                               KC_SPC,KC_LGUI,MO(MDIA),
+        // right hand
+             KC_RBRC,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSPC,
+             KC_EQL,      KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          KC_QUOT,
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          MO(SYMB),
+
+             KC_PGUP,         CTL_T(KC_ESC),
+             KC_PGDN,
+             MO(SYMB),KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |   0  |   0  |   .  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_TRNS,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_0,   KC_0,    KC_DOT,  KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Lclk | Rclk |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_F12,
+                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),               // FN1 - Momentary Layer 1 (Symbols)
+    [2] = ACTION_LAYER_TAP_TOGGLE(MDIA)                // FN2 - Momentary Layer 2 (Media)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/j3rn/readme.md b/keyboards/ergodox/keymaps/j3rn/readme.md
new file mode 100644 (file)
index 0000000..178aba7
--- /dev/null
@@ -0,0 +1,32 @@
+# J3RN's Mac-Centric ErgoDox EZ keymap
+
+## Motivation
+
+Essentially, I wanted to switch to a layout that was less jarring than the default ErgoDox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key).
+
+## How is it different from the default ErgoDox EZ layout?
+
+This layout more closely resembles that of the Mac keyboard, and has some other goodness baked in. Here is a rundown of what that means:
+
+### Mac-like changes
+
+- **The key to the left of "1" is "~" instead of "=".**
+- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately.
+- **The key to the left of "Q" is Tab instead of Delete.**
+- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.**
+- **The key to the left of Alt-Shift is an Alt key**. This is close to it's position on the Mac keyboard, though slightly further left.
+
+### Other changes
+
+- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a  CAPS LOCK key. This is the Ctrl key I find myself using most.
+- **Mouse uses Vim-style navigation**. To activate "Media mode," hold the 'a' key. This allows you to move the mouse around with hjkl just like in Vim. Additionally, right and left click are the conveniently placed 'i' and 'o' keys.
+- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach.
+- **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better.
+- **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold."
+- **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful.
+- **The Page Up and Page Down buttons have been shifted up on the right thumb.** I don't use either of these keys often, and wanted to free up some real estate.
+- **The bottommost-inner keys on the left and right thumb are momentary L2 and momentary L1, respectively**. I have found that both modes are useful, and this seemed like a reasonably accessible place to put these.
+- **Traditional numpad layout.** The base of most numpads is a double-wide "0" key to the left of a "." key. This is reflected in my layout by having two "0" keys to the left of a "." key.
+- **The function keys (F1-F12) have been moved to L2.** They were in the way in L1.
+
+**I'm always open to feedback and/or suggestions!**
diff --git a/keyboards/ergodox/keymaps/jack/Makefile b/keyboards/ergodox/keymaps/jack/Makefile
new file mode 100644 (file)
index 0000000..3ca69bb
--- /dev/null
@@ -0,0 +1,6 @@
+RGBLIGHT_ENABLE ?= yes
+MIDI_ENABLE ?= yes
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/jack/config.h b/keyboards/ergodox/keymaps/jack/config.h
new file mode 100644 (file)
index 0000000..5c11652
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 15     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 255
+#define RGBLIGHT_VAL_STEP 12
+
+#define RGB_MIDI
+#define RGBW_BB_TWI
+
+#endif
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c
new file mode 100644 (file)
index 0000000..9cb80c5
--- /dev/null
@@ -0,0 +1,128 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+// TODO: Define layer names that make sense for the ErgoDox EZ.
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_NO,          KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_NO,
+        KC_ESC,         KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_NO,
+        KC_NO,          KC_LCTL,      KC_LALT,KC_LGUI, MO(2),
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_SPC,KC_END,
+        // right hand
+             KC_NO,     M(1),   KC_7,   KC_8,   KC_9,   KC_0,             KC_NO,
+             KC_NO,     RGB_TOG,   RGB_MOD,   RGB_HUI,   RGB_HUD,   KC_P,             KC_BSPC,
+                        RGB_SAI,   RGB_SAD,   RGB_VAI,   RGB_VAD,   KC_SCLN,          KC_QUOT,
+             KC_NO,     KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_ENT,
+                                  MO(1), KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,  
+             RGB_TOG,        RGB_HUI,
+             RGB_MOD,
+             M(2), KC_SPC,KC_SPC
+    ),
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,  KC_TRNS,
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5, 
+       KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+                KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+       KC_TRNS, KC_F12,  KC_NO,   KC_NO, KC_NO, RESET,   KC_TRNS,
+                         KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, 
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS,
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  
+       KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+                 KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+       KC_TRNS,  KC_F12,  KC_NO,   KC_NO, KC_NO, RESET,   KC_TRNS,
+                          KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, 
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+        case 1:
+        if (record->event.pressed) { // For resetting EEPROM
+          eeconfig_init();
+        }
+        break;
+        case 2:
+        if (record->event.pressed) { // For resetting EEPROM
+          api_send_unicode(0x0CA0);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png b/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png
new file mode 100644 (file)
index 0000000..06f63c4
Binary files /dev/null and b/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png differ
diff --git a/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png b/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png
new file mode 100644 (file)
index 0000000..4dd7182
Binary files /dev/null and b/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png differ
diff --git a/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png b/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png
new file mode 100644 (file)
index 0000000..ee224cf
Binary files /dev/null and b/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png differ
diff --git a/keyboards/ergodox/keymaps/jacobono/keymap.c b/keyboards/ergodox/keymaps/jacobono/keymap.c
new file mode 100644 (file)
index 0000000..dc7382b
--- /dev/null
@@ -0,0 +1,273 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define COLEMAK 0 // new colemak layout
+#define QWERTY 1 // default layer
+#define SYMB 2 // symbols
+#define NUMPAD 3 // number pad
+#define MDIA 4 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       /* Keymap 0: Basic COLEMAK layer
+        *
+        * ,--------------------------------------------------.           ,--------------------------------------------------.
+        * |        |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |        |
+        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+        * | Tab    |   Q  |   W  |   F  |   P  |   G  |      |           |      |   J  |   L  |   U  |   Y  |   ;  |  TAB   |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * | BkSp   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |   O  |  DEL   |
+        * |--------+------+------+------+------+------|      |          LGUI(TAB)------+------+------+------+------+--------|
+        * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
+        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+        *   |  L1  |      |      | UP   |MO(L2)|                                       |MO(L2)| Down |      |  ALT | RGUI   |
+        *   `----------------------------------'                                       `------------------------------------'
+        *                                        ,-------------.       ,---------------.
+        *                                        | LGUI | App  |       |Ctrl/Esc|  Alt |
+        *                                 ,------|------|------|       |--------+--------+------.
+        *                                 |      |      |QUKSL |       |  QUKSL |        |      |
+   *                                 |Space |ENTER |------|       |--------| ENTER  |Space |
+        *                                 |      |      |MO(L3)|       | MO(L3) |        |      |
+        *                                 `--------------------'       `------------------------'
+        */
+
+       // If it accepts an argument (i.e, is a function), it doesn't need KC_.
+       // Otherwise, it needs KC_*
+       [COLEMAK] = KEYMAP(  // layer 0 : Colemak layout default layer
+           // left hand
+            KC_TRNS,        KC_1,         KC_2,   KC_3,   KC_4,    KC_5,   KC_LEFT,
+            KC_TAB,         KC_Q,         KC_W,   KC_F,   KC_P,    KC_G,   KC_TRNS,
+            KC_BSPC,        KC_A,         KC_R,   KC_S,   KC_T,    KC_D,
+            KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,    KC_B,   KC_TRNS,
+            TG(QWERTY),     KC_TRNS,      KC_TRNS,KC_UP,  MO(SYMB),
+            KC_LGUI,        KC_APP,
+            LGUI(S(KC_SPC)),
+            KC_SPC,KC_ENT,MO(NUMPAD),
+           // right hand
+            KC_RGHT,      KC_6,    KC_7,    KC_8,    KC_9,   KC_0,              KC_DELT,
+            KC_TRNS,      KC_J,    KC_L,    KC_U,    KC_Y,   KC_SCLN,           KC_TAB,
+            KC_H,         KC_N,    KC_E,    KC_I,    KC_O,   KC_DEL,
+            LGUI(KC_TAB), KC_K,    KC_M,    KC_COMM, KC_DOT, CTL_T(KC_SLSH),    KC_RSFT,
+            MO(SYMB),     KC_DOWN, KC_TRNS, KC_RALT, KC_RGUI,
+            CTL_T(KC_ESC), KC_LALT,
+            LGUI(S(KC_SPC)),
+            MO(NUMPAD), KC_ENT, KC_SPC),
+
+       /* Keymap 1: Basic QWERTY layer
+        *
+        * ,--------------------------------------------------.           ,--------------------------------------------------.
+        * | BkSp   |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   DEL  |
+        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+        * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L0  |           |  L0  |   Y  |   U  |   I  |   O  |   P  |   \    |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+   * | Ctrl   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L4|  CTRL  |
+   * |--------+------+------+------+------+------| Alt  |           | Alt  |------+------+------+------+------+--------|
+   * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+   * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+   *   |Grv/L3|  '"  |AltShf| Left |MO(L2)|                                       |MO(L2)| Down |   [  |   ]  | ~L3  |
+   *   `----------------------------------'                                       `----------------------------------'
+   *                                        ,-------------.       ,---------------.
+   *                                        | Tab  | BkSp |       | Alt  |Ctrl/Esc|
+   *                                 ,------|------|------|       |------+--------+------.
+   *                                 |      |      | Home |       | PgUp |        |      |
+   *                                 | Space| LGUI |------|       |------|  RGUI  |Enter |
+   *                                 |      |      | End  |       | PgDn |        |      |
+   *                                `--------------------'       `----------------------'
+   */
+       // If it accepts an argument (i.e, is a function), it doesn't need KC_.
+       // Otherwise, it needs KC_*
+       [QWERTY] = KEYMAP(  // layer 1
+           // left hand
+           KC_BSPC,           KC_1,         KC_2,   KC_3,   KC_4,    KC_5,   KC_LEFT,
+           KC_TAB,            KC_Q,         KC_W,   KC_E,   KC_R,    KC_T,   KC_TRNS,
+           KC_LCTRL,          KC_A,         KC_S,   KC_D,   KC_F,    KC_G,
+           KC_LSFT,           CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,    KC_B,   KC_LALT,
+           KC_TRNS, KC_QUOT,  LALT(KC_LSFT),  KC_LEFT, MO(SYMB),
+           KC_TAB,  KC_DELT,
+           KC_HOME,
+           KC_SPC, KC_LGUI, KC_END,
+           // right hand
+           KC_RGHT,      KC_6,    KC_7,    KC_8,    KC_9,              KC_0,           KC_DELT,
+           KC_TRNS,      KC_Y,    KC_U,    KC_I,    KC_O,              KC_P,           KC_BSLS,
+           KC_H,         KC_J,    KC_K,    KC_L,    LT(MDIA, KC_SCLN), KC_RCTRL,
+           KC_RALT,      KC_N,    KC_M,    KC_COMM, KC_DOT,            CTL_T(KC_SLSH), KC_RSFT,
+           MO(SYMB),     KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
+           KC_LALT, CTL_T(KC_ESC),
+           KC_PGUP,
+           KC_PGDN, KC_RGUI, KC_ENT),
+
+
+       /* Keymap 2: Symbol Layer
+        *
+        * ,--------------------------------------------------.           ,--------------------------------------------------.
+        * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+        * |        |      |   @  |   *  |   =  |   _  |      |           |      |   ~  |   {  |   }  |   #  |   :  |   F12  |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * |        |   |  |   !  |   +  |   -  |   "  |------|           |------|   "  |   (  |   )  |   '  |   `  |        |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * |        |      |   %  |   ^  |   $  |   &  |      |           |      |   ;  |   [  |   ]  |   \  |   /  |        |
+        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+        *   |      |      |      |      |      |                                       |      |      |      |      |      |
+        *   `----------------------------------'                                       `----------------------------------'
+        *                                        ,-------------.       ,-------------.
+        *                                        |      |      |       |      |      |
+        *                                 ,------|------|------|       |------+------+------.
+        *                                 |      |      |      |       |      |      |      |
+        *                                 |      |      |------|       |------|      |      |
+        *                                 |      |      |      |       |      |      |      |
+        *                                 `--------------------'       `--------------------'
+        */
+       // SYMBOL
+       [SYMB] = KEYMAP(
+           // left hand
+           KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_AT,   KC_ASTR, KC_EQL,  KC_UNDS, KC_TRNS,
+           KC_TRNS, KC_PIPE, KC_EXLM, KC_PLUS, KC_MINS, S(KC_QUOTE),
+           KC_TRNS, KC_TRNS, KC_PERC, KC_CIRC, KC_DLR,  KC_AMPR, KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS,
+           KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS,
+
+           // right hand
+           KC_TRNS, KC_F6,      KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+           KC_TRNS, KC_TILD,    KC_LCBR, KC_RCBR, KC_HASH, S(KC_SCLN), KC_F12,
+           S(KC_QUOTE),KC_LPRN, KC_RPRN, KC_QUOTE, KC_GRV, KC_TRNS,
+           KC_TRNS, KC_SCLN,    KC_LBRC, KC_RBRC, KC_BSLS, KC_SLSH, KC_TRNS,
+           KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS,
+           KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS),
+
+       /* Keymap 3: Numpad Layer
+        *
+        * ,--------------------------------------------------.           ,--------------------------------------------------.
+        * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+        * |        |      |      |  UP  |      |      |      |           |      |   $  |   7  |   8  |   9  |   +  |        |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * |        |      | LEFT | DOWN | RIGHT|      |------|           |------|   =  |   4  |   5  |   6  |   -  |        |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * |        |      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   *  |        |
+        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+        *   |      |      |      |      |      |                                       |   ,  |   0  |   .  |   /  |      |
+        *   `----------------------------------'                                       `----------------------------------'
+        *                                        ,-------------.       ,-------------.
+        *                                        |      |      |       |      |      |
+        *                                 ,------|------|------|       |------+------+------.
+        *                                 |      |      |      |       |      |      |      |
+        *                                 |      |      |------|       |------|      |      |
+        *                                 |      |      |      |       |      |      |      |
+        *                                 `--------------------'       `--------------------'
+        */
+       // Numpad
+       [NUMPAD] = KEYMAP(
+           // left hand
+           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+           KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,
+           KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RIGHT,KC_TRNS,
+           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+           KC_TRNS,KC_TRNS,
+           KC_TRNS,
+           KC_TRNS,KC_TRNS,KC_TRNS,
+           // right hand
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,
+           KC_TRNS, KC_DLR,  KC_7,    KC_8,    KC_9,    KC_PLUS,  KC_TRNS,
+                    KC_EQL,  KC_4,    KC_5,    KC_6,    KC_MINS,  KC_TRNS,
+           KC_TRNS, KC_AMPR, KC_1,    KC_2,    KC_3,    KC_ASTR,  KC_TRNS,
+                             KC_COMMA,KC_0,    KC_DOT,  KC_SLSH,  KC_TRNS,
+           KC_TRNS, KC_TRNS,
+           KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS),
+
+       /* Keymap 4: Media and mouse keys
+        *
+        * ,--------------------------------------------------.           ,--------------------------------------------------.
+        * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+        * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+        * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+        *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+        *   `----------------------------------'                                       `----------------------------------'
+        *                                        ,-------------.       ,-------------.
+        *                                        |      |      |       |      |      |
+        *                                 ,------|------|------|       |------+------+------.
+        *                                 |      |      |      |       |      |      |Brwser|
+        *                                 |      |      |------|       |------|      |Back  |
+        *                                 |      |      |      |       |      |      |      |
+        *                                 `--------------------'       `--------------------'
+        */
+       // MEDIA AND MOUSE
+       KEYMAP(
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+           KC_TRNS, KC_TRNS,
+           KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS,
+           // right hand
+           KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+           KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+           KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+           KC_TRNS, KC_TRNS,
+           KC_TRNS,
+           KC_TRNS, KC_TRNS, KC_WBAK),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+       [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+       // MACRODOWN only works in this function
+       switch(id) {
+               case 0:
+                       if (record->event.pressed) {
+                               register_code(KC_RSFT);
+                       } else {
+                               unregister_code(KC_RSFT);
+                       }
+                       break;
+       }
+       return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+       uint8_t layer = biton32(layer_state);
+
+       ergodox_board_led_off();
+       ergodox_right_led_1_off();
+       ergodox_right_led_2_off();
+       ergodox_right_led_3_off();
+       switch (layer) {
+               // TODO: Make this relevant to the ErgoDox EZ.
+               case 1:
+                       ergodox_right_led_1_on();
+                       break;
+               case 2:
+                       ergodox_right_led_2_on();
+                       break;
+               default:
+                       // none
+                       break;
+       }
+
+};
diff --git a/keyboards/ergodox/keymaps/jacobono/readme.md b/keyboards/ergodox/keymaps/jacobono/readme.md
new file mode 100644 (file)
index 0000000..48de050
--- /dev/null
@@ -0,0 +1,34 @@
+# Default Layer #
+
+I'm using the colemak layer -- customized a bit to work a bit better when using spacemacs as my editor.
+
+![default-layer](img/colemak-default-layer.png)
+
+## Special Keys ##
+
+`SC1` => `LGUI + TAB`
+
+`SC2` => `LGUI + SPACE + TAB`
+
+`L1` => Switch to QWERTY Layout
+
+`T(L2)` => Toggle Symbol Layer
+
+`T(L3)` =>  Toggle Number and D-Pad Layer
+
+# QWERTY #
+
+Nothing special here -- just need this layer tucked away for the `WASD`.  Which is literally the only reason I use it.
+Just have the same button to toggle back to colemak.
+
+# Symbol Layer #
+
+![symbol-layer](img/symbol-layer.png)
+
+This is just putting matching closing symbols next to each other -- useful when editing lisp.
+
+# Number and D-Pad Layer #
+
+Just a basic number layer with a D-PAD on the other side.
+
+![number-dpad-layer](img/number-dpad-layer.png)
diff --git a/keyboards/ergodox/keymaps/jafo/jafo-Notes b/keyboards/ergodox/keymaps/jafo/jafo-Notes
new file mode 100644 (file)
index 0000000..9376125
--- /dev/null
@@ -0,0 +1,10 @@
+These are notes on how to build and deploy the firmware to Ez, but they are
+from before the qmk restructuring.
+
+cd qmk_firmware/keyboard/ergodox_ez
+make KEYMAP=jafo
+cp ergodox_ez.hex keymaps/jafo/
+/tmp/teensy.64bit
+Open hex keymap file
+Program
+Upload
diff --git a/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf b/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf
new file mode 100644 (file)
index 0000000..189b49b
Binary files /dev/null and b/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf differ
diff --git a/keyboards/ergodox/keymaps/jafo/jafo_highres.png b/keyboards/ergodox/keymaps/jafo/jafo_highres.png
new file mode 100644 (file)
index 0000000..e3d7cef
Binary files /dev/null and b/keyboards/ergodox/keymaps/jafo/jafo_highres.png differ
diff --git a/keyboards/ergodox/keymaps/jafo/keymap.c b/keyboards/ergodox/keymaps/jafo/keymap.c
new file mode 100644 (file)
index 0000000..4f1428f
--- /dev/null
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Grv    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   =    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Esc/Cmd|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------|  L2  |           |  L2  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  | Del  | Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |Ctrl/Esc| Alt|       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_EQL,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        GUI_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   TG(MDIA),
+        LT(SYMB,KC_GRV),KC_QUOT,      KC_DELT,  KC_LEFT,KC_RGHT,
+                                              CTL_T(KC_ESC),  KC_LALT,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             TG(MDIA),    KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------| LEFT | DOWN |  UP  | RIGHT|      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      | Lclk | Mclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN3, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/jafo/readme.md b/keyboards/ergodox/keymaps/jafo/readme.md
new file mode 100644 (file)
index 0000000..c870dfd
--- /dev/null
@@ -0,0 +1,20 @@
+# ErgoDox EZ "jafo" Configuration
+
+This is a layout based on the ErgoDox Ez default layout, but with some
+customizations I made for my use-case.  I use Linux, vi and the i3 window
+manager, so I made these changes:
+
+- Arrow keys laid out in vi positions in media layer.
+
+- Esc (tap) and Win (held) to the left of A.  i3 uses Win key for navigation
+  and having that be symmetric on the left and right makes it easier.
+
+- Grave accent below equals, I was having a hard time using ~
+
+- Layer 2 switch below the L1 switch, so I can go into a mode where I get
+  arrow keys under my vi motion fingers.
+
+- Making the Ctrl (held) and Esc (tap) on my thumbs symmetric.  Not sure I
+  need that with the Esc left of A and Ctrl on the Z and / keys when held...
+
+![Jafo](jafo_highres.png)
diff --git a/keyboards/ergodox/keymaps/jgarr/keymap.c b/keyboards/ergodox/keymaps/jgarr/keymap.c
new file mode 100644 (file)
index 0000000..42d5842
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,-----------------------------------------------------.
+ * |   Grv  |   1  |   2  |   3  |   4  |   5  | Del  |           |Backspace|   6  |   7  |   8  |   9  |   0  |   \    |
+ * |--------+------+------+------+------+-------------|           |---------+------+------+------+------+------+--------|
+ * |   Tab  |   '  |   ,  |   .  |   P  |   Y  |  L1  |           |  L1     |   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+------+------|      |           |         |------+------+------+------+------+--------|
+ * |Ctrl/Esc|   A  |   O  |   E  |   U  |   I  |------|           |---------|   D  |   H  |   T  |   N  |S / L2|   -    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh     |------+------+------+------+------+--------|
+ * | LShift |:/Ctrl|   Q  |   J  |   K  |   X  |      |           |         |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `----------------+------+------+------+------+--------'
+ *   | Ctrl | LGui |  Alt | Left | Right|                                          |  Up  | Down |   [  |   ]  |  =   |
+ *   `----------------------------------'                                          `----------------------------------'
+ *                                        ,--------------.       ,-------------.
+ *                                        | AltShf| LGui |       | Alt  | ~L1  |
+ *                                 ,------|-------|------|       |------+--------+------.
+ *                                 |      |       | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp |------|       |------|  Enter |Space |
+ *                                 |      |ace    | End  |       | PgDn |        |      |
+ *                                 `---------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_DELT,
+        KC_TAB,         KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   TG(1),
+        CTL_T(KC_ESC),  KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
+        KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   ALL_T(KC_NO),
+        KC_LCTL,  KC_LGUI,  KC_LALT,  KC_LEFT, KC_RGHT,
+                                              LALT(KC_LSFT),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_BSPC,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSLS,
+             TG(1),       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
+                          KC_D,   KC_H,   KC_T,   KC_N,   LT(MDIA, KC_S),   KC_MINS,
+             MEH_T(KC_NO),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_EQL,
+             KC_LALT,        KC_FN1,
+             KC_PGUP,
+             KC_PGDN,KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/josh/keymap.c b/keyboards/ergodox/keymaps/josh/keymap.c
new file mode 100644 (file)
index 0000000..b546387
--- /dev/null
@@ -0,0 +1,206 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+//macros
+#define CTL_SFT_T 100
+#define CTL_SFT_G 101
+#define CTL_ALT_H 102
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |           | M 100|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |TAB /Alt|   Q  |   W  |   E  |   R  |   T  | Meh  |           | Meh  |   Y  |   U  |   I  |   O  |   P  |\ / ALT |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LCTL   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / CTL |
+ * |--------+------+------+------+------+------| ~L1  |           | ~L1  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | WIN  |  `   | M 102| M 101|AltShf|                                       |AltShf| Left | Down |  Up  | Right  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LALT |       | Alt  |  CAPS  |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------| Delete |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_ESC,
+        ALT_T(KC_TAB),  KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   ALL_T(KC_NO),
+        KC_LCTL,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   MO(SYMB),
+        KC_LGUI,        KC_GRV, M(CTL_ALT_H),M(CTL_SFT_G),LALT(KC_LSFT),
+                                              CTL_T(KC_APP),  KC_LALT,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             M(CTL_SFT_T),KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             MEH_T(KC_NO),KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),CTL_T(KC_QUOT),
+             MO(SYMB),      KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                            LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP,            KC_RIGHT,
+             KC_LALT,        KC_CAPS,
+             KC_PGUP,
+             KC_PGDN,KC_DEL, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |Version |  F1  |  F2  |  F3  |  F4  |  F5  | F11  |           | F12  |  F6  |  F7  |  F8  |  F9  |  F10 |  CALC  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Left | Down |  Up  | Right|      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F11,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_F12,  KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_CALC,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                KC_LEFT, KC_DOWN,KC_UP,   KC_RIGHT,KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                         KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+    switch(id) {
+        case 0:
+            if (record->event.pressed) {
+                SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+            }
+            break;
+        case CTL_SFT_T:
+            if (record->event.pressed) {
+                return MACRO(D(LCTL), D(LSFT), T(T), END);
+            }
+            return MACRO(U(LCTL), U(LSFT), END);
+            break;
+        case CTL_SFT_G:
+            if (record->event.pressed) {
+                return MACRO(D(LCTL), D(LSFT), T(G), END);
+            }
+            return MACRO(U(LCTL), U(LSFT), END);
+            break;
+        case CTL_ALT_H:
+            if (record->event.pressed) {
+                return MACRO(D(LCTL), D(LALT), T(H), END);
+            }
+            return MACRO(U(LCTL), U(LALT), END);
+            break;
+    }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/josh/readme.md b/keyboards/ergodox/keymaps/josh/readme.md
new file mode 100644 (file)
index 0000000..cee19d4
--- /dev/null
@@ -0,0 +1,8 @@
+Layout is based on the default layout that comes on the ergodox infinity. Focused mostly on making ctl and alt easy to reach. I spend most my day working in Eclipse which has just so many 3 key shortcuts.
+
+* Removed numpad keys from symbol layer (I don't use them)
+* Added arrow keys under h, j, k, l on symbol layer. vi movement keys!
+* Added a few macros for eclipse hotkeys that I used all the time
+* Added calc button on symbol layer
+* tap vs hold on tab and \. Gives alt, ctl and shift on both sides of the keyboard
+
diff --git a/keyboards/ergodox/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c
new file mode 100644 (file)
index 0000000..4679966
--- /dev/null
@@ -0,0 +1,189 @@
+/* Setup to approximate a Kinesis Advantage with an eye to use in a
+ * Mac/OSX environment 
+ * This version adds a hand swap feature to flip the keyboard */
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LGUI |           | App  |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LCtrl  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|   \  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  |Grv/L1|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                      ,---------------.       ,---------------.
+ *                                      |  LGUI  |Al/Esc|       |Al/Esc|  RGUI  |
+ *                               ,------|--------|------|       |------+--------+------.
+ *                               |      |        | Home |       | PgUp |        |      |
+ *                               |Backsp|   Del  |------|       |------| Enter  | Space|
+ *                               |      |        | End  |       | PgDn |        |      |
+ *                               `----------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+    // left hand
+    KC_EQL,          KC_1,         KC_2,          KC_3,    KC_4,    KC_5,   KC_LGUI,
+    KC_TAB,          KC_Q,         KC_W,          KC_E,    KC_R,    KC_T,   TG(1),
+    KC_LCTL,         KC_A,         KC_S,          KC_D,    KC_F,    KC_G,
+    KC_LSFT,         CTL_T(KC_Z),  KC_X,          KC_C,    KC_V,    KC_B,   ALL_T(KC_NO),
+    KC_FN1, KC_BSLS,      LALT(KC_LSFT), KC_LEFT, KC_RGHT,
+                                                                    KC_LGUI,         ALT_T(KC_ESC),
+                                                                                     KC_HOME,
+                                                                    KC_BSPC, KC_DEL, KC_END,
+    // right hand
+    KC_APP,       KC_6,    KC_7,    KC_8,    KC_9,    KC_0,              KC_MINS,
+    TG(1),        KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,              KC_BSLS,
+                  KC_H,    KC_J,    KC_K,    KC_L,    LT(MDIA, KC_SCLN), KC_QUOT,
+    MEH_T(KC_NO), KC_N,    KC_M,    KC_COMM, KC_DOT,  CTL_T(KC_SLSH),    KC_RSFT,
+                           KC_UP,   KC_DOWN, KC_LBRC, KC_RBRC,           KC_FN1,
+    ALT_T(KC_ESC),         KC_RGUI,
+    KC_PGUP,
+    KC_PGDN,      KC_ENT,  KC_SPC
+),
+
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | PrScr  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | ScrLk  |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Pause  |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_PSCR, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
+       KC_SLCK, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+       KC_PAUS, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,
+       KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV)       // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/kastyle/readme.md b/keyboards/ergodox/keymaps/kastyle/readme.md
new file mode 100644 (file)
index 0000000..944286a
--- /dev/null
@@ -0,0 +1,14 @@
+The kastyle keymap was originally intended to remap the ErgoDox EZ to more
+closely approximate the layout of a Kinesis Advantage. Notable changes
+over the stock ErgoDox layout include:
+
+  * Re-arragnement of tab, enter, space, and delete to match the Kinesis
+  * Addition of print screen, pause, etc. keys following the kines-ish keymap
+  on L1
+  * GUI keys have replaced Ctrl on the thumb keys (for Mac use), and Alt keys
+  are mapped to allow Esc on tap (good for Vi users)
+  * Most notably, the addition of a momentary one-handed mode for quick and
+  easy access to keys on the other half of the keyboard, e.g. while using a 
+  mouse in one hand, one may add text to a dialogue box with the other without
+  having to reach across the keyboard or remove one's hand from the mouse.
+
diff --git a/keyboards/ergodox/keymaps/kines-ish/keymap.c b/keyboards/ergodox/keymaps/kines-ish/keymap.c
new file mode 100644 (file)
index 0000000..83f5b0e
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Caps   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Esc  | Grv  |Insert| Left | Right|                                       |  Up  | Down |   [  |   ]  |  L2  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | Ctrl | Alt  |       | LGui | Ctrl |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Home |       | PgUp |      |      |
+ *                                 |Backsp| Del  |------|       |------| Enter| Space|
+ *                                 |ace   |      | End  |       | PgDn |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,   KC_1,    KC_2,    KC_3,     KC_4,     KC_5,  KC_LEFT,
+        KC_TAB,   KC_Q,    KC_W,    KC_E,     KC_R,     KC_T,  TG(SYMB),
+        KC_CAPS,  KC_A,    KC_S,    KC_D,     KC_F,     KC_G,
+        KC_LSFT,  KC_Z,    KC_X,    KC_C,     KC_V,     KC_B,  ALL_T(KC_NO),
+        KC_ESC,   KC_GRV,  KC_INS,  KC_LEFT,  KC_RGHT,
+                                               KC_LCTL,KC_LALT,
+                                                       KC_HOME,
+                                         KC_BSPC,KC_DEL,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,     KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,  KC_QUOT,
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,  KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,  KC_FN2,
+             KC_LGUI, KC_RCTL,
+             KC_PGUP,
+             KC_PGDN, KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | PrScr  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | ScrLk  |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Pause  |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_PSCR,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_SLCK,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_PAUS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/kines-ish/readme.md b/keyboards/ergodox/keymaps/kines-ish/readme.md
new file mode 100644 (file)
index 0000000..5d39a05
--- /dev/null
@@ -0,0 +1,19 @@
+This keymap attempts to match the Kinesis Contoured (aka Advantage) default
+layout as closely as possible. See
+http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf
+
+Apart from the obvious mappings, this keymap also:
+
+* removes the dual-purpose momentary layer/normal keys: Z, /, and Grv;
+  because the author--coming from a Kinesis keyboard--finds the delays and
+  accidental modifiers to be more disconcerting than helpful.
+
+* puts Esc in the bottom left since there's no place for it in the top
+  left to match the Kinesis.
+
+* changes the bottom-right key into an L2 toggle since there's otherwise no
+  way to get to L2.
+
+* adds PrScr, ScrLk and Pause to the L1 keymap, down the left side, since
+  they're present on the Kinesis but not available in the default
+  ergodox_ez keymap.
diff --git a/keyboards/ergodox/keymaps/kristian/keymap.c b/keyboards/ergodox/keymaps/kristian/keymap.c
new file mode 100644 (file)
index 0000000..e7e4243
--- /dev/null
@@ -0,0 +1,79 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+#include "keymap_fr_ch.h"
+#include "keymap_french.h"
+#include "keymap_german.h"
+#include "keymap_german_ch.h"
+#include "keymap_nordic.h"
+#include "keymap_norwegian.h"
+#include "keymap_spanish.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+[0] = KEYMAP(NO_LESS,KC_1,KC_2,KC_3,KC_4,KC_5,KC_BSPACE,KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,SFT_T(NO_APOS),CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,SFT_T(KC_EQUAL),MO(1),CTL_T(KC_GRAVE),KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_CAPSLOCK,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_6,KC_7,KC_8,KC_9,KC_0,NO_PLUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,NO_AM,KC_H,KC_J,KC_K,KC_L,LT(2,NO_OSLH),NO_AE,SFT_T(KC_RBRC),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SFT_T(NO_APOS),KC_DOWN,KC_UP,NO_LPRN,NO_RPRN,MO(1),NO_QUOT,CTL_T(KC_ESCAPE),NO_APOS,KC_LALT,KC_LGUI,KC_ENTER),
+
+[1] = KEYMAP(M(0),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_TRANSPARENT,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_7,KC_8,KC_9,KC_TRANSPARENT,KC_TRANSPARENT,KC_F12,KC_4,KC_5,KC_6,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_0,KC_1,KC_2,KC_3,NO_LBRC,NO_RBRC,KC_LSHIFT,KC_COMMA,KC_DOT,LSFT(NO_LBRC),LSFT(NO_RBRC),KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LALT,KC_LGUI,KC_ENTER),
+
+[2] = KEYMAP(KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_UP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LALT,KC_LGUI,KC_MS_BTN1,KC_MS_BTN2,KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_SPACE,KC_LGUI,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MEDIA_PREV_TRACK,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT,KC_TRANSPARENT,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_AUDIO_MUTE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_ESCAPE,KC_MS_WH_UP,KC_MS_WH_DOWN,KC_MS_ACCEL0,KC_MS_ACCEL1),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [1] = ACTION_LAYER_TAP_TOGGLE(1)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        case 3:
+            ergodox_right_led_3_on();
+            break;
+        case 4:
+            ergodox_right_led_1_on();
+            ergodox_right_led_2_on();
+            break;
+        case 5:
+            ergodox_right_led_1_on();
+            ergodox_right_led_3_on();
+            break;
+        case 6:
+            ergodox_right_led_2_on();
+            ergodox_right_led_3_on();
+            break;
+        case 7:
+            ergodox_right_led_1_on();
+            ergodox_right_led_2_on();
+            ergodox_right_led_3_on();
+            break;
+        default:
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/maz/keymap.c b/keyboards/ergodox/keymaps/maz/keymap.c
new file mode 100644 (file)
index 0000000..6378f87
--- /dev/null
@@ -0,0 +1,229 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define ARRW 2 // arrow keys
+#define MDIA 3 // media keys, including mouse
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  |      |           |      |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           | CAPS |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  ESC   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |  Grv |      |*SYMB*|*ARRW*|                                       |*MDIA*|*SYMB*|   [  |  ]   |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |      |       |      |        |      |
+ *                                 | Space| Bksp |------|       |------|  Tab   |Enter |
+ *                                 | ctrl | gui  | Alt  |       | Alt  |  gui   | ctrl |
+ *                                 `--------------------'       `----------------------'
+ */
+    // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue
+    // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,                 KC_1,             KC_2,   KC_3,   KC_4,   KC_5,   KC_TRNS,
+        KC_TAB,                 KC_Q,             KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_ESC,                 KC_A,             KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,                KC_Z,             KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        KC_TRNS,                KC_GRV,  KC_TRNS,MO(SYMB),MO(ARRW),
+                                                    KC_TRNS,  KC_TRNS,
+                                                              KC_TRNS,
+                                               CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT,
+        // right hand
+        KC_TRNS,      KC_6,   KC_7,             KC_8,    KC_9,   KC_0,             KC_MINS,
+        KC_CAPSLOCK,     KC_Y,   KC_U,             KC_I,    KC_O,   KC_P,             KC_BSLS,
+                      KC_H,   KC_J,             KC_K,    KC_L,   KC_SCLN,          KC_QUOT,
+        MEH_T(KC_NO), KC_N,   KC_M,             KC_COMM, KC_DOT, KC_SLSH,          KC_RSFT,
+        MO(MDIA),                  MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS,
+        KC_TRNS, KC_TRNS,
+        KC_TRNS,
+        KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT)
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |   .    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_DOT,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_TRNS,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Arrow keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |PGDOWN| PGUP |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------| LEFT | DOWN |  UP  |RIGHT |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      | HOME | END  |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[ARRW] = KEYMAP(
+       // left hand
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+       // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_LEFT, KC_DOWN,   KC_UP,   KC_RGHT, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_HOME,   KC_END,  KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 3: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      | Lclk | Rclk |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |Mute  |VolDn | VolUp|      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      | Prev | Play | Next |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |Brwser|      |      |       |      |      |      |
+ *                                 |Back  |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_WBAK, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/maz/readme.md b/keyboards/ergodox/keymaps/maz/readme.md
new file mode 100644 (file)
index 0000000..000a8d0
--- /dev/null
@@ -0,0 +1,121 @@
+# Introduction
+
+## Motivation
+I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line.
+
+More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line.
+
+## Changes
+There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date.
+### Modifier Keys
+The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate.
+
+### Layers
+* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best.
+* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse
+* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer
+* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries
+** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus
+
+### Removal Of Keys
+I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use.
+
+## Caveats
+### Thumb Cluster Range
+I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because:
+* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are
+* I have relatively large hands (I guarantee you there's no problem - I guarantee you)
+
+### Dangerous positioning
+I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress.
+
+# Keymap
+## Keymap 0: Basic layer
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+|   =    |   1  |   2  |   3  |   4  |   5  |      | |      |   6  |   7  |   8  |   9  |   0  |   -    |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  | | CAPS |   Y  |   U  |   I  |   O  |   P  |   \    |
+|--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+|  ESC   |   A  |   S  |   D  |   F  |   G  |------| |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+|--------+------+------+------+------+------| Hyper| | Meh  |------+------+------+------+------+--------|
+| LShift |   Z  |   X  |   C  |   V  |   B  |      | |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+  |      |  Grv |      |*SYMB*|*ARRW*|                             |*MDIA*|*SYMB*|   [  |  ]   |      |
+  `----------------------------------'                             `----------------------------------'
+                                   ,-------------.     ,-------------.
+                                   |      |      |     |      |      |
+                            ,------|------|------|     |------+--------+------.
+                            |      |      |      |     |      |        |      |
+                            | Space| Bksp |------|     |------|  Tab   |Enter |
+                            | ctrl | gui  | Alt  |     | Alt  |  gui   | ctrl |
+                            `--------------------'     `----------------------'
+
+```
+
+## Keymap 1: Symbol Layer
+The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position
+```
+  ,--------------------------------------------------.           ,--------------------------------------------------.
+  |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+  |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+  |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+  |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+  |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |   .    |
+  |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+  |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+  `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+    |      |      |      |      |      |                                       |      |      |   0  |   =  |      |
+    `----------------------------------'                                       `----------------------------------'
+                                         ,-------------.       ,-------------.
+                                         |      |      |       |      |      |
+                                  ,------|------|------|       |------+------+------.
+                                  |      |      |      |       |      |      |      |
+                                  |      |      |------|       |------|      |      |
+                                  |      |      |      |       |      |      |      |
+                                  `--------------------'       `--------------------'
+```
+
+## Keymap 2: Arrow Layer
+```
+  ,--------------------------------------------------.           ,--------------------------------------------------.
+  |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+  |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+  |        |      |      |      |      |      |      |           |      |      |PGDOWN| PGUP |      |      |        |
+  |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+  |        |      |      |      |      |      |------|           |------| LEFT | DOWN |  UP  |RIGHT |      |        |
+  |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+  |        |      |      |      |      |      |      |           |      |      | HOME | END  |      |      |        |
+  `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+    |      |      |      |      |      |                                       |      |      |      |      |      |
+    `----------------------------------'                                       `----------------------------------'
+                                         ,-------------.       ,-------------.
+                                         |      |      |       |      |      |
+                                  ,------|------|------|       |------+------+------.
+                                  |      |      |      |       |      |      |      |
+                                  |      |      |------|       |------|      |      |
+                                  |      |      |      |       |      |      |      |
+                                  `--------------------'       `--------------------'
+```
+
+## Keymap 3: Media and mouse keys
+``` 
+  ,--------------------------------------------------.           ,--------------------------------------------------.
+  |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+  |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+  |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+  |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+  |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      | Lclk | Rclk |      |      |        |
+  |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+  |        |      |Mute  |VolDn | VolUp|      |      |           |      |      |      |      |      |      |        |
+  `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+    |      |      | Prev | Play | Next |                                       |      |      |      |      |      |
+    `----------------------------------'                                       `----------------------------------'
+                                         ,-------------.       ,-------------.
+                                         |      |      |       |      |      |
+                                  ,------|------|------|       |------+------+------.
+                                  |Brwser|      |      |       |      |      |      |
+                                  |Back  |      |------|       |------|      |      |
+                                  |      |      |      |       |      |      |      |
+                                  `--------------------'       `--------------------'
+```
diff --git a/keyboards/ergodox/keymaps/mclennon_osx/README.md b/keyboards/ergodox/keymaps/mclennon_osx/README.md
new file mode 100644 (file)
index 0000000..60980d0
--- /dev/null
@@ -0,0 +1,5 @@
+# Ergodox EZ for OS X
+
+This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock. 
+
+If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/jackhumbert/qmk_firmware/).
diff --git a/keyboards/ergodox/keymaps/mclennon_osx/keymap.c b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c
new file mode 100644 (file)
index 0000000..627ff01
--- /dev/null
@@ -0,0 +1,144 @@
+// Media keys work on OSX, but not on Windows.
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0  // Default layer
+#define AUXI 1  // Auxiliary layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   ~`   |   1  |   2  |   3  |   4  |   5  |   6  |           |   7  |   8  |   9  |   0  |   -_ |   += |  Bkspc |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   Tab  |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  Del |   Y  |   U  |   I  |   O  |   P  |   |\   |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |   L1   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;:  |  Enter |
+ * |--------+------+------+------+------+------| {[   |           | }]   |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   <, |   >. |  ?/  |   "'   |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |LCtrl |      |      |      |  Esc |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |Power |      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |      |       |      |        |      |
+ *                                 | LGui | LAlt |------|       |------|  Bkspc |Space |
+ *                                 |      |      |      |       |  Del |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,
+        KC_TAB,     KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   MO(1),
+        MO(1),      KC_A,   KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSHIFT,  KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_LBRC,
+        KC_LCTL,    KC_TRNS,KC_TRNS,KC_TRNS,KC_ESC,
+                                                    KC_TRNS,KC_TRNS,
+                                                            KC_TRNS,
+                                            KC_LGUI,KC_LALT,KC_TRNS,
+
+        // right hand
+        KC_7,       KC_8,   KC_9,   KC_0,   KC_MINS,KC_EQL, KC_BSPC,
+        KC_DELETE,  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_BSLASH,
+                    KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_ENT,
+        KC_RBRC,    KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,KC_QUOT,
+                         KC_TRNS,   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+        KC_PWR,    KC_TRNS,
+        KC_TRNS,
+        KC_DELETE,    KC_BSPC, KC_SPC
+    ),
+/* Keymap 1: Auxiliary Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  | F10  | F11  | F12  |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      | TRNS |           |      | Mute | VolDn| VolUp| Play |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |   TRNS |      |LShift| LCtrl|      |      |------|           |------| LEFT | DOWN | UP   |RIGHT |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LShift |      |      |      |      |      |      |           |      | MPrv | MNxt |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |LCtrl |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 | LGui | LAlt |------|       |------| Bkspc| Space|
+ *                                 |      |      |      |       |  Del |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// AUXILIARY
+[AUXI] = KEYMAP(
+       // left hand
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_LSHIFT,KC_LCTL, KC_TRNS, KC_TRNS,
+       KC_LSHIFT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_LGUI, KC_LALT, KC_TRNS,
+       // right hand
+       KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS,
+       KC_TRNS,  KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS, KC_TRNS,
+                 KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT,KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_PWR, KC_TRNS,
+       KC_TRNS,
+       KC_DELETE, KC_BSPC, KC_SPC
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(AUXI)                // FN1 - Momentary Layer 1 (Auxiliary)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+          break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/mpiechotka/keymap.c b/keyboards/ergodox/keymaps/mpiechotka/keymap.c
new file mode 100644 (file)
index 0000000..67aca44
--- /dev/null
@@ -0,0 +1,276 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_colemak.h"
+
+enum {
+    BASE = 0,
+    BASE_CM,
+    SYMB,
+    MACR
+};
+
+enum {
+    LWIN = 1,
+    PC1,
+    PC2,
+    PC3,
+    PC4,
+    DL_BASE,
+    DL_BASE_CM,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0a: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
+ * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | LAlt | LGui |       | LAlt | RAlt |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |Backsp| Home |       | PgUp |        |      |
+ *                                 | Space|ace/  |------|       |------|  Tab/  |Enter/|
+ *                                 | /Shft|Ctrl  |  1)  |       |  2)  |  Ctrl  |Shift |
+ *                                 `--------------------'       `----------------------'
+ *
+ * 1) End/L1
+ * 2) PgDown/L2
+ */
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,     KC_W,   KC_F,   KC_P,          KC_G,   TG(SYMB),
+        KC_ESC,         KC_A,     KC_R,   KC_S,   KC_T,          KC_D,
+        KC_LSFT,        KC_Z,     KC_X,   KC_C,   KC_V,          KC_B,   KC_EQL,
+        LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
+                                                             KC_LALT,       F(LWIN),
+                                                                            KC_HOME,
+                                               SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, KC_END),
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_J,   KC_L,   KC_U,   KC_Y,   KC_SCLN,          KC_BSLS,
+                          KC_H,   KC_N,   KC_E,   KC_I,   KC_O,             KC_QUOT,
+             KC_MINS,     KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
+             KC_LALT,         KC_RALT,
+             KC_PGUP,
+             LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(KC_ENT)
+    ),
+/* Keymap 0b: Basic layer (Colemak keycodes or QWERTY)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
+ * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | LAlt | LGui |       | LAlt | RAlt |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |Backsp| Home |       | PgUp |        |      |
+ *                                 | Space|ace/  |------|       |------|  Tab/  |Enter/|
+ *                                 | /Shft|Ctrl  |  1)  |       |  2)  |  Ctrl  |Shift |
+ *                                 `--------------------'       `----------------------'
+ *
+ * 1) End/L1
+ * 2) PgDown/L2
+ */
+[BASE_CM] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
+        KC_DELT,        CM_Q,     CM_W,   CM_F,   CM_P,          CM_G,   TG(SYMB),
+        KC_ESC,         CM_A,     CM_R,   CM_S,   CM_T,          CM_D,
+        KC_LSFT,        CM_Z,     CM_X,   CM_C,   CM_V,          CM_B,   KC_EQL,
+        LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
+                                                             KC_LALT,       F(LWIN),
+                                                                            KC_HOME,
+                                               SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, KC_END),
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    CM_J,   CM_L,   CM_U,   CM_Y,   KC_P, /*CM_SCLN*/ KC_BSLS,
+                          CM_H,   CM_N,   CM_E,   CM_I,   CM_O,             KC_QUOT,
+             KC_MINS,     CM_K,   CM_M,   CM_COMM,CM_DOT, CTL_T(CM_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
+             KC_LALT,         KC_RALT,
+             KC_PGUP,
+             LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(KC_ENT)
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Macros
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        | DLa  | DLb  |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | PC1  | PC2  | PC3  | PC4  |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MACROS
+[MACR] = KEYMAP(
+       KC_NO,   KC_NO,     KC_NO,        KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_NO,   F(DL_BASE),F(DL_BASE_CM),KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_NO,   F(PC1),    F(PC2),       F(PC3),  F(PC4),  KC_NO,
+       KC_NO,   KC_NO,     KC_NO,        KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_NO,   KC_NO,     KC_NO,        KC_NO,   KC_NO,
+                                           KC_TRNS,KC_TRNS,
+                                                   KC_TRNS,
+                                   KC_TRNS,KC_TRNS,KC_TRNS,
+    // right hand
+       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+                 KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,
+       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+                          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [LWIN] = ACTION_MACRO(LWIN),
+    [PC1] = ACTION_MACRO(PC1),
+    [PC2] = ACTION_MACRO(PC2),
+    [PC3] = ACTION_MACRO(PC3),
+    [PC4] = ACTION_MACRO(PC4),
+    [DL_BASE] = ACTION_DEFAULT_LAYER_SET(BASE),
+    [DL_BASE_CM] = ACTION_DEFAULT_LAYER_SET(BASE_CM)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    switch(id) {
+    case 0:
+        if (record->event.pressed) {
+            register_code(KC_RSFT);
+        } else {
+            unregister_code(KC_RSFT);
+        }
+        break;
+    case LWIN:
+        if (record->event.pressed) {
+             register_code(KC_RSFT);
+             unregister_code(KC_RSFT);
+             register_code(KC_LGUI);
+        } else {
+             unregister_code(KC_LGUI);
+        }
+        break;
+    case PC1:
+        if (!record->event.pressed) {
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END);
+        }
+        break;
+    case PC2:
+        if (!record->event.pressed) {
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END);
+        }
+        break;
+    case PC3:
+        if (!record->event.pressed) {
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END);
+        }
+        break;
+    case PC4:
+        if (!record->event.pressed) {
+             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), END);
+        }
+        break;
+    }
+    return MACRO_NONE;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case SYMB:
+            ergodox_right_led_1_on();
+            break;
+        case MACR:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+};
diff --git a/keyboards/ergodox/keymaps/mpiechotka/readme.md b/keyboards/ergodox/keymaps/mpiechotka/readme.md
new file mode 100644 (file)
index 0000000..785400d
--- /dev/null
@@ -0,0 +1,6 @@
+# ErgoDox EZ mpiechotka Configuration
+
+Modification of ErgoDox EZ Colemak layout with additional QWERTY/software Colemak layer and change of the special keys.
+
+
+
diff --git a/keyboards/ergodox/keymaps/msc/img/code_layer.png b/keyboards/ergodox/keymaps/msc/img/code_layer.png
new file mode 100644 (file)
index 0000000..7b5efaa
Binary files /dev/null and b/keyboards/ergodox/keymaps/msc/img/code_layer.png differ
diff --git a/keyboards/ergodox/keymaps/msc/img/main_layer.png b/keyboards/ergodox/keymaps/msc/img/main_layer.png
new file mode 100644 (file)
index 0000000..65f92dd
Binary files /dev/null and b/keyboards/ergodox/keymaps/msc/img/main_layer.png differ
diff --git a/keyboards/ergodox/keymaps/msc/img/media_layer.png b/keyboards/ergodox/keymaps/msc/img/media_layer.png
new file mode 100644 (file)
index 0000000..a69799b
Binary files /dev/null and b/keyboards/ergodox/keymaps/msc/img/media_layer.png differ
diff --git a/keyboards/ergodox/keymaps/msc/keymap.c b/keyboards/ergodox/keymaps/msc/keymap.c
new file mode 100644 (file)
index 0000000..c43aecf
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Cmd  | Alt  |AltShf| Left | Right|                                       | Left | Down |  Up  |Right | L2  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        KC_LGUI,KC_LALT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_LEFT,  KC_DOWN, KC_UP, KC_RIGHT,       TG(MDIA),
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      | Mute |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | Prev |VolDn |VolUp | Next |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 | Lclk | Rclk |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/msc/readme.md b/keyboards/ergodox/keymaps/msc/readme.md
new file mode 100644 (file)
index 0000000..0d14fcb
--- /dev/null
@@ -0,0 +1,32 @@
+# MSC Configuration
+
+### Based mostly on the ErgoDox EZ default layout with optimizations for coding on osx.
+
+#### Expecting the user to rely on Coder Layer this keymap removes some of the duplicate symbol keys in the lower portions of the board and replaces them with arrow keys and modifiers. The Media Layer is also updated to match the change in the arrow keys and the left and right click buttons are moved under the thumb position. The Media layer is now reached with toggle button in the lower right.
+
+### Main Layer
+
+![Main Layer](img/main_layer.png)
+
+### Code Layer
+
+![Code Layer](img/code_layer.png)
+
+### Media Layer
+
+![Media Layer](img/media_layer.png)
+
+## Changelog
+
+Version 1.0
+
+- Changed the temp code layer key in the bottom right to toggle media layer
+- Changed the temp media key to only be ";"
+- Changed right hand bottom row to match vim home row nav directions
+- Changed media keys to match arrow key changes
+- Changed media left and right click to spacebar and backspace locations
+- Changed bottom left to Cmd
+- Changed single quote on left bottom row to alt
+
+#### Coming Soon:
+- A new layer for Blender editing with a focus on left hand shortcut and a righthand num pad to control the view in Blender.
diff --git a/keyboards/ergodox/keymaps/naps62/keymap.c b/keyboards/ergodox/keymaps/naps62/keymap.c
new file mode 100644 (file)
index 0000000..9064053
--- /dev/null
@@ -0,0 +1,187 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  Esc   | 1  ! | 2  @ | 3  # | 4  $ | 5  % | Lang |           | Esc  | 6  ^ | 7  & | 8  * | 9  ( | 0  ) | Bckspc |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  Tab   |   Q  |   W  |   E  |   R  |   T  |  L2  |           |  L2  |   Y  |   U  |   I  |   O  |   P  | \   |  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  Ctrl  |   A  |   S  |  D   |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  | ;  : |  ' "   |
+ * |--------+------+------+------+------+------|  L1  |           |  L1  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  | ,  < | . >  | /  ? |  - _   |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |  L1  | `  ~ | ' "  | \  | |  L2  |                                       |  {   |  }   | [  { | ]  } |  L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,--------------.       ,---------------.
+ *                                        | Home  | End  |       | PgUp  |Insert |
+ *                                 ,------|-------|------|       |-------+-------+------.
+ *                                 |      |       | LGui |       | Del   |       |      |
+ *                                 | Space|  Alt  |------|       |-------| Enter |Space |
+ *                                 |      |       | LGui |       | Bcsp  |       |      |
+ *                                 `---------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+  // left hand
+  KC_ESC,     KC_1,    KC_2,     KC_3,     KC_4,               KC_5,  LGUI(KC_SPC),
+  KC_TAB,     KC_Q,    KC_W,     KC_E,     KC_R,               KC_T,  MO(2),
+  KC_LCTL,    KC_A,    KC_S,     KC_D,     KC_F,               KC_G,
+  KC_LSFT,    KC_Z,    KC_X,     KC_C,     KC_V,               KC_B,  MO(1),
+  MO(1),      KC_GRV,  KC_QUOT,  KC_BSLS,  MO(2),
+
+                                               KC_HOME,   KC_END,
+                                                          KC_LGUI,
+                                      KC_SPC,  KC_LALT,   KC_LGUI,
+
+  // right hand
+  KC_ESC,  KC_6,     KC_7,     KC_8,     KC_9,     KC_0,      KC_BSPC,
+  MO(2),   KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,      KC_BSLS,
+           KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,   KC_QUOT,
+  MO(1),   KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,   KC_MINS,
+                     KC_LCBR,  KC_RCBR,  KC_LBRC,  KC_RBRC,   MO(1),
+
+  KC_PGUP,  KC_INS,
+  KC_DEL,
+  KC_BSPC,  KC_ENT,    KC_SPC
+),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |   =  |    . |   0  |   -  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_EQL,KC_DOT,  KC_0,    KC_MINS,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |GuiUp | Expl |      | Term |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |GuiLft|GuiDwn|GuiRgt|      |      |------|           |------| Left | Down |  Up  |Right |      |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |Browsr|      |           |      |      |VolDwn|VolUp | Mute |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       | Play | Prev | Next |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |Brwser|Brwser|
+ *                                 | Lclk | Rclk |------|       |------|Fwd   |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+         RESET, KC_TRNS,        KC_TRNS,     KC_TRNS,        KC_TRNS, KC_TRNS,    KC_TRNS,
+       KC_TRNS, KC_TRNS,        LGUI(KC_W),  LGUI(KC_E),     KC_BTN1, LGUI(KC_T), KC_TRNS,
+       KC_TRNS, LGUI(KC_A),     LGUI(KC_S),  LGUI(KC_D),     KC_MS_D, KC_MS_R,
+       KC_TRNS, KC_TRNS,        KC_TRNS,     KC_TRNS,        KC_TRNS, KC_TRNS,    KC_TRNS,
+       KC_TRNS, KC_TRNS,        KC_TRNS,     KC_TRNS,        KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
+                 KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE,  KC_TRNS, KC_TRNS,
+                          KC_MPLY, KC_MPRV, KC_MNXT,  KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS,
+       KC_TRNS,
+       KC_TRNS,  KC_WBAK, KC_WFWD
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/naps62/readme.md b/keyboards/ergodox/keymaps/naps62/readme.md
new file mode 100644 (file)
index 0000000..14728e4
--- /dev/null
@@ -0,0 +1,29 @@
+# ErgoDox EZ naps62 Configuration
+
+## Motivation
+
+I wanted a layout that suited my Linux & Vim usage. I also didn't like the lack of efficient access to some of the more common special characters used in programming.
+
+## Key features / changes
+
+### Base Layer (L1)
+
+* **No `MT(mod, kc)` keys (modifier when pressed, key when tapped).** Those keys work with a global timeout. When a key press is shorter than the timeout, it's considered a tap, otherwise it's a hold. I couldn't find any particular timeout that would work for me. I need to use mods extremely fast, but also want the confort of using them more slowly in other occasions. So I gave up on this feature altogether.
+* **Direct access to `{}[]`.** When programming, these are used extremely often. I was still getting used to the coder layer, and I prefer the arrows on the home row, so I used the bottom-right keys for this.
+* **Layer keys everywhere.** I either use my little finger or my index finger to go to L1, whichever is more confortable in any given situation. L2 is not used while coding/writing, so I don't need an extremely-optimized access to it.
+* **Lang key.** This is nothing more than `Super-Space` combo, which in my systems (both Linux & Windows) is the shortcut to change the keyboard language. I'm Portuguese, so I often cycle between US layout for coding, and PT layout for writing.
+* **Special chars on the right-most column.** I only use Ctrl & Shift keys on the left side, so I used the right keys to include some of the more useful special characters as well.
+
+### Coder Layer (L2)
+
+* The `=` and `-` signs where nowhere to be found. `-` was already on the base layer, but it's still useful to have a fully-featured NumPad on the coder layer.
+
+### Media Layer (L3)
+
+* **Better media keys**. Why was Play/Pause so far away? And where was Mute? I put all my media keys close to each other, including the missing ones
+* **Arrow keys on home row.** I use vim, so I'm always on my home row. I use this sometimes to get around, but not as often as to need them on the base row. I'm fine with them here
+* I don't use mouse keys. They're still set up, and I made some changes as an experiment, but I mostly forgot they exist by now.
+
+## Author
+
+[Miguel Palhas](https://github.com/naps62)
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png
new file mode 100644 (file)
index 0000000..544b565
Binary files /dev/null and b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png differ
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c
new file mode 100644 (file)
index 0000000..1d505f8
--- /dev/null
@@ -0,0 +1,180 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_norwegian.h"
+
+#define BASE 0 // default layer
+#define BASE_MAC 1 // default layer mac
+#define NUMB_FUNC 2 // numbers and function keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Basic layer PC
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |    *   |   [  |   ]  |   {  |   }  |   ~  |Mac/PC|           |   ^  |   $  |   (  |   )  |   <  |   >  |   @    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |    +   |   Q  |   W  |   E  |   R  |   T  |  "   |           |   '  |   Y  |   U  |   I  |   O  |   P  |   Å    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |    /   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ø  |   Æ    |
+ * |--------+------+------+------+------+------|  ;   |           |   =  |------+------+------+------+------+--------|
+ * |    -   |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  | RIGHT| DOWN |   UP |   _    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Alt/esc|  !  |   ?  |   :  | TAB  |                                       | LEFT |  _  |   &   |   |  |Num/fn|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,--------------.
+ *                                        |   #  |  `   |       |Insert|   %   |
+ *                                 ,------|------|------|       |------+-------+------.
+ *                                 |      |      |  ´   |       |  Del |       |      |
+ *                                 | Shift|Ctrl/.|------|       |------| Enter |Space |
+ *                                 |      |      |GUI/, |       | Bspc |       |      |
+ *                                 `--------------------'       `---------------------'
+ */
+[BASE] = KEYMAP(
+        // left hand
+        KC_PAST,       NO_LBRC, NO_RBRC, NO_LCBR,  NO_RCBR, KC_FN2,  TG(1),
+        KC_PPLS,         KC_Q,         KC_W,    KC_E,   KC_R,   KC_T,   NO_QUO2,
+        KC_PSLS,         KC_A,         KC_S,    KC_D,   KC_F,   KC_G,
+        KC_PMNS,        KC_Z,         KC_X,    KC_C,   KC_V,   KC_B,   NO_SCLN,
+        ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB,
+                                                      KC_HASH, KC_FN7,
+                                                              KC_FN6,
+                                               KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA),
+        // right hand
+             KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
+             NO_APOS,      KC_Y,    KC_U,    KC_I,      KC_O,     KC_P,   NO_AA  ,
+                           KC_H,    KC_J,    KC_K,      KC_L,  NO_OSLH,    NO_AE,
+             NO_EQL,        KC_N,    KC_M, KC_RIGHT,  KC_DOWN,   KC_UP,    NO_BSLS,
+                                  KC_LEFT,  NO_UNDS, NO_AMPR,  NO_PIPE,    OSL(2),
+             KC_INSERT,  KC_PERC,
+             KC_DELT,
+             KC_BSPC,KC_ENT,KC_SPC
+    ),
+/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   \    |      |      |   {  |   }  |      |      |           |      |   $  |      |      |  <   |   >  |    @   |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |  '   |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |,/Ctrl|                                       |      |      |  `   |      |Num/fn|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |  `   |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |   ´  |       |      |      |      |
+ *                                 |      |GUI/. |------|       |------|      |      |
+ *                                 |      |      |crtl/,|       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[BASE_MAC] = KEYMAP(
+       KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, NO_GRV_MAC,
+                                                    KC_FN10,
+                                  KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA),
+    // right hand
+       KC_TRNS,  NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
+       NO_APOS_MAC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC,
+                          KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2),
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Number ++´ánd Fn layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |  F9  |  F10 |  F11 |  F12 |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  8   |  7   |  6   |   5  |  9   |      |           |      |      |  F5  |  F6  |  F7  |  F8  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |  4   |  3   |  2   |   1  |  0   |------|           |------|      |  F1  |  F2  |  F3  |  F4  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |  END | PGDWN| PGUP |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[NUMB_FUNC] = KEYMAP(
+       NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS,
+       NO_SLSH , KC_4   , KC_3   , KC_2   , KC_1   , KC_0,
+       NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS,
+                 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
+       KC_TRNS,  KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
+                          KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
+
+enum macro_id {
+    TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO,  GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+    [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
+    [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
+    [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
+    [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
+    [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
+    [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
+    [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
+    [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
+    [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    keyevent_t event = record->event;
+
+    switch (id) {
+        case TILDE_NO:
+            return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
+        case LESS_NO:
+            return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
+        case GRTR_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
+        case CIRC_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
+        case ACUT_NO:
+            return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC),  END ) : MACRO_NONE);
+        case GRV_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT),  END ) : MACRO_NONE);
+        case LESS_NO_MAC:
+            return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
+        case GRTR_NO_MAC:
+            return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
+        case ACUT_NO_MAC:
+            return (event.pressed ? MACRO( T(EQL), T(SPC),  END ) : MACRO_NONE);
+    }
+    return MACRO_NONE;
+};
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md
new file mode 100644 (file)
index 0000000..f7e8baf
--- /dev/null
@@ -0,0 +1,30 @@
+# Norwegian setup with osx/pc toggle
+
+## Motivation
+I wanted a Norwegian setup that worked in a similar way on both my Mac and PC. I also wanted the keyboard to translate from a standard Norwegian keyboard OS setup.
+
+## Overview
+The setup is created to be programmer friendly.
+- Most of the symbols used in code can be activated without using layers or shift key.
+- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb or the wrist.
+- Navigation is prioritized, arrows below the home row.
+
+## PC/Mac toggle
+The default setup is for Norwegian keyboard setting(on a PC(Windows or Linux) or Mac. Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard.
+
+## Layers
+Since symbols are prioritized in this setup, numbers and function keys are on a new layer. The easiest way to use the layer switch(and also the alt key), is to push your hand right below the little finger, on the key. You will then have all your fingers free to type numbers or press function keys.
+
+## Tap-shift
+Tap for the next character to be shifted, hold down for regular shift.
+
+## Comma dot and escape
+Comma, dot and escape share buttons with modifier keys. Tap to access these keys, hold down to use the keys as modifier keys.
+
+## Numpad symbols
++-/* are implemented with the numpad keycodes. The benefit is that they will work better with shortcuts in certain programs. For some reason, the default setting in the osx terminal is to not accept numpad characters for '/' and '-'. For a solution, see https://discussions.apple.com/thread/6613968?start=0&tstart=0.
+If you really need the norwegian symbols in a program, you can access them using the number toggle button. 
+
+## Layout
+
+![keyboard-layout](keyboard-layout.png)
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png
new file mode 100644 (file)
index 0000000..462de5c
Binary files /dev/null and b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png differ
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c
new file mode 100644 (file)
index 0000000..acf74a4
--- /dev/null
@@ -0,0 +1,180 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_norwegian.h"
+
+#define BASE 0 // default layer
+#define BASE_MAC 1 // default layer mac
+#define NUMB_FUNC 2 // numbers and function keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Basic layer PC
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |    *   |   [  |   ]  |   {  |   }  |   ~  |Mac/PC|           |   ^  |   $  |   (  |   )  |   <  |   >  |   @    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |    +   |   Q  |   W  |   F  |   P  |   G  |  "   |           |   '  |   J  |   L  |   U  |   Y  |   Å  |   Æ    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |    /   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |   O  |   Ø    |
+ * |--------+------+------+------+------+------|  ;   |           |   =  |------+------+------+------+------+--------|
+ * |    -   |   Z  |   X  |   C  |   V  |   B  |      |           |      |   K  |   M  | RIGHT| DOWN |   UP |   _    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Alt/esc|  !  |   ?  |   :  | TAB  |                                       | LEFT |  _  |   &   |   |  |Num/fn|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,--------------.
+ *                                        |   #  |  `   |       |Insert|   %   |
+ *                                 ,------|------|------|       |------+-------+------.
+ *                                 |      |      |  ´   |       |  Del |       |      |
+ *                                 | Shift|Ctrl/.|------|       |------| Enter |Space |
+ *                                 |      |      |GUI/, |       | Bspc |       |      |
+ *                                 `--------------------'       `---------------------'
+ */
+[BASE] = KEYMAP(
+        // left hand
+        KC_PAST,       NO_LBRC, NO_RBRC, NO_LCBR,  NO_RCBR, KC_FN2,  TG(1),
+        KC_PPLS,         KC_Q,         KC_W,    KC_F,   KC_P,   KC_G,   NO_QUO2,
+        KC_PSLS,         KC_A,         KC_R,    KC_S,   KC_T,   KC_D,
+        KC_PMNS,        KC_Z,         KC_X,    KC_C,   KC_V,   KC_B,   NO_SCLN,
+        ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB,
+                                                      KC_HASH, KC_FN7,
+                                                              KC_FN6,
+                                               KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA),
+        // right hand
+             KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
+             NO_APOS,      KC_J,    KC_L,    KC_U,      KC_Y,     NO_AA,   NO_AE  ,
+                           KC_H,    KC_N,    KC_E,      KC_I,      KC_O,    NO_OSLH,
+             NO_EQL,        KC_K,    KC_M, KC_RIGHT,  KC_DOWN,   KC_UP,    NO_BSLS,
+                                  KC_LEFT,  NO_UNDS, NO_AMPR,  NO_PIPE,    OSL(2),
+             KC_INSERT,  KC_PERC,
+             KC_DELT,
+             KC_BSPC,KC_ENT,KC_SPC
+    ),
+/* Keymap 1: Basic layer MAC (Same as pc, except for cmd/ctrl, which are swapped)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   \    |      |      |   {  |   }  |      |      |           |      |   $  |      |      |  <   |   >  |    @   |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |  '   |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |,/Ctrl|                                       |      |      |  `   |      |Num/fn|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |  `   |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |   ´  |       |      |      |      |
+ *                                 |      |GUI/. |------|       |------|      |      |
+ *                                 |      |      |crtl/,|       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[BASE_MAC] = KEYMAP(
+       KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, NO_GRV_MAC,
+                                                    KC_FN10,
+                                  KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA),
+    // right hand
+       KC_TRNS,  NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
+       NO_APOS_MAC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC,
+                          KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2),
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Number ++´ánd Fn layer pc
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |  F9  |  F10 |  F11 |  F12 |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  8   |  7   |  6   |   5  |  9   |      |           |      |      |  F5  |  F6  |  F7  |  F8  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |  4   |  3   |  2   |   1  |  0   |------|           |------|      |  F1  |  F2  |  F3  |  F4  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |  END | PGDWN| PGUP |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[NUMB_FUNC] = KEYMAP(
+       NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS,
+       NO_SLSH , KC_4   , KC_3   , KC_2   , KC_1   , KC_0,
+       NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS,
+                 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
+       KC_TRNS,  KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
+                          KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
+
+enum macro_id {
+    TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO,  GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+    [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
+    [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
+    [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
+    [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
+    [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
+    [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
+    [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
+    [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
+    [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    keyevent_t event = record->event;
+
+    switch (id) {
+        case TILDE_NO:
+            return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
+        case LESS_NO:
+            return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
+        case GRTR_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
+        case CIRC_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
+        case ACUT_NO:
+            return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC),  END ) : MACRO_NONE);
+        case GRV_NO:
+            return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT),  END ) : MACRO_NONE);
+        case LESS_NO_MAC:
+            return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
+        case GRTR_NO_MAC:
+            return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
+        case ACUT_NO_MAC:
+            return (event.pressed ? MACRO( T(EQL), T(SPC),  END ) : MACRO_NONE);
+    }
+    return MACRO_NONE;
+};
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md
new file mode 100644 (file)
index 0000000..aaaec3e
--- /dev/null
@@ -0,0 +1,30 @@
+# Norwegian Colemak setup with osx/pc toggle
+
+## Motivation
+I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I also wanted the keyboard to translate from a standard Norwegian keyboard OS setup.
+
+## Overview
+The setup is created to be programmer friendly.
+- Most of the symbols used in code can be activated without using layers or shift key.
+- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb or the wrist.
+- Navigation is prioritized, arrows below the home row.
+
+## PC/Mac toggle
+The default setup is for Norwegian keyboard setting(not colemak software variants) on a PC(Windows or Linux) or Mac. Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard.
+
+## Layers
+Since symbols are prioritized in this setup, numbers and function keys are on a new layer. The easiest way to use the layer switch(and also the alt key), is to push your hand right below the little finger, on the key. You will then have all your fingers free to type numbers or press function keys.
+
+## Tap-shift
+Tap for the next character to be shifted, hold down for regular shift.
+
+## Comma dot and escape
+Comma, dot and escape share buttons with modifier keys. Tap to access these keys, hold down to use the keys as modifier keys.
+
+## Numpad symbols
++-/* are implemented with the numpad keycodes. The benefit is that they will work better with shortcuts in certain programs. For some reason, the default setting in the osx terminal is to not accept numpad characters for '/' and '-'. For a solution, see https://discussions.apple.com/thread/6613968?start=0&tstart=0.
+If you really need the norwegian symbols in a program, you can access them using the number toggle button. 
+
+## Layout
+
+![keyboard-layout](keyboard-layout.png)
diff --git a/keyboards/ergodox/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/ordinary/keymap.c
new file mode 100644 (file)
index 0000000..302c41c
--- /dev/null
@@ -0,0 +1,429 @@
+#include "ergodox.h"
+#include "led.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+
+#define BASE   0 // default layer
+#define SYMB   1 // symbols layer
+#define MDIA   2 // media layer
+#define SPEC   3 // special layer
+
+#define LSymb 10 // left symbol-shift key
+#define LMdia 11 // left media-shift key
+#define LSpec 12 // left special-shift key
+#define RSymb 13 // right symbol-shift key
+#define RMdia 14 // right media-shift key
+#define RSpec 15 // right special-shift key
+
+#define MUL   20 // mouse up left
+#define MUR   21 // mouse up right
+#define MDL   22 // mouse down left
+#define MDR   23 // mouse down right
+
+/*
+ * The Ordinary Layout for the Ergodox EZ keyboard, v4.20
+ *
+ * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+ *
+ * No rights reserved. This software is in the public domain.
+ * Credit me if you are friendly but if you're a jerk don't bother.
+ * If you use or modify this layout I would love to hear from you.
+ *
+ * Details: readme.md
+ *          https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/******* Base Layer ****************************************************************************************************
+ *
+ * ,------------------------------------------------------.       ,------------------------------------------------------.
+ * | Special `~ |   1  |   2  |   3  |   4  |   5  | ESC  |       |  -   |   6  |   7  |   8  |   9  |   0  | =+ Special |
+ * |------------+------+------+------+------+-------------|       |------+------+------+------+------+------+------------|
+ * | Media  Tab |   Q  |   W  |   E  |   R  |   T  |   [  |       |  ]   |   Y  |   U  |   I  |   O  |   P  | \|   Media |
+ * |------------+------+------+------+------+------|      |       |      |------+------+------+------+------+------------|
+ * | Symbol     |   A  |   S  |   D  |   F  |   G  |------|       |------|   H  |   J  |   K  |   L  |  ;   | '"  Symbol |
+ * |------------+------+------+------+------+------|Shift |       | Tab  |------+------+------+------+------+------------|
+ * | Capitals   |   Z  |   X  |   C  |   V  |   B  | -Tab |       |      |   N  |   M  |   ,  |   .  |  /   |   Capitals |
+ * `------------+------+------+------+------+-------------'       `-------------+------+------+------+------+------------'
+ *      | LCtrl | Meh  |Hyper | LAlt | LGui |                                   | RGui | RAlt | Hyper|  Meh | RCtrl |
+ *      `-----------------------------------'                                   `-----------------------------------'
+ *                                          ,-------------.       ,-------------.
+ *                                          | Home | End  |       | Left | Right|
+ *                                   ,------|------|------|       |------+------+------.
+ *                                   |      |      | PgUp |       |  Up  |      |      |
+ *                                   |Backsp| Del  |------|       |------| Enter| Space|
+ *                                   |      |      | PgDn |       | Down |      |      |
+ *                                   `--------------------'       `--------------------'
+ */
+[BASE] = KEYMAP(
+// left hand
+ F(LSpec)  ,KC_1   ,KC_2   ,KC_3   ,KC_4  ,KC_5  ,KC_ESC
+,F(LMdia)  ,KC_Q   ,KC_W   ,KC_E   ,KC_R  ,KC_T  ,KC_LBRC
+,M(LSymb)  ,KC_A   ,KC_S   ,KC_D   ,KC_F  ,KC_G
+,KC_LSFT   ,KC_Z   ,KC_X   ,KC_C   ,KC_V  ,KC_B  ,LSFT(KC_TAB)
+,KC_LCTL   ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
+                                         ,KC_HOME,KC_END
+                                                 ,KC_PGUP
+                                 ,KC_BSPC,KC_DEL ,KC_PGDN
+                                                                  // right hand
+                                                                 ,KC_MINS ,KC_6   ,KC_7   ,KC_8   ,KC_9    ,KC_0     ,F(RSpec)
+                                                                 ,KC_RBRC ,KC_Y   ,KC_U   ,KC_I   ,KC_O    ,KC_P     ,F(RMdia)
+                                                                          ,KC_H   ,KC_J   ,KC_K   ,KC_L    ,KC_SCLN  ,F(RSymb)
+                                                                 ,KC_TAB  ,KC_N   ,KC_M   ,KC_COMM,KC_DOT  ,KC_SLSH  ,KC_RSFT
+                                                                                  ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH   ,KC_RCTL
+                                                                 ,KC_LEFT ,KC_RGHT
+                                                                 ,KC_UP
+                                                                 ,KC_DOWN ,KC_ENT ,KC_SPC
+    ),
+
+/******* Symbols Layer *************************************************************************************************
+ *
+ * ,-----------------------------------------------------.       ,-----------------------------------------------------.
+ * |           |  F1  |  F2  |  F3  |  F4  |  F5  | Esc  |       |  -   |  F6  |  F7  |  F8  |  F9  |  F10 |           |
+ * |-----------+------+------+------+------+-------------|       |------+------+------+------+------+------+-----------|
+ * |           |   !  |   @  |   {  |   }  |   &  |  <   |       |  >   |   |  |   7  |   8  |   9  |   /  |           |
+ * |-----------+------+------+------+------+------|      |       |      |------+------+------+------+------+-----------|
+ * |           |   #  |   $  |   (  |   )  |   `  |------|       |------|   /  |   4  |   5  |   6  |   *  |           |
+ * |-----------+------+------+------+------+------| Tab  |       | Shift|------+------+------+------+------+-----------|
+ * |           |   %  |   ^  |   [  |   ]  |   ~  |      |       |  -Tab|   \  |   1  |   2  |   3  |   -  |           |
+ * `-----------+------+------+------+------+-------------'       `-------------+------+------+------+------+-----------'
+ *     | LCtrl | Meh  |Hyper | LAlt | LGui |                                   |   0  |   .  |   =  |   +  |  Ent  |
+ *     `-----------------------------------'                                   `-----------------------------------'
+ *                                         ,-------------.       ,-------------.
+ *                                         | Left | Right|       | Home | End  |
+ *                                  ,------|------|------|       |------+------+------.
+ *                                  |      |      |  Up  |       | PgUp |      |      |
+ *                                  |Space |Enter |------|       |------|BackSp| Del  |
+ *                                  |      |      | Down |       | PgDn |      |      |
+ *                                  `--------------------'       `--------------------'
+ */
+[SYMB] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,KC_ESC
+,KC_TRNS ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
+,KC_TRNS ,KC_HASH ,KC_DLR  ,KC_LPRN ,KC_RPRN ,KC_GRV
+,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
+,KC_LCTL ,KC_MEH  ,KC_HYPR ,KC_LALT ,KC_LGUI
+                                             ,KC_LEFT ,KC_RGHT
+                                                      ,KC_UP
+                                    ,KC_SPC  ,KC_ENT  ,KC_DOWN
+                                                                 // right hand
+                                                                 ,KC_MINS     ,KC_F6   ,KC_F7 ,KC_F8  ,KC_F9 ,KC_F10  ,KC_TRNS
+                                                                 ,LSFT(KC_DOT),KC_PIPE ,KC_7  ,KC_8   ,KC_9  ,KC_SLSH ,KC_TRNS
+                                                                              ,KC_SLSH ,KC_4  ,KC_5   ,KC_6  ,KC_ASTR ,KC_TRNS
+                                                                 ,LSFT(KC_TAB),KC_BSLS ,KC_1  ,KC_2   ,KC_3  ,KC_MINS ,KC_TRNS
+                                                                                       ,KC_0  ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
+                                                                 ,KC_HOME     ,KC_END
+                                                                 ,KC_PGUP
+                                                                 ,KC_PGDN     ,KC_BSPC ,KC_DEL
+),
+
+/******* Media Layer *******************************************************************************************************
+ *
+ * ,---------------------------------------------------------------.    ,---------------------------------------------------------------.
+ * |      |   F11   |   F12   |   F13   |   F14   |   F15   | Esc  |    |      |   F16   |   F17   |   F18   |   F19   |   F20   |      |
+ * |------+---------+---------+---------+---------+----------------|    |------+---------+---------+---------+---------+---------+------|
+ * |      |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll|    |Scroll|PrintScrn|   Home  |    Up   |   PgUp  |   Mail  |      |
+ * |------+---------+---------+---------+---------+---------|  Up  |    |  Up  |---------+---------+---------+---------+---------+------|
+ * |      |  Sleep  |MouseLeft|MouseDown|MouseRght|Volume Dn|------|    |------| Num Lock|   Left  |   Down  |   Right | MyComp  |      |
+ * |------+---------+---------+---------+---------+---------|Scroll|    |Scroll|---------+---------+---------+---------+---------+------|
+ * |      |         |MouseDnLf|MouseDown|MouseDnRg|  Mute   | Down |    | Down |         |   End   |   Down  |   PgDn  |         |      |
+ * `------+---------+---------+---------+---------+----------------'    `----------------+---------+---------+---------+---------+------'
+ *  |LCtrl|   Meh   |  MClick | LClick  |  R Click|                                      |Cmd/Insrt|Optn/Del | Hyper   |  Meh    |RCtrl|
+ *  `---------------------------------------------'                                      `---------------------------------------------'
+ *                                                   ,-------------.    ,-------------.
+ *                                                   | Stop |Refrsh|    | Prev | Next |
+ *                                            ,------|------|------|    |------+------+------.
+ *                                            |Brwser|Brwser|Search|    |VolUp |      |      |
+ *                                            |Back  | Fwd  |------|    |------| Stop | Play-|
+ *                                            |      |      | Home |    |VolDn |      | Pause|
+ *                                            `--------------------'    `--------------------'
+ */
+[MDIA] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_F11   ,KC_F12  ,KC_F13   ,KC_F14  ,KC_F15  ,KC_ESC
+,KC_TRNS ,KC_POWER ,M(MUL)  ,KC_MS_U  ,M(MUR)  ,KC_VOLU ,KC_WH_U
+,KC_TRNS ,KC_SLEP  ,KC_MS_L ,KC_MS_D  ,KC_MS_R ,KC_VOLD
+,KC_TRNS ,KC_NO    ,M(MDL)  ,KC_MS_D  ,M(MDR)  ,KC_MUTE ,KC_WH_D
+,KC_LCTL ,KC_MEH   ,KC_BTN3 ,KC_BTN1  ,KC_BTN2
+                                               ,KC_WSTP ,KC_WREF
+                                                        ,KC_WSCH
+                                      ,KC_WBAK ,KC_NO   ,KC_WHOM
+                                                                     // right hand
+                                                                     ,KC_NO    ,KC_F16  ,KC_F17       ,KC_F18       ,KC_F19  ,KC_F20  ,KC_TRNS
+                                                                     ,KC_WH_U  ,KC_PSCR ,KC_HOME      ,KC_UP        ,KC_PGUP ,KC_MAIL ,KC_TRNS
+                                                                               ,KC_NLCK ,KC_LEFT      ,KC_DOWN      ,KC_RIGHT,KC_MYCM ,KC_TRNS
+                                                                     ,KC_WH_D  ,KC_NO   ,KC_END       ,KC_DOWN      ,KC_PGDN ,KC_NO   ,KC_TRNS
+                                                                                        ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH  ,KC_RCTL
+                                                                     ,KC_MPRV  ,KC_MNXT
+                                                                     ,KC_VOLU
+                                                                     ,KC_VOLD  ,KC_MSTP ,KC_MPLY
+),
+
+/******* Special Layer *****************************************************************************************************
+ *
+ * ,-------------------------------------------------------.    ,-------------------------------------------------------.
+ * |             |  Esc |      |      |      |      |      |    |      |      |      |      |   -  | Bspc |             |
+ * |-------------+------+------+------+------+-------------|    |------+------+------+------+------+------+-------------|
+ * | Media Lock  |      |      |      |      |      |      |    |      |      |      |      |  [   |   ]  | Media Lock  |
+ * |-------------+------+------+------+------+------|      |    |      |------+------+------+------+------+-------------|
+ * | Symbol Lock |      |      |      |      |      |------|    |------|      |      |      |      |      | Symbol Lock |
+ * |-------------+------+------+------+------+------|      |    |      |------+------+------+------+------+-------------|
+ * | Caps Lock   |      |      |      |      |      |      |    |      |      |      |      |      |      | Caps Lock   |
+ * `-------------+------+------+------+------+-------------'    `-------------+------+------+------+------+-------------'
+ *      |        |      |      |      |      |                                |      |      |      |      |        |
+ *      `------------------------------------'                                `------------------------------------'
+ *                                         ,-------------.     ,-------------.
+ *                                         |      |      |     |      |      |
+ *                                  ,------|------|------|     |------+------+------.
+ *                                  |      |      |      |     |      |      |      |
+ *                                  |      |      |------|     |------|      |      |
+ *                                  |      |      |      |     |      |      |      |
+ *                                  `--------------------'     `--------------------'
+ */
+[SPEC] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_ESC  ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                             ,KC_TRNS ,KC_TRNS
+                                                      ,KC_TRNS
+                                     ,KC_TRNS,KC_TRNS ,KC_TRNS
+                                                             // right hand
+                                                             ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_MINS ,KC_BSPC ,KC_TRNS
+                                                             ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_LBRC ,KC_RBRC ,KC_TRNS
+                                                                      ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                             ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
+                                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                             ,KC_TRNS ,KC_TRNS
+                                                             ,KC_TRNS
+                                                             ,KC_TRNS ,KC_TRNS ,KC_TRNS
+    )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+     // the faux shift keys are implemented as macro taps
+     [LSymb] = ACTION_MACRO_TAP(LSymb)
+    ,[LMdia] = ACTION_MACRO_TAP(LMdia)
+    ,[LSpec] = ACTION_MACRO_TAP(LSpec)
+    ,[RSymb] = ACTION_MACRO_TAP(RSymb)
+    ,[RMdia] = ACTION_MACRO_TAP(RMdia)
+    ,[RSpec] = ACTION_MACRO_TAP(RSpec)
+};
+
+uint16_t symb_shift = 0;
+uint16_t mdia_shift = 0;
+uint16_t spec_shift = 0;
+
+bool mdia_lock = false;
+bool symb_lock = false;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    switch(id) {
+        // There are two shift keys for each layer so we increment a layer_shift var when one
+        // is pressed and decrement when one is released. If both are pressed at the same time
+        // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
+        // only because sometimes rapid pressing led to irregular events; this way the states
+        // are self healing during use.
+
+        case LSymb:                                               //
+        if (record->event.pressed) {                              // when the LSymb button is pressed
+            if(++symb_shift > 2) mdia_shift = 2;                  // increment the symb shift count, max two
+            if(spec_shift) symb_lock = !symb_lock;                // if the Special layer is on, toggle the shift lock
+            layer_on(SYMB);                                       // in any case, turn on the Symbols layer
+        } else {                                                  // when the LSymb button is released
+            if(--symb_shift < 0) symb_shift = 0;                  // decrement the shift count, minimum zero
+            if((!symb_shift) && (!symb_lock)) layer_off(SYMB);    // if both shifts are released and the lock is off, turn off the Symbols layer
+        }
+        break;
+
+        case LMdia:
+        if (record->event.pressed) {
+           if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+                register_code(KC_TAB);
+            } else {
+                if(spec_shift) mdia_lock = !mdia_lock;
+                if(++mdia_shift > 2) mdia_shift = 2;
+                layer_on(MDIA);
+            }
+        } else {
+            if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+                unregister_code(KC_TAB);
+            } else {
+                if(--mdia_shift < 0) mdia_shift = 0;
+                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+            }
+        }
+        break;
+
+        case LSpec:
+        if (record->event.pressed) {                                     // when the LSpec button is pressed
+            if(symb_shift) symb_lock == !symb_lock;                      // if another layer button is engaged, then
+            else if(mdia_shift) mdia_lock = !mdia_lock;                  // lock that layer, be it caps or symb or mdia
+            else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+                register_code(KC_GRV);                                   // otherwise, if it's an uninterrupted tap, emit a char
+            } else {
+                if(++spec_shift > 2) spec_shift = 2;
+                layer_on(SPEC);                                          // otherwise, turn on the Special layer
+            }
+        } else {
+            if(record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+                unregister_code(KC_GRV);
+            } else {
+                if(--spec_shift < 0) spec_shift = 0;
+                if(!spec_shift) layer_off(SPEC);
+            }
+        }
+        break;
+
+        case RSymb:
+        if (record->event.pressed) {
+            if (record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) {
+                register_code(KC_QUOT);
+            } else {
+                if(++symb_shift > 2) symb_shift = 2;
+                if(spec_shift) symb_lock = !symb_lock;
+                layer_on(SYMB);
+            }
+        } else {
+            if(record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) {
+                unregister_code(KC_QUOT);
+            } else {
+                if(--symb_shift < 0) symb_shift = 0;
+                if((!symb_shift) && (!symb_lock)) layer_off(SYMB);
+            }
+        }
+        break;
+
+        case RMdia:
+        if (record->event.pressed) {
+            if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+                register_code(KC_BSLS);
+            } else {
+                if(++mdia_shift > 2) mdia_shift = 2;
+                if(spec_shift) mdia_lock = !mdia_lock;
+                layer_on(MDIA);
+            }
+        } else {
+            if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+                unregister_code(KC_BSLS);
+            } else {
+                if(--mdia_shift < 0) mdia_shift = 0;
+                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+            }
+        }
+        break;
+
+        case RSpec:
+        if (record->event.pressed) {
+            if(symb_shift) symb_lock = !symb_lock;
+            else if(mdia_shift) mdia_lock = !mdia_lock;
+            else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+                register_code(KC_EQL);
+            } else {
+                if(++spec_shift > 2) spec_shift = 2;
+                layer_on(SPEC);
+            }
+        } else {
+            if(record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+                unregister_code(KC_EQL);
+            } else {
+                if(--spec_shift < 0) spec_shift = 0;
+                if(!spec_shift) layer_off(SPEC);
+            }
+        }
+        break;
+
+        // mouse diagonals
+
+        case MUL: // mouse up left
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_UP);
+            mousekey_on(KC_MS_LEFT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_UP);
+            mousekey_off(KC_MS_LEFT);
+            mousekey_send();
+        }
+        break;
+
+        case MUR: // mouse up right
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_UP);
+            mousekey_on(KC_MS_RIGHT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_UP);
+            mousekey_off(KC_MS_RIGHT);
+            mousekey_send();
+        }
+        break;
+
+        case MDL: // mouse down left
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_DOWN);
+            mousekey_on(KC_MS_LEFT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_DOWN);
+            mousekey_off(KC_MS_LEFT);
+            mousekey_send();
+        }
+        break;
+
+        case MDR: // mouse down right
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_DOWN);
+            mousekey_on(KC_MS_RIGHT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_DOWN);
+            mousekey_off(KC_MS_RIGHT);
+            mousekey_send();
+        }
+        break;
+
+        default:
+            // none
+            break;
+    }
+
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    // shift or caps lock turns on red light
+    if((keyboard_report->mods & MOD_BIT(KC_LSFT))
+    || (keyboard_report->mods & MOD_BIT(KC_RSFT))
+    || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
+        ergodox_right_led_1_on();
+    } else {
+        ergodox_right_led_1_off();
+    }
+
+    // Symbol layer turns on green light
+    if(layer_state & (1UL<<SYMB)) {
+        ergodox_right_led_2_on();
+    } else {
+        ergodox_right_led_2_off();
+    }
+
+    // Media layer turns on blue light
+    if(layer_state & (1UL<<MDIA)) {
+        ergodox_right_led_3_on();
+    } else {
+        ergodox_right_led_3_off();
+    }
+};
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-base.png b/keyboards/ergodox/keymaps/ordinary/ordinary-base.png
new file mode 100644 (file)
index 0000000..831db4f
Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-base.png differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-base.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-base.txt
new file mode 100644 (file)
index 0000000..7763c3d
--- /dev/null
@@ -0,0 +1,27 @@
+[{x:3.5},"#\n3",{x:10.5},"*\n8"],
+[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
+[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
+[{y:-0.875,c:"#c6c600",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#c6c600",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc"},"E",{x:10.5},"I"],
+[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
+[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
+[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Q",{x:14.5},"P",{c:"#c6c600",t:"#002299",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000"},"D",{x:10.5},"K"],
+[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
+[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
+[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"A",{x:14.5},":\n;",{c:"#c6c600",t:"#007d00",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
+[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
+[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
+[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Z",{x:14.5},"?\n/",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
+[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
+[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Home","End"],
+[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"],
+[{x:2},"Page\n\n\n\n\n\nDown"],
+[{r:-30,rx:13,y:-1,x:-3},"Left","Right"],
+[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"],
+[{x:-3},"Down"]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png
new file mode 100644 (file)
index 0000000..5ff3f53
Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt
new file mode 100644 (file)
index 0000000..e1467b2
--- /dev/null
@@ -0,0 +1,27 @@
+[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"],
+[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"],
+[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"],
+[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#1e8fff"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
+[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#1e8fff",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#9977ee"},"Print\n\n\n\n\n\nScreen"],
+[{y:-0.875,c:"#000000",t:"#3f68ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#3f68ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
+[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
+[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#c6c600",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#1e8fff",t:"#000000",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
+[{y:-0.75,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
+[{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff",fa:[0,0,0,1]},"Delete\n\n\nOption"],
+[{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert\n\n\nCmd",{x:1,c:"#dddd77"},"Hyper"],
+[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
+[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
+[{x:2},"Home\n\n\nBrowser"],
+[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
+[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#6633ee",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
+[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nDown"]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png
new file mode 100644 (file)
index 0000000..4fb9d1d
Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt
new file mode 100644 (file)
index 0000000..97f40f9
--- /dev/null
@@ -0,0 +1,27 @@
+[{x:3.5,a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"_\n\n\n\n\n\n-"],
+[{y:-0.875,x:5.5,a:7},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
+[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#ff8500"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"{\n["],
+[{y:-0.875,x:5.5,a:7},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
+[{y:-0.875,c:"#c6c600",t:"#002299",a:4,w:1.5},"Media\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,a:4},"\n\n}\n]",{c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock"],
+[{y:-0.625,x:6.5,c:"#cccccc",t:"#000000",a:7,h:1.5},"",{x:4.5,h:1.5},""],
+[{y:-0.75,x:3.5},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""],
+[{h:2},"",{h:2},"",""],
+[{x:2},""],
+[{r:-30,rx:13,y:-1,x:-3},"",""],
+[{x:-3},"",{h:2},"",{h:2},""],
+[{x:-3},""]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png
new file mode 100644 (file)
index 0000000..dd90863
Binary files /dev/null and b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt
new file mode 100644 (file)
index 0000000..001bf37
--- /dev/null
@@ -0,0 +1,27 @@
+[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
+[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
+[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
+[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
+[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"!",{x:14.5,c:"#89b087"},"/",{c:"#c6c600",t:"#002299",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#bbddbb",t:"#000000"},"(",{x:10.5,c:"#89b087"},"5"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
+[{y:-0.875,c:"#000000",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
+[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."],
+[{y:-0.875,x:2.5,c:"#dddd77"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="],
+[{y:-0.75,x:0.5,c:"#dddd77"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Left","Right"],
+[{h:2},"Space",{h:2},"Enter","Up"],
+[{x:2},"Down"],
+[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
+[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
+[{x:-3},"Page\n\n\n\n\n\nDown"]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/readme.md b/keyboards/ergodox/keymaps/ordinary/readme.md
new file mode 100644 (file)
index 0000000..820b80b
--- /dev/null
@@ -0,0 +1,90 @@
+# The Ordinary Layout, a familiar and powerful layout #
+
+The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
+
+The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards.
+
+Nicholas Keene
+ordinarylayout@nicholaskeene.com
+no rights reserved, use for any purposes, credit me if you are a nice person
+
+## The Base Layout ##
+
+* *White Keys* are all the normal characters and symbols in all the normal locations (except for the brackets).
+* *Modifier Keys* are light yellow and in the traditional location: Control, Option, Command, plus Hyper and Meh.
+* *Shift Keys* are dark yellow, found on the outsides of the keyboard. Capitals Shift (traditional shift) is found in the usual place and above that is found Symbol Shift, Media Shift, and Special Shift (Shift Lock).
+* Several of the shift keys double for entry of characters which would typically be in those locations.
+* *Thumb Keys* shown in orange are for text navigation and manipulation.
+* *Escape* is red and it is always found in that location no matter what.
+
+![Ordinary base layout](ordinary-base.png)
+
+The four big orange keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
+
+The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
+
+## The Symbols Layer ##
+
+* *Symbols* shown in light green. All kinds of brackets are available on this layer. Ampersand and Pipe justapose each other. Pipe, slash, and backslash are arranged in a column.
+* *F-Keys* are bright green and overlay the row of numerals.
+* *Number pad* in dark green under the right hand includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads so that NumLock is not needed.
+* *Thumb keys* on this layer are the *reverse* of the orange keys on the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
+
+![Ordinary symbol layout](ordinary-symbol.png)
+
+The Symbols Layer is based on the Coder Layer from the default Ergodox EZ layout. I slightly rearranged the symbols, added some symbols, expanded the number pad, and straightened out the F-Keys. It's very handy to have the symbols directly underneath the normal typing keys.
+
+## The Media Layer ##
+
+* *Mouse Cursor Keys* are under the left hand, shown in dark blue. Diagonal keys won't automatically repeat unless combined with other keys. Buttons to left- middle- and right-click the mouse are also featured.
+* *Text Cursor Keys* are under the right hand, shown in dark blue. They overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
+* *Scrolling and Paging* keys are shown in light blue and have some useful redundancy across the layout.
+* Higher-order *F-Keys* are shown in bright green overylaying the numerals.
+* *Application Keys* to control web browsers and audio players are dark purple but don't get too excited because these have weak support on operating systems I've looked at. Good luck.
+* The light purple keys are various operating system keys such as NumLock and Mute and a button to navigate to My Computer (usually your home dir).
+* The dark gray keys do nothing in case you bump them by accident
+
+![Ordinary media layout](ordinary-media.png)
+
+This layer is a substantial extension of the Media layer on the Ergodox EZ default layout. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents.
+
+Keys to directly interact with the operating system are also found on this layer, such as volume and shutdown.
+
+## Switching Between Layers ##
+
+In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active.
+
+Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. Lock the shift keys using the Shift Lock button, which is the same as the Special Shift button.
+
+Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols.
+
+## Special Sequences ##
+
+![Ordinary special layout](ordinary-special.png)
+
+The Special Shift layer is mostly used to lock the shift keys but in order to make this layout more _ordinary_ there are a few special sequences which put some keys near their most common traditional locations.
+
+### Escape ###
+
+The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
+
+The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
+
+### Backspace ###
+
+At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence using the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
+
+### Other Characters ###
+
+The Escape and Backspace special sequences are so useful why not have a few more? You can find dash under 9, left bracket under o, and right bracket under p. That's pretty much all the characters from the top right corner of the keyboard which moved to make room for the columnar layout.
+
+****
+
+The Ordinary Layout for the Ergodox EZ keyboard, v4.20
+
+Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+
+No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
+
+Details: readme.md
+         https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
diff --git a/keyboards/ergodox/keymaps/osx_de/keymap.c b/keyboards/ergodox/keymaps/osx_de/keymap.c
new file mode 100644 (file)
index 0000000..e3b9e11
--- /dev/null
@@ -0,0 +1,364 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_german_osx.h"
+
+#define BASE 0
+#define SYMB 1
+#define MDIA 2
+#define SMLY 3
+#define NUMB 4
+#define EGOS 5
+
+#define M_CTRL_CMDV 0
+#define M_CTRL_CMDC 1
+#define M_MEH_SH_ACUT 2
+#define M_LGUI_SHFT 3
+#define M_CTL_SFT_HASH 4
+#define M_DE_OSX_CIRC_CTRLCMD 5
+#define M_DE_OSX_PLUS_CTRLALT 6
+#define SM_SMILE 7
+#define SM_SMIRK 8
+#define SM_CRY 9
+#define SM_SAD 10
+#define SM_HEART 11
+#define SM_LAUGH 12
+#define SM_KISS 13
+#define SM_FROWN 14
+#define M_TOGGLE_5 15
+
+//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE]=KEYMAP(
+//left half
+    KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH), 
+    KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, 
+    KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, 
+    KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, 
+                  LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN, 
+                                              M(M_MEH_SH_ACUT), TG(MDIA), 
+                                                     KC_HOME, 
+                                       KC_BSPC, KC_DEL, LT(SMLY,KC_END), 
+    //right half
+    M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, 
+    KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, 
+           DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), 
+    KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, 
+                         KC_LEFT, KC_RIGHT, LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), 
+    TG(NUMB), ALL_T(DE_OSX_ACUT), 
+    KC_PGUP, 
+    KC_PGDN, KC_ENT, KC_SPC),
+[SYMB]=KEYMAP(
+//left half
+    KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 
+    KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, 
+    KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, 
+    KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_DEL, KC_TRNS, 
+    //right half
+    M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
+    KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, 
+           DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH, 
+    KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4), 
+                         DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, 
+    KC_F13, KC_F12, 
+    KC_F14, 
+    KC_F15, KC_TRNS, KC_TRNS),
+[MDIA]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, 
+    KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+           KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_WBAK),
+[SMLY]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, 
+           M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+[NUMB]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
+    KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, 
+           KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS, 
+    KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, 
+                         KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+[EGOS]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_F1, KC_F2, 
+                                                     KC_F3, 
+                                       KC_SPC, KC_LCTL, KC_F4, 
+    //right half
+    M(M_TOGGLE_5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+static uint16_t start;
+switch(id) {
+case M_TOGGLE_5:
+//Macro: M_TOGGLE_5//-----------------------
+ if (record->event.pressed){
+           layer_state ^= (1<<5);
+           layer_state &= (1<<5);
+        }
+
+break;
+case M_CTRL_CMDC:
+//Macro: M_CTRL_CMDC//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(D(LCTRL),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),END);
+                       } else {
+                               return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END);
+                       }
+               }
+
+break;
+case M_DE_OSX_PLUS_CTRLALT:
+//Macro: M_DE_OSX_PLUS_CTRLALT//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(D(LCTRL),D(LALT),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LALT),END);
+                       } else {
+                               return MACRO(U(LCTRL),U(LALT),T(RBRC),END);
+                       }
+               }
+
+break;
+case SM_KISS:
+//Macro: SM_KISS//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END);
+               }
+
+break;
+case SM_FROWN:
+//Macro: SM_FROWN//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END);
+               }
+
+break;
+case SM_CRY:
+//Macro: SM_CRY//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
+               }
+
+break;
+case SM_SMILE:
+//Macro: SM_SMILE//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
+               }
+
+break;
+case SM_SMIRK:
+//Macro: SM_SMIRK//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
+               }
+
+break;
+case M_LGUI_SHFT:
+//Macro: M_LGUI_SHFT//-----------------------
+if (record->event.pressed){
+                       return MACRO(D(LGUI),D(LSFT),END);
+               }else{
+                       return MACRO(U(LGUI),U(LSFT),END);
+               }
+
+break;
+case SM_HEART:
+//Macro: SM_HEART//-----------------------
+if (record->event.pressed) {
+                       return MACRO(T(GRV),T(3),END);
+               }
+
+break;
+case SM_LAUGH:
+//Macro: SM_LAUGH//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END);
+               }
+
+break;
+case M_CTL_SFT_HASH:
+//Macro: M_CTL_SFT_HASH//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(D(LCTRL),D(LSFT),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LSFT),END);
+                       } else {
+                               return MACRO(U(LCTRL),U(LSFT),T(BSLS),END);
+                       }
+               }
+
+break;
+case SM_SAD:
+//Macro: SM_SAD//-----------------------
+if (record->event.pressed) {
+                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
+               }
+
+break;
+case M_DE_OSX_CIRC_CTRLCMD:
+//Macro: M_DE_OSX_CIRC_CTRLCMD//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(D(LCTRL),D(LGUI),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LGUI),END);
+                       } else {
+                               return MACRO(U(LCTRL),U(LGUI),T(NUBS),END);
+                       }
+               }
+
+break;
+case M_CTRL_CMDV:
+//Macro: M_CTRL_CMDV//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(D(LCTRL),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),END);
+                       } else {
+                               return MACRO(U(LCTRL),D(LGUI),T(V),U(LGUI),END);
+                       }
+               }
+
+break;
+case M_MEH_SH_ACUT:
+//Macro: M_MEH_SH_ACUT//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(D(LCTRL),D(LSFT),D(LALT),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
+                       } else {
+                               return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END);
+                       }
+               }
+
+break;
+}
+return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+uint8_t layer = biton32(layer_state);
+
+ergodox_board_led_off();
+ergodox_right_led_1_off();
+ergodox_right_led_2_off();
+ergodox_right_led_3_off();
+switch (layer) {
+
+    case SYMB:
+        ergodox_right_led_1_on();
+        
+        
+        break;
+    case MDIA:
+        
+        ergodox_right_led_2_on();
+        
+        break;
+    case SMLY:
+        
+        
+        ergodox_right_led_3_on();
+        break;
+    case NUMB:
+        ergodox_right_led_1_on();
+        
+        ergodox_right_led_3_on();
+        break;
+    case EGOS:
+        ergodox_right_led_1_on();
+        ergodox_right_led_2_on();
+        ergodox_right_led_3_on();
+        break;
+default:
+// none
+break;
+}
+
+};
+
diff --git a/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png b/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png
new file mode 100644 (file)
index 0000000..d442a99
Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png differ
diff --git a/keyboards/ergodox/keymaps/osx_de/readme.md b/keyboards/ergodox/keymaps/osx_de/readme.md
new file mode 100644 (file)
index 0000000..5011a9d
--- /dev/null
@@ -0,0 +1,41 @@
+#Ergodox EZ für OSX 
+
+Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyboard. Leider passte das layout nicht wirklich für OSX, deswegen habe ich einige Anpassungen gemacht. Dabei wurden folgende features umgesetzt:
+
+- Die Umlaute sollten an einigermassen sinnvollen Plätzen liegen
+- der Umstieg sollte dadurch erleichtert werden, dass einige Tasten an ihren "normalen" Platz zurückgewandert sind. Z.B. ESC, Tab,...
+- die Leertaste ist jetzt auf der rechten seite, neben Enter. Dafür hat der linke Daumen nun Backspace und Delete. 
+- die CMD- und Alt-Tasten sind in der Mitte einfach erreichbar.
+- es gibt eine neue Layer die für Spiele genutzt werden kann (egosooter wie Counter Strike). Dort liegen die wichtigsten Tasten auf der linken Seite, im Daumenblock z.B. space und ctrl sowie die F-Tasten 1-4. Diese Layer ist über die Symbollayer erreichbar.
+- Die Symbollayer wurde dahingehend angepasst, dass die klammern, etc nun auf beiden hälften der Tastatur zu finden sind
+- der Zehnerblock wurde in eine eigene Layer umgezogen
+- die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen
+
+# Erstellt Mit Dem ErgodoxLayoutGenerator
+
+Der ErgodoxLayoutGenerator ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein.
+Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar).
+
+
+
+------------------------------   
+
+# ErgoDox EZ for OSX
+
+This is  only a little tweak of the existing default layout for the ErgoDox keyboard. Unfortunately the default layout did not work well with german OSX, so I created som adjustments. These were the features added and changed:
+
+- the umlaut-keys should be at their useful place more or less
+- the switching should be made more easy so some other keys (like tab, esc) were moved to their default place
+- the space key can now be used with both hands
+- the CMD- and ALT-Keys moved to the middle, can be reached more easily.
+- there is a new layer for using the cursor-keys, placed like on the default keyboard. This makes them useable for games also
+- the symbollayer now has only symbols
+- the number block was moved to a special layer
+- meh and hyper went down to the thumb block
+
+# Created Using the ErgodoxLayoutGenerator
+
+The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded  [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed.
+
+The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/).
+
diff --git a/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c
new file mode 100644 (file)
index 0000000..6c4312a
--- /dev/null
@@ -0,0 +1,174 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#include "keymap_neo2.h"
+#include "keymap_uk.h"
+#include "keymap_colemak.h"
+#include "keymap_french_osx.h"
+#include "keymap_nordic.h"
+#include "keymap_dvorak.h"
+#include "keymap_german.h"
+#include "keymap_norwegian.h"
+#include "keymap_fr_ch.h"
+#include "keymap_german_osx.h"
+#include "keymap_spanish.h"
+#include "keymap_bepo.h"
+
+#define BASE 0
+#define SYMB 1
+#define MDIA 2
+#define QWERTZ 3
+#define NUMB 4
+
+#define UNUSED 0
+
+//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE]=KEYMAP(
+//left half
+    KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL, 
+    KC_TAB, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_LGUI, 
+    TG(QWERTZ), KC_H, KC_A, KC_E, KC_I, KC_U, 
+    KC_LSFT, CTL_T(KC_X), KC_Q, DE_AE, DE_UE, DE_OE, KC_LALT, 
+                  LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, 
+                                              TG(MDIA), MEH_T(LSFT(DE_ACUT)), 
+                                                     KC_HOME, 
+                                       KC_BSPC, KC_DEL, KC_END, 
+    //right half
+    KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, DE_OSX_MINS, 
+    KC_RGUI, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y, 
+           KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F), 
+    KC_RALT, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_RSFT, 
+                         KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS), 
+    ALL_T(DE_ACUT), TG(NUMB), 
+    KC_PGUP, 
+    KC_PGDN, KC_ENT, KC_SPC),
+[SYMB]=KEYMAP(
+//left half
+    KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 
+    KC_TRNS, KC_GRV, LSFT(KC_GRV), DE_EXLM, DE_QST, KC_TRNS, KC_TRNS, 
+    KC_TRNS, DE_HASH, DE_DLR, LALT(LSFT(KC_7)), DE_SLSH, KC_DOT, 
+    KC_TRNS, KC_TRNS, DE_LESS, DE_PERC, LALT(KC_7), LALT(KC_N), KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_DEL, KC_TRNS, 
+    //right half
+    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
+    KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12, 
+           DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS, 
+    KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST, 
+                         KC_TRNS, KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+[MDIA]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, 
+    KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, 
+                         KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_WBAK),
+[QWERTZ]=KEYMAP(
+//left half
+    KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V), 
+    KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI, 
+    KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, 
+    KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT, 
+                  LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, 
+                                              KC_TRNS, MEH_T(LSFT(DE_ACUT)), 
+                                                     KC_HOME, 
+                                       KC_BSPC, KC_DEL, KC_END, 
+    //right half
+    LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 
+    KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE, 
+           KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(MDIA,DE_AE), 
+    KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, 
+                         KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS), 
+    ALL_T(DE_ACUT), KC_TRNS, 
+    KC_PGUP, 
+    KC_PGDN, KC_ENT, KC_SPC),
+[NUMB]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
+    KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, 
+           KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS, 
+    KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, 
+                         KC_0, KC_DOT, KC_0, KC_EQL, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+switch(id) {
+case UNUSED:
+//Macro: UNUSED//-----------------------
+
+
+
+
+
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        
+
+
+break;
+}
+return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+uint8_t layer = biton32(layer_state);
+
+ergodox_board_led_off();
+ergodox_right_led_1_off();
+ergodox_right_led_2_off();
+ergodox_right_led_3_off();
+switch (layer) {
+
+default:
+// none
+break;
+}
+
+};
+
diff --git a/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png b/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png
new file mode 100644 (file)
index 0000000..193aa33
Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png differ
diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c
new file mode 100644 (file)
index 0000000..61b6a4f
--- /dev/null
@@ -0,0 +1,597 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_neo2.h"
+#include "keymap_uk.h"
+#include "keymap_colemak.h"
+#include "keymap_nordic.h"
+#include "keymap_dvorak.h"
+#include "keymap_german.h"
+#include "keymap_norwegian.h"
+#include "keymap_fr_ch.h"
+#include "keymap_german_osx.h"
+#include "keymap_spanish.h"
+#include "keymap_bepo.h"
+
+
+/**
+* This layout was generated using the ErgodoxLayoutGenerator (ELG). You can download it from https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases
+* documentation about it can be found here https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/
+* Thanks to the team of Erez Zukerman for building the great Ergodox-EZ!
+*
+* use at own risk!
+**/
+
+#define BASE 0
+#define SYMB 1
+#define MDIA 2
+#define SMLY 3
+#define NUMB 4
+#define EGOS 5
+
+#define SMLY_TOG_QUOT 0
+
+#define M_TOGGLE_5 1
+
+#define TGH_NUM 2
+
+#define M_DE_OSX_PLUS_CTRLALT 3
+
+#define SM_KISS 4
+
+#define SM_FROWN 5
+
+#define SM_CRY 6
+
+#define SM_SMILE 7
+
+#define SM_SMIRK 8
+
+#define M_LGUI_SHFT 9
+
+#define SM_HEART 10
+
+#define TOG_HLD_MDIA 11
+
+#define SM_LAUGH 12
+
+#define SM_SAD 13
+
+#define M_DE_OSX_CIRC_CTRLCMD 14
+
+#define M_MEH_SH_ACUT 15
+
+
+//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/**
+* Layer: BASE
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
+* | ESC                | 1                  | 2                  | 3                  | 4                  | 5                  | Hold or toggle     |                       | Hold or toggle     | 6                  | 7                  | 8                  | 9                  | 0                  | ß                  |                      
+* |                    |                    |                    |                    |                    |                    | Layer NUMB         |                       | Layer MDIA         |                    |                    |                    |                    |                    |                    |                      
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
+* | TAB                | Q                  | W                  | E                  | R                  | T                  | Cmd                |                       | Cmd                | Z                  | U                  | I                  | O                  | P                  | Ü                  |                      
+* |                    |                    |                    |                    |                    |                    |                    |                       |                    |                    |                    |                    |                    |                    |                    |                      
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/\-------------------\                        \-------------------\/-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
+* | Alt                | A                  | S                  | D                  | F                  | G                  |                                                                 | H                  | J                  | K                  | L                  | Ö                  | Ä                  |                      
+* |                    |                    |                    |                    |                    |                    |                                                                 |                    |                    |                    |                    |                    | ALT                |                      
+* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
+* | Shift              | Y                  | X                  | C                  | V                  | B                  | Alt                |                       | Alt                | N                  | M                  | ,                  | .                  | -                  | Shift              |                      
+* |                    | Ctrl               |                    |                    |                    |                    |                    |                       |                    |                    |                    |                    |                    | Ctrl               |                    |                      
+* \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\                        \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\                       
+*                                                                                                                                                                                                                                                                                                                                                      
+*                                                                                                                                                                                                                                                                                                                                                      
+*                                           /-------------------//-------------------//-------------------//-------------------//-------------------/                                                                                       /-------------------//-------------------//-------------------//-------------------//-------------------/  
+*                                           | <                  | LongPress / Type   | LongPress / Type   | Shift+Ctrl         | Type               |                                                                                      | #                  | ACUT               | CMD+Shift          | ALT+Shift          | +                  | 
+*                                           | SYMB               | DE_OSX_CIRC_CTRLCMD| DE_OSX_PLUS_CTRAlt |                    | Toggle SMLY        |                                                                                      | Meh                | Hyper              |                    |                    | SYMB               | 
+*                                           \-------------------\\-------------------\\-------------------\\-------------------\/-------------------//-------------------/   /-------------------//-------------------/                     \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\  
+*                                                                                                                               | HOME               | END                |  | LEFT               | RIGHT              |                                                                                                                               
+*                                                                                                                               |                    |                    |  |                    |                    |                                                                                                                               
+*                                                                                                                               \-------------------\/-------------------/   /-------------------/\-------------------\                                                                                                                                
+*                                                                                                                                                    | PGUP               |  | UP                 |                                                                                                                                                    
+*                                                                                                                                                    |                    |  |                    |                                                                                                                                                    
+*                                                                                                          /-------------------//-------------------//-------------------/   /-------------------//-------------------//-------------------/                                                                                                           
+*                                                                                                          | BSPC               | DEL                | PGDN               |  | DOWN               | ENT                | SPC                |                                                                                                          
+*                                                                                                          |                    |                    |                    |  |                    |                    |                    |                                                                                                          
+*                                                                                                          \-------------------\\-------------------\\-------------------\   \-------------------\\-------------------\\-------------------\                                                                                                           
+*                                                                                                                                                                                                                                                                                                                                                      
+* 
+**/
+[BASE]=KEYMAP(
+//left half
+    KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM), 
+    KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, 
+    KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, 
+    KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, 
+                  LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT), 
+                                              KC_HOME, KC_END, 
+                                                     KC_PGUP, 
+                                       KC_BSPC, KC_DEL, KC_PGDN, 
+    //right half
+    M(TOG_HLD_MDIA), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, 
+    KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, 
+           DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), 
+    KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, 
+                         MEH_T(DE_OSX_HASH), ALL_T(DE_OSX_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), 
+    KC_LEFT, KC_RIGHT, 
+    KC_UP, 
+    KC_DOWN, KC_ENT, KC_SPC),
+/**
+* Layer: SYMB
+* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
+* | APPLICATION| F1         | F2         | F3         | F4         | F5         | F5         |               | F6         | F6         | F7         | F8         | F9         | F10        | F11        |              
+* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
+* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
+* |            | <          | >          | !          | ?          |            |            |               |            | \          | [          | ]          | <          | >          | !          |              
+* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
+* /-----------//-----------//-----------//-----------//-----------//-----------/\-----------\                \-----------\/-----------//-----------//-----------//-----------//-----------//-----------/               
+* |            | #          | $          | \          | /          | .          |                                         | /          | (          | )          | {          | }          | #          |              
+* |            |            |            |            |            |            |                                         |            |            |            |            |            |            |              
+* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
+* |            |            | <          | %          | |          | ~          |            |               |            | |          | ~          |            |            |            |            |              
+* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
+* \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\                \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\               
+*                                                                                                                                                                                                                      
+*                                                                                                                                                                                                                      
+*                           /-----------//-----------//-----------//-----------//-----------/                                                       /-----------//-----------//-----------//-----------//-----------/  
+*                           |            |            |            |            |            |                                                      | '          | DQOT       |            | Toggle 5   |            | 
+*                           |            |            |            |            |            |                                                      |            |            |            |            |            | 
+*                           \-----------\\-----------\\-----------\\-----------\/-----------//-----------/   /-----------//-----------/             \-----------\\-----------\\-----------\\-----------\\-----------\  
+*                                                                               |            |            |  | F13        | F12        |                                                                               
+*                                                                               |            |            |  |            |            |                                                                               
+*                                                                               \-----------\/-----------/   /-----------/\-----------\                                                                                
+*                                                                                            |            |  | F14        |                                                                                            
+*                                                                                            |            |  |            |                                                                                            
+*                                                                  /-----------//-----------//-----------/   /-----------//-----------//-----------/                                                                   
+*                                                                  |            | DEL        |            |  | F15        |            |            |                                                                  
+*                                                                  |            |            |            |  |            |            |            |                                                                  
+*                                                                  \-----------\\-----------\\-----------\   \-----------\\-----------\\-----------\                                                                   
+*                                                                                                                                                                                                                      
+* 
+**/
+[SYMB]=KEYMAP(
+//left half
+    KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, 
+    KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, 
+    KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, 
+    KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_DEL, KC_TRNS, 
+    //right half
+    KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
+    KC_TRNS, DE_OSX_BSLS, DE_OSX_LBRC, DE_OSX_RBRC, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, 
+           DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, DE_OSX_LCBR, DE_OSX_RCBR, DE_OSX_HASH, 
+    KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                         DE_OSX_QUOT, DE_OSX_DQOT, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, 
+    KC_F13, KC_F12, 
+    KC_F14, 
+    KC_F15, KC_TRNS, KC_TRNS),
+/**
+* Layer: MDIA
+* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
+* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
+* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
+* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
+* |      |      | BTN1 | U    | BTN2 | U    |      |         |      |      |      |      |      |      |      |        
+* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
+* /-----//-----//-----//-----//-----//-----/\-----\          \-----\/-----//-----//-----//-----//-----//-----/         
+* |      |      | L    | D    | R    | D    |                       |      |      |      |      |      |      |        
+* |      |      |      |      |      |      |                       |      |      |      |      |      |      |        
+* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
+* |      |      | L    | D    | R    | BTN3 |      |         |      |      |      |      |      | UP   |      |        
+* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
+* \-----\\-----\\-----\\-----\\-----\\-----\\-----\          \-----\\-----\\-----\\-----\\-----\\-----\\-----\         
+*                                                                                                                      
+*                                                                                                                      
+*               /-----//-----//-----//-----//-----/                               /-----//-----//-----//-----//-----/  
+*               |      |      |      |      |      |                              |      |      | LEFT | DOWN | RIGHT| 
+*               |      |      |      |      |      |                              |      |      |      |      |      | 
+*               \-----\\-----\\-----\\-----\/-----//-----/   /-----//-----/       \-----\\-----\\-----\\-----\\-----\  
+*                                           |      |      |  | MPRV | MNXT |                                           
+*                                           |      |      |  |      |      |                                           
+*                                           \-----\/-----/   /-----/\-----\                                            
+*                                                  |      |  | VOLU |                                                  
+*                                                  |      |  |      |                                                  
+*                                    /-----//-----//-----/   /-----//-----//-----/                                     
+*                                    |      |      |      |  | VOLD | MUTE | MPLY |                                    
+*                                    |      |      |      |  |      |      |      |                                    
+*                                    \-----\\-----\\-----\   \-----\\-----\\-----\                                     
+*                                                                                                                      
+* 
+**/
+[MDIA]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, 
+    KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, 
+    KC_MPRV, KC_MNXT, 
+    KC_VOLU, 
+    KC_VOLD, KC_MUTE, KC_MPLY),
+/**
+* Layer: SMLY
+* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |         |            | Typing  | Typing  | Typing  |         |         |         |         |           
+* |         |         |         |         |         |         |         |            | SM_SMILE| SM_SMIRK| SM_LAUGH|         |         |         |         |           
+* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |         |            |         | Typing  | Typing  | Typing  |         |         |         |           
+* |         |         |         |         |         |         |         |            |         | SM_FROWN| SM_SAD  | SM_CRY  |         |         |         |           
+* /--------//--------//--------//--------//--------//--------/\--------\             \--------\/--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |                                | Typing  | Typing  |         |         |         |         |           
+* |         |         |         |         |         |         |                                | SM_HEART| SM_KISS |         |         |         |         |           
+* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* \--------\\--------\\--------\\--------\\--------\\--------\\--------\             \--------\\--------\\--------\\--------\\--------\\--------\\--------\            
+*                                                                                                                                                                      
+*                                                                                                                                                                      
+*                     /--------//--------//--------//--------//--------/                                           /--------//--------//--------//--------//--------/  
+*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
+*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
+*                     \--------\\--------\\--------\\--------\/--------//--------/   /--------//--------/          \--------\\--------\\--------\\--------\\--------\  
+*                                                             |         |         |  |         |         |                                                             
+*                                                             |         |         |  |         |         |                                                             
+*                                                             \--------\/--------/   /--------/\--------\                                                              
+*                                                                       |         |  |         |                                                                       
+*                                                                       |         |  |         |                                                                       
+*                                                   /--------//--------//--------/   /--------//--------//--------/                                                    
+*                                                   |         |         |         |  |         |         |         |                                                   
+*                                                   |         |         |         |  |         |         |         |                                                   
+*                                                   \--------\\--------\\--------\   \--------\\--------\\--------\                                                    
+*                                                                                                                                                                      
+* 
+**/
+[SMLY]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, 
+           M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+/**
+* Layer: NUMB
+* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
+* |     |     |     |     |     |     |     |        |     | F6  | F7  | F8  | F9  | F10 | F11 |       
+* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
+* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
+* |     |     |     | UP  |     |     |     |        |     | /   | 7   | 8   | 9   | *   | F12 |       
+* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
+* /----//----//----//----//----//----/\----\         \----\/----//----//----//----//----//----/        
+* |     |     | LEFT| DOWN| RGHT|     |                    | /   | 4   | 5   | 6   | +   | -   |       
+* |     |     |     |     |     |     |                    |     |     |     |     |     |     |       
+* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
+* |     |     |     |     |     |     |     |        |     | %   | 1   | 2   | 3   |     |     |       
+* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
+* \----\\----\\----\\----\\----\\----\\----\         \----\\----\\----\\----\\----\\----\\----\        
+*                                                                                                      
+*                                                                                                      
+*             /----//----//----//----//----/                           /----//----//----//----//----/  
+*             |     |     |     |     |     |                          | 0   | .   | ,   | =   |     | 
+*             |     |     |     |     |     |                          |     |     |     |     |     | 
+*             \----\\----\\----\\----\/----//----/   /----//----/      \----\\----\\----\\----\\----\  
+*                                     |     |     |  |     |     |                                     
+*                                     |     |     |  |     |     |                                     
+*                                     \----\/----/   /----/\----\                                      
+*                                           |     |  |     |                                           
+*                                           |     |  |     |                                           
+*                               /----//----//----/   /----//----//----/                                
+*                               |     |     |     |  |     |     |     |                               
+*                               |     |     |     |  |     |     |     |                               
+*                               \----\\----\\----\   \----\\----\\----\                                
+*                                                                                                      
+* 
+**/
+[NUMB]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_TRNS, KC_TRNS, 
+                                                     KC_TRNS, 
+                                       KC_TRNS, KC_TRNS, KC_TRNS, 
+    //right half
+    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
+    KC_TRNS, DE_OSX_SLSH, KC_7, KC_8, KC_9, DE_OSX_ASTR, KC_F12, 
+           DE_OSX_SLSH, KC_4, KC_5, KC_6, DE_OSX_PLUS, DE_OSX_MINS, 
+    KC_TRNS, DE_OSX_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, 
+                         KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+/**
+* Layer: EGOS
+* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* /--------//--------//--------//--------//--------//--------/\--------\             \--------\/--------//--------//--------//--------//--------//--------/            
+* | Shift   |         |         |         |         |         |                                |         |         |         |         |         |         |           
+* |         |         |         |         |         |         |                                |         |         |         |         |         |         |           
+* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
+* \--------\\--------\\--------\\--------\\--------\\--------\\--------\             \--------\\--------\\--------\\--------\\--------\\--------\\--------\            
+*                                                                                                                                                                      
+*                                                                                                                                                                      
+*                     /--------//--------//--------//--------//--------/                                           /--------//--------//--------//--------//--------/  
+*                     | Ctrl    |         |         |         |         |                                          |         |         |         | Toggle 5|         | 
+*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
+*                     \--------\\--------\\--------\\--------\/--------//--------/   /--------//--------/          \--------\\--------\\--------\\--------\\--------\  
+*                                                             | F1      | F2      |  |         |         |                                                             
+*                                                             |         |         |  |         |         |                                                             
+*                                                             \--------\/--------/   /--------/\--------\                                                              
+*                                                                       | F3      |  |         |                                                                       
+*                                                                       |         |  |         |                                                                       
+*                                                   /--------//--------//--------/   /--------//--------//--------/                                                    
+*                                                   | SPC     | Ctrl    | F4      |  |         |         |         |                                                   
+*                                                   |         |         |         |  |         |         |         |                                                   
+*                                                   \--------\\--------\\--------\   \--------\\--------\\--------\                                                    
+*                                                                                                                                                                      
+* 
+**/
+[EGOS]=KEYMAP(
+//left half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                  KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                                              KC_F1, KC_F2, 
+                                                     KC_F3, 
+                                       KC_SPC, KC_LCTL, KC_F4, 
+    //right half
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
+                         KC_TRNS, KC_TRNS, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, 
+    KC_TRNS, KC_TRNS, 
+    KC_TRNS, 
+    KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+static uint16_t start;
+switch(id) {
+case SMLY_TOG_QUOT:
+//Macro: SMLY_TOG_QUOT//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+           layer_state ^= (1<<SMLY);
+           layer_state &= (1<<SMLY);
+                       return MACRO_NONE;              } else {
+           layer_state ^= (1<<SMLY);
+           layer_state &= (1<<SMLY);
+                       if (timer_elapsed(start) >150) {
+                               return MACRO_NONE;
+                       } else {
+                               return MACRO(DOWN(KC_LSFT),TYPE(DE_OSX_HASH),UP(KC_LSFT),END);
+                       }
+               }
+
+break;
+case M_TOGGLE_5:
+//Macro: M_TOGGLE_5//-----------------------
+ if (record->event.pressed){
+           layer_state ^= (1<<5);
+           layer_state &= (1<<5);
+        }
+
+break;
+case TGH_NUM:
+//Macro: TGH_NUM//-----------------------
+if (record->event.pressed){
+         start = timer_read();
+         layer_state ^=(1<<NUMB);
+         layer_state &=(1<<NUMB);
+ } else {
+         if (timer_elapsed(start) > 150) {
+                 layer_state^=(1<<NUMB);
+                 layer_state&=(1<<NUMB);
+         }
+ }
+return MACRO_NONE;
+
+break;
+case M_DE_OSX_PLUS_CTRLALT:
+//Macro: M_DE_OSX_PLUS_CTRLALT//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LALT),END);
+                       } else {
+                               return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END);
+                       }
+               }
+
+break;
+case SM_KISS:
+//Macro: SM_KISS//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END);
+               }
+
+break;
+case SM_FROWN:
+//Macro: SM_FROWN//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END);
+               }
+
+break;
+case SM_CRY:
+//Macro: SM_CRY//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
+               }
+
+break;
+case SM_SMILE:
+//Macro: SM_SMILE//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
+               }
+
+break;
+case SM_SMIRK:
+//Macro: SM_SMIRK//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
+               }
+
+break;
+case M_LGUI_SHFT:
+//Macro: M_LGUI_SHFT//-----------------------
+if (record->event.pressed){
+                       return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END);
+               }else{
+                       return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END);
+               }
+
+break;
+case SM_HEART:
+//Macro: SM_HEART//-----------------------
+if (record->event.pressed) {
+                       return MACRO(TYPE(KC_GRV),TYPE(KC_3),END);
+               }
+
+break;
+case TOG_HLD_MDIA:
+//Macro: TOG_HLD_MDIA//-----------------------
+if (record->event.pressed){
+         start = timer_read();
+         layer_state ^=(1<<MDIA);
+         layer_state &=(1<<MDIA);
+ } else {
+         if (timer_elapsed(start) > 150) {
+                 layer_state^=(1<<MDIA);
+                 layer_state&=(1<<MDIA);
+         }
+ }
+return MACRO_NONE;
+
+break;
+case SM_LAUGH:
+//Macro: SM_LAUGH//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END);
+               }
+
+break;
+case SM_SAD:
+//Macro: SM_SAD//-----------------------
+if (record->event.pressed) {
+                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
+               }
+
+break;
+case M_DE_OSX_CIRC_CTRLCMD:
+//Macro: M_DE_OSX_CIRC_CTRLCMD//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LGUI),END);
+                       } else {
+                               return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END);
+                       }
+               }
+
+break;
+case M_MEH_SH_ACUT:
+//Macro: M_MEH_SH_ACUT//-----------------------
+if (record->event.pressed) {
+                       start = timer_read();
+                       return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END);
+               } else {
+                       if (timer_elapsed(start) >150) {
+                               return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
+                       } else {
+                               return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_OSX_ACUT),UP(KC_LSFT),END);
+                       }
+               }
+
+break;
+}
+return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+uint8_t layer = biton32(layer_state);
+
+ergodox_board_led_off();
+ergodox_right_led_1_off();
+ergodox_right_led_2_off();
+ergodox_right_led_3_off();
+switch (layer) {
+
+    case SYMB:
+        ergodox_right_led_1_on();
+        
+        
+    break;
+    case MDIA:
+        
+        ergodox_right_led_2_on();
+        
+    break;
+    case NUMB:
+        
+        
+        ergodox_right_led_3_on();
+    break;
+    case EGOS:
+        ergodox_right_led_1_on();
+        ergodox_right_led_2_on();
+        ergodox_right_led_3_on();
+    break;
+default:
+// none
+break;
+}
+
+};
+
diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png
new file mode 100644 (file)
index 0000000..031d874
Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png differ
diff --git a/keyboards/ergodox/keymaps/osx_de_experimental/readme.md b/keyboards/ergodox/keymaps/osx_de_experimental/readme.md
new file mode 100644 (file)
index 0000000..e6a1018
--- /dev/null
@@ -0,0 +1,22 @@
+
+# Ergodox und Ergodox-EZ experimentelles Layout
+
+dieses layout ist experimentell und wird im Lufe der Zeit viele Änderungen und Verbesserungen durchlaufen. Falls diese sich als vorteilhaft erweisen, werden sie evtl. auch in das `osx_de` layout übernommen.
+
+
+
+# Erstellt Mit Dem ErgodoxLayoutGenerator
+
+Der ErgodoxLayoutGenerator (ELG) ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein.
+Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar).
+---------------------------------------------------------------------------------------------------------------------
+
+# Ergodox and Ergodox-EZ experimental layout
+
+This is an experimental layout which will undergo heavy changes over time. If changes prove to be good, they might also move into the `osx_de` layout.
+
+Created Using the ErgodoxLayoutGenerator
+
+The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded  [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed.
+
+The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/).
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/osx_fr/keymap.c b/keyboards/ergodox/keymaps/osx_fr/keymap.c
new file mode 100644 (file)
index 0000000..7dee284
--- /dev/null
@@ -0,0 +1,187 @@
+// French AZERTY version of the default_osx file
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_french_osx.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   -    |   &  |   é  |   "  |   '  |   (  | LEFT |           | RIGHT|   §  |   è  |   !  |   ç  |   à  |   )    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   A  |   Z  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   `    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   Q  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   M  |  LGui  |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |W/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   ,  |; / L2|   :  |=/Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | ù /L1|  <   |AltShf| Left | Right|                                       |  Up  | Down |   ^  |   $  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,---------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        FR_MINS,          FR_AMP,      FR_EACU,       FR_QUOT, FR_APOS, FR_LPRN, KC_LEFT,
+        KC_DELT,          FR_A,        FR_Z,          KC_E,    KC_R,    KC_T,    TG(1),
+        KC_BSPC,          FR_Q,        KC_S,          KC_D,    KC_F,    KC_G,
+        KC_LSFT,          CTL_T(FR_W), KC_X,          KC_C,    KC_V,    KC_B,    ALL_T(KC_NO),
+        LT(SYMB,FR_UGRV), FR_LESS,     LALT(KC_LSFT), KC_LEFT, KC_RGHT,
+            ALT_T(KC_APP), KC_LGUI,
+            KC_HOME,
+            KC_SPC, KC_BSPC, KC_END,
+            
+        // right hand
+        KC_RGHT,      FR_SECT, FR_EGRV, FR_EXLM,           FR_CCED, FR_AGRV,         FR_RPRN,
+        TG(1),        KC_Y,    KC_U,    KC_I,              KC_O,    KC_P,            FR_GRV,
+        KC_H,         KC_J,    KC_K,    KC_L,              FR_M,    KC_LGUI,
+        MEH_T(KC_NO), KC_N,    FR_COMM, LT(MDIA, FR_SCLN), FR_COLN, CTL_T(FR_EQL),   KC_RSFT,
+        KC_UP,        KC_DOWN, KC_LBRC, KC_RBRC,           KC_FN1,
+            KC_LALT, CTL_T(KC_ESC),
+            KC_PGUP,
+            KC_PGDN, KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    , |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,FR_EXLM,FR_AT,  FR_LCBR,FR_RCBR,FR_PIPE,KC_TRNS,
+       KC_TRNS,FR_HASH,FR_DLR, FR_LPRN,FR_RPRN,FR_GRV,
+       KC_TRNS,FR_PERC,FR_CIRC,FR_LBRC,FR_RBRC,FR_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   FR_7,   FR_8,    FR_9,    FR_ASTR, KC_F12,
+                KC_DOWN, FR_4,   FR_5,    FR_6,    FR_PLUS, KC_TRNS,
+       KC_TRNS, FR_AMP,  FR_1,   FR_2,    FR_3,    FR_BSLS, KC_TRNS,
+                         KC_TRNS,FR_COMM, FR_0,    FR_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c
new file mode 100644 (file)
index 0000000..11281df
--- /dev/null
@@ -0,0 +1,191 @@
+// Netable differences vs. the default firmware for the ErgoDox EZ:
+// 1. The Cmd key is now on the right side, making Cmd+Space easier.
+// 2. The media keys work on OSX (But not on Windows).
+// Wanted to map default layer of my EZ to my existing Kinesis Mapping.
+// Only default layer was remapped all others layers are standard Ergodox EZ
+// Very personal mapping of-course, but who knows a starting point for others.
+
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | CapsL  |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | TAB    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | ESC    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '"   |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |AltShf|Grv/L1|  '"  | Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | LGui | App  |       | Ctrl/Esc | RGui |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       |   =  |        |      |
+ *                                 | Backs|Delete|------|       |------|  Enter |Space |
+ *                                 | pace |      | End  |       | TAB  |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_CAPSLOCK,    KC_1,           KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_TAB,         KC_Q,           KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
+        KC_ESC,         KC_A,           KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),    KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LALT(KC_LSFT),  LT(SYMB,KC_GRV),KC_QUOT,KC_LEFT,KC_RGHT,
+                                              KC_LGUI,  ALT_T(KC_APP),
+                                                              KC_HOME,
+                                               KC_BSPC,KC_DELT,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(1),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOTE,
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             CTL_T(KC_ESC),        KC_LGUI,
+             KC_EQL,
+             KC_TAB, KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c
new file mode 100644 (file)
index 0000000..98d2836
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+ * This is built out of frustration with OSX / Sierra caps lock delay.
+ * Fake it till you make it!
+ */
+
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "timer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+#define BLINK_BASE  150U // timer threshold for blinking on MDIA layer
+
+typedef enum onoff_t {OFF, ON} onoff;
+
+#define caps_led_on  ergodox_right_led_2_on
+#define caps_led_off ergodox_right_led_2_off
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Esc    |   1  |   2  |   3  |   4  |   5  |   6  |           |   `  |   7  |   8  |   9  |   0  |   -  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |   [  |           |   ]  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | CapsL  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   "    |
+ * |--------+------+------+------+------+------| ~L1  |           |  ~L1 |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | Ctrl | Opt  | Cmd  | Left | Right|                                       | Down | Up   | Ctrl | Cmd  | Opt  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      | L1   |       | Alt  | Ctrl   ]
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 |Backsp| Del  |------|       |------|  Enter | Spc  |
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+
+    [BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,     KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,
+        KC_TAB,     M(KC_Q),  M(KC_W), M(KC_E), M(KC_R), M(KC_T), KC_LBRC,
+        M(KC_CAPS), M(KC_A),  M(KC_S), M(KC_D), M(KC_F), M(KC_G),
+        KC_LSFT,    M(KC_Z),  M(KC_X), M(KC_C), M(KC_V), M(KC_B), KC_FN0,
+        KC_LCTL,    KC_LALT,  KC_LGUI, KC_LEFT, KC_RGHT,
+                                                         KC_TRNS, KC_FN1,
+                                                                  KC_HOME,
+                                                KC_BSPC, KC_DEL,  KC_END,
+        // right hand
+        KC_GRV,     KC_7,     KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,
+        KC_RBRC,    M(KC_Y),  M(KC_U), M(KC_I), M(KC_O), M(KC_P), KC_BSLS,
+                    M(KC_H),  M(KC_J), M(KC_K), M(KC_L), KC_SCLN, KC_QUOT,
+        KC_FN0,     M(KC_N),  M(KC_M), KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+                              KC_DOWN, KC_UP,   KC_RCTL, KC_RGUI, KC_RALT,
+        KC_RALT,    KC_RCTL,
+        KC_PGUP,
+        KC_PGDN,    KC_ENT,   KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |      |  F7  |  F8  |  F9  |  F10 |  F11 |   F12  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |   L0 |  L2  |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+    [SYMB] = KEYMAP(
+       // left hand
+       KC_GRV ,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                               KC_FN3, KC_FN2,
+                                                       KC_TRNS,
+                                       KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F7,   KC_F8,  KC_F9,   KC_F10,  KC_F11,  KC_F12,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                         KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+/* Keymap 2: Media and tenkey
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  BOOTL |      | Mute | Vol- | Vol+ | F14  | F15  |           |      |      | NumLk|   /  |  *   |  -   |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |  7   |  8   |  9   |  +   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+-----+-------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |  4   |  5   |  6   |  +   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |  1   |  2   |  3   | Enter|        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |  0   |  0   |  .   | Enter|      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |  L1  |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+    // MEDIA AND TENKEY
+    [MDIA] = KEYMAP(
+       KC_NO,   KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_F14,  KC_F15,
+       KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
+                                                    KC_FN4,  KC_NO,
+                                                             KC_TRNS,
+                                           KC_TRNS, KC_TRNS, KC_TRNS,
+       // right hand
+       KC_NO,   KC_NO,   KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_NO,
+       KC_NO,   KC_NO,   KC_P7,   KC_P8,   KC_P9,   KC_PPLS, KC_NO,
+                KC_NO,   KC_P4,   KC_P5,   KC_P6,   KC_PPLS, KC_NO,
+       KC_NO,   KC_NO,   KC_P1,   KC_P2,   KC_P3,   KC_PENT, KC_NO,
+                         KC_P0,   KC_P0,   KC_PDOT, KC_PENT, KC_NO,
+       KC_NO,   KC_NO,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    ACTION_LAYER_MOMENTARY(SYMB),               // FN0 - Momentary Layer 1 (Symbols)
+    ACTION_LAYER_ON(SYMB,ON_RELEASE),           // FN1 - Enable Layer 1 (Symbols)
+    ACTION_LAYER_ON(MDIA,ON_RELEASE),           // FN2 - Enable Layer 2 (Media)
+    ACTION_LAYER_OFF(SYMB,ON_RELEASE),          // FN3 - Disable Layer 1 (Symbols)
+    ACTION_LAYER_OFF(MDIA,ON_RELEASE),          // FN4 - Disable Layer 2 (MMedia)
+    ACTION_LAYER_MOMENTARY(MDIA)                // FN5 - Momentary Layer 2 (Mdia)
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+    static onoff caps_state = OFF;
+    switch(id) {
+    case KC_CAPS:
+        if (record->event.pressed) {
+            // Toggle caps state;
+            if (caps_state == OFF) {
+                // Turn it on then!
+                caps_led_on();
+                caps_state = ON;
+            } else {
+                caps_led_off();
+                caps_state = OFF;
+            }
+        }
+        break;
+    default:
+        if (record->event.pressed) {
+            bool shifted = false;
+            if (caps_state == ON && get_mods() == 0) {
+                register_code(KC_LSFT);
+                shifted = true;
+            }
+            register_code(id);
+            if(shifted) {
+                unregister_code(KC_LSFT);
+            }
+        } else {
+            unregister_code(id);
+        }
+        break;
+    }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+}
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    uint8_t layer = biton32(layer_state);
+
+    static onoff board_led_state = OFF;
+    static uint16_t dt = 0;
+    static uint8_t oldlayer = 0;
+
+    if(oldlayer != layer) {
+        // Layer was just toggled.
+        if(layer == BASE) {
+            ergodox_board_led_off();
+            board_led_state = OFF;
+        } else {
+            ergodox_board_led_on();
+            board_led_state = ON;
+        }
+    } else if (layer >= MDIA) {
+        // We need to do blinking.
+        if(timer_elapsed(dt) > BLINK_BASE) {
+            // toggle
+            dt = timer_read();
+            if(board_led_state == OFF) {
+                ergodox_board_led_on();
+                board_led_state = ON;
+            } else {
+                ergodox_board_led_off();
+                board_led_state = OFF;
+            }
+        }
+    }
+    oldlayer = layer;
+}
diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png
new file mode 100644 (file)
index 0000000..8d49e5e
Binary files /dev/null and b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png differ
diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md
new file mode 100644 (file)
index 0000000..618db6f
--- /dev/null
@@ -0,0 +1,38 @@
+# The extra special ergodox build for MacOS Sierra caps lock users
+
+###Do you
+- Hate the OSX / MacOS caps lock delay?
+- Have an ergodox?
+
+###Then this might just be for you!
+
+[This](http://apple.stackexchange.com/questions/81234/how-to-remove-caps-lock-delay-on-apple-macbook-pro-aluminum-keyboard)
+and [this](http://sleepycow.org/2014/07/removing-the-caps-lock-delay-on-a-macbook/)
+are good workarounds for the caps lock delay, however none of these
+work on Sierra.  This abomination of a keymap simulates capslock to the best
+of its abilities.
+This means that it keeps track of caps lock state internally rather than
+sending a caps lock keypress to the OS.  It is smart enough to check for
+modifiers, such as Control being held down, and stop it with the hanky panky
+and just send on the key event unmolested even if FakeCaps is enabled.  And
+since the macro isn't even registered on the non-alphas, it will not affect
+them regardless.  Only in the event that FakeCaps is enabled and an alpha key
+is pressed will it sneak in a shift keydown before the alpha keydown and
+immediately afterward sneaks in a shift keyup.  Generally this works well,
+however there is one known issue:
+
+- Holding down a key will only have the first character in caps.  For instance,
+  with caps lock on, if you hold down the 'a' key, you get:
+
+  ```
+  Aaaaaaaaaaaaaaaaaa
+  ```
+
+I have only tested this on an original Ergodox with a Teensy 2.0.
+
+####Some other small tweaks
+ - Layer 0 board light is off
+ - Layer 1 board light is on solid
+ - Layer 2 board light blinks at speed controlled by BLINK_BASE
+
+![osx whiskey tango foxtrot](osx_whiskey_tango_foxtrot_capslock.png)
diff --git a/keyboards/ergodox/keymaps/phoenix/keymap.c b/keyboards/ergodox/keymaps/phoenix/keymap.c
new file mode 100644 (file)
index 0000000..624817d
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Esc    |   1  |   2  |   3  |   4  |   5  |  _   |           | Del  |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | =      |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       | Down |  UP  |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | Home |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | End  |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Enter |Space |
+ *                                 |      |ace   | LGui |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   LSFT(KC_MINS),
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_EQL,         KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_HOME,
+                                                              KC_END,
+                                               KC_SPC,KC_BSPC,KC_LGUI,
+        // right hand
+             KC_DELT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_DOWN,KC_UP  ,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  F11 |  F12 |      |      |      |      |           |      |   Up |   7  |   8  |   9  |   *  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |   0  |   0  |   .  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_F11, KC_F12, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_TRNS,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_TRNS,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_0,   KC_0,    KC_DOT,  KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolDn |VolUp | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/phoenix/readme.md b/keyboards/ergodox/keymaps/phoenix/readme.md
new file mode 100644 (file)
index 0000000..b1053bf
--- /dev/null
@@ -0,0 +1,10 @@
+# ErgoDox EZ Phoenix Configuration
+
+I started working using the default layout.  The changes that I made are largely things that I consistely do wrong.
+
+As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write.  The stragest change might be all the keys that I cleared in the Code layer.  This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other.
+
+## Changelog
+
+* April 25, 2016 (V1.0): 
+  * Initial submission.
diff --git a/keyboards/ergodox/keymaps/plover/keymap.c b/keyboards/ergodox/keymaps/plover/keymap.c
new file mode 100644 (file)
index 0000000..12b3aa2
--- /dev/null
@@ -0,0 +1,228 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define PLVR 3 // Plover layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LGui |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |Plover|   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Esc    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | Home |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | End  |       | PgUp |        |      |
+ *                                 |Backsp|Delete|------|       |------| Enter  |Space |
+ *                                 | ace  |      | LAlt |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LGUI,
+        KC_TAB,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
+        KC_ESC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_HOME,
+                                                               KC_END,
+                                               KC_BSPC,KC_DELT,KC_LALT,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(3),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOT,
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |Brwser|Brwser|
+ *                                 | Lclk | Rclk |------|       |------|Fwd   |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_WBAK, KC_WFWD
+),
+
+/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   1  |   2  |   3  |   4  |   5  |      |           |      |  6   |  7   |   8  |   9  |  0   |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   q  |   w  |   e  |   r  |   t  |------|           |------|  y   |  u   |   i  |   o  |  p   |   [    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   a  |   s  |   d  |   f  |   g  |      |           |      |  h   |  j   |   k  |   l  |  ;   |   '    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |   c  |   v  |------|       |------|  n   |  m   |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+
+[PLVR] = KEYMAP(  // layout: layer 4: Steno for Plover
+        // left hand
+        KC_NO, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+        KC_NO,  KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_TRNS,
+        KC_NO,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,
+        KC_NO,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_NO,
+        KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+                                      KC_FN4, KC_NO,
+                                           KC_NO,
+                                 KC_C,   KC_V,   KC_NO,
+        // right hand
+             KC_TRNS,  KC_NO,   KC_NO,   KC_NO,  KC_NO,   KC_NO,   KC_TRNS,
+             KC_TRNS,   KC_6,    KC_7,    KC_8,   KC_9,    KC_0,   KC_TRNS,
+                        KC_Y,   KC_U,    KC_I,    KC_O,   KC_P,    KC_LBRC,
+               KC_NO,   KC_H,    KC_J,    KC_K,   KC_L, KC_SCLN,   KC_QUOT,
+                              KC_TRNS, KC_TRNS,  KC_NO,   KC_NO,     KC_NO,
+        KC_TRNS, KC_TRNS,
+        KC_TRNS,
+        KC_NO,  KC_N,   KC_M
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/plums/keymap.c b/keyboards/ergodox/keymaps/plums/keymap.c
new file mode 100644 (file)
index 0000000..2853455
--- /dev/null
@@ -0,0 +1,229 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |   1  |   2  |   3  |   4  |   5  |  F5  |           |Hypr+M|   6  |   7  |   8  |   9  |   0  | Mute   |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  [   |           |   ]  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | LGui   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+ * |--------+------+------+------+------+------| SYMB |           | MDIA |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Ca/Ctl|   {  |   (  |   |  |   :  |                                       |   -  |   =  |   )  |   }  |C`/Ctl|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | LGA  | LAlt |       | RAlt | Play |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Home |       | PgUp |      |      |
+ *                                 |Backsp| Esc  |------|       |------|Enter |Space |
+ *                                 |ace   |      | End  |       | PgDn |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,           KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_F5,
+        KC_TAB,           KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_LBRC,
+        KC_LGUI,          KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,          KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   TG(SYMB),
+        F(0),             KC_LCBR,      KC_LPRN,KC_PIPE,KC_COLN,
+                                               LGUI(KC_LALT), KC_LALT,
+                                                              KC_HOME,
+                                     KC_BSPC,         KC_ESC,  KC_END,
+        // right hand
+             HYPR(KC_M),     KC_6,   KC_7,    KC_8,     KC_9,      KC_0,      KC_MUTE,
+             KC_RBRC,    KC_Y,   KC_U,    KC_I,     KC_O,      KC_P,      KC_BSLS,
+                         KC_H,   KC_J,    KC_K,     KC_L,      KC_SCLN,   KC_QUOT,
+             TG(MDIA),   KC_N,   KC_M,    KC_COMM,  KC_DOT,    KC_SLSH,   KC_RSFT,
+                                 KC_MINS, KC_EQL,   KC_RPRN,   KC_RCBR,   F(1),
+             KC_RALT, KC_MPLY,
+             KC_PGUP,
+             KC_PGDN, KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |      |      |      |      |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Left | Down |  Up  | Right|      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,    KC_F8,   KC_F9,    KC_F10,  KC_F11,
+       KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS, KC_F12,
+                KC_LEFT, KC_DOWN,  KC_UP,   KC_RIGHT, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
+                         KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |VolUp |VolDn | Prev | Next |      |                                       | LClk | RClk |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [0] = ACTION_MACRO_TAP(0),                // FN0 - Ctrl + a (For screen/tmux)
+  [1] = ACTION_MACRO_TAP(1)                 // FN1 - Ctrl + ` (For quake style console)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
+{
+  switch(id) {
+    case 0:
+      if (record->event.pressed) {
+        if (record->tap.count) {
+          if (record->tap.interrupted) {
+            record->tap.count = 0;
+            // hold press action
+            register_code(KC_LCTL);
+          } else {
+            // tap press action
+            return MACRO( D(LCTL), T(A), U(LCTL), END  );
+          }
+        } else {
+          // hold press action
+          register_code(KC_LCTL);
+        }
+      } else {
+        if (record->tap.count) {
+          // tap release action
+        } else {
+          // hold release action
+          unregister_code(KC_LCTL);
+        }
+        record->tap.count = 0;
+      }
+      break;
+    case 1:
+      if (record->event.pressed) {
+        if (record->tap.count) {
+          if (record->tap.interrupted) {
+            record->tap.count = 0;
+            // hold press action
+            register_code(KC_RCTL);
+          } else {
+            // tap press action
+            return MACRO( DOWN(KC_RCTL), TYPE(KC_GRV), UP(KC_RCTL), END  );
+          }
+        } else {
+          // hold press action
+          register_code(KC_RCTL);
+        }
+      } else {
+        if (record->tap.count) {
+          // tap release action
+        } else {
+          // hold release action
+          unregister_code(KC_RCTL);
+        }
+        record->tap.count = 0;
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
+
+
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/plums/plums.png b/keyboards/ergodox/keymaps/plums/plums.png
new file mode 100644 (file)
index 0000000..2f127c4
Binary files /dev/null and b/keyboards/ergodox/keymaps/plums/plums.png differ
diff --git a/keyboards/ergodox/keymaps/plums/readme.md b/keyboards/ergodox/keymaps/plums/readme.md
new file mode 100644 (file)
index 0000000..b72329e
--- /dev/null
@@ -0,0 +1,11 @@
+# ErgoDox EZ Plums Configuration
+
+## Changelog
+
+* Apr 23, 2016 (v0.1.0): 
+  * Shortcut for iTerm2 quake style dropdown (Ctrl+`)
+  * Shortcut for screen/tmux (Ctrl+a)
+  * Shortcut for shush (Hyper+m)
+  * Combo modifier for LGUI + LALT
+
+![Plums](plums.png)
diff --git a/keyboards/ergodox/keymaps/pvinis/Changelog.md b/keyboards/ergodox/keymaps/pvinis/Changelog.md
new file mode 100644 (file)
index 0000000..e581620
--- /dev/null
@@ -0,0 +1,7 @@
+## v0.3
+
+*2016-10-11*
+
+### Starting point
+
+* The starting point of this keymap. A beginner layout, and a couple placeholders.
diff --git a/keyboards/ergodox/keymaps/pvinis/Makefile b/keyboards/ergodox/keymaps/pvinis/Makefile
new file mode 100644 (file)
index 0000000..7ceb51c
--- /dev/null
@@ -0,0 +1,9 @@
+CONSOLE_ENABLE = no    # for debugging
+
+SLEEP_LED_ENABLE = no  # no led blinking while sleeping
+NKRO_ENABLE = yes      # disable for windows
+TAP_DANCE_ENABLE = yes # tap-tap-tap
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/pvinis/Readme.md b/keyboards/ergodox/keymaps/pvinis/Readme.md
new file mode 100644 (file)
index 0000000..2a4a0c8
--- /dev/null
@@ -0,0 +1,65 @@
+pvinis' keymap
+==============
+
+This is a getting-used-to keymap for the [ErgoDox EZ][ez]. It's very much a work in progress.
+
+[ez]: https://ergodox-ez.com/
+
+## Table of Contents
+
+* [Todo](#todo)
+* [Layouts](#layouts)
+  - [Base layer](#base-layer)
+  - [Beginner layer](#beginner-layer)
+  - [QWERTY layer](#qwerty-layer)
+  - [CARPALX layer](#carpalx-layer)
+  - [System Control layer](#system-control-layer)
+  - [Template layers](#template-layers)
+* [Building](#building)
+
+# Todo
+
+- [ ] Generate images from keymap
+- [ ] Implement algernon's heatmap
+- [ ] Implement `KC_POP`
+
+# Layouts
+
+## Base layer
+
+This is the base layer that contains the common buttons of all keymaps. Right now, it has the top left button as a `flash` button when it's tapped 4 times, and the two thumb islands. The islands contain the `space` and `enter` keys on the right, the `backspace` and `shift` on the left, and all the 1x1 keys are just layer switches.
+Every time I connect the keyboard, I press the `BEGIN` layer switch, and then start typing.
+Recently, I added a few application "shortcuts", that basically call `ctrl`+`alt`+`cmd`+`<key>`, and `<key>` is `S` for Slack, `X` for Xcode, `M` for Messenger. Using [Hammerspoon][hammerspoon], I show/hide the application.
+
+[hammerspoon]: http://www.hammerspoon.org/
+
+## Beginner layer
+
+This is a basic keymap I use right now until I'm comfortable typing on the Ergodox. Currently uses a QWERTY layout, and the `([{}])` on the middle keys. Not a perfect layout, and its going to go away at some point, but for now thats my daily driver.
+
+## QWERTY layer
+
+This is basically the same as the `BEGIN` layer, but it might go away. I'm not using it, but I should have a QWERTY layout on the keyboard, in case someone else wants to try it out, or if I completely forget how keyboards work! At some point, this and the `BEGIN` layer will become one.
+
+## CARPALX layer
+
+This is here as a placeholder. I want to transition to [Carpalx QGMLWY][carpalx] or [White][white] at some point. They both look very interesting and more comfortable to type on, but after I'm confident with typing on the Ergodox.
+
+[carpalx]: http://mkweb.bcgsc.ca/carpalx/?full_optimization
+[white]: https://github.com/mw8/white_keyboard_layout
+
+## System Control layer
+
+This one is a layer that, in time, will have controls like mouse movement, volume up/down, mute, sleep, restart, shutdown, etc.
+
+## Template layers
+
+I have two commented out layers that are just templates, so I can easily create a new layer.
+
+# Building
+
+```
+$ git clone https://github.com/jackhumbert/qmk_firmware.git
+$ cd qmk_firmware/keyboards/ergodox/keymaps/pvinis
+$ make
+```
diff --git a/keyboards/ergodox/keymaps/pvinis/keymap.c b/keyboards/ergodox/keymaps/pvinis/keymap.c
new file mode 100644 (file)
index 0000000..df90620
--- /dev/null
@@ -0,0 +1,430 @@
+// pvinis' ergodox keymap
+
+#include "ergodox.h"
+#include "mousekey.h"
+
+// easier name for left ctrl-alt-gui
+#define ALLM(kc) LCAG(kc)
+
+// layers
+enum {
+  BASE = 0,
+  BEGIN,
+  QWERTY,
+  CARPALX,
+  SYSCTL,
+};
+
+// extra keys
+enum {
+  NONE = 0,
+
+  // mouse
+  MS_UL, // up   left
+  MS_UR, // up   right
+  MS_DL, // down left
+  MS_DR, // down right
+
+  // tap dance
+  TD_FLSH, // flash keyboard
+};
+
+// application selection
+// this is sending ctrl-alt-gui-<key>, and this is picked up by hammerspoon
+#define AP_SLCK ALLM(KC_S)
+#define AP_XCOD ALLM(KC_X)
+#define AP_MSGR ALLM(KC_M)
+
+// keymaps
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* BASE
+ * the base of the keyboard.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |4x FLASH|      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |BEGIN |QWERTY|       |SYSCTL|      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |CARPAL|       |Slack |        |      |
+ *                                 |Backsp|LShift|------|       |------| Enter  |Space |
+ *                                 |      |      |SYSCTL|       |Msngr |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+[BASE] = KEYMAP(
+ TD(TD_FLSH)    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO          ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO          ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO
+,KC_NO          ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO          ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO
+
+                                                          ,TG(BEGIN)  ,TG(QWERTY)
+                                                                      ,TG(CARPALX)
+                                                  ,KC_BSPC  ,KC_LSFT  ,TG(SYSCTL)
+
+                ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                          ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                                  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+
+   ,TG(SYSCTL)  ,KC_NO
+   ,AP_SLCK
+   ,AP_MSGR     ,KC_ENT  ,KC_SPC
+),
+
+/* BEGIN
+ * a beginner's keymap i currently use.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |   1  |   2  |   3  |   4  |   5  |   6  |           |   6  |   7  |   8  |   9  |   0  |   -  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  Tab   |   Q  |   W  |   E  |   R  |   T  |   [  |           |   ]  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | Enter  |
+ * |--------+------+------+------+------+------|   (  |           |   )  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |   `  |  Cmd |      | Cmd  |                                       |      |      |      |   '  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |      |       |      |        |      |
+ *                                 |      |      |------|       |------|        |      |
+ *                                 |      |      |      |       |      |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+[BEGIN] = KEYMAP(
+ KC_TRNS          ,KC_1    ,KC_2     ,KC_3     ,KC_4      ,KC_5    ,KC_6
+,KC_TAB           ,KC_Q    ,KC_W     ,KC_E     ,KC_R      ,KC_T    ,KC_LBRC
+,CTL_T(KC_ESC)    ,KC_A    ,KC_S     ,KC_D     ,KC_F      ,KC_G
+,KC_LSFT          ,KC_Z    ,KC_X     ,KC_C     ,KC_V      ,KC_B    ,KC_LPRN
+,KC_TRNS          ,KC_GRV  ,KC_LGUI  ,KC_LEFT  ,KC_RIGHT
+
+                                                                   ,KC_TRNS  ,KC_TRNS
+                                                                             ,KC_TRNS
+                                                         ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                ,KC_6       ,KC_7  ,KC_8   ,KC_9     ,KC_0     ,KC_MINS    ,KC_EQL
+                ,KC_RBRC    ,KC_Y  ,KC_U   ,KC_I     ,KC_O     ,KC_P       ,KC_BSLS
+                            ,KC_H  ,KC_J   ,KC_K     ,KC_L     ,KC_SCLN    ,KC_ENT
+                ,KC_RPRN    ,KC_N  ,KC_M   ,KC_COMM  ,KC_DOT   ,KC_SLSH    ,KC_RSFT
+                                   ,KC_UP  ,KC_DOWN  ,KC_TRNS  ,KC_QUOT    ,KC_TRNS
+
+      ,KC_TRNS  ,KC_TRNS
+      ,KC_TRNS
+      ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+),
+
+/* QWERTY
+ * the default qwerty keymap. not really used, but i'll keep it here for now.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |   1  |   2  |   3  |   4  |   5  |      |           |      |   6  |   7  |   8  |   9  |   0  |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |      |       |      |        |      |
+ *                                 |      |      |------|       |------|        |      |
+ *                                 |      |      |      |       |      |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+[QWERTY] = KEYMAP(
+ KC_TRNS    ,KC_1     ,KC_2     ,KC_3     ,KC_4     ,KC_5    ,KC_TRNS
+,KC_TRNS    ,KC_Q     ,KC_W     ,KC_E     ,KC_R     ,KC_T    ,KC_TRNS
+,KC_TRNS    ,KC_A     ,KC_S     ,KC_D     ,KC_F     ,KC_G
+,KC_TRNS    ,KC_Z     ,KC_X     ,KC_C     ,KC_V     ,KC_B    ,KC_TRNS
+,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                                                             ,KC_TRNS  ,KC_TRNS
+                                                                       ,KC_TRNS
+                                                   ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                ,KC_TRNS    ,KC_6  ,KC_7     ,KC_8     ,KC_9     ,KC_0       ,KC_TRNS
+                ,KC_TRNS    ,KC_Y  ,KC_U     ,KC_I     ,KC_O     ,KC_P       ,KC_TRNS
+                            ,KC_H  ,KC_J     ,KC_K     ,KC_L     ,KC_SCLN    ,KC_TRNS
+                ,KC_TRNS    ,KC_N  ,KC_M     ,KC_COMM  ,KC_DOT   ,KC_SLSH    ,KC_TRNS
+                                   ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+
+      ,KC_TRNS  ,KC_TRNS
+      ,KC_TRNS
+      ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+),
+
+/* CARPALX
+ * the keymap i would like to transition to.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |   1  |   2  |   3  |   4  |   5  |      |           | RIGHT|   6  |   7  |   8  |   9  |   0  |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   Q  |   G  |   M  |   L  |   W  |      |           |  L1  |   Y  |   F  |   U  |   B  |   ;  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   D  |   S  |   T  |   N  |   R  |------|           |------|   I  |   A  |   E  |   O  |   H  |        |
+ * |--------+------+------+------+------+------|      |           | Meh  |------+------+------+------+------+--------|
+ * |        |   Z  |   X  |   C  |   V  |   J  |      |           |      |   K  |   P  |   ,  |   .  |   /  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |  Up  |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[CARPALX] = KEYMAP(
+ KC_TRNS    ,KC_1     ,KC_2     ,KC_3     ,KC_4     ,KC_5    ,KC_TRNS
+,KC_TRNS    ,KC_Q     ,KC_G     ,KC_M     ,KC_L     ,KC_W    ,KC_TRNS
+,KC_TRNS    ,KC_D     ,KC_S     ,KC_T     ,KC_N     ,KC_R
+,KC_TRNS    ,KC_Z     ,KC_X     ,KC_C     ,KC_V     ,KC_J    ,KC_TRNS
+,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                                                             ,KC_TRNS  ,KC_TRNS
+                                                                       ,KC_TRNS
+                                                   ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                ,KC_TRNS    ,KC_6  ,KC_7     ,KC_8     ,KC_9     ,KC_0       ,KC_TRNS
+                ,KC_TRNS    ,KC_Y  ,KC_F     ,KC_U     ,KC_B     ,KC_SCLN    ,KC_TRNS
+                            ,KC_I  ,KC_A     ,KC_E     ,KC_O     ,KC_H       ,KC_TRNS
+                ,KC_TRNS    ,KC_K  ,KC_P     ,KC_COMM  ,KC_DOT   ,KC_SLSH    ,KC_TRNS
+                                   ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+
+      ,KC_TRNS  ,KC_TRNS
+      ,KC_TRNS
+      ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+),
+
+
+/* SYSCTL
+ * a keymap to control my system.
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      | Mute |VolDn |VolUp |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |MsUpL | MsUp |MsUpR |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |MsLeft| MsDn |MsRght|      | Lock   |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |MsDnL | MsDn |      |      | Sleep  |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      | Power|
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |MidClk|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |Left  |Right |
+ *                                 |      |      |------|       |------| Click| Click|
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[SYSCTL] = KEYMAP(
+ KC_TRNS    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO      ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO      ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO
+,KC_NO      ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO      ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO
+
+                                                      ,KC_NO  ,KC_NO
+                                                              ,KC_NO
+                                              ,KC_NO  ,KC_NO  ,KC_NO
+
+       /*,KC_POP*/,KC_NO    ,KC_NO  ,KC_NO  ,KC_MUTE  ,KC_VOLD  ,KC_VOLU    ,KC_NO
+      /*,KC_PTRN*/,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO    ,KC_NO      ,KC_NO
+                            ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO    ,KC_NO      ,LCTL(LSFT(KC_PWR))
+                  ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO    ,KC_NO      ,KC_SLEP
+                                    ,KC_NO  ,KC_NO    ,KC_NO    ,KC_NO      ,KC_PWR
+
+          ,KC_NO  ,KC_NO
+          ,KC_NO
+          ,KC_NO  ,KC_NO  ,KC_NO
+),
+
+/* TEMPLATE
+ * keymap template with transparent and non-transparent keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      |      |       |      |        |      |
+ *                                 |      |      |------|       |------|        |      |
+ *                                 |      |      |      |       |      |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+/*
+[TEMPLATE] = KEYMAP(
+ KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                                                                ,KC_TRNS  ,KC_TRNS
+                                                                          ,KC_TRNS
+                                                      ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+
+                ,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+                ,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+                            ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+                ,KC_TRNS    ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+                                      ,KC_TRNS  ,KC_TRNS  ,KC_TRNS  ,KC_TRNS    ,KC_TRNS
+
+      ,KC_TRNS  ,KC_TRNS
+      ,KC_TRNS
+      ,KC_TRNS  ,KC_TRNS  ,KC_TRNS
+),
+[TEMPLATE] = KEYMAP(
+ KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO
+,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO
+
+                                                    ,KC_NO  ,KC_NO
+                                                            ,KC_NO
+                                            ,KC_NO  ,KC_NO  ,KC_NO
+
+                ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                          ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                ,KC_NO    ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+                                  ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO    ,KC_NO
+
+        ,KC_NO  ,KC_NO
+        ,KC_NO
+        ,KC_NO  ,KC_NO  ,KC_NO
+),
+*/
+};
+
+// keyboard initialization
+void matrix_init_user() {
+  ergodox_led_all_on();
+  for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
+    ergodox_led_all_set(i);
+    wait_ms(5);
+  }
+  wait_ms(1000);
+  for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
+    ergodox_led_all_set(i);
+    wait_ms(10);
+  }
+  ergodox_led_all_off();
+}
+
+// extra keys
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch (id) {
+
+    // mouse
+  case MS_UL:
+    if (record->event.pressed) {
+      mousekey_on(KC_MS_UP);
+      mousekey_on(KC_MS_LEFT);
+    } else {
+      mousekey_off(KC_MS_UP);
+      mousekey_off(KC_MS_LEFT);
+    }
+    break;
+  case MS_UR:
+    if (record->event.pressed) {
+      mousekey_on(KC_MS_UP);
+      mousekey_on(KC_MS_RIGHT);
+    } else {
+      mousekey_off(KC_MS_UP);
+      mousekey_off(KC_MS_RIGHT);
+    }
+    break;
+  case MS_DL:
+    if (record->event.pressed) {
+      mousekey_on(KC_MS_DOWN);
+      mousekey_on(KC_MS_LEFT);
+    } else {
+      mousekey_off(KC_MS_DOWN);
+      mousekey_off(KC_MS_LEFT);
+    }
+    break;
+  case MS_DR:
+    if (record->event.pressed) {
+      mousekey_on(KC_MS_DOWN);
+      mousekey_on(KC_MS_RIGHT);
+    } else {
+      mousekey_off(KC_MS_DOWN);
+      mousekey_off(KC_MS_RIGHT);
+    }
+    break;
+  }
+  return MACRO_NONE;
+}
+
+// tap dances
+
+// flash keyboard on 4x tap, with leds
+void flash_each_tap(qk_tap_dance_state_t *state, void *user_data) {
+  switch (state->count) {
+  case 1:
+    ergodox_right_led_3_on();
+    break;
+  case 2:
+    ergodox_right_led_2_on();
+    break;
+  case 3:
+    ergodox_right_led_1_on();
+    break;
+  case 4:
+    ergodox_right_led_3_off();
+    wait_ms(50);
+    ergodox_right_led_2_off();
+    wait_ms(50);
+    ergodox_right_led_1_off();
+    break;
+  }
+}
+
+void flash_dance_finished(qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count >= 4) {
+    reset_keyboard();
+    reset_tap_dance(state);
+  }
+}
+
+void flash_dance_reset(qk_tap_dance_state_t *state, void *user_data) {
+  ergodox_right_led_1_off();
+  wait_ms(50);
+  ergodox_right_led_2_off();
+  wait_ms(50);
+  ergodox_right_led_3_off();
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED( flash_each_tap, flash_dance_finished, flash_dance_reset ),
+};
diff --git a/keyboards/ergodox/keymaps/robot_test_layout/keymap.c b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c
new file mode 100644 (file)
index 0000000..480be17
--- /dev/null
@@ -0,0 +1,151 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+enum custom_keycodes {
+  PLACEHOLDER = SAFE_RANGE, // can always be here
+  RGB_FF0000,
+  RGB_00FF00,
+  RGB_0000FF,
+  RGB_FFFFFF,
+  RGB_TOGGLE,
+  LED1,
+  LED2,
+  LED3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = KEYMAP(
+        RGB_TOGGLE, RGB_FF0000, RGB_00FF00, RGB_0000FF, RGB_FFFFFF, KC_5, KC_LPRN,
+        KC_GRAVE,   KC_A,       KC_B,       KC_C,       KC_D,       KC_E, KC_EXLM,
+        KC_HASH,    KC_J,       KC_K,       KC_L,       KC_M,       KC_N,
+        KC_AMPR,    KC_T,       KC_U,       KC_V,       KC_W,       KC_X, KC_DLR,
+        KC_PIPE,    KC_R,       KC_PLUS,    KC_LCBR,    KC_RCBR,
+
+                                            KC_F, KC_G,
+                                                  KC_H,
+                                     KC_P,  KC_O, KC_I,
+
+
+
+                                               // RIGHT HAND
+                                               KC_RPRN,       KC_6, KC_7, KC_8,    KC_9,   KC_0,    KC_MINS,
+                                               KC_AT,         KC_F, KC_G, KC_H,    KC_I,   KC_COLN, KC_BSLS,
+                                                              KC_O, KC_P, KC_Q,    KC_R,   KC_S,    KC_QUOT,
+                                               LSFT(KC_COMM), KC_Y, KC_Z, KC_COMM, KC_DOT, KC_SLSH, KC_ASTR,
+                                                              KC_A, KC_B, KC_C,    KC_D,   KC_PIPE,
+
+                                               LED1, KC_E,
+                                               LED2,
+                                               LED3, KC_J, KC_K
+    )
+};
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+  [1] = ACTION_LAYER_TAP_TOGGLE(1)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+bool status_led1_on = false, status_led2_on = false, status_led3_on = false;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // dynamically generate these.
+    case RGB_FF0000:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          EZ_RGB(0xff0000);
+          register_code(KC_1); unregister_code(KC_1);
+        #endif
+      }
+      return false;
+      break;
+    case RGB_00FF00:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          EZ_RGB(0x00ff00);
+          register_code(KC_2); unregister_code(KC_2);
+        #endif
+      }
+      return false;
+      break;
+    case RGB_0000FF:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          EZ_RGB(0x0000ff);
+          register_code(KC_3); unregister_code(KC_3);
+        #endif
+      }
+      return false;
+      break;
+    case RGB_FFFFFF:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          EZ_RGB(0xffffff);
+          register_code(KC_4); unregister_code(KC_4);
+        #endif
+      }
+      return false;
+      break;
+    case RGB_TOGGLE:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          rgblight_toggle();
+          register_code(KC_EQL); unregister_code(KC_EQL);
+        #endif
+      }
+      return false;
+      break;
+    case LED1:
+      if (record->event.pressed) {
+        if(status_led1_on) {
+        ergodox_right_led_1_off();
+        status_led1_on = false;
+        } else {
+        ergodox_right_led_1_on();
+        status_led1_on = true;
+        }
+      }
+      return false;
+      break;
+    case LED2:
+      if (record->event.pressed) {
+        if(status_led2_on) {
+        ergodox_right_led_2_off();
+        status_led2_on = false;
+        } else {
+        ergodox_right_led_2_on();
+        status_led2_on = true;
+        }
+      }
+      return false;
+      break;
+    case LED3:
+      if (record->event.pressed) {
+        if(status_led3_on) {
+        ergodox_right_led_3_off();
+        status_led3_on = false;
+        } else {
+        ergodox_right_led_3_on();
+        status_led3_on = true;
+        }
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/ergodox/keymaps/robot_test_layout/readme.md b/keyboards/ergodox/keymaps/robot_test_layout/readme.md
new file mode 100644 (file)
index 0000000..45dc2aa
--- /dev/null
@@ -0,0 +1,5 @@
+# Robot test layout
+
+Use this layout if you like to pretend you're [Norman](https://www.youtube.com/watch?v=-sbxFBay-tg), the ErgoDox EZ manufacturing robot.
+
+It's really meant just for internal use, but we're posting it on GitHub anyway, because hurray to open source. :)
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c
new file mode 100644 (file)
index 0000000..2c64304
--- /dev/null
@@ -0,0 +1,46 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    KC_GRV,   KC_1,    KC_2,  KC_3,    KC_4,    KC_5,    KC_F5,
+    KC_TAB,   KC_Q,    KC_W,  KC_D,    KC_F,    KC_K,    KC_BSLS,
+    KC_LCTRL, KC_A,    KC_S,  KC_E,    KC_T,    KC_G,
+    KC_LSFT,  KC_Z,    KC_X,  KC_C,    KC_V,    KC_B,    KC_LBRC,
+    KC_F1,    KC_F2,   KC_F3, KC_F4,   KC_LGUI,
+    /*-*/     /*-*/    /*-*/  /*-*/    /*-*/    KC_VOLD, KC_MUTE,
+    /*-*/     /*-*/    /*-*/  /*-*/    /*-*/    /*-*/    KC_VOLU,
+    /*-*/     /*-*/    /*-*/  /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_LALT,
+    //
+    /*-*/     KC_F6,   KC_6,  KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
+    /*-*/     KC_NO,   KC_J,  KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
+    /*-*/     /*-*/    KC_Y,  KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
+    /*-*/     KC_RBRC, KC_P,  KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
+    /*-*/     /*-*/    /*-*/  KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,         KC_RGHT,
+    KC_MPLY,  KC_MNXT,
+    KC_MPRV,
+    KC_RALT,  KC_QUOT, KC_SPC
+    )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+  ergodox_board_led_off();
+  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) {
+};
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md
new file mode 100644 (file)
index 0000000..4fa1814
--- /dev/null
@@ -0,0 +1,41 @@
+# Roman's Layout
+
+There is only one layer, and it is  based on [Norman
+layout](https://normanlayout.info/).
+
+Looking for multiple-layer layouts?
+
+- [Symbols, arrows, plover, HJKL
+  arrows](../romanzolotarev-norman-plover-osx-hjkl/)
+- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/)
+
+[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195)
+
+## How to use Vim key
+
+It is `CTL_T(KC_ESC)` and it works this way:
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## How to activate N-rollover
+
+- Hold left `SHIFT` and right `SHIFT` and then tap `N`.
+
+## How to make and flash on OS X
+
+First you need to install few brew packages.
+
+```bash
+brew tap osx-cross/avr
+brew install dfu-programmer avr-libc teensy_loader_cli
+```
+
+Then you can clone this repository, make and flash your ErgoDox.
+
+```bash
+git clone https://github.com/romanzolotarev/qmk_firmware
+cd qmk_firmware/keyboards/ergodox
+# Optionally tweak ./keymaps/romanzolotarev-norman-osx/keymap.c
+SLEEP_LED_ENABLED=no KEYMAP=romanzolotarev-norman-osx make teensy
+```
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png
new file mode 100644 (file)
index 0000000..4b9433b
Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png differ
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c
new file mode 100644 (file)
index 0000000..9f41e51
--- /dev/null
@@ -0,0 +1,134 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+#define SYMB 1
+#define PLVR 2
+#define ARRW 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F14,
+    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    TG(PLVR),
+    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
+    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
+    KC_F1,         KC_F2,   KC_F3,   KC_LALT, KC_LGUI,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_FN1,
+    //
+    /*-*/          KC_F15,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
+    /*-*/          KC_BSLS, KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
+    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
+    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
+    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_RALT, KC_F4,   KC_F5,         KC_F6,
+    KC_MPLY,       KC_MNXT,
+    KC_MPRV,
+    KC_FN3,        KC_QUOT, KC_SPC
+  ),
+  [SYMB] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_TRNS,       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_TRNS,
+    /*-*/          /*-*/    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+  [PLVR] = KEYMAP(
+    KC_NO,         KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS,
+    KC_NO,         KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_NO,         KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
+    KC_NO,         KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_C,    KC_V,    KC_NO,
+    //
+    /*-*/          KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    /*-*/          KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_NO,
+    /*-*/          /*-*/    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_LBRC,
+    /*-*/          KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,       KC_QUOT,
+    /*-*/          /*-*/    /*-*/    KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_NO,         KC_N,    KC_M
+  ),
+  [ARRW] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
+  [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
+  [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  switch(id) {
+    case 0:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+  ergodox_board_led_off();
+  ergodox_right_led_1_off();
+  ergodox_right_led_2_off();
+  ergodox_right_led_3_off();
+  switch (layer) {
+    case SYMB:
+      ergodox_right_led_1_on();
+      break;
+    case PLVR:
+      ergodox_right_led_2_on();
+      break;
+    case ARRW:
+      ergodox_right_led_3_on();
+      break;
+    default:
+      break;
+  }
+};
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
new file mode 100644 (file)
index 0000000..16cebd0
--- /dev/null
@@ -0,0 +1,50 @@
+# Roman's Layout
+
+There are four layers:
+
+- **BASE** is [Norman layout](https://normanlayout.info/).
+- **SYMB** for numbers and symbols.
+- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
+- **ARRW** for navigation (same fingers for arrows as HJKL on QWERTY).
+
+Looking for IJKL arrows? [Here we
+go](../romanzolotarev-norman-plover-osx/).
+
+[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
+
+## Switching
+
+- Tap `SYMB` to toggle **SYMB**.
+- Tap `ARRW` to toggle **ARRW**.
+- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
+- Tap `PLVR` to toggle **PLVR**.
+
+## LEDs
+
+- Red: SYMB is on.
+- Green: PLVR is on.
+- Blue: ARRW is on.
+
+## Functional Keys
+
+- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
+- Tap `F2` to copy screenshot to the clipboard.
+- Hold `SHIFT` and tap `F2` to save screenshot as a file.
+- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
+- Tap `F14`, `F15` to adjust display brightness.
+
+**IMPORTANT**: If you have another keyboard connected via Bluetooth, then
+`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug
+you ErgoDox. Enjoy!
+
+## CTRL/ESC
+
+Both of those keys are frequently used in Vim.
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## Activate N-rollover
+
+- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
+- Then you can activate **PLVR** and use ErgoDox EZ for steno.
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png
new file mode 100644 (file)
index 0000000..cdc535f
Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png differ
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c
new file mode 100644 (file)
index 0000000..563e248
--- /dev/null
@@ -0,0 +1,134 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+#define SYMB 1
+#define PLVR 2
+#define ARRW 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F14,
+    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    TG(PLVR),
+    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
+    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
+    KC_F1,         KC_F2,   KC_F3,   KC_LALT, KC_LGUI,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_FN1,
+    //
+    /*-*/          KC_F15,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
+    /*-*/          KC_BSLS, KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
+    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
+    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
+    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_RALT, KC_F4,   KC_F5,         KC_F6,
+    KC_MPLY,       KC_MNXT,
+    KC_MPRV,
+    KC_FN3,        KC_QUOT, KC_SPC
+  ),
+  [SYMB] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_TRNS,       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_TRNS,
+    /*-*/          /*-*/    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+  [PLVR] = KEYMAP(
+    KC_NO,         KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS,
+    KC_NO,         KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
+    KC_NO,         KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
+    KC_NO,         KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_C,    KC_V,    KC_NO,
+    //
+    /*-*/          KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    /*-*/          KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_NO,
+    /*-*/          /*-*/    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_LBRC,
+    /*-*/          KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,       KC_QUOT,
+    /*-*/          /*-*/    /*-*/    KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_NO,         KC_N,    KC_M
+  ),
+  [ARRW] = KEYMAP(
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,       KC_TRNS,
+    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
+    /*-*/          /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS,       KC_TRNS,
+    KC_TRNS,
+    KC_TRNS,       KC_TRNS, KC_TRNS
+  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
+  [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
+  [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  switch(id) {
+    case 0:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+  ergodox_board_led_off();
+  ergodox_right_led_1_off();
+  ergodox_right_led_2_off();
+  ergodox_right_led_3_off();
+  switch (layer) {
+    case SYMB:
+      ergodox_right_led_1_on();
+      break;
+    case PLVR:
+      ergodox_right_led_2_on();
+      break;
+    case ARRW:
+      ergodox_right_led_3_on();
+      break;
+    default:
+      break;
+  }
+};
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md
new file mode 100644 (file)
index 0000000..804c52a
--- /dev/null
@@ -0,0 +1,50 @@
+# Roman's Layout
+
+There are four layers:
+
+- **BASE** is [Norman layout](https://normanlayout.info/).
+- **SYMB** for numbers and symbols.
+- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
+- **ARRW** for navigation (same fingers for arrows as IJKL on QWERTY).
+
+Looking for HJKL arrows? [Here we
+go](../romanzolotarev-norman-plover-osx-hjkl/).
+
+[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417)
+
+## Switching
+
+- Tap `SYMB` to toggle **SYMB**.
+- Tap `ARRW` to toggle **ARRW**.
+- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
+- Tap `PLVR` to toggle **PLVR**.
+
+## LEDs
+
+- Red: SYMB is on.
+- Green: PLVR is on.
+- Blue: ARRW is on.
+
+## Functional Keys
+
+- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
+- Tap `F2` to copy screenshot to the clipboard.
+- Hold `SHIFT` and tap `F2` to save screenshot as a file.
+- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
+- Tap `F14`, `F15` to adjust display brightness.
+
+**IMPORTANT**: If you have another keyboard connected via Bluetooth, then
+`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug
+you ErgoDox. Enjoy!
+
+## CTRL/ESC
+
+Both of those keys are frequently used in Vim.
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## Activate N-rollover
+
+- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
+- Then you can activate **PLVR** and use ErgoDox EZ for steno.
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png
new file mode 100644 (file)
index 0000000..10b0752
Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png differ
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c
new file mode 100644 (file)
index 0000000..5569f5c
--- /dev/null
@@ -0,0 +1,74 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+#define QWRT 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    KC_GRV,  KC_1,     KC_2,  KC_3,    KC_4,    KC_5,    KC_F5,
+    KC_TAB,  KC_Q,     KC_W,  KC_D,    KC_F,    KC_K,    KC_BSLS,
+    KC_LCTL, KC_A,     KC_S,  KC_E,    KC_T,    KC_G,
+    KC_LSFT, KC_Z,     KC_X,  KC_C,    KC_V,    KC_B,    KC_LBRC,
+    KC_F1,   KC_F2,    KC_F3, KC_F4,   KC_LGUI,
+    /*-*/    /*-*/     /*-*/  /*-*/    /*-*/    KC_VOLD, KC_MUTE,
+    /*-*/    /*-*/     /*-*/  /*-*/    /*-*/    /*-*/    KC_VOLU,
+    /*-*/    /*-*/     /*-*/  /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_LALT,
+    //
+    /*-*/    KC_F6,    KC_6,  KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
+    /*-*/    TG(QWRT), KC_J,  KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
+    /*-*/    /*-*/     KC_Y,  KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
+    /*-*/    KC_RBRC,  KC_P,  KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
+    /*-*/    /*-*/     /*-*/  KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,         KC_RGHT,
+    KC_MPLY, KC_MNXT,
+    KC_MPRV,
+    KC_RALT, KC_QUOT,  KC_SPC
+  ),
+  [QWRT] = KEYMAP(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_E,    KC_R,    KC_T,    KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_D,    KC_F,    KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
+    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
+    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
+    //
+    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/    KC_TRNS, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_TRNS,
+    /*-*/    /*-*/    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_TRNS,
+    /*-*/    KC_TRNS, KC_N,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS,
+    KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+  ergodox_board_led_off();
+  ergodox_right_led_1_off();
+  ergodox_right_led_2_off();
+  ergodox_right_led_3_off();
+  switch (layer) {
+    case QWRT:
+      ergodox_right_led_1_on();
+      break;
+    default:
+      break;
+  }
+};
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md
new file mode 100644 (file)
index 0000000..0e78c13
--- /dev/null
@@ -0,0 +1,34 @@
+# Roman's Layout
+
+There are two layers:
+
+- **BASE** is [Norman layout](https://normanlayout.info/).
+- **QWRT** is QWERTY.
+
+[![keyboard-layout](romanzolotarev-norman-qwerty-osx.png)](http://www.keyboard-layout-editor.com/#/gists/3b236f450da474dc506a5a80390c3cc7)
+
+## Switching
+
+- Tap `QWRT` to toggle **QWRT**.
+
+## LEDs
+
+- Red: QWRT is on.
+
+## Functional Keys
+
+- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
+- Tap `F2` to copy screenshot to the clipboard.
+- Hold `SHIFT` and tap `F2` to save screenshot as a file.
+- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
+
+## CTRL/ESC
+
+Both CTRL and ESC are frequently used in Vim.
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## Activate N-rollover
+
+- Hold left `SHIFT` and right `SHIRT` and then tap `N`.
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png
new file mode 100644 (file)
index 0000000..34762ec
Binary files /dev/null and b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png differ
diff --git a/keyboards/ergodox/keymaps/sethbc/Makefile b/keyboards/ergodox/keymaps/sethbc/Makefile
new file mode 100644 (file)
index 0000000..457a3d0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/sethbc/keymap.c b/keyboards/ergodox/keymaps/sethbc/keymap.c
new file mode 100644 (file)
index 0000000..8816ad6
--- /dev/null
@@ -0,0 +1,102 @@
+#include "ergodox.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define FN1 1 // symbols
+#define FN2 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_ESC,
+        KC_BSLS, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    MO(FN2),
+        KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    MO(FN1),
+        KC_LGUI, KC_GRV,  KC_BSLS, KC_LEFT, KC_RGHT,
+                                                     KC_LCTL, KC_LALT,
+                                                              KC_HOME,
+                                            KC_BSPC,  KC_DEL, KC_END,
+        // right hand
+        MO(FN2), KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+        KC_LBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_RBRC,
+                 KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+        MO(FN1), KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+                          KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_RGUI,
+        KC_RALT, KC_RCTL,
+        KC_PGUP,
+        KC_PGDN, KC_ENT, KC_SPC
+    ),
+// FN1
+[FN1] = KEYMAP(
+       // left hand
+       KC_TRNS,   KC_F1,  KC_F2,  KC_F3,   KC_F4,   KC_F5,   KC_F11,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                                    KC_TRNS, KC_TRNS,
+                                                             KC_TRNS,
+                                           KC_TRNS, KC_TRNS, KC_TRNS,
+       // right hand
+       KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+// FN2
+[FN2] = KEYMAP(
+       RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                                    KC_TRNS, KC_TRNS,
+                                                             KC_TRNS,
+                                           KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS, KC_NLCK, KC_PSLS, KC_PAST, KC_PAST, KC_PMNS, KC_BSPC,
+       KC_TRNS, KC_NO,   KC_P7,   KC_P8,   KC_P9,   KC_PMNS, KC_BSPC,
+                KC_NO,   KC_P4,   KC_P5,   KC_P6,   KC_PPLS, KC_PENT,
+       KC_TRNS, KC_NO,   KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PENT,
+                         KC_P0,   KC_PDOT, KC_SLSH, KC_PENT, KC_PENT,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/sethbc/readme.md b/keyboards/ergodox/keymaps/sethbc/readme.md
new file mode 100644 (file)
index 0000000..57b5d0e
--- /dev/null
@@ -0,0 +1,4 @@
+# sethbc's Ergodox EZ keymap
+
+Largely based on the Ergodox Infinity default keymap, but layer locking has been
+removed in favor of momentary layer activation
diff --git a/keyboards/ergodox/keymaps/sneako/keymap.c b/keyboards/ergodox/keymaps/sneako/keymap.c
new file mode 100644 (file)
index 0000000..08cadd6
--- /dev/null
@@ -0,0 +1,187 @@
+// Based on `default_osx`
+// Replace left Bksp with Ctrl/Esc
+// Remove the Ctrl from Z and /
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  LGui  |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
+        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(1),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/sneako/readme.md b/keyboards/ergodox/keymaps/sneako/readme.md
new file mode 100644 (file)
index 0000000..8dd110e
--- /dev/null
@@ -0,0 +1,6 @@
+# ergodox_keymap
+
+Based on the default Ergodox EZ firmware
+
+Replaced the left side Bksp with a Crtl/Esc, this really helps in vim.
+Removed the Ctrls from the Z and / keys.
diff --git a/keyboards/ergodox/keymaps/software_neo2/keymap.c b/keyboards/ergodox/keymaps/software_neo2/keymap.c
new file mode 100644 (file)
index 0000000..41ace40
--- /dev/null
@@ -0,0 +1,139 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_neo2.h"
+
+// Layer names
+#define BASE 0 // default layer
+#define MDIA 1 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   ^    |   1  |   2  |   3  |   4  |   5  | Play |           | Next |   6  |   7  |   8  |   9  |   0  |BackSpce|
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  Del   |   X  |   V  |   L  |   C  |   W  |  L1  |           |  L1  |   K  |   H  |   G  |   F  |   Q  |   ß    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |  Caps  |   U  |   I  |   A  |   E  |   O  |------|           |------|   S  |   N  |   R  |   T  |   D  |   Y    |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Ü/Ctrl| Ö/C-S| Ä/Alt|   P  |   Z  |      |           |      |   B  |   M  |   ,  |   .  |   J  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |  L1  | Home | PgDn | PgUp | End  |                                       | Right| Down |  Up  | Left |  Esc  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------+------+------|       |------+--------+------.
+ *                                 |      |      |NeoL2 |       |NeoL2 |        |      |
+ *                                 | Tab  |Backsp|------|       |------|  Space |Enter |
+ *                                 |      |ace   |NeoL1 |       |NeoL1 |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_CIRC,         KC_1,          KC_2,          KC_3,          KC_4,    KC_5,    KC_MPLY,
+        KC_DELT,         NEO_X,         NEO_V,         NEO_L,         NEO_C,   NEO_W,   TG(1),
+        KC_CAPS,         NEO_U,         NEO_I,         NEO_A,         NEO_E,   NEO_O,
+        KC_LSFT,         CTL_T(NEO_UE), C_S_T(NEO_OE), ALT_T(NEO_AE), NEO_P,   NEO_Z,   ALL_T(KC_NO),
+        DE_LESS,         KC_HOME,       KC_PGDN,        KC_PGUP,        KC_END,
+                                                ALT_T(KC_APP),KC_LGUI,
+                                                              NEO_L2_L,
+                                               KC_TAB,KC_BSPC,NEO_L1_L,
+        // right hand
+        KC_MNXT,     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+        TG(1),       NEO_K,   NEO_H,   NEO_G,   NEO_F,   NEO_Q,   NEO_SS,
+                     NEO_S,   NEO_N,   NEO_R,   NEO_T,   NEO_D,   NEO_Y,
+        MEH_T(KC_NO),NEO_B,   NEO_M,   KC_COMM, KC_DOT,  NEO_J,   KC_RSFT,
+                              KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_ESC,
+        KC_LALT,CTL_T(KC_ESC),
+        NEO_L2_R,
+        NEO_L1_R,KC_SPC, KC_ENT
+    ),
+/* Keymap 1: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      | Lclk | MsUp | Rclk |      |      |           |      |      |VolDwn| Mute |VolUp |      |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------|           |------|      | Prev | Stop | Play | Next |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |WhRght|WhDown| WhUp |WhLeft|WhClk |      |           |      |BwSrch|BwBack|BwHome|BwRefr|BwFwd |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |MsAcl0|MsAcl1|MsAcl2|                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |Brwser|Brwser|
+ *                                 | Lclk | Rclk |------|       |------|Back  |Forwd |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
+       KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS, KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11,
+       KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
+                KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
+       KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
+                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_WBAK, KC_WFWD
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    /* [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols) */
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case MDIA:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            ergodox_board_led_off();
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/supercoder/config.h b/keyboards/ergodox/keymaps/supercoder/config.h
new file mode 100644 (file)
index 0000000..2de3599
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H 1
+
+#include "../../config.h"
+
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
+
+#endif
diff --git a/keyboards/ergodox/keymaps/supercoder/images/layout.png b/keyboards/ergodox/keymaps/supercoder/images/layout.png
new file mode 100644 (file)
index 0000000..c72958c
Binary files /dev/null and b/keyboards/ergodox/keymaps/supercoder/images/layout.png differ
diff --git a/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg b/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg
new file mode 100644 (file)
index 0000000..d690eaf
Binary files /dev/null and b/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg differ
diff --git a/keyboards/ergodox/keymaps/supercoder/keymap.c b/keyboards/ergodox/keymaps/supercoder/keymap.c
new file mode 100644 (file)
index 0000000..775acf2
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * SuperCoder 2000 layout
+ */
+
+#include "ergodox.h"
+
+/* Layers */
+
+#define SC2K    0 // default layer
+
+/* The Keymap */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  /* Keymap 0: Base Layer
+   *
+   * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+   * |         0 |   0  |   0  |   0  |   0  |   0  |   0  |           |  1   |   1  |   1  |   1  |   1  |  1   | 1         |
+   * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+   * |         0 |   0  |   0  |   0  |   0  |   0  |   0  |           |  1   |   1  |   1  |   1  |   1  |  1   | 1         |
+   * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+   * |         0 |   0  |   0  |   0  |   0  |   0  |------|           |------|   1  |   1  |   1  |   1  |  1   | 1         |
+   * |-----------+------+------+------+------+------|   0  |           |  1   |------+------+------+------+------+-----------|
+   * |         0 |   0  |   0  |   0  |   0  |   0  |      |           |      |   1  |   1  |   1  |   1  |  1   | 1         |
+   * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+   *     |     0 |   0  |   0  |   0  |   0  |                                       |   1  |   1  |   1  |  1   | 1     |
+   *     `-----------------------------------'                                       `-----------------------------------'
+   *                                         ,-------------.           ,-------------.
+   *                                         | DONE | DONE |           | DONE | DONE |
+   *                                  ,------|------|------|           |------+------+------.
+   *                                  |      |      | DONE |           | DONE |      |      |
+   *                                  | DONE | DONE |------|           |------| DONE | DONE |
+   *                                  |      |      | DONE |           | DONE |      |      |
+   *                                  `--------------------'           `--------------------'
+   */
+[SC2K] = KEYMAP(
+ // left hand
+ KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
+,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
+,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
+,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
+,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
+
+                                             ,KC_ENT  ,KC_ENT
+                                                      ,KC_ENT
+                                    ,KC_ENT  ,KC_ENT  ,KC_ENT
+
+                                                                // right hand
+                                                               ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
+                                                               ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
+                                                                        ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
+                                                               ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
+                                                                                 ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
+
+                                                               ,KC_ENT  ,KC_ENT
+                                                               ,KC_ENT
+                                                               ,KC_ENT  ,KC_ENT   ,KC_ENT
+                  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+}
diff --git a/keyboards/ergodox/keymaps/supercoder/makefile.mk b/keyboards/ergodox/keymaps/supercoder/makefile.mk
new file mode 100644 (file)
index 0000000..41a195d
--- /dev/null
@@ -0,0 +1,6 @@
+BOOTMAGIC_ENABLE=no
+COMMAND_ENABLE=no
+SLEEP_LED_ENABLE=no
+UNICODE_ENABLE=no
+MOUSEKEY_ENABLE=no
+EXTRAKEY_ENABLE=no
diff --git a/keyboards/ergodox/keymaps/supercoder/readme.md b/keyboards/ergodox/keymaps/supercoder/readme.md
new file mode 100644 (file)
index 0000000..8ef96ed
--- /dev/null
@@ -0,0 +1,29 @@
+SuperCoder 2000 layout for the ErgoDox
+==================================================
+
+![SuperCoder 2000](images/supercoder_2000.jpg)
+
+Ever found yourself in need of entering binary codes rapidly? Ever wanted to use
+all ten fingers to do so? Ever felt your SuperCoder 2000 too limiting, by only
+having three buttons? We heard you! With this layout for the ErgoDox EZ, you
+will be able to tap in binary at an unparalleled speed and accuracy! Efficiency
+never seen before!
+
+Behold the Ultimate SuperCoder 2000 layout!
+
+![SuperCoder layout](images/layout.png)
+
+### To use it...
+
+To use this piece of top quality engineering, you can either
+[download the hex file][hex] we have prepared for you, or you can compile it on
+your own:
+
+ [hex]: https://raw.githubusercontent.com/algernon/ergodox-supercoder/master/supercoder.hex
+
+```
+$ git clone https://github.com/jackhumbert/qmk_firmware.git
+$ cd qmk_firmware/keyboards/ergodox
+$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder
+$ make KEYMAP=supercoder
+```
diff --git a/keyboards/ergodox/keymaps/techtomas/keymap.c b/keyboards/ergodox/keymaps/techtomas/keymap.c
new file mode 100644 (file)
index 0000000..93d59d4
--- /dev/null
@@ -0,0 +1,231 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define APP 2 // app layer
+#define CNTL 3 // control layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  L2/`  |   1  |   2  |   3  |   4  |   5  |CmdSpc|           | -    |   6  |   7  |   8  |   9  |   0  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | MEH/Tab|   Q  |   W  |   E  |   R  |   T  | [    |           | ]    |  Y   |   U  |   I  |   O  |   P  | MEH/\  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Hyp/Esc |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  | L2/; | Hyp/'  |
+ * |--------+------+------+------+------+------| Tab  |           | STab |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | L2// | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |L1/Lft|L3/Rht| LCtl | LAlt | LGui |                                       | Rgui |  Up  |  Dn  |  L3  |  L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                         ,-------------.       ,-------------.
+ *                                         | LCtl | LGui |       |AltGui|ShfGui|
+ *                                 ,-------|------|------|       |------+--------+------.
+ *                                 |       |      |L1/Hom|       |L2/PUp|       |       |
+ *                                 | Backsp|Delete|------|       |------| Enter | Space |
+ *                                 |       |      |L3/End|       |L1/PDn|       |       |
+ *                                 `--------------------'       `-----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        LT(APP,KC_GRV),   KC_1,                KC_2,    KC_3,    KC_4,    KC_5,   LGUI(KC_SPC),
+        MEH_T(KC_TAB),    KC_Q,                KC_W,    KC_E,    KC_R,    KC_T,   KC_LBRC,
+        ALL_T(KC_ESC),    KC_A,                KC_S,    KC_D,    KC_F,    KC_G,
+        KC_LSFT,          KC_Z,                KC_X,    KC_C,    KC_V,    KC_B,   KC_TAB,
+        LT(SYMB,KC_LEFT), LT(CNTL,KC_RIGHT),   KC_LCTL, KC_LALT, KC_LGUI,
+                                                                    KC_LCTL,   KC_LGUI,
+                                                                               LT(SYMB,KC_HOME),
+                                                           KC_BSPC, KC_DELETE, LT(CNTL,KC_END),
+        // right hand
+       KC_MINS,          KC_6,    KC_7,    KC_8,     KC_9,      KC_0,             KC_EQL,
+       KC_RBRC,          KC_Y,    KC_U,    KC_I,     KC_O,      KC_P,             MEH_T(KC_BSLS),
+                         KC_H,    KC_J,    KC_K,     KC_L,      LT(APP,KC_SCLN),  ALL_T(KC_QUOT),
+       S(KC_TAB),        KC_N,    KC_M,    KC_COMM,  KC_DOT,    LT(APP,KC_SLSH),  KC_RSFT,
+                                  KC_RGUI, KC_UP,    KC_DOWN,   KC_FN3,           KC_FN1,
+       LALT(KC_LGUI),    S(KC_LGUI),
+       LT(APP,KC_PGUP),
+       LT(SYMB,KC_PGDN), KC_ENT, KC_SPC
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           | Tab  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |  <   |           |  >   |   :  |   7  |   8  |   9  |   /  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------|   ;  |   4  |   5  |   6  |   *  |        |
+ * |--------+------+------+------+------+------|  F14 |           | F15  |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   -  |  Entr  |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |   0   |   . |  =   |   +  |       |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,S(KC_COMM),
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_F14,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TAB,    KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       S(KC_DOT), KC_COLN, KC_7,   KC_8,    KC_9,    KC_BSLS, KC_F12,
+                  KC_SCLN, KC_4,   KC_5,    KC_6,    KC_ASTR, KC_TRNS,
+       KC_F15,    KC_AMPR, KC_1,   KC_2,    KC_3,    KC_MINS, KC_ENT,
+                           KC_0,   KC_DOT,  KC_EQL,  KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: App Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        | CmdQ | CmdW |      |      |      | Stab |           | Play | Prev | Next |      |      |PrtSc |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------| VolDn|VolUp |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           | Mute |------+------+------+------+------+--------|
+ * |        | CmdZ | CmdX | CmdC | CmdY | CtrlC|      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// Control
+[APP] = KEYMAP(
+       KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
+       KC_TRNS, LGUI(KC_Q), LGUI(KC_W), KC_TRNS,    KC_TRNS,    KC_TRNS,    S(KC_TAB),
+       KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
+       KC_TRNS, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LCTL(KC_C), KC_TRNS,
+       KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
+                                              KC_TRNS,  KC_TRNS,
+                                                        KC_TRNS,
+                                      KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_MPLY,  KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS,
+                 KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_MUTE,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 3: Control Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  Pwr   |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght| Lclk |------|           |------|  Lft | Down | Up   | Right|      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      | Rclk |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | Shift|      |       | Home | End  |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | LAtl |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// Control
+[CNTL] = KEYMAP(
+       KC_PWR,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_LSFT, KC_TRNS,
+                                                    KC_LALT,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_HOME, KC_END,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
+    [2] = ACTION_LAYER_TAP_TOGGLE(APP),
+    [3] = ACTION_LAYER_TAP_TOGGLE(CNTL)             // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        case 3:
+          ergodox_right_led_3_on();
+          break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/techtomas/readme.md b/keyboards/ergodox/keymaps/techtomas/readme.md
new file mode 100644 (file)
index 0000000..36e0591
--- /dev/null
@@ -0,0 +1,57 @@
+# Techtomas Configuration
+
+## Base Layer
+
+The base layer is a merge of what I liked with the default layout and the ordinary layout. The thumb cluster is more like the Kinesis advantage and the top row of the cluster is convient for use on the mac.
+
+* The Caps Lock postion handles [Hyper/Esc](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
+* The Tab key toggles MEH.
+* The top vertical mods on the left and right are [ and ].
+* The bottom vertical mods on the left and right are tab and shift+tab
+* The HYPER and MEH key are made in the same location on the right side of the board as well. Using Keyboard Maestro for OS X makes one-handed shortcuts very easy.
+* Layer switching is focused around the thumb clusters plus some additional locations for convience.
+
+## Symbol Layer
+The symbol layer can be tap/toggled with the bottom right key and also toggled on the thumb clusters.
+
+The bottom two vertical mods are set to F14 and F15 which is the default for changing screen brightness on the mac
+
+## App Layer
+The app layer is used to control media playback and also some application shortcuts (OS X Focused).
+It can be toggled on the left board in the top left corner (tilde/grave) or using your pinky on the right side of the board using either ; or /.
+There is one additional toggle on the right thumb cluster for quick access to play and mute key combos.
+
+### Current App shortcuts defined
+* Q = CMD+Q
+* W = CMD+W
+* Z = CMD+Z
+* X = CMD+X
+* C = CMD+C
+* V = CMD+V
+* B = CTRL+C
+* P = Print Screen
+
+## Control Layer
+The control layer is meant to help easily navigate and select text. It can also be stacked ontop of the Symbol layer when needed.
+
+The right arrow key and End key toggle the control layer on the left board. There is also a tap toggle for the layer in the same position on the right side of the board.
+
+On the left board you have mouse control with left & right click in the location of the G and B keys.
+On the right board you have vim-style arrow keys using hjkl
+
+The left thumb cluster moves shift and alt within easy reach while holding the toggle (end). So far I've found this convient to navigate and  skip around text when using the hjkl arrow keys. I found that it was easy to get the alt key stuck on depending on what key you released first so I added the PREVENT_STUCK_MODIFIERS to the config.h to help with that.
+
+## Changelog
+
+* May 4th, 2016 (v1.2):
+  * Moved layer toggles around to match my habbits of typing
+  * Enabled Prevent Stuck Modifers in my config.h (L3 + Alt on cluster would get stuck)
+  * Changed media layer to be more like an app layer with some quick shortcuts (mac centric)
+  * Moved around the base layer arrow keys so mod keys were more accesible
+
+* Apr 29, 2016 (V1.1):
+  * Added F14 and F15 to symbol layer
+  * Added control layer toggle to A key.
+
+* Apr 28, 2016 (V1.0):
+  * Modified config based on the default layout plus inspiration from the ordinary layout
diff --git a/keyboards/ergodox/keymaps/teckinesis/keymap.c b/keyboards/ergodox/keymaps/teckinesis/keymap.c
new file mode 100644 (file)
index 0000000..2837874
--- /dev/null
@@ -0,0 +1,455 @@
+#include "ergodox.h"
+#include "led.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+#include "mousekey.h"
+
+#define BASE   0 // default layer
+#define SYMB   1 // symbols layer
+#define MDIA   2 // media layer
+#define SPEC   3 // special layer
+
+#define LCaps 10 // left caps-shift key
+#define LSymb 11 // left symbol-shift key
+#define LMdia 12 // left media-shift key
+#define LSpec 13 // left special-shift key
+#define RCaps 14 // right caps-shift key
+#define RSymb 15 // right symbol-shift key
+#define RMdia 16 // right media-shift key
+#define RSpec 17 // right special-shift key
+
+#define MUL   20 // mouse up left
+#define MUR   21 // mouse up right
+#define MDL   22 // mouse down left
+#define MDR   23 // mouse down right
+
+/*
+ * teckinesis layout for ErgoDox (EZ)
+ * 
+ * Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com
+ * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+ *
+ * No rights reserved. This software is in the public domain.
+ * Credit me if you are friendly but if you're a jerk don't bother.
+ * 
+ * Details: readme.md
+ *          https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/******* Base Layer ********************************************************************************************************
+ *
+ * ,------------------------------------------------------.           ,------------------------------------------------------.
+ * | Special =+ |   1  |   2  |   3  |   4  |   5  | ESC  |           |  `   |   6  |   7  |   8  |   9  |   0  | -_ Special |
+ * |------------+------+------+------+------+-------------|           |------+------+------+------+------+------+------------|
+ * | Media  Tab |   Q  |   W  |   E  |   R  |   T  |   [  |           |  ]   |   Y  |   U  |   I  |   O  |   P  | \|   Media |
+ * |------------+------+------+------+------+------|      |           |      |------+------+------+------+------+------------|
+ * | Symbol     |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;   | '"  Symbol |
+ * |------------+------+------+------+------+------|Shift |           | Tab  |------+------+------+------+------+------------|
+ * | Capitals   |   Z  |   X  |   C  |   V  |   B  | -Tab |           |      |   N  |   M  |   ,  |   .  |  /   |   Capitals |
+ * `------------+------+------+------+------+-------------'           `-------------+------+------+------+------+------------'
+ *      | LCtrl |Meh/\ |Hypr//| LAlt | LGui |                                       | RGui | RAlt |Hypr/[|Meh/] | RCtrl |
+ *      `-----------------------------------'                                       `-----------------------------------'
+ *                                          ,-------------.           ,-------------.
+ *                                          | Home | End  |           | Left | Right|
+ *                                   ,------|------|------|           |------+------+------.
+ *                                   |      |      | PgUp |           |  Up  |      |      |
+ *                                   |Backsp| Del  |------|           |------| Enter| Space|
+ *                                   |      |      | PgDn |           | Down |      |      |
+ *                                   `--------------------'           `--------------------'
+ */
+[BASE] = KEYMAP(
+// left hand
+ F(LSpec),KC_1,KC_2,KC_3   ,KC_4  ,KC_5  ,KC_ESC
+,F(LMdia)  ,KC_Q   ,KC_W   ,KC_E   ,KC_R  ,KC_T  ,KC_LBRC
+,M(LSymb)  ,KC_A   ,KC_S   ,KC_D   ,KC_F  ,KC_G
+,M(LCaps)  ,KC_Z   ,KC_X   ,KC_C   ,KC_V  ,KC_B  ,LSFT(KC_TAB)
+,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI
+                                         ,KC_HOME,KC_END
+                                                 ,KC_PGUP
+                                 ,KC_BSPC,KC_DEL ,KC_PGDN
+                                                                      // right hand
+                                                                     ,KC_GRV  ,KC_6   ,KC_7   ,KC_8   ,KC_9    ,KC_0     ,F(RSpec)
+                                                                     ,KC_RBRC ,KC_Y   ,KC_U   ,KC_I   ,KC_O    ,KC_P     ,F(RMdia)
+                                                                              ,KC_H   ,KC_J   ,KC_K   ,KC_L    ,KC_SCLN  ,F(RSymb)
+                                                                     ,KC_TAB  ,KC_N   ,KC_M   ,KC_COMM,KC_DOT  ,KC_SLSH  ,M(RCaps)
+                                                                                      ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL
+                                                                     ,KC_LEFT ,KC_RGHT
+                                                                     ,KC_UP
+                                                                     ,KC_DOWN ,KC_ENT ,KC_SPC
+    ),
+
+/******* Symbols Layer *****************************************************************************************************
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |  F1  |  F2  |  F3  |  F4  |  F5  | Esc  |           |  -   |  F6  |  F7  |  F8  |  F9  |  F10 |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           |   !  |   @  |   {  |   }  |   &  |  <   |           |  >   |   |  |   7  |   8  |   9  |   /  |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |   #  |   $  |   (  |   )  |   `  |------|           |------|   /  |   4  |   5  |   6  |   *  |           |
+ * |-----------+------+------+------+------+------| Tab  |           | Shift|------+------+------+------+------+-----------|
+ * |           |   %  |   ^  |   [  |   ]  |   ~  |      |           |  -Tab|   \  |   1  |   2  |   3  |   -  |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *     | LCtrl | Meh  |Hyper | LAlt | LGui |                                       |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent|
+ *     `-----------------------------------'                                       `-------------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         | Left | Right|           | Home | End  |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |  Up  |           | PgUp |      |      |
+ *                                  |Space |Enter |------|           |------|BackSp| Del  |
+ *                                  |      |      | Down |           | PgDn |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+[SYMB] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,KC_ESC
+,KC_TRNS ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
+,KC_TRNS ,KC_HASH ,KC_DLR  ,KC_LPRN ,KC_RPRN ,KC_GRV 
+,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
+,KC_LCTL ,KC_MEH  ,KC_HYPR ,KC_LALT ,KC_LGUI
+                                             ,KC_LEFT ,KC_RGHT
+                                                      ,KC_UP
+                                    ,KC_SPC  ,KC_ENT  ,KC_DOWN
+                                                                     // right hand
+                                                                     ,KC_MINS     ,KC_F6   ,KC_F7 ,KC_F8  ,KC_F9 ,KC_F10  ,KC_TRNS
+                                                                     ,LSFT(KC_DOT),KC_PIPE ,KC_7  ,KC_8   ,KC_9  ,KC_SLSH ,KC_TRNS
+                                                                                  ,KC_SLSH ,KC_4  ,KC_5   ,KC_6  ,KC_ASTR ,KC_TRNS
+                                                                     ,LSFT(KC_TAB),KC_BSLS ,KC_1  ,KC_2   ,KC_3  ,KC_MINS ,KC_TRNS
+                                                                                           ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
+                                                                     ,KC_HOME     ,KC_END
+                                                                     ,KC_PGUP
+                                                                     ,KC_PGDN     ,KC_BSPC ,KC_DEL
+),
+
+/******* Media Layer *******************************************************************************************************
+ *
+ * ,---------------------------------------------------------------.           ,---------------------------------------------------------------.
+ * |      |   F11   |   F12   |   F13   |   F14   |   F15   | Esc  |           |      |   F16   |   F17   |   F18   |   F19   |   F20   |      |
+ * |------+---------+---------+---------+---------+----------------|           |------+---------+---------+---------+---------+---------+------|
+ * |      |         |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll|           |Scroll|PrintScrn|   Home  |    Up   |   PgUp  |         |      |
+ * |------+---------+---------+---------+---------+---------|  Up  |           |  Up  |---------+---------+---------+---------+---------+------|
+ * |      |         |MouseLeft|MouseDown|MouseRght|Volume Dn|------|           |------| Num Lock|   Left  |   Down  |   Right |         |      |
+ * |------+---------+---------+---------+---------+---------|Scroll|           |Scroll|---------+---------+---------+---------+---------+------|
+ * |      |         |MouseDnLf|MouseDown|MouseDnRg|  Mute   | Down |           | Down |         |   End   |   Down  |   PgDn  |         |      |
+ * `------+---------+---------+---------+---------+----------------'           `----------------+---------+---------+---------+---------+------'
+ *  |LCtrl|   Meh   |  MClick | LClick  |  R Click|                                             |Cmd/Insrt|Optn/Del | Hyper   |  Meh    |RCtrl|
+ *  `---------------------------------------------'                                             `---------------------------------------------'
+ *                                                   ,-------------.           ,-------------.
+ *                                                   | Stop |Refrsh|           | Prev | Next |
+ *                                            ,------|------|------|           |------+------+------.
+ *                                            |Brwser|Brwser|Search|           |VolUp |      |      |
+ *                                            |Back  | Fwd  |------|           |------| Stop | Play-|
+ *                                            |      |      | Home |           |VolDn |      | Pause|
+ *                                            `--------------------'           `--------------------'
+ */
+[MDIA] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_F11   ,KC_F12  ,KC_F13   ,KC_F14  ,KC_F15  ,KC_ESC
+,KC_TRNS ,KC_NO    ,M(MUL)  ,KC_MS_U  ,M(MUR)  ,KC_VOLU ,KC_WH_U
+,KC_TRNS ,KC_NO    ,KC_MS_L ,KC_MS_D  ,KC_MS_R ,KC_VOLD
+,KC_TRNS ,KC_NO    ,M(MDL)  ,KC_MS_D  ,M(MDR)  ,KC_MUTE ,KC_WH_D
+,KC_LCTL ,KC_MEH   ,KC_BTN3 ,KC_BTN1  ,KC_BTN2
+                                               ,KC_WSTP ,KC_WREF
+                                                        ,KC_WSCH
+                                      ,KC_WBAK ,KC_NO   ,KC_WHOM
+                                                                     // right hand
+                                                                     ,KC_NO    ,KC_F16  ,KC_F17       ,KC_F18       ,KC_F19  ,KC_F20  ,KC_TRNS
+                                                                     ,KC_WH_U  ,KC_PSCR ,KC_HOME      ,KC_UP        ,KC_PGUP ,KC_NO   ,KC_TRNS
+                                                                               ,KC_NLCK ,KC_LEFT      ,KC_DOWN      ,KC_RIGHT,KC_NO   ,KC_TRNS
+                                                                     ,KC_WH_D  ,KC_NO   ,KC_END       ,KC_DOWN      ,KC_PGDN ,KC_NO   ,KC_TRNS
+                                                                                        ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH  ,KC_RCTL
+                                                                     ,KC_MPRV  ,KC_MNXT
+                                                                     ,KC_VOLU
+                                                                     ,KC_VOLD  ,KC_MSTP ,KC_MPLY
+),
+
+/******* Special Layer *****************************************************************************************************
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |  Esc |      |      |      |      |      |           |      |      |      |      |      | Bspc |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |------|           |------|      |      |      |      |      |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * |           |      |      |      |      |      |      |           |      |      |      |      |      |      | RShift    |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *      |      |      |      |      |      |                                       |      |      |      |      |      |
+ *      `----------------------------------'                                       `----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         |      |      |           |      |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |      |           |      |      |      |
+ *                                  |      |      |------|           |------|      |      |
+ *                                  |      |      |      |           |      |      |      |
+ *                                  `--------------------'           `--------------------'
+ */
+[SPEC] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_ESC  ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+                                             ,KC_TRNS ,KC_TRNS
+                                                      ,KC_TRNS
+                                     ,KC_TRNS,KC_TRNS ,KC_TRNS
+                                                                     // right hand
+                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
+                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                                              ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT
+                                                                                       ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+                                                                     ,KC_TRNS ,KC_TRNS
+                                                                     ,KC_TRNS
+                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS
+    )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+     // the faux shift keys are implemented as macro taps
+     [LCaps] = ACTION_MACRO_TAP(LCaps)
+    ,[LSymb] = ACTION_MACRO_TAP(LSymb)
+    ,[LMdia] = ACTION_MACRO_TAP(LMdia)
+    ,[LSpec] = ACTION_MACRO_TAP(LSpec)
+    ,[RCaps] = ACTION_MACRO_TAP(RCaps)
+    ,[RSymb] = ACTION_MACRO_TAP(RSymb)
+    ,[RMdia] = ACTION_MACRO_TAP(RMdia)
+    ,[RSpec] = ACTION_MACRO_TAP(RSpec)
+};
+
+uint16_t caps_shift = 0;
+uint16_t symb_shift = 0;
+uint16_t mdia_shift = 0;
+
+bool symb_lock = false;
+bool mdia_lock = false;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    switch(id) {
+        // There are two shift keys for each layer so we increment a layer_shift var when one
+        // is pressed and decrement when one is released. If both are pressed at the same time
+        // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
+        // only because sometimes rapid pressing led to irregular events; this way the states
+        // are self healing during use.
+
+        case LCaps: // both caps-shift keys trigger Left Shift
+        case RCaps: // so they don't interfere with the magic combo
+        if (record->event.pressed && !record->tap.count) {
+            if(++caps_shift > 2) caps_shift = 2;
+            if(caps_shift == 2)  {
+                register_code(KC_CAPS);
+                unregister_code(KC_CAPS);
+            } else if(caps_shift == 1) {
+                register_code(KC_LSFT);
+            }
+        } else {
+            if(--caps_shift < 0) caps_shift = 0;
+            if(caps_shift == 0) unregister_code(KC_LSFT);
+        }
+        break;
+
+        case LSymb:
+        if (record->event.pressed) {
+            if(++symb_shift > 2) symb_shift = 2;
+            if(symb_shift == 2)  {
+                symb_lock = !symb_lock;
+            } else if(symb_shift == 1) {
+                layer_on(SYMB);
+            }
+        } else {
+            if(--symb_shift < 0) symb_shift = 0;
+            if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB);
+        }
+        break;
+
+        case LMdia:
+        if (record->event.pressed) {
+            if (record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+                register_code(KC_TAB);
+            } else {
+                if(++mdia_shift > 2) mdia_shift = 2;
+                if(mdia_shift == 2)  {
+                    mdia_lock = !mdia_lock;
+                } else if(mdia_shift == 1) {
+                    layer_on(MDIA);
+                }
+            }
+        } else {
+            if(record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+                unregister_code(KC_TAB);
+            } else {
+                if(--mdia_shift < 0) mdia_shift = 0;
+                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+            }
+        }
+        break;
+
+        case LSpec:
+        if (record->event.pressed) {
+            if (record->tap.count && !record->tap.interrupted) {
+                register_code(KC_EQL);
+            } else {
+                layer_on(SPEC);
+            }
+        } else {
+            if(record->tap.count && !record->tap.interrupted) {
+                unregister_code(KC_EQL);
+            } else {
+                layer_off(SPEC);
+            }
+        }
+        break;
+
+        case RSymb:
+        if (record->event.pressed) {
+            if (record->tap.count && (!symb_shift) && (!symb_lock)) {
+                register_code(KC_QUOT);
+            } else {
+                if(++symb_shift > 2) symb_shift = 2;
+                if(symb_shift == 2)  {
+                    symb_lock = !symb_lock;
+                } else if(symb_shift == 1) {
+                    layer_on(SYMB);
+                }
+            }
+        } else {
+            if(record->tap.count && symb_shift == 0) {
+                unregister_code(KC_QUOT);
+            } else {
+                if(--symb_shift < 0) symb_shift = 0;
+                if((!symb_shift) && (!symb_lock)) layer_off(SYMB);
+            }
+        }
+        break;
+
+        case RMdia:
+        if (record->event.pressed) {
+            if (record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+                register_code(KC_BSLS);
+            } else {
+                if(++mdia_shift > 2) mdia_shift = 2;
+                if(mdia_shift == 2)  {
+                    mdia_lock = !mdia_lock;
+                } else if(mdia_shift == 1) {
+                    layer_on(MDIA);
+                }
+            }
+        } else {
+            if(record->tap.count && (!mdia_shift) && (!mdia_lock)) {
+                unregister_code(KC_BSLS);
+            } else {
+                if(--mdia_shift < 0) mdia_shift = 0;
+                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+            }
+        }
+        break;
+
+        case RSpec:
+        if (record->event.pressed) {
+            if (record->tap.count && !record->tap.interrupted) {
+                register_code(KC_MINS);
+            } else {
+                layer_on(SPEC);
+            }
+        } else {
+            if(record->tap.count && !record->tap.interrupted) {
+                unregister_code(KC_MINS);
+            } else {
+                layer_off(SPEC);
+            }
+        }
+        break;
+
+        // mouse diagonals
+
+        case MUL: // mouse up left
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_UP);
+            mousekey_on(KC_MS_LEFT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_UP);
+            mousekey_off(KC_MS_LEFT);
+            mousekey_send();
+        }
+        break;
+
+        case MUR: // mouse up right
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_UP);
+            mousekey_on(KC_MS_RIGHT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_UP);
+            mousekey_off(KC_MS_RIGHT);
+            mousekey_send();
+        }
+        break;
+
+        case MDL: // mouse down left
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_DOWN);
+            mousekey_on(KC_MS_LEFT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_DOWN);
+            mousekey_off(KC_MS_LEFT);
+            mousekey_send();
+        }
+        break;
+
+        case MDR: // mouse down right
+        if (record->event.pressed) {
+            mousekey_on(KC_MS_DOWN);
+            mousekey_on(KC_MS_RIGHT);
+            mousekey_send();
+        } else {
+            mousekey_off(KC_MS_DOWN);
+            mousekey_off(KC_MS_RIGHT);
+            mousekey_send();
+        }
+        break;
+
+        default:
+            // none
+            break;
+    }
+    
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    // shift or caps lock turns on red light
+    if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
+        ergodox_right_led_1_on();
+    } else {
+        ergodox_right_led_1_off();
+    }
+
+    // Symbol layer turns on green light
+    if(layer_state & (1UL<<SYMB)) {
+        ergodox_right_led_2_on();
+    } else {
+        ergodox_right_led_2_off();
+    }
+
+    // Media layer turns on blue light
+    if(layer_state & (1UL<<MDIA)) {
+        ergodox_right_led_3_on();
+    } else {
+        ergodox_right_led_3_off();
+    }
+};
+
diff --git a/keyboards/ergodox/keymaps/teckinesis/ordinary-special.png b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.png
new file mode 100644 (file)
index 0000000..6eecf44
Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.png differ
diff --git a/keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt
new file mode 100644 (file)
index 0000000..a08827c
--- /dev/null
@@ -0,0 +1,27 @@
+[{x:3.5,a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
+[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
+[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
+[{y:-0.375,x:3.5},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
+[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""],
+[{y:-0.75,x:3.5},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"],
+[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""],
+[{h:2},"",{h:2},"",""],
+[{x:2},""],
+[{r:-30,rx:13,y:-1,x:-3},"",""],
+[{x:-3},"",{h:2},"",{h:2},""],
+[{x:-3},""]
+
diff --git a/keyboards/ergodox/keymaps/teckinesis/readme.md b/keyboards/ergodox/keymaps/teckinesis/readme.md
new file mode 100644 (file)
index 0000000..9494a4d
--- /dev/null
@@ -0,0 +1,45 @@
+# teckinesis Layout
+
+*A blend of TECK and Kinesis layouts, based on ["The Ordinary Layout" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*
+
+I love "The Ordinary Layout", but I still use a [TECK](https://www.trulyergonomic.com/store/index.php)
+at the office, and I found the transition back and forth to be a bit more difficult than I expected.
+
+This layout consists of only slight changes to "The Ordinary Layout" based on the layouts of the 
+[(original) TECK Model 209](https://www.trulyergonomic.com/store/layout-designer--configurator--reprogrammable--truly-ergonomic-mechanical-keyboard/#KTo7PD0+P0BBQkNERUw5394rNR4fICEi4yMkJSYnLS4xOBQaCBUXTBwYDBITLzDhBBYHCQorCw0ODzPl4B0bBhkFKhEQNjc05OPiSktOTSwoLFBSUU/mZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX2BhAFZXAAAAAAAAAAAAXF1eVAAAAAAAAAAAAABZWltVAAAAAAAAAAAAYgBjAAAAAAAAAAAAWFcAAAAAAACTAQAMAiMBAAwBigEADAIhAQAMAZQBAAwBkgEADAGDAQAMALYBAAwAzQEADAC1AQAMAOIBAAwA6gEADADpAQAMALhJAEYAAAAAAEitR64AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk6Ozw9Pj9AQUJDREVMOd/eKzUeHyAhIuMjJCUmJy0uMTgUGggVF0wcGAwSEy8w4QQWBwkKKwsNDg8z5eMdGwYZBSoREDY3NOfg4kpLTk0sKCxQUlFP5uQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9gYQBWVwAAAAAAAAAAAFxdXlQAAAAAAAAAAAAAWVpbVQAAAAAAAAAAAGIAYwAAAAAAAAAAAFhXAAAAAAAAkwEADAIjAQAMAYoBAAwCIQEADAGUAQAMAZIBAAwBgwEADAC2AQAMAM0BAAwAtQEADADiAQAMAOoBAAwA6QEADAC4SQBGAAAAAABIrUeuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) and 
+the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf)
+
+## The Base Layout ##
+
+[teckinesis (Base Layer)](http://www.keyboard-layout-editor.com/#/gists/befd4c5800d92114aa9e50d4f7c0dfb0)
+![teckinesis base layout](teckinesis-base.png)
+
+### Changes from The Ordinary Layout ###
+
+* Moved KC_MINS from the key left of the 6 to the RSpec key.
+* Moved KC_EQL from RSpec to LSpec.
+* Moved KC_GRV from LSpec to the key left of the 6.
+* Mdded KC_BSLS to the left Meh key.
+* Added KC_SLSH to the left Hyper key.
+* Added KC_LBRC to the right Hyper key.
+* Added KC_RBRC to the right Meh key.
+
+## The Symbols Layer ##
+
+[teckinesis (Symbols Layer)](http://www.keyboard-layout-editor.com/#/gists/e6ddc4e9e0d194b3e52ac0616238ab61)
+![teckinesis symbols layout](teckinesis-symbol.png)
+
+### Changes from The Ordinary Layout ###
+
+* None.
+
+## The Media Layer ##
+
+[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908)
+![teckinesis media layout](teckinesis-media.png)
+
+### Changes from The Ordinary Layout ###
+
+* Removed Power, Sleep, Mail, My Computer keys.
+(I kept hitting these while using the mouse/cursor. =P)
+
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json
new file mode 100644 (file)
index 0000000..69fe28c
--- /dev/null
@@ -0,0 +1,434 @@
+[
+  {
+    "name": "teckinesis (Base Layer)",
+    "author": "Will Wolff-Myren",
+    "notes": "# teckinesis Layout # \r\n\r\n*A blend of TECK and Kinesis layouts, based on [\"The Ordinary Layout\" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*\r\n\r\n## The Base Layout ##\r\n\r\n![teckinesis base layout](teckinesis-base.png)\r\n\r\n## The Symbols Layer ##\r\n\r\n![teckinesis symbols layout](teckinesis-symbol.png)\r\n\r\n## The Media Layer ##\r\n\r\n(placeholder)\r\n",
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Tea"
+  },
+  [
+    {
+      "x": 3.5
+    },
+    "#\n3",
+    {
+      "x": 10.5
+    },
+    "*\n8"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "@\n2",
+    {
+      "x": 1
+    },
+    "$\n4",
+    {
+      "x": 8.5
+    },
+    "&\n7",
+    {
+      "x": 1
+    },
+    "(\n9"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "%\n5",
+    {
+      "c": "#ff4444"
+    },
+    "Esc",
+    {
+      "x": 4.5,
+      "c": "#cccccc"
+    },
+    "~\n`",
+    "^\n6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "Special\n\n+\n\n\n\nShift\n=",
+    {
+      "c": "#cccccc"
+    },
+    "!\n1",
+    {
+      "x": 14.5
+    },
+    ")\n0",
+    {
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "_\n\nSpecial\n\n\n\n-\nShift"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "c": "#cccccc"
+    },
+    "E",
+    {
+      "x": 10.5
+    },
+    "I"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "W",
+    {
+      "x": 1
+    },
+    "R",
+    {
+      "x": 8.5
+    },
+    "U",
+    {
+      "x": 1
+    },
+    "O"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "T",
+    {
+      "h": 1.5
+    },
+    "{\n\n\n\n\n\n[",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "}\n\n\n\n\n\n]",
+    "Y"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "fa": [
+        0,
+        0,
+        4
+      ],
+      "w": 1.5
+    },
+    "Media\n\n<i class='kb kb-Line-Start-End'></i>\n\n\n\nShift",
+    {
+      "c": "#cccccc"
+    },
+    "Q",
+    {
+      "x": 14.5
+    },
+    "P",
+    {
+      "c": "#2277ff",
+      "f": 3,
+      "w": 1.5
+    },
+    "|\n\\\nMedia\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "c": "#cccccc"
+    },
+    "D",
+    {
+      "x": 10.5
+    },
+    "K"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "S",
+    {
+      "x": 1
+    },
+    "F",
+    {
+      "x": 8.5
+    },
+    "J",
+    {
+      "x": 1
+    },
+    "L"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "G",
+    {
+      "x": 6.5
+    },
+    "H"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "Symbols\n\n\n\n\n\nShift",
+    {
+      "c": "#cccccc"
+    },
+    "A",
+    {
+      "x": 14.5
+    },
+    ":\n;",
+    {
+      "c": "#2277ff",
+      "f": 3,
+      "w": 1.5
+    },
+    "\"\n'\nSymbols\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "c": "#54d6de",
+      "fa": [
+        0,
+        0,
+        4,
+        1
+      ],
+      "h": 1.5
+    },
+    "< Tab\n\n\nShift Tab",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "Tab >\n\n\nTab"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "c": "#cccccc"
+    },
+    "C",
+    {
+      "x": 10.5
+    },
+    "<\n,"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "X",
+    {
+      "x": 1
+    },
+    "V",
+    {
+      "x": 8.5
+    },
+    "M",
+    {
+      "x": 1
+    },
+    ">\n."
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "B",
+    {
+      "x": 6.5
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "Capitals\n\n\n\n\n\nShift",
+    {
+      "c": "#cccccc"
+    },
+    "Z",
+    {
+      "x": 14.5
+    },
+    "?\n/",
+    {
+      "c": "#2277ff",
+      "f": 3,
+      "w": 1.5
+    },
+    "\n\nCapitals\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "c": "#77aaff",
+      "fa": [
+        5,
+        0,
+        4,
+        1
+      ]
+    },
+    "<i class='mss mss-Unicode-Option-3'></i>\n\n\nLAlt",
+    {
+      "x": 10.5
+    },
+    "<i class='mss mss-Unicode-Option-3'></i>\n\n\nRAlt"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "fa": [
+        5,
+        1
+      ]
+    },
+    "\nHyper\n?\n/",
+    {
+      "x": 1,
+      "fa": [
+        5,
+        1,
+        0,
+        1
+      ]
+    },
+    "<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper",
+    {
+      "x": 8.5
+    },
+    "<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper",
+    {
+      "x": 1,
+      "fa": [
+        0,
+        0,
+        0,
+        1
+      ]
+    },
+    "{\n[\n\nHyper"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5
+    },
+    "Ctrl\n\n\nLCtrl",
+    {
+      "f2": 1
+    },
+    "\nMeh\n|\n\\",
+    {
+      "x": 14.5,
+      "fa": [
+        0,
+        0,
+        1,
+        1
+      ]
+    },
+    "}\n]\n\nMeh",
+    "Ctrl\n\n\nRCtrl"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1,
+      "c": "#54d6de"
+    },
+    "Home",
+    "End"
+  ],
+  [
+    {
+      "h": 2
+    },
+    "< Del\n\n\nBackspace",
+    {
+      "h": 2
+    },
+    "Del >\n\n\nDelete",
+    "Page\n\n\n\n\n\nUp"
+  ],
+  [
+    {
+      "x": 2
+    },
+    "Page\n\n\n\n\n\nDown"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3
+    },
+    "Left",
+    "Right"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "Up",
+    {
+      "h": 2
+    },
+    "Enter",
+    {
+      "h": 2
+    },
+    "Space"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "Down"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png
new file mode 100644 (file)
index 0000000..7c4584e
Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png differ
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json
new file mode 100644 (file)
index 0000000..65fe394
--- /dev/null
@@ -0,0 +1,436 @@
+[
+  {
+    "name": "teckinesis (MediaLayer)",
+    "author": "Will Wolff-Myren",
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Tea"
+  },
+  [
+    {
+      "x": 3.5,
+      "c": "#99de2a"
+    },
+    "F13",
+    {
+      "x": 10.5
+    },
+    "F18"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "F12",
+    {
+      "x": 1
+    },
+    "F14",
+    {
+      "x": 8.5
+    },
+    "F17",
+    {
+      "x": 1
+    },
+    "F19"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "F15",
+    {
+      "c": "#ff4444"
+    },
+    "Esc",
+    {
+      "x": 4.5
+    },
+    "Esc",
+    {
+      "c": "#99de2a"
+    },
+    "F16"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 1.5
+    },
+    "F11",
+    {
+      "x": 14.5
+    },
+    "F20"
+  ],
+  [
+    {
+      "y": -0.995,
+      "c": "#000000",
+      "t": "#ff0000",
+      "w": 1.5
+    },
+    "Media\n\n\n\n\n\nShift",
+    {
+      "x": 16.5,
+      "w": 1.5
+    },
+    "\n\nMedia\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.3799999999999999,
+      "x": 3.5,
+      "c": "#ff8500",
+      "t": "#000000"
+    },
+    "Mouse\n\n\n\n\n\nUp",
+    {
+      "x": 10.5
+    },
+    "Cursor\n\n\n\n\n\nUp"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "Mouse\n\n\n\n\n\nUpLeft",
+    {
+      "x": 1
+    },
+    "Mouse\n\n\n\n\n\nUpRgt",
+    {
+      "x": 8.5,
+      "c": "#ffb063"
+    },
+    "Home",
+    {
+      "x": 1
+    },
+    "Page\n\n\n\n\n\nUp"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "c": "#e6e067"
+    },
+    "Vol\n\n\n\n\n\nUp",
+    {
+      "c": "#ffb063",
+      "h": 1.5
+    },
+    "Scroll\n\n\n\n\n\nUp",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "Scroll\n\n\n\n\n\nUp",
+    {
+      "c": "#e6e067"
+    },
+    "Print\n\n\n\n\n\nScreen"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 1.5,
+      "c": "#737373",
+      "a": 7
+    },
+    "",
+    {
+      "x": 14.5
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.9950000000000001,
+      "c": "#2277ff",
+      "a": 4,
+      "w": 1.5
+    },
+    "Symbols\n\n\n\n\n\nShift",
+    {
+      "x": 16.5,
+      "w": 1.5
+    },
+    "\n\nSymbols\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.3799999999999999,
+      "x": 3.5,
+      "c": "#ff8500"
+    },
+    "Mouse\n\n\n\n\n\nDown",
+    {
+      "x": 10.5
+    },
+    "Cursor\n\n\n\n\n\nDown"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "Mouse\n\n\n\n\n\nLeft",
+    {
+      "x": 1
+    },
+    "Mouse\n\n\n\n\n\nRight",
+    {
+      "x": 8.5
+    },
+    "Cursor\n\n\n\n\n\nLeft",
+    {
+      "x": 1
+    },
+    "Cursor\n\n\n\n\n\nRight"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "c": "#e6e067"
+    },
+    "Vol\n\n\n\n\n\nDown",
+    {
+      "x": 6.5
+    },
+    "Num\n\n\n\n\n\nLock"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 1.5,
+      "c": "#737373",
+      "a": 7
+    },
+    "",
+    {
+      "x": 14.5
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.9950000000000001,
+      "c": "#2277ff",
+      "a": 4,
+      "w": 1.5
+    },
+    "Capitals\n\n\n\n\n\nShift",
+    {
+      "x": 16.5,
+      "w": 1.5
+    },
+    "\n\nCapitals\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.6299999999999999,
+      "x": 6.5,
+      "c": "#ffb063",
+      "h": 1.5
+    },
+    "Scroll\n\n\n\n\n\nDown",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "Scroll\n\n\n\n\n\nDown"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "c": "#ff8500"
+    },
+    "Mouse\n\n\n\n\n\nDown",
+    {
+      "x": 10.5
+    },
+    "Cursor\n\n\n\n\n\nDown"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "Mouse\n\n\n\n\n\nDnLeft",
+    {
+      "x": 1
+    },
+    "Mouse\n\n\n\n\n\nDnRgt",
+    {
+      "x": 8.5,
+      "c": "#ffb063"
+    },
+    "End",
+    {
+      "x": 1
+    },
+    "Page\n\n\n\n\n\nDown"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "c": "#e6e067"
+    },
+    "Mute",
+    {
+      "x": 6.5,
+      "c": "#737373",
+      "a": 7
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 1.5
+    },
+    "",
+    {
+      "x": 14.5
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.9950000000000001,
+      "c": "#2277ff",
+      "a": 4,
+      "w": 1.5
+    },
+    "Ctrl",
+    {
+      "x": 16.5,
+      "w": 1.5
+    },
+    "Ctrl"
+  ],
+  [
+    {
+      "y": -0.3799999999999999,
+      "x": 3.5,
+      "c": "#ff8500"
+    },
+    "Middle\n\n\n\n\n\nClick",
+    {
+      "x": 10.5,
+      "c": "#ffb063",
+      "fa": [
+        0,
+        0,
+        0,
+        1
+      ]
+    },
+    "Delete\n\n\nOption"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "c": "#ff8500"
+    },
+    "Left\n\n\n\n\n\nClick",
+    {
+      "x": 1
+    },
+    "Right\n\n\n\n\n\nClick",
+    {
+      "x": 8.5,
+      "c": "#ffb063"
+    },
+    "Insert\n\n\nCmd",
+    {
+      "x": 1,
+      "c": "#77aaff"
+    },
+    "Hyper"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5
+    },
+    "Alt\n\n\nLAlt",
+    "Meh",
+    {
+      "x": 14.5
+    },
+    "Meh",
+    "Alt\n\n\nRAlt"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1,
+      "c": "#ccbb00"
+    },
+    "Stop\n\n\nBrowser",
+    "Reload\n\n\nBrowser"
+  ],
+  [
+    {
+      "h": 2
+    },
+    "< Web\n\n\nBrowser",
+    {
+      "h": 2
+    },
+    "Web >\n\n\nBrowser",
+    "Search\n\n\nBrowser"
+  ],
+  [
+    {
+      "x": 2
+    },
+    "Home\n\n\nBrowser"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3
+    },
+    "Prev\n\n\nAudio\n\n\nTrack",
+    "Next\n\n\nAudio\n\n\nTrack"
+  ],
+  [
+    {
+      "x": -3,
+      "c": "#e6e067"
+    },
+    "Vol\n\n\n\n\n\nUp",
+    {
+      "c": "#ccbb00",
+      "h": 2
+    },
+    "Stop\n\n\nAudio",
+    {
+      "h": 2
+    },
+    "Play\n\n\nAudio\n\n\nPause"
+  ],
+  [
+    {
+      "x": -3,
+      "c": "#e6e067"
+    },
+    "Vol\n\n\n\n\n\nDown"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png
new file mode 100644 (file)
index 0000000..cc51605
Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png differ
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json
new file mode 100644 (file)
index 0000000..439d012
--- /dev/null
@@ -0,0 +1,422 @@
+[
+  {
+    "name": "teckinesis (Symbol Layer)",
+    "author": "Will Wolff-Myren",
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Tea"
+  },
+  [
+    {
+      "x": 3.5,
+      "c": "#99de2a"
+    },
+    "F3",
+    {
+      "x": 10.5
+    },
+    "F8"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "F2",
+    {
+      "x": 1
+    },
+    "F4",
+    {
+      "x": 8.5
+    },
+    "F7",
+    {
+      "x": 1
+    },
+    "F9"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "F5",
+    {
+      "c": "#ff4444"
+    },
+    "Esc",
+    {
+      "x": 4.5,
+      "c": "#bbddbb"
+    },
+    "_\n\n\n\n\n\n-",
+    {
+      "c": "#99de2a"
+    },
+    "F6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "Special\n\n\n\n\n\nShift",
+    {
+      "c": "#99de2a"
+    },
+    "F1",
+    {
+      "x": 14.5
+    },
+    "F10",
+    {
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "\n\nSpecial\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "c": "#bbddbb"
+    },
+    "{",
+    {
+      "x": 10.5,
+      "c": "#89b087"
+    },
+    "8"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "c": "#bbddbb"
+    },
+    "@",
+    {
+      "x": 1
+    },
+    "}",
+    {
+      "x": 8.5,
+      "c": "#89b087"
+    },
+    "7",
+    {
+      "x": 1
+    },
+    "9"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "c": "#bbddbb"
+    },
+    "&",
+    {
+      "h": 1.5
+    },
+    "<",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    ">",
+    "|"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "Media\n\n\n\n\n\nShift",
+    {
+      "c": "#bbddbb"
+    },
+    "!",
+    {
+      "x": 14.5,
+      "c": "#89b087"
+    },
+    "/",
+    {
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "\n\nMedia\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "c": "#bbddbb"
+    },
+    "(",
+    {
+      "x": 10.5,
+      "c": "#89b087"
+    },
+    "5"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "c": "#bbddbb"
+    },
+    "$",
+    {
+      "x": 1
+    },
+    ")",
+    {
+      "x": 8.5,
+      "c": "#89b087"
+    },
+    "4",
+    {
+      "x": 1
+    },
+    "6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "c": "#bbddbb"
+    },
+    "`",
+    {
+      "x": 6.5
+    },
+    "/"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#000000",
+      "t": "#ff0000",
+      "w": 1.5
+    },
+    "Symbols\n\n\n\n\n\nShift",
+    {
+      "c": "#bbddbb",
+      "t": "#000000"
+    },
+    "#",
+    {
+      "x": 14.5,
+      "c": "#89b087"
+    },
+    "*",
+    {
+      "c": "#000000",
+      "t": "#ff0000",
+      "w": 1.5
+    },
+    "\n\nSymbols\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "c": "#54d6de",
+      "t": "#000000",
+      "fa": [
+        0,
+        0,
+        0,
+        1
+      ],
+      "h": 1.5
+    },
+    "Tab >\n\n\nTab",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "< Tab\n\n\nShift Tab"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "c": "#bbddbb"
+    },
+    "[",
+    {
+      "x": 10.5,
+      "c": "#89b087"
+    },
+    "2"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "c": "#bbddbb"
+    },
+    "^",
+    {
+      "x": 1
+    },
+    "]",
+    {
+      "x": 8.5,
+      "c": "#89b087"
+    },
+    "1",
+    {
+      "x": 1
+    },
+    "3"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "c": "#bbddbb"
+    },
+    "~",
+    {
+      "x": 6.5
+    },
+    "\\"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "Capitals\n\n\n\n\n\nShift",
+    {
+      "c": "#bbddbb"
+    },
+    "%",
+    {
+      "x": 14.5,
+      "c": "#89b087"
+    },
+    "-",
+    {
+      "c": "#2277ff",
+      "w": 1.5
+    },
+    "\n\nCapitals\n\n\n\n\nShift"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "c": "#77aaff"
+    },
+    "<i class='mss mss-Unicode-Option-3'></i>\n\n\nLAlt",
+    {
+      "x": 10.5,
+      "c": "#89b087"
+    },
+    ".\n\n\nOption"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "c": "#77aaff"
+    },
+    "Hyper",
+    {
+      "x": 1
+    },
+    "<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper",
+    {
+      "x": 8.5,
+      "c": "#89b087"
+    },
+    "0\n\n\nCmd",
+    {
+      "x": 1
+    },
+    "=\n\n\nHyper"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5,
+      "c": "#77aaff"
+    },
+    "Ctrl\n\n\nLCtrl",
+    "Meh",
+    {
+      "x": 14.5,
+      "c": "#89b087"
+    },
+    "+\n\n\nMeh",
+    "Enter\n\n\nCtrl"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1,
+      "c": "#54d6de"
+    },
+    "Left",
+    "Right"
+  ],
+  [
+    {
+      "h": 2
+    },
+    "Space",
+    {
+      "h": 2
+    },
+    "Enter",
+    "Up"
+  ],
+  [
+    {
+      "x": 2
+    },
+    "Down"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3
+    },
+    "Home",
+    "End"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "Page\n\n\n\n\n\nUp",
+    {
+      "h": 2
+    },
+    "< Del\n\n\nBackspace",
+    {
+      "h": 2
+    },
+    "Del >\n\n\nDelete"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "Page\n\n\n\n\n\nDown"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png
new file mode 100644 (file)
index 0000000..7ca86cf
Binary files /dev/null and b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png differ
diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/README.md b/keyboards/ergodox/keymaps/tkuichooseyou/README.md
new file mode 100644 (file)
index 0000000..ab02fac
--- /dev/null
@@ -0,0 +1,13 @@
+# Based on Default OSX
+I'm a vim and OSX user
+
+- Moved Hyper and Meh up, replaced with CMD
+  - Because I'm used to having symmetrical CMD keys on both hands
+- Changed left delete to Tab to match OSX
+- Changed left Backspace to CTRL/ESC for vim
+- Changed top left and top right arrow to `CMD+{` and `CMD+}`
+  - Useful for switching tabs in Safari, Xcode, etc.
+- Remove the Ctrl from Z and /
+- Remove CMD from right quote
+- Changed right Alt to Delete
+
diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex b/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex
new file mode 100644 (file)
index 0000000..a8cf452
--- /dev/null
@@ -0,0 +1,1137 @@
+:100000000C947B020C94C2020C94C2020C94C202A7\r
+:100010000C94C2020C94C2020C94C2020C94C20250\r
+:100020000C94C2020C94C2020C94F70D0C94C90EED\r
+:100030000C94C2020C94C2020C94C2020C94C20230\r
+:100040000C94C2020C9486210C94C2020C94C2023D\r
+:100050000C94C2020C94681C0C94C2020C94C20250\r
+:100060000C94C2020C94C2020C94C2020C94C20200\r
+:100070000C94C2020C94C2020C94C2020C94C202F0\r
+:100080000C94C2020C94C2020C94C2020C94C202E0\r
+:100090000C94C2020C94C2020C94C2020C94C202D0\r
+:1000A0000C94C2020C94C2020C94C202360F580F78\r
+:1000B0004610580F46109D0FC00F461015102810FF\r
+:1000C000F712F712261326135C137C13AD14AD142C\r
+:1000D0008713AD14371437149E14AD14AD14A71440\r
+:1000E0004414441444144414441444144414441450\r
+:1000F0004414441444144414441444144414441440\r
+:10010000561463146A1471147B140000F0A12E00BD\r
+:100110002B002961E100354100001E00140004009D\r
+:100120001D0034004D001F001A0016001B00E104E2\r
+:100130002A00200008000700060050002C002100C3\r
+:100140001500090019004F004A00220017000A009C\r
+:100150000500000065642F0A006F0000E300000046\r
+:10016000E300300A00670000E30000004C002300B9\r
+:100170001C000B00110000002961240018000D0074\r
+:10018000100052004B0025000C000E0036005100FC\r
+:100190002800260012000F0037002F002B00270038\r
+:1001A00013003342380030004E002D00310034007F\r
+:1001B000E500C10000000100010001000100010094\r
+:1001C00000003A001E0220022202010001003B0052\r
+:1001D0001F0221022302010001003C002F0226021F\r
+:1001E0002F00010001003D00300227023000010015\r
+:1001F00001003E003102350035020000010001001F\r
+:1002000001000000010000000100010001000000E9\r
+:100210000100000001003F005200510024020000D4\r
+:1002200001004000240021001E00010001004100E7\r
+:10023000250022001F003700010042002600230095\r
+:10024000200027000100430025022E0231002E006D\r
+:100250000100440045000100010001000000010010\r
+:100260000100010001000100000001000100010087\r
+:1002700001000100010001000100F2000100010085\r
+:1002800001000100F000F1000100F4000100010094\r
+:100290000100F3000100F500010001000100010070\r
+:1002A0000100000001000100010000000100000049\r
+:1002B0000100010001000000010000000100010038\r
+:1002C0000100010001000000010001000100010027\r
+:1002D0000100A9000100010001000100AC00AA001A\r
+:1002E000B600010001000100AB00A8000100010000\r
+:1002F0000100010001000100010001000100AE0049\r
+:1003000001000100000016034500720067006F0045\r
+:1003100044006F007800200045005A0000001603DA\r
+:100320004500720067006F0044006F0078002000F5\r
+:1003300045005A0000000403090409026D0004018D\r
+:1003400000A0FA09040000010301010009211101C4\r
+:1003500000012240000705810308000A090401008A\r
+:100360000103010200092111010001224D000705CE\r
+:10037000820308000A0904020001030000000921A9\r
+:10038000110100012236000705830308000A090451\r
+:1003900003000103000000092111010001223900BE\r
+:1003A000070584031000011201100100000008ED90\r
+:1003B000FE071301000102000105010906A1010564\r
+:1003C0000719E029E7150025019508750181020547\r
+:1003D000081901290595057501910295017503918B\r
+:1003E0000105071900297715002501957875018108\r
+:1003F00002C005010980A101850216010026B7008F\r
+:100400001A01002AB700751095018100C0050C097A\r
+:1004100001A1018503160100269C021A01002A9CF5\r
+:1004200002751095018100C005010902A1010901B1\r
+:10043000A10005091901290515002501950575017A\r
+:10044000810295017503810105010930093115818A\r
+:10045000257F95027508810609381581257F95014C\r
+:1004600075088106050C0A38021581257F950175EE\r
+:10047000088106C0C005010906A101050719E02988\r
+:10048000E715002501950875018102950175088120\r
+:100490000105081901290595057501910295017558\r
+:1004A0000391010507190029FF150026FF00950695\r
+:1004B00075088100C000000000000000000000007E\r
+:1004C000010204060A0F17202C3A4A5D71879DB37A\r
+:1004D000C7DAE9F5FCFFFCF5E9DAC7B39D87715D82\r
+:1004E0004A3A2C20170F0A060402010000000000FF\r
+:1004F00000000000000011241FBECFEFDAE0DEBFD5\r
+:10050000CDBF04B603FE27C0809101029091020284\r
+:10051000A0910302B09104028730904BA740B04BEA\r
+:10052000D1F4109201021092020210920302109272\r
+:10053000040214BE84B7877F84BF0FB6F894A895D1\r
+:1005400080916000886180936000109260000FBE0F\r
+:10055000E0E0FFE3099511E0A0E0B1E0E6EBF6E4AE\r
+:1005600002C005900D92A433B107D9F712E0A4E3BD\r
+:10057000B1E001C01D92A130B107E1F70E943C0B30\r
+:100580000C9459230C9400001092B9008AE08093D7\r
+:10059000B800089594EA9093BC009091BC0097FF36\r
+:1005A000FCCF9091B900987F983021F0903111F0F4\r
+:1005B00081E008958093BB0084E88093BC00809123\r
+:1005C000BC0087FFFCCF8091B900887F883111F093\r
+:1005D000803471F780E0089584E98093BC008091B5\r
+:1005E000BC0084FDFCCF08958093BB0084E8809319\r
+:1005F000BC008091BC0087FFFCCF9091B900987F30\r
+:1006000081E0983209F480E0089584E88093BC008A\r
+:100610008091BC0087FFFCCF8091BB00089580B320\r
+:100620008C7080BB81B3836F81BB08958091010181\r
+:10063000811115C080E40E94CA02809301018111DA\r
+:100640000CC082E10E94F40280930101811105C077\r
+:100650008FEF0E94F402809301010E94EC0284B1AA\r
+:10066000807F84B985B1807F85B98AB1837F8AB95B\r
+:100670008BB1837F8BB93E98469808950E94E00421\r
+:10068000809301010E9416030E940F03A5E3B1E0CD\r
+:10069000E3E4F1E08EE08E0F11921D928E13FCCFF9\r
+:1006A0000C94CA040E94E004809301010E94160386\r
+:1006B0000E940F03A5E3B1E0E3E4F1E08EE08E0FCA\r
+:1006C00011921D928E13FCCF0895BF92CF92DF92AC\r
+:1006D000EF92FF920F931F93CF93DF9380910101CD\r
+:1006E000882379F0809134018F5F809334018111E8\r
+:1006F00008C00E94E00480930101811102C00E94A1\r
+:10070000720405E311E0C0E0D0E0DD24D39482E080\r
+:10071000C82EEE24E394F12CC730D10500F580916A\r
+:100720000101811164C080E40E94CA02809301012A\r
+:10073000811112C082E10E94F402809301018111B3\r
+:100740000BC0C7010C2E01C0880F0A94EAF78095F0\r
+:100750000E94F402809301010E94EC0248C0CA305A\r
+:10076000A1F028F4C83059F0C93061F005C0CC3090\r
+:1007700089F070F0CD3089F0209A289810C0219A25\r
+:1007800029980DC0229A2A980AC0239A2B9807C04C\r
+:10079000529A01C0539A5B9802C03E9A469890EADA\r
+:1007A0009A95F1F79FB1799902C082E001C080E08B\r
+:1007B00091709D25982B7C9902C084E001C080E057\r
+:1007C000892B7D9902C038E001C030E0832B7E99EF\r
+:1007D00002C020E101C020E0822B9FB19095991FBB\r
+:1007E0009927991F9295990F907E892B0FC0809120\r
+:1007F0000101811149C080E40E94CA028093010175\r
+:10080000882379F1B12C0E94EC028B2DF8019081A4\r
+:10081000981719F08083C09200010E941603219658\r
+:100820000F5F1F4FCE30D10509F076CF80910001C8\r
+:10083000882361F1815080930001882339F08FE98A\r
+:100840009FE00197F1F700C0000020C0A3E4B1E0F1\r
+:10085000E5E3F1E0CF01825F91919D938E13FCCF90\r
+:1008600015C083E10E94F402809301018111CACF77\r
+:1008700081E40E94CA02809301018111C3CF0E94CA\r
+:100880000503B82EB094BFCF80E0C0CF0E947004A3\r
+:1008900081E0DF91CF911F910F91FF90EF90DF905A\r
+:1008A000CF90BF900895E82FF0E0ED5BFE4F808180\r
+:1008B000089508950F931F93CF93DF93C3E4D1E07E\r
+:1008C00010E00C2F025F899190E00E948C1B180FA2\r
+:1008D0000C13F9CF812FDF91CF911F910F910895C4\r
+:1008E0000C94400556985E9825982D9826982E9839\r
+:1008F00027982F988FEF90E090938900809388003D\r
+:1009000090938B0080938A0090938D0080938C004D\r
+:10091000259A2D9A2FEF80E792E021508040904059\r
+:10092000E1F700C00000269A2E9A2FEF80E792E0B0\r
+:10093000215080409040E1F700C00000279A2F9A94\r
+:100940002FEF80E792E0215080409040E1F700C017\r
+:10095000000025982D982FEF80E792E021508040ED\r
+:100960009040E1F700C0000026982E982FEF80E716\r
+:1009700092E0215080409040E1F700C000002798AD\r
+:100980002F9856985E9825982D9826982E982798F7\r
+:100990002F98089589EA8093800089E080938100F0\r
+:1009A00024982C983F988AB18F748AB96E98479A88\r
+:1009B0008BB1806B8BB9769A0E9472040C943F05C0\r
+:1009C00080E2809301018091510181110EC00E944B\r
+:1009D000C40281E0809351012FEF83ED90E3215019\r
+:1009E00080409040E1F700C0000080E40E94CA020D\r
+:1009F0008093010181112EC00E94F40280930101B5\r
+:100A0000811128C00E94F40280930101811122C04B\r
+:100A10008FE30E94F4028093010181111BC00E94A8\r
+:100A2000EC0280E40E94CA0280930101811112C08D\r
+:100A30008CE00E94F4028093010181110BC00E949E\r
+:100A4000F40280930101811105C08FE30E94F4023A\r
+:100A5000809301010E94EC028091010108956111CF\r
+:100A60000BC0FC018281882321F085EE0E949B113E\r
+:100A700003C085EE0E94631280E090E0089508951F\r
+:100A80006091C2017091C3018091C4019091C50130\r
+:100A90000E94981B56985E9825982D9826982E9817\r
+:100AA00027982F98813019F0823021F00895259AE7\r
+:100AB0002D9A0895269A2E9A089581E0089581E04E\r
+:100AC00008950C945F050895282F882339F090E04D\r
+:100AD0002A3010F44D9608950697089587E290E025\r
+:100AE0000895AF92BF92DF92EF92FF920F931F9300\r
+:100AF000CF93DF938C01FC01C081D181CE010E9494\r
+:100B0000111ABE010E94E908EC01B8010E946105BA\r
+:100B1000882309F4D1C1F8018281882309F4C6C071\r
+:100B200080916201811127C0C431F0E7DF0709F02D\r
+:100B3000BDC10E94630581E0809362010E94321C66\r
+:100B400090936101809360011092550110925701BA\r
+:100B500010925601109259011092580110925B01A7\r
+:100B600010925A0110925D0110925C0110925F0187\r
+:100B700010925E01A1C180916001909161010E947B\r
+:100B80003E1C883C910570F480915501E82FF0E0FF\r
+:100B9000EE0FFF1FEA5AFE4FD183C0838F5F809311\r
+:100BA00055018AC1C13020E8D20708F451C0F801CC\r
+:100BB0008281882309F47EC05E01E894B7F88091B1\r
+:100BC0005401813079F050F08230C1F482EE0E94FD\r
+:100BD0009B1187E50E949B1187E50EC082EE0E9463\r
+:100BE0009B110CC080EE0E949B1181EE0E949B1114\r
+:100BF00088E10E949B1188E10E9463128CE0E82E3C\r
+:100C0000F12CC5010E2C02C0969587950A94E2F747\r
+:100C10008F700E946405D82E0E949B118D2D0E941A\r
+:100C20006312F4E0EF1AF1082CEFE2162FEFF20650\r
+:100C300041F780915401813029F010F0823041F465\r
+:100C400082EE04C080EE0E94631281EE0E94631265\r
+:100C5000C43180E7D80768F4C23090E7D90708F0BC\r
+:100C600046C0C115E0E7DE0771F0C130D047A1F101\r
+:100C70000CC1C33320E7D20709F4D8C0C433D0472E\r
+:100C800009F4EBC002C1F8018281882309F402C192\r
+:100C90000E941815FFEF24E38CE0F15020408040C3\r
+:100CA000E1F700C000000E948D1C06C1C13080E841\r
+:100CB000D80770F2C43120E7D20708F0B3C0C230C1\r
+:100CC00080E7D807A0F4C11590E7D90709F4E2C07E\r
+:100CD000C130D04709F0D9C0F8018281882309F4D6\r
+:100CE000D9C08091DF0181608093DF01E5C0F80108\r
+:100CF0008281882309F4CEC00E94E71C811102C0C2\r
+:100D00000E94CD1C0E94FA1C90E09093F301809306\r
+:100D1000F201C230F0E7DF0721F48091F201816037\r
+:100D20007AC0C33020E7D20721F48091F2018260BB\r
+:100D300072C0C43080E7D80721F48091F20184604A\r
+:100D40006AC0C53090E7D90719F48091F20127C035\r
+:100D5000C630E0E7DE0721F48091F20180615BC0DC\r
+:100D6000C730F0E7DF0721F48091F201806253C0C1\r
+:100D7000C83020E7D20721F48091F20180644BC093\r
+:100D8000C93080E7D80721F48091F201806843C020\r
+:100D9000CA3090E7D90729F48091F2018460886015\r
+:100DA0003AC0CB30E0E7DE0721F48091F2018E7F7C\r
+:100DB00032C0CC30F0E7DF0721F48091F2018D7F63\r
+:100DC0002AC0CD3020E7D20721F48091F2018B7F39\r
+:100DD00022C0CE3080E7D80719F48091F2011AC002\r
+:100DE0008091F201CF3090E7D90711F48F7E13C0C4\r
+:100DF000C031E0E7DE0711F48F7D0DC0C131F0E7AF\r
+:100E0000DF0711F48F7B07C0C231D04711F48F7711\r
+:100E100002C08B7F877F8093F2018091F2010E9454\r
+:100E2000FE1C4AC0C333F0E7DF07A1F4F80182815A\r
+:100E3000882321F01092520182E016C08091520165\r
+:100E4000811106C086E20E949B1186E20E94631215\r
+:100E500082E018C0C433D047C1F4F80182818823EE\r
+:100E600031F01092530180E20E94B21225C08091AD\r
+:100E70005301811106C087E20E949B1187E20E9404\r
+:100E8000631280E20E94B91217C081E08093520180\r
+:100E900080935301C801DF91CF911F910F91FF9073\r
+:100EA000EF90DF90BF90AF900C945D05C130F0E8FB\r
+:100EB000DF0708F081CECCCE80E0DF91CF911F918B\r
+:100EC0000F91FF90EF90DF90BF90AF90089526E0D4\r
+:100ED000729FF001112444E5849FE00DF11D11245F\r
+:100EE000E60FF11DEE0FFF1FE25FFE4F859194911B\r
+:100EF0000E94FB08811560E49607B0F5811570E348\r
+:100F0000970708F0DEC0803E9105D8F4803C91053B\r
+:100F100008F06CC0883A910578F4853A910508F09C\r
+:100F20006BC08130910509F452C108F40FC18430BF\r
+:100F3000910508F04CC10AC18B3B910508F467C0CC\r
+:100F400005C18F3F910509F048F4803F910508F0F5\r
+:100F5000ADC0883E910508F43AC1F8C0811520E281\r
+:100F6000920708F0A5C00895811543E5940790F411\r
+:100F7000811562E5960708F0C8C0811571E59707ED\r
+:100F800008F0BEC0811520E5920708F09DC09F7053\r
+:100F9000906A0895811545E59407D8F4811564E5B4\r
+:100FA000960708F0C8C0482F4695469570E2479FBF\r
+:100FB000A00111248370992721E030E0B90102C01B\r
+:100FC000660F771F8A95E2F7CB01842B952B9A68E1\r
+:100FD0000895811576E5970708F4B2C09C01305654\r
+:100FE0002115304108F0B2C09F70AEC0FC01EE0F79\r
+:100FF000FF1FE657F04062C0853A910509F4A9C089\r
+:10100000863A910509F0A8C082E890E40895883AEC\r
+:10101000910509F4A4C0893A910509F4A3C08A3A5C\r
+:10102000910509F4A2C08B3A910509F4A1C08C3A4C\r
+:10103000910509F4A0C08D3A910509F49FC0803B49\r
+:10104000910509F49EC08E3A910509F49DC08F3A2E\r
+:10105000910509F49CC0813B910509F49BC0823B3A\r
+:10106000910509F49AC0833B910509F499C0843B2A\r
+:10107000910509F498C0853B910509F497C0863B1A\r
+:10108000910509F496C0873B910509F495C0883B0A\r
+:10109000910509F494C0893B910509F493C08A3BFA\r
+:1010A000910509F492C080E094E408959065089554\r
+:1010B000FC01FF70EE0FFF1FE65FFE4F85919491DC\r
+:1010C00008959927906C0895482F437021E030E0EF\r
+:1010D00002C0220F331F4A95E2F73C68AC0164E07E\r
+:1010E000569547956A95E1F74370342B8F70869536\r
+:1010F000869560E2869FC0011124822B932B089570\r
+:10110000982F8827816F906A0895482F46954695B5\r
+:1011100070E2479FA00111248370992721E030E0FD\r
+:10112000B90102C0660F771F8A95E2F7CB01842BC5\r
+:10113000952B9C680895982F8827846F906A08954E\r
+:101140008F719927982F88279062089580E090E00A\r
+:10115000089581E890E4089583E890E4089582EE8C\r
+:1011600094E4089589EE94E408958AEE94E4089551\r
+:1011700085EB94E4089586EB94E4089587EB94E47A\r
+:1011800008958CEC94E408958DEC94E4089583E83C\r
+:1011900095E408958AE895E4089582E995E4089530\r
+:1011A00084E995E4089581E296E4089583E296E463\r
+:1011B000089584E296E4089585E296E4089586E22F\r
+:1011C00096E4089587E296E408958AE296E4089505\r
+:1011D000089596E0799FF001112494E5899FE00D30\r
+:1011E000F11D1124E60FF11DEE0FFF1FE25FFE4F10\r
+:1011F0008591949108958238910549F1B0F4813335\r
+:10120000910509F458C048F48932910509F44EC09B\r
+:101210008A32910509F454C008958533910509F483\r
+:1012200040C08933910599F00895833E910529F1D5\r
+:1012300038F4803E910591F0823E9105A1F0089529\r
+:10124000863E9105F9F0873E910531F10895209190\r
+:10125000F20120FD3AC021FD38C008958091F201CD\r
+:1012600080FD35C032C08091F20182FF32C0809192\r
+:10127000F20184FD30C083EE39C08091F20182FD1D\r
+:1012800028C0F5CF8091F20183FF27C08091F20141\r
+:1012900084FD21C087EE2AC08091F20183FD1DC02C\r
+:1012A000F5CF8091F20185FD1AC01BC08091F2013B\r
+:1012B00085FD17C014C08091F20186FD14C015C0D1\r
+:1012C0008091F20186FD11C00EC080EE0FC089E34F\r
+:1012D0000DC082EE0BC080E009C086EE07C089E237\r
+:1012E00005C085E303C08AE201C081E390E0089570\r
+:1012F00008950C947809809173010895CF93DF933A\r
+:1013000000D01F92CDB7DEB79C018091F8018430E8\r
+:1013100019F593E099833B832A839093E9008FEF3B\r
+:101320009091E800815095FD06C095ED9A95F1F7F2\r
+:1013300000008111F5CF8091E80085FF0DC040E0ED\r
+:1013400050E063E070E0CE0101960E94E70B8091CF\r
+:10135000E8008E778093E8000F900F900F90DF9158\r
+:10136000CF910895CF93DF9300D01F92CDB7DEB712\r
+:101370002091F801243021F522E029839B838A8380\r
+:1013800083E08093E9008FEF9091E800815095FD14\r
+:1013900006C095ED9A95F1F700008111F5CF809187\r
+:1013A000E80085FF0DC040E050E063E070E0CE0152\r
+:1013B00001960E94E70B8091E8008E778093E80009\r
+:1013C0000F900F900F90DF91CF9108952091F80129\r
+:1013D0002430F1F422E02093E9002FEF3091E8006F\r
+:1013E000215035FD06C035ED3A95F1F70000211189\r
+:1013F000F5CF2091E80025FF0BC040E050E065E00C\r
+:1014000070E00E94E70B8091E8008E778093E800FF\r
+:101410000895CF93DF93EC019091F801943009F097\r
+:1014200046C080910C018823D9F080910D0188235A\r
+:10143000B9F09093E9008FEF9091E800815095FD0D\r
+:1014400006C095E19A95F1F700008111F5CF8091E2\r
+:10145000E80085FF2CC040E050E060E170E017C07C\r
+:1014600081E08093E9008FEF9091E800815095FD35\r
+:1014700006C095ED9A95F1F700008111F5CF8091A6\r
+:10148000E80085FF14C040E050E068E070E0CE0165\r
+:101490000E94E70B8091E8008E778093E80080E15E\r
+:1014A000FE01A3E6B1E001900D928A95E1F7DF918C\r
+:1014B000CF9108958091F701811109C00E947C0DA0\r
+:1014C0000E94D90D8091E20084608093E20008952B\r
+:1014D0001092F701089508950C9473210E94231C23\r
+:1014E0000E9479210E947F100C94790942E061ECFE\r
+:1014F00081E00E94F60C42E061EC82E00E94F60C72\r
+:1015000042E061EC83E00E94F60C42E161EC84E091\r
+:101510000C94F60C8091FA01833009F455C030F434\r
+:10152000813071F0823009F48EC008958A3009F458\r
+:101530007AC08B3009F460C0893009F09CC020C0AB\r
+:101540008091F901813A09F096C08091E800877F87\r
+:101550008093E8008091FD019091FE01892B21F498\r
+:1015600060E183E691E003C060E080E090E070E03D\r
+:101570000E94320C8091E8008B778093E8000895F8\r
+:101580008091F901813209F076C08091FD0190913E\r
+:10159000FE01009719F0039709F06DC08091E800F3\r
+:1015A000877F8093E8008091E80082FD05C08091EC\r
+:1015B000F8018111F8CF5FC08091F1008093730131\r
+:1015C0008091E8008B7753C08091F901813A09F04E\r
+:1015D00052C08091FD019091FE01892B09F04BC012\r
+:1015E0008091E800877F8093E8008091E80080FF89\r
+:1015F000FCCF80910C0136C08091F9018132D9F580\r
+:101600008091FD019091FE01892BA9F58091E80060\r
+:10161000877F8093E8000E942B0D8091FB018093CF\r
+:101620000C010C9418158091F901813221F58091FB\r
+:10163000E800877F8093E8000E942B0D8091FC01D9\r
+:101640008093740108958091F901813AA1F4809109\r
+:10165000E800877F8093E8008091E80080FFFCCF5E\r
+:10166000809174018093F1008091E8008E778093DF\r
+:10167000E8000C942B0D089584B7877F84BF0FB6C4\r
+:10168000F894A89580916000886180936000109222\r
+:1016900060000FBE80E880936100109261000E949C\r
+:1016A000CE100E947C0D0E94D90D8091E2008460D2\r
+:1016B0008093E20078940E945F100E94D01082E034\r
+:1016C00091E00E947A100E9461218091F80185309A\r
+:1016D00069F40E94E81B8091F6018823B1F30E940F\r
+:1016E000151C882391F30E94D10BEFCF0E94D610D6\r
+:1016F000ECCF292F332723303105C9F064F4213092\r
+:10170000310581F02230310509F043C08DE690E0CB\r
+:101710002AE333E042C021323105F1F022323105B3\r
+:1017200041F137C082E190E027EA33E036C09927E3\r
+:101730008130910541F08230910541F0892B49F5C6\r
+:10174000E6E3F3E005C0EEE1F3E002C0E6E0F3E03B\r
+:10175000849190E09F0121C06430D8F4E62FF0E03E\r
+:10176000EE0FFF1FEE5DFE4F2081318189E090E09A\r
+:1017700014C0643070F470E0FB01EE0FFF1FE65EF2\r
+:10178000FE4F20813181FB01EA5EFE4F808190E0B7\r
+:1017900004C080E090E020E030E0FA013183208353\r
+:1017A000089580E189BD82E189BD09B400FEFDCFC5\r
+:1017B0008091D8008F7D8093D8008091E000826076\r
+:1017C0008093E0008091E00081FDFCCF0895CF92EE\r
+:1017D000DF92EF92FF920F931F93CF93DF93EC0171\r
+:1017E0008B016A010E944A0D811133C0C114D104DA\r
+:1017F00039F0F60180819181081B190BC80FD91FA0\r
+:10180000E12CF12C0115110519F18091E80085FDFD\r
+:1018100016C08091E8008E778093E800C114D1044F\r
+:1018200049F0F60180819181E80EF91EF182E08293\r
+:1018300085E00FC00E944A0D882321F30AC08991D8\r
+:101840008093F10001501109FFEFEF1AFF0ADACF80\r
+:1018500080E0DF91CF911F910F91FF90EF90DF908B\r
+:10186000CF9008952091FF0130910002261737078D\r
+:1018700048F06115710539F42091E8002E77209326\r
+:10188000E80001C0B90140E061157105A9F120919E\r
+:10189000F801222309F443C0253009F442C0209105\r
+:1018A000E80023FD40C02091E80022FD32C02091D5\r
+:1018B000E80020FFE9CF4091F3002091F20030E0F2\r
+:1018C000342BFC01CF016115710559F02830310529\r
+:1018D00040F481918093F100615071092F5F3F4F77\r
+:1018E000F1CF41E02830310509F040E02091E800D7\r
+:1018F0002E772093E800C8CF4111C9CF0AC080914C\r
+:10190000F801882361F0853061F08091E80083FD63\r
+:101910000AC08091E80082FFF2CF80E0089582E063\r
+:10192000089583E0089581E008952091FF013091AA\r
+:1019300000022617370748F06115710539F4209128\r
+:10194000E8002E772093E80001C0B901FC0120E0F7\r
+:101950006115710591F18091F801882309F440C067\r
+:10196000853009F43FC08091E80083FD3DC080913F\r
+:10197000E80082FD2FC08091E80080FFE9CF209130\r
+:10198000F3008091F20090E0922B6115710559F0FF\r
+:101990008830910540F424912093F10031966150F4\r
+:1019A00071090196F2CF21E0089709F020E08091BB\r
+:1019B000E8008E778093E800CBCF2111CCCF0AC00E\r
+:1019C0008091F801882361F0853061F08091E80012\r
+:1019D00083FD0AC08091E80082FFF2CF80E0089585\r
+:1019E00082E0089583E0089581E00895982F97306C\r
+:1019F00058F59093E900981739F07091EC00209118\r
+:101A0000ED005091F00003C0242F762F50E021FF0D\r
+:101A100019C03091EB003E7F3093EB003091ED0028\r
+:101A20003D7F3093ED003091EB0031603093EB005F\r
+:101A30007093EC002093ED005093F0002091EE00A5\r
+:101A400027FF07C09F5FD3CF8F708093E90081E0AD\r
+:101A5000089580E008958091F90187FF11C0809179\r
+:101A6000E80082FD05C08091F8018111F8CF11C016\r
+:101A70008091E8008B770BC08091F801882349F0B2\r
+:101A80008091E80080FFF8CF8091E8008E77809306\r
+:101A9000E80008952091E4003091E50095E640913A\r
+:101AA000EC00842F817040FF22C08091E80080FD0F\r
+:101AB0001CC08091F801882391F0853091F08091CD\r
+:101AC000EB0085FD10C04091E4005091E500421705\r
+:101AD000530729F39A01915011F784E0089582E0A9\r
+:101AE000089583E0089581E0089580E0089540918D\r
+:101AF000E80042FFDECF08950E94EA0D0E94F20D39\r
+:101B0000E0EEF0E0808181608083E8EDF0E08081AC\r
+:101B10008F77808319BCA7EDB0E08C918E7F8C937A\r
+:101B200080818F7E80831092F70108950F931F9319\r
+:101B3000CF93DF930E94EA0D0E94F20DC8EDD0E032\r
+:101B400088818F77888388818068888388818F7D6A\r
+:101B5000888319BC1092F8011092F4011092F601DA\r
+:101B60001092F50100EE10E0F80180818B7F8083F8\r
+:101B700088818160888342E060E080E00E94F60C0A\r
+:101B8000E1EEF0E080818E7F8083E2EEF0E0808104\r
+:101B900081608083808188608083F80180818E7F6E\r
+:101BA0008083888180618883DF91CF911F910F911D\r
+:101BB0000895E8EDF0E080818F7E8083E7EDF0E02E\r
+:101BC00080818160808384E082BF81E08093F7011F\r
+:101BD0000C94960DE8EDF0E080818E7F808310926A\r
+:101BE000E20008951092DA001092E10008951F9229\r
+:101BF0000F920FB60F9211242F933F934F935F9341\r
+:101C00006F937F938F939F93AF93BF93EF93FF93C4\r
+:101C10008091E10082FF0BC08091E20082FF07C04B\r
+:101C20008091E1008B7F8093E1000E945E108091A3\r
+:101C3000DA0080FF1FC08091D80080FF1BC0809118\r
+:101C4000DA008E7F8093DA008091D90080FF0DC08A\r
+:101C500080E189BD82E189BD09B400FEFDCF81E04C\r
+:101C60008093F8010E945A0A05C019BC1092F8012D\r
+:101C70000E94680A8091E10080FF19C08091E20013\r
+:101C800080FF15C08091E2008E7F8093E2008091FA\r
+:101C9000E20080618093E2008091D80080628093AE\r
+:101CA000D80019BC85E08093F8010E946C0A8091ED\r
+:101CB000E10084FF30C08091E20084FF2CC080E10D\r
+:101CC00089BD82E189BD09B400FEFDCF8091D800B5\r
+:101CD0008F7D8093D8008091E1008F7E8093E1001A\r
+:101CE0008091E2008F7E8093E2008091E20081602B\r
+:101CF0008093E2008091F401882311F084E007C012\r
+:101D00008091E30087FD02C081E001C083E0809301\r
+:101D1000F8010E946E0A8091E10083FF29C0809142\r
+:101D2000E20083FF25C08091E100877F8093E1007E\r
+:101D300082E08093F8011092F4018091E1008E7F9F\r
+:101D40008093E1008091E2008E7F8093E200809199\r
+:101D5000E20080618093E20042E060E080E00E9467\r
+:101D6000F60C8091F00088608093F0000E946B0A6E\r
+:101D7000FF91EF91BF91AF919F918F917F916F9163\r
+:101D80005F914F913F912F910F900FBE0F901F9039\r
+:101D900018951F920F920FB60F9211242F933F9315\r
+:101DA0004F935F936F937F938F939F93AF93BF9363\r
+:101DB000CF93DF93EF93FF93C091E900CF708091B1\r
+:101DC000EC00D82FD17080FDD0E81092E90080910E\r
+:101DD000F000877F8093F00078940E940D0F10929E\r
+:101DE000E9008091F00088608093F000CD2BCF70E7\r
+:101DF000C093E900FF91EF91DF91CF91BF91AF9137\r
+:101E00009F918F917F916F915F914F913F912F9112\r
+:101E10000F900FBE0F901F9018951F93CF93DF93D5\r
+:101E2000CDB7DEB7AA970FB6F894DEBF0FBECDBF11\r
+:101E3000E9EFF1E088E08E0F9091F10091938E131D\r
+:101E4000FBCF0E948A0A8091E80083FF1FC1809126\r
+:101E5000F9019091FA01492F50E04A30510508F0FC\r
+:101E600015C1FA01EA5AFF4F0C940A23803881F019\r
+:101E7000823809F00BC18091FD018F708093E900D9\r
+:101E80008091EB0085FB882780F91092E90006C05D\r
+:101E90008091F5019091F601911182609091E80096\r
+:101EA000977F9093E8008093F1001092F100C8C0F2\r
+:101EB000282F2D7F09F0EAC0882319F0823061F0C5\r
+:101EC000E5C08091FB01813009F0E0C0933009F05A\r
+:101ED00080E08093F6012BC08091FB01811127C027\r
+:101EE0008091FD018F7009F4D1C08093E9002091A9\r
+:101EF000EB0020FF1CC0933021F48091EB00806246\r
+:101F000014C09091EB0090619093EB0021E030E0E1\r
+:101F1000A90102C0440F551F8A95E2F74093EA00D9\r
+:101F20001092EA008091EB0088608093EB001092A1\r
+:101F3000E9008091E800877F86C08111A7C01091D9\r
+:101F4000FB011F778091E3008078812B8093E30071\r
+:101F50008091E800877F8093E8000E942B0D80919C\r
+:101F6000E80080FFFCCF8091E30080688093E3006D\r
+:101F7000111102C082E001C083E08093F80186C0A5\r
+:101F80008058823008F082C08091FB019091FC0162\r
+:101F90008C3D53E0950779F583E08A838AE2898353\r
+:101FA0004FB7F894DE01139620E03EE051E2E32FB4\r
+:101FB000F0E050935700E49120FF03C0E295EF70EA\r
+:101FC0003F5FEF708E2F90E0EA3010F0C79601C0AF\r
+:101FD000C0968D939D932F5F243149F74FBF809119\r
+:101FE000E800877F8093E8006AE270E0CE01019606\r
+:101FF0000E94320C14C0AE014F5F5F4F6091FD0133\r
+:102000000E94790BBC01892B09F440C09091E80033\r
+:10201000977F9093E80089819A810E94950C809126\r
+:10202000E8008B778093E80031C0803879F58091A3\r
+:10203000E800877F8093E8008091F4018093F100AD\r
+:102040008091E8008E778093E8000E942B0D1EC0DF\r
+:1020500081111CC09091FB019230C0F48091E80086\r
+:10206000877F8093E8009093F4010E942B0D80916C\r
+:10207000F401811106C08091E30087FD02C081E078\r
+:1020800001C084E08093F8010E94760A8091E80004\r
+:1020900083FF0AC08091E800877F8093E8008091E9\r
+:1020A000EB0080628093EB00AA960FB6F894DEBF37\r
+:1020B0000FBECDBFDF91CF911F9108950895CF93AB\r
+:1020C0008091F8018823A1F0C091E900CF70909130\r
+:1020D000EC00892F817090FD80E8C82B1092E900F8\r
+:1020E0008091E80083FD0E940D0FCF70C093E9003E\r
+:1020F000CF91089590937A01809379010895E091AA\r
+:102100007901F0917A01309721F00190F081E02D72\r
+:10211000099480E00895E0917901F0917A01309777\r
+:1021200021F00280F381E02D09940895E091790176\r
+:10213000F0917A01309721F00480F581E02D099427\r
+:10214000089520917701309178018217930771F0FB\r
+:102150009093780180937701E0917901F0917A0171\r
+:10216000309721F00680F781E02D099408952091A1\r
+:102170007501309176018217930771F09093760183\r
+:1021800080937501E0917901F0917A01309721F007\r
+:102190000084F185E02D0994089508950C94CD10E4\r
+:1021A0000E94291C0E943E030C94AF1C9F92AF9288\r
+:1021B000BF92CF92DF92EF92FF920F931F93CF9334\r
+:1021C000DF9300D000D000D0CDB7DEB70E9465030A\r
+:1021D0000DE010E0AA24A394B12C902E802F0E9431\r
+:1021E0005304980124583E4F6901F901F080F82604\r
+:1021F000A1F40150110988F78FEF89838A831B822C\r
+:102200000E94321C8160782F9D838C8349815A8182\r
+:102210006B818D810E946D112FC09091DF0191FF24\r
+:1022200004C08E830E9459048E8125E030E0A50110\r
+:10223000022E01C0440F0A94EAF7E42E4F21C1F0A8\r
+:1022400029839A828E2191E009F490E09B830E9479\r
+:10225000321C8160782F9D838C8349815A816B81E8\r
+:102260008D810E946D11F6018081E826E08204C014\r
+:1022700021503109E0F6BDCF0E947D1E10917B01F7\r
+:102280000E947F101817B9F00E947F1080937B0185\r
+:1022900026960FB6F894DEBF0FBECDBFDF91CF916B\r
+:1022A0001F910F91FF90EF90DF90CF90BF90AF9074\r
+:1022B0009F900C94790926960FB6F894DEBF0FBE56\r
+:1022C000CDBFDF91CF911F910F91FF90EF90DF90E5\r
+:1022D000CF90BF90AF909F900895CF93DF93CDB7ED\r
+:1022E000DEB72B970FB6F894DEBF0FBECDBF4F837E\r
+:1022F000588769877A878B87DE01119686E0FD0112\r
+:1023000011928A95E9F785E0FE01379601900D92CA\r
+:102310008A95E1F749815A816B817C818D819E810B\r
+:102320000E94B6172B960FB6F894DEBF0FBECDBF36\r
+:10233000DF91CF910895CF93882309F4C2C0C82FAD\r
+:10234000823859F40E947F1081FDBBC089E30E944E\r
+:10235000901A0E945D1B89E30CC0833879F40E94B7\r
+:102360007F1080FDAEC083E50E94901A0E945D1B25\r
+:1023700083E50E94D21ACF910C945D1B843859F4E6\r
+:102380000E947F1082FD9DC087E40E94901A0E94E7\r
+:102390005D1B87E4EECF8CEF8C0F813A48F48C2FD5\r
+:1023A0000E94C72081118DC08C2F0E94901AE3CF0C\r
+:1023B00080E28C0F883048F4C77081E001C0880F3C\r
+:1023C000CA95EAF70E94161BD6CF8BE58C0F833097\r
+:1023D00078F4C53A29F0C63A31F083E890E005C0B8\r
+:1023E00081E890E002C082E890E0CF910C94A110C7\r
+:1023F00088E58C0F833108F064C0C83A39F1C93AD6\r
+:1024000041F1CA3A49F1CB3A51F1CC3A59F1CD3ABE\r
+:1024100061F1C03B69F1CE3A71F1CF3A79F1C13B3C\r
+:1024200081F1C23B89F1C33B91F1C43B99F1C53BBA\r
+:10243000A1F1C63BA9F1C73BB1F1C83BB9F1C93B1A\r
+:10244000C1F1CA3BC9F180E090E038C082EE90E073\r
+:1024500035C089EE90E032C08AEE90E02FC085EB67\r
+:1024600090E02CC086EB90E029C087EB90E026C07E\r
+:102470008CEC90E023C08DEC90E020C083E891E0EC\r
+:102480001DC08AE891E01AC082E991E017C084E992\r
+:1024900091E014C081E292E011C083E292E00EC0AC\r
+:1024A00084E292E00BC085E292E008C086E292E00E\r
+:1024B00005C087E292E002C08AE292E0CF910C94DC\r
+:1024C000B710CF910895882309F44BC0823859F48E\r
+:1024D0000E947F1081FF45C089E30E94901A0E94EC\r
+:1024E0005D1B89E30CC0833871F40E947F1080FF6C\r
+:1024F00038C083E50E94901A0E945D1B83E50E940C\r
+:10250000D21A0C945D1B843859F40E947F1082FF0C\r
+:1025100028C087E40E94901A0E945D1B87E4EFCFD9\r
+:102520009CEF980F913A58F390E2980F983050F43E\r
+:10253000877091E001C0990F8A95EAF7892F0E9470\r
+:102540001C1BDFCF9BE5980F933020F480E090E0D8\r
+:102550000C94A110885A833120F480E090E00C9410\r
+:10256000B7100895882321F00E94161B0C945D1B60\r
+:102570000895882321F00E941C1B0C945D1B089574\r
+:102580007F928F929F92AF92BF92CF92DF92EF9203\r
+:10259000FF920F931F93CF93DF931F92CDB7DEB7B8\r
+:1025A0007C01C62E772EFC01058102950F701281E9\r
+:1025B00011110E94331B0E94891A882379F011237C\r
+:1025C00069F080E28C0D883048F082E00E94721A37\r
+:1025D0000E94891A91E0D82ED92601C0D12CE72D6E\r
+:1025E000E295EF70F0E0E05AFF4F0C940A23872D3C\r
+:1025F000807F072D0F70882311F00295007F112333\r
+:1026000089F0002309F490C180E28C0D883020F419\r
+:10261000802F0E94161B03C0802F0E94261B0E9441\r
+:102620005D1B82C18C2D0E946312002309F495C1A9\r
+:1026300080E28C0D883020F4802F0E941C1B03C088\r
+:10264000802F0E942C1B0E945D1B87C1972D907FBD\r
+:10265000872D8F70903211F08295807FCC2021F0F1\r
+:10266000F1E0CF16B1F01EC0112349F0002309F4A8\r
+:1026700014C1013009F011C10E94461B6EC1002334\r
+:1026800019F0013009F469C189830E94491B8981CD\r
+:102690000AC1112321F0023008F05FC1FEC0011110\r
+:1026A0005CC101C1112321F0002309F4F6C03CC133\r
+:1026B000002309F4F8C03EC1872D86958695837066\r
+:1026C00090E0009719F0019761F047C1112321F0C4\r
+:1026D0008C2D972D937002C080E090E00E94A11095\r
+:1026E0003CC1112321F08C2D972D937002C080E006\r
+:1026F00090E00E94B71031C18C2D112319F00E9477\r
+:10270000851D02C00E94ED1D0E94721E26C1872DEC\r
+:10271000837009F052C0111120C18C2D82958695CD\r
+:102720008770880F880F9C2D9F70892E912CA12C6B\r
+:10273000B12C082E04C0880C991CAA1CBB1C0A943E\r
+:10274000D2F7C4FE14C00FE010E020E030E0B90181\r
+:10275000A80104C0440F551F661F771F8A95D2F742\r
+:10276000CB01BA01609570958095909503C060E0AB\r
+:1027700070E0CB01272D26952695237030E022307E\r
+:10278000310569F02330310589F0682979298A29D2\r
+:102790009B292130310571F00E94FE18DEC06829A6\r
+:1027A00079298A299B290E941A19D7C00E94FE18EC\r
+:1027B000C501B4010E94E218D0C0112319F0872D81\r
+:1027C000817001C08695882309F4C7C08C2D82953D\r
+:1027D00086958770880F880F9C2D9F70892E912C6D\r
+:1027E000A12CB12C082E04C0880C991CAA1CBB1C5F\r
+:1027F0000A94D2F7C4FE14C00FE010E020E030E0ED\r
+:10280000B901A80104C0440F551F661F771F8A95A0\r
+:10281000D2F7CB01BA01609570958095909503C071\r
+:1028200060E070E0CB01272D269526952370422F7E\r
+:1028300050E04230510569F04330510589F0682974\r
+:1028400079298A299B294130510571F00E94D819B4\r
+:1028500084C0682979298A299B290E94F4197DC09E\r
+:102860000E94D819C501B4010E94BC1976C08C2DF4\r
+:1028700090E0FC01E05EF109E531F10508F050C09F\r
+:10288000E059FF4F0C940A230C2D0F70872D8F7188\r
+:10289000112331F00E945519802F0E94B2125DC0A1\r
+:1028A0000E947619802F0E94B91257C0112339F067\r
+:1028B000011153C0872D8F710E949B194EC00230A9\r
+:1028C00008F04BC0F7CF112339F0872D8F710E948C\r
+:1028D000551943C01123C9F3872D8F710E947619B2\r
+:1028E0003CC0112329F0872D8F710E94401935C0FB\r
+:1028F0000E94361932C0112351F0172D1F71812FFC\r
+:102900000E94551963E0812F0E94691A26C081E058\r
+:102910000E94721A023008F182E00E94721A1DC0F1\r
+:10292000112331F0002389F28C2D0E949B1115C0D8\r
+:10293000002391F28C2D0E9463120FC0472D4F701F\r
+:102940006C2DC7010E942F050E945A1806C0472D02\r
+:102950004F706C2DC7010E94E808DD20F9F00E943D\r
+:10296000651A80FD1BC0F70112820E945F1A0E9447\r
+:102970005519C7010E94DD140E945F1A0F90DF9164\r
+:10298000CF911F910F91FF90EF90DF90CF90BF906C\r
+:10299000AF909F908F907F900C9476190F90DF915D\r
+:1029A000CF911F910F91FF90EF90DF90CF90BF904C\r
+:1029B000AF909F908F907F9008950F931F93CF9328\r
+:1029C000DF93EC01888199812B813C81232BB9F025\r
+:1029D0009F3F11F48F3F99F0CE010E94710588232B\r
+:1029E00071F0688179818A810E945B1A8C010E9452\r
+:1029F000101A0E94D718B801CE010E94C012DF91B0\r
+:102A0000CF911F910F9108950E94331B0E94431B89\r
+:102A10000E94081B0E945D1B0E94231F0E94721EC1\r
+:102A200080E090E00E94A11080E090E00C94B7104C\r
+:102A30000E94231B0C9404150E94501A292F2295E2\r
+:102A40002F7030E02C3031054CF42A3031056CF415\r
+:102A50002250310922303105A8F407C02C3031054D\r
+:102A600069F02F30310551F00DC0803F69F018F446\r
+:102A7000803E40F409C0843F29F406C093FB8827B8\r
+:102A800080F9089580E0089581E00895CF93DF9361\r
+:102A900000D000D01F92CDB7DEB70F900F900F90EF\r
+:102AA0000F900F90DF91CF910895CF93DF9300D0D7\r
+:102AB00000D000D0CDB7DEB726960FB6F894DEBFB3\r
+:102AC0000FBECDBFDF91CF9108951F93CF93DF93BA\r
+:102AD000C0918A0116E080918B01C81799F0D0E06F\r
+:102AE0001C9FF0011D9FF00D1124E457FE4F408103\r
+:102AF000518162817381848195810E94551521964F\r
+:102B0000C770E9CFDF91CF911F9108954091BC012B\r
+:102B10005091BD016091BE017091BF018091C001D3\r
+:102B20009091C1010C9455158091C10182958F70CF\r
+:102B300009F054C08091BE01882309F44FC08091F0\r
+:102B40008A01A0918B016091BC017091BD014091FF\r
+:102B5000BF015091C001B6E08A1709F43FC090E070\r
+:102B600041155105C1F17F3F11F46F3FA1F1B89FAD\r
+:102B7000F001B99FF00D1124E457FE4F218172132B\r
+:102B80002AC02081621327C02281211124C0238101\r
+:102B900034812417350710F421503109241B350BDB\r
+:102BA000283C3105C0F42091C1012F702061209391\r
+:102BB000C10126E0289FF001299FF00D1124EF5656\r
+:102BC000FE4F80818F70806180838CEB91E00E944A\r
+:102BD000DD140C94651501968770BECF0895CF92D1\r
+:102BE000DF92EF92FF920F931F93CF93DF93CDB7B6\r
+:102BF000DEB762970FB6F894DEBF0FBECDBF8C0173\r
+:102C000085E0F801DE011D9601900D928A95E1F7AD\r
+:102C1000D8014C9111965C91119712966C91129774\r
+:102C20001396CD90DC9014973091BC017091BD014A\r
+:102C30008091BF019091C001009709F46BC17F3F63\r
+:102C400019F43F3F09F466C1E090BE01EE2009F49B\r
+:102C5000C0C02091C101C816D90628F0F601E81BB2\r
+:102C6000F90BCF0104C0809590958C0D9D1DFF241C\r
+:102C7000F394883C910578F0F12C207F09F0C6C0D0\r
+:102C80007C2DD98AC88A89890E9446158CEB91E0EF\r
+:102C90000E94DD14B1C0822F807F09F046C07513F9\r
+:102CA00014C0341312C0611110C02F702061209322\r
+:102CB000C1010E9486158CEB91E00E94DD14809189\r
+:102CC000C101D80115968C932EC0CD2819F15F3F14\r
+:102CD00011F44F3FF9F0F62E61111CC080918A016A\r
+:102CE00020918B0136E0821709F45AC090E0389F9A\r
+:102CF000F001399FF00D1124E457FE4F71815713F5\r
+:102D000006C07081471303C07281711103C0019620\r
+:102D10008770E9CFF62E662309F418C18091C101AE\r
+:102D200081608093C101F12C11C1751308C0341367\r
+:102D300006C0611104C08091C101D801C3C04D8794\r
+:102D40005E878D859E856A8B0E941C156A89882303\r
+:102D5000E1F16623D1F12091C101822F82958F701C\r
+:102D600090E0029774F08091BC019091BD0198872A\r
+:102D70008F831986DB86CA862C87CE0107960E9430\r
+:102D8000DD1486E0F801ACEBB1E001900D928A957C\r
+:102D9000E1F70E9494150E948615FF24F394D6C093\r
+:102DA0004D875E878D859E850E94501A292F22951A\r
+:102DB0002F7030E0223031050CF0BCC09F7009F05C\r
+:102DC000B6C0805E883008F4C1C0C8010E94DD141E\r
+:102DD000E4CFC816D90608F453C0F601E81BF90B76\r
+:102DE000CF01883C910508F450C0F12C7C2DD98A84\r
+:102DF000C88A89890E944615ECEBF1E086E0DF0184\r
+:102E00001D928A95E9F70E948615A0C0751314C01B\r
+:102E1000341312C0611110C08091C101F801858383\r
+:102E2000C8010E94DD1486E0ECEBF1E0DF011D92A9\r
+:102E30008A95E9F7FE2C8AC04D875E878D859E8531\r
+:102E40006A8B0E941C156A89882309F4BECF662309\r
+:102E500009F4BBCF2091C101822F82958F7090E041\r
+:102E600002970CF48ECF8091BC019091BD019A83A2\r
+:102E700089831B82DD82CC822E83CE0101967FCF97\r
+:102E8000809590958C0D9D1DACCFF62E662309F490\r
+:102E90009CCF75132EC034132CC02091C10120FD8E\r
+:102EA0001FC0822F82958F70D9F0D80115962C9370\r
+:102EB00015978F3049F08F5F982F9295907F822FD2\r
+:102EC0008F70892B15968C93C8010E94DD1486E0C3\r
+:102ED000F801ACEBB1E001900D928A95E1F793CF48\r
+:102EE00086E0F801ACEBB1E001900D928A95E1F734\r
+:102EF0002DC04D875E878D859E850E941C15811192\r
+:102F000040CF8091C10181608093C101C8010E94BE\r
+:102F1000DD141CC0662309F458CF4D875E878D856C\r
+:102F20009E850E941C15882309F44FCF2ACF81115A\r
+:102F300048CF0CC0243031050CF047CF9F7009F406\r
+:102F400040CFF8019581907F09F03BCF8F2D62969D\r
+:102F50000FB6F894DEBF0FBECDBFDF91CF911F91AA\r
+:102F60000F91FF90EF90DF90CF9008951F93CF9334\r
+:102F7000DF93CDB7DEB72C970FB6F894DEBF0FBE48\r
+:102F8000CDBF4F83588769877A878B879C87CE010F\r
+:102F900007960E94EF15882369F08F8198852A850E\r
+:102FA0003B85232BF1F19F3F09F063C08F3F09F070\r
+:102FB00060C037C086E0FE013796DE0111960190B1\r
+:102FC0000D928A95E1F76F817885EA85FB853097C8\r
+:102FD00041F17F3F11F46F3F21F120918B0130E0EF\r
+:102FE000C90101968770992740918A0150E08417A2\r
+:102FF000950709F447C069837A83FD83EC8396E0E3\r
+:10300000929FD001939FB00D1124A457BE4FFE0193\r
+:10301000319601900D929A95E1F780938B010E9471\r
+:10302000651516E080918A0190918B018917C1F195\r
+:10303000189FC001112484579E4F0E94EF158823CA\r
+:1030400079F1E0918A011E9FF0011124E457FE4FAF\r
+:103050004081518162817381848195810E945515DF\r
+:1030600080918A0190E001968770992780938A0168\r
+:10307000D9CF4F81588569857A858B859C850E943B\r
+:103080005515CFCF0E94181510928B0110928A010E\r
+:10309000ECEBF1E086E0DF011D928A95E9F7C1CF04\r
+:1030A0002C960FB6F894DEBF0FBECDBFDF91CF9147\r
+:1030B0001F910895EF92FF920F931F93CF93DF9389\r
+:1030C0008C01892B09F46CC0F12CEE24E394E80107\r
+:1030D0002196F8018491843740F4843008F051C07F\r
+:1030E000813081F0823019F15BC0853709F444C02A\r
+:1030F000A8F19CE7980F903708F052C08F770E9494\r
+:10310000631241C00E5F1F4FFE01C49180E28C0F1D\r
+:10311000883048F4C7708E2D01C0880FCA95EAF731\r
+:103120000E94361B14C08C2F0E949B112DC00E5F75\r
+:103130001F4FFE01C49180E28C0F883058F4C77095\r
+:103140008E2D01C0880FCA95EAF70E943C1B0E9491\r
+:103150005D1B1AC08C2F0E94631216C00E5F1F4F9A\r
+:10316000FE01C491CC2381F08FE99FE00197F1F734\r
+:1031700000C00000C150F6CF0E5F1F4FFE01F4905B\r
+:1031800003C00E949B118E018F2D882309F49FCFCD\r
+:10319000EFE9FFE03197F1F700C000008150F5CF73\r
+:1031A000DF91CF911F910F91FF90EF9008950895B7\r
+:1031B0006093C6017093C7018093C8019093C901C1\r
+:1031C0000C9404150F931F930091C6011091C70131\r
+:1031D0002091C8013091C901DC01CB01802B912BDA\r
+:1031E000A22BB32B8093C6019093C701A093C80173\r
+:1031F000B093C9011F910F910C9404150F931F9365\r
+:103200000091C6011091C7012091C8013091C901F8\r
+:10321000DC01CB0180239123A223B3238093C60139\r
+:103220009093C701A093C801B093C9011F910F915A\r
+:103230000C9404150F931F930091C6011091C701C0\r
+:103240002091C8013091C901DC01CB018027912771\r
+:10325000A227B3278093C6019093C701A093C8010A\r
+:10326000B093C9011F910F910C9404151092C201E3\r
+:103270001092C3011092C4011092C5010C94041560\r
+:1032800041E050E060E070E004C0440F551F661F4D\r
+:10329000771F8A95D2F74093C2015093C301609380\r
+:1032A000C4017093C5010C94041541E050E060E046\r
+:1032B00070E004C0440F551F661F771F8A95D2F730\r
+:1032C0008091C2019091C301A091C401B091C50148\r
+:1032D000482B592B6A2B7B2B4093C2015093C3017F\r
+:1032E0006093C4017093C5010C94041541E050E053\r
+:1032F00060E070E004C0440F551F661F771F8A9579\r
+:10330000D2F740955095609570958091C20190914B\r
+:10331000C301A091C401B091C501482359236A2378\r
+:103320007B234093C2015093C3016093C401709307\r
+:10333000C5010C94041541E050E060E070E004C069\r
+:10334000440F551F661F771F8A95D2F78091C201DF\r
+:103350009091C301A091C401B091C501482759279C\r
+:103360006A277B274093C2015093C3016093C40135\r
+:103370007093C5010C9404150F931F930091C20123\r
+:103380001091C3012091C4013091C501DC01CB0132\r
+:10339000802B912BA22BB32B8093C2019093C3015E\r
+:1033A000A093C401B093C5011F910F910C94041513\r
+:1033B0000F931F930091C2011091C3012091C4018A\r
+:1033C0003091C501DC01CB0180239123A223B323DB\r
+:1033D0008093C2019093C301A093C401B093C5012F\r
+:1033E0001F910F910C9404150F931F930091C2012C\r
+:1033F0001091C3012091C4013091C501DC01CB01C2\r
+:1034000080279127A227B3278093C2019093C301FD\r
+:10341000A093C401B093C5011F910F910C940415A2\r
+:103420000895CF92DF92EF92FF920F931F93CF9365\r
+:10343000DF938C01C090C601D090C701E090C80115\r
+:10344000F090C9018091C2019091C301A091C40183\r
+:10345000B091C501C82AD92AEA2AFB2ACFE1D0E0D7\r
+:10346000D701C6010C2E04C0B695A79597958795F0\r
+:103470000A94D2F780FF06C0B8018C2F0E9467071C\r
+:10348000019721F4219760F780E001C08C2FDF9134\r
+:10349000CF911F910F91FF90EF90DF90CF90089503\r
+:1034A000CF93DF93EC010E94111ABE010E946707BF\r
+:1034B000DF91CF910895CB010E94501A0895809119\r
+:1034C000CA0185958595859508958091CA01877073\r
+:1034D000089598E0899F90011124262B2093CA011A\r
+:1034E0000C9455192091CA01809582238093CA01BA\r
+:1034F000982F977069F430E0482F552747FD509575\r
+:103500002417350729F08595859585950C947619AE\r
+:1035100008959091CA01977081E009F480E00895C0\r
+:1035200090910C01992321F090910D01911109C006\r
+:1035300020910E0130910F01F90132969FEF40E08A\r
+:103540001FC0982F9695969596959F3050F5E091CF\r
+:103550000E01F0910F01E90FF11D877021E030E0BD\r
+:10356000A90102C0440F551F8A95E2F7CA01918153\r
+:10357000892B818308959F3F39F04F5F4E3041F092\r
+:1035800051915813F8CF0DC05111F7CF942FF5CFAB\r
+:103590009F3F39F0F901E90FF11D97FDFA958283FC\r
+:1035A0000895089590910C01992321F090910D01B7\r
+:1035B000911109C020910E0130910F01F90132964D\r
+:1035C000205F3F4F1FC0982F9695969596959F30F8\r
+:1035D000F0F4E0910E01F0910F01E90FF11D8770F9\r
+:1035E00021E030E0A90102C0440F551F8A95E2F79F\r
+:1035F000CA01809591818923818308953196E217CC\r
+:10360000F30729F090819813F9CF1082F7CF08952E\r
+:1036100081E090E0E0910E01F0910F01E80FF91FB9\r
+:103620001082019680319105A9F708959091DE01ED\r
+:10363000892B8093DE01089580959091DE01892386\r
+:103640008093DE0108951092DE0108959091DD01CE\r
+:10365000892B8093DD01089580959091DD01892368\r
+:103660008093DD0108951092DD0108959091DC01B1\r
+:10367000892B8093DC01089580959091DC0189234A\r
+:103680008093DC0108951092DC0108958093CB01B2\r
+:1036900008951092CB01089580910E0190910F0131\r
+:1036A000FC0131969C01205F3F4F80E09191911188\r
+:1036B0008F5FE217F307D1F70895E0910E01F091C3\r
+:1036C0000F018091DE018083E0910E01F0910F01E6\r
+:1036D00090818091DD01892B8083E0910E01F09132\r
+:1036E0000F0190818091DC01892B80838091CB0137\r
+:1036F000882361F0E0910E01F0910F019081892BF8\r
+:1037000080830E944C1B81111092CB0180910E018D\r
+:1037100090910F010C948B1020E0009739F0AC01D0\r
+:1037200041505109842395232F5FF7CF822F0895AD\r
+:10373000CF92DF92EF92FF926C01EE24FF24C1142E\r
+:10374000D104E104F10421F0C701B60120E101C078\r
+:1037500020E0C72ED82EE92EFF24C114D104E104A5\r
+:10376000F10419F0285FC701B6016B017C0154E038\r
+:10377000F694E794D794C7945A95D1F7C114D1041D\r
+:10378000E104F10419F02C5FC701B6016B017C0163\r
+:1037900042E0F694E794D794C7944A95D1F7C114C0\r
+:1037A000D104E104F10419F02E5FC701B601DC0178\r
+:1037B000CB01B695A79597958795892B8A2B8B2B4F\r
+:1037C00009F02F5F822FFF90EF90DF90CF90089548\r
+:1037D0008091F801843039F11092E00120E488E111\r
+:1037E00090E00FB6F894A895809360000FBE2093E8\r
+:1037F000600080E00E94790983B7817F846083BF85\r
+:1038000083B7816083BF7894889583B78E7F83BFA9\r
+:103810000FB6F894A895809160008861809360004D\r
+:10382000109260000FBE089508950E9452030E94F6\r
+:1038300065030E94141C0E945A0491E0811101C08A\r
+:1038400090E0892F08950E9418150E947F100C9413\r
+:10385000790982E084BD93E095BD9AEF97BD80938E\r
+:103860006E0008952FB7F8948091E1019091E201E4\r
+:10387000A091E301B091E4012FBF0895CF92DF92B0\r
+:10388000EF92FF920F931F932FB7F8944091E101AD\r
+:103890005091E2016091E3017091E4012FBF6A0150\r
+:1038A0007B01EE24FF248C0120E030E0C016D1061D\r
+:1038B000E206F30610F4415051099A01281B390B16\r
+:1038C000C9011F910F91FF90EF90DF90CF90089565\r
+:1038D0001F920F920FB60F9211248F939F93AF9365\r
+:1038E000BF938091E1019091E201A091E301B09139\r
+:1038F000E4010196A11DB11D8093E1019093E201C5\r
+:10390000A093E301B093E401BF91AF919F918F9198\r
+:103910000F900FBE0F901F9018950E947C0DF89489\r
+:103920002FEF87EA91E6215080409040E1F700C0F8\r
+:10393000000087E090EBDC0180930102909302028B\r
+:10394000A0930302B09304029CE088E10FB6F894C0\r
+:10395000A895809360000FBE90936000FFCF0E94F7\r
+:10396000E71C811102C00E94CD1C0E94F21C8093B2\r
+:10397000DF010E94FA1C90E09093F3018093F20122\r
+:1039800087FB882780F980930D010E94F61C682F21\r
+:1039900070E080E090E00C94D8186DEE7EEF80E04F\r
+:1039A00090E00E94432360E082E090E00E94322396\r
+:1039B00060E083E090E00E94322360E084E090E0E9\r
+:1039C0000E94322360E085E090E00C94322380E096\r
+:1039D00090E00E942C2321E08D3E9E4F09F020E0D4\r
+:1039E000822F089582E090E00C94242383E090E0FD\r
+:1039F0000C94242384E090E00C942423682F84E02A\r
+:103A000090E00C9432238091E70180FF0BC060911D\r
+:103A1000130185E0689FB001112475956795759530\r
+:103A200067952BC081FF09C06091130185E0689FF5\r
+:103A3000B00111247595679520C082FF07C0609181\r
+:103A4000130185E0689FB001112417C09091E8012F\r
+:103A50009923D1F060911201961788F720911301F4\r
+:103A600085E0289F90011124929FA001939F500D03\r
+:103A7000112470E0CA010E94F6226038710540F4FA\r
+:103A80006115710539F002C065E070E0862F089578\r
+:103A90008FE7089581E008958091E70180FF08C0D5\r
+:103AA0006091110170E0759567957595679521C0D6\r
+:103AB00081FF06C06091110170E07595679519C08E\r
+:103AC00082FF04C06091110170E010C09091E80184\r
+:103AD0009923C1F0609110019617A0F78091110110\r
+:103AE000899FC001112470E00E94F62260387105A0\r
+:103AF00028F46115710521F0862F08958FE7089548\r
+:103B000081E0089561E070E0F4CF803F21F40E94ED\r
+:103B1000031D819504C0813F29F40E94031D8093F9\r
+:103B2000EB010895823F21F40E94031D819504C09A\r
+:103B3000833F29F40E94031D8093EA010895893F81\r
+:103B400019F40E944C1D05C08A3F31F40E944C1D9F\r
+:103B500081958093EC0108958B3F21F40E944C1DC8\r
+:103B6000819504C08C3F29F40E944C1D8093ED0187\r
+:103B70000895843F21F48091E901816017C0853F59\r
+:103B800021F48091E901826011C0863F21F4809187\r
+:103B9000E90184600BC0873F21F48091E9018860CE\r
+:103BA00005C0883F31F48091E90180618093E9018B\r
+:103BB00008958D3F21F48091E70181600BC08E3F15\r
+:103BC00021F48091E701826005C08F3F29F4809144\r
+:103BD000E70184608093E7010895803F39F4809184\r
+:103BE000EB0187FF6CC01092EB0169C0813F29F4A3\r
+:103BF0008091EB011816BCF362C09091EA01823FFC\r
+:103C000029F497FF5CC01092EA0159C0833F19F470\r
+:103C10001916CCF354C0893F41F48091EC01181679\r
+:103C20000CF04DC01092EC014AC08A3F29F48091FB\r
+:103C3000EC0187FF44C0F6CF8B3F39F48091ED0152\r
+:103C400087FF3DC01092ED013AC08C3F29F480916E\r
+:103C5000ED011816BCF333C0843F21F48091E901D3\r
+:103C60008E7F17C0853F21F48091E9018D7F11C0BF\r
+:103C7000863F21F48091E9018B7F0BC0873F21F4BF\r
+:103C80008091E901877F05C0883F31F48091E90187\r
+:103C90008F7E8093E90113C08D3F21F48091E7016D\r
+:103CA0008E7F0BC08E3F21F48091E7018D7F05C090\r
+:103CB0008F3F29F48091E7018B7F8093E70180910A\r
+:103CC000EA0181110EC08091EB0181110AC080913F\r
+:103CD000EC01811106C08091ED01811102C01092AA\r
+:103CE000E801089589EE91E00E9496100E94321C2E\r
+:103CF0009093E6018093E50108951F93CF93DF939E\r
+:103D00008091E5019091E6010E943E1CAC019091EA\r
+:103D1000E801992321F02091140130E006C02091A0\r
+:103D200015018AE0289F900111244217530708F4D7\r
+:103D300086C08091EA01C091EB01D091EC01109115\r
+:103D4000ED01811107C0C11176C0D11174C01111EC\r
+:103D500072C075C09F3F19F09F5F9093E8011816DD\r
+:103D600024F40E94031D8093EA018091EA0187FFF9\r
+:103D700005C00E94031D81958093EA011C1624F45E\r
+:103D80000E94031D8093EB018091EB0187FF05C02A\r
+:103D90000E94031D81958093EB016091EA016623E7\r
+:103DA00039F1C091EB01CC2319F1772767FD7095AC\r
+:103DB000872F972F0E94FD2123E333E343E35FE343\r
+:103DC0000E9461220E94C5216093EA016C2F77272F\r
+:103DD00067FD7095872F972F0E94FD2123E333E322\r
+:103DE00043E35FE30E9461220E94C5216093EB01DF\r
+:103DF0001D1624F40E944C1D8093EC018091EC016F\r
+:103E000087FF05C00E944C1D81958093EC0111161F\r
+:103E100024F40E944C1D8093ED018091ED0187FFF9\r
+:103E200005C00E944C1D81958093ED01DF91CF91DB\r
+:103E30001F910C94721E9F3F09F08ECF96CFDF9199\r
+:103E4000CF911F910895E9EEF1E085E0DF011D9229\r
+:103E50008A95E9F71092E8011092E70108958330FE\r
+:103E600081F128F4813059F08230D1F00895853005\r
+:103E700009F449C0B8F1863009F456C0089580911C\r
+:103E80001501262F30E0280F311D2F3F310524F476\r
+:103E9000680F6093150108958FEF809315010895C1\r
+:103EA00080911401262F30E0280F311D2F3F31055E\r
+:103EB00024F4680F6093140108958FEF8093140128\r
+:103EC000089580911301262F30E0280F311D2F3FD8\r
+:103ED000310524F4680F6093130108958FEF8093E8\r
+:103EE0001301089580911201262F30E0280F311D13\r
+:103EF0002F3F310524F4680F6093120108958FEF6E\r
+:103F000080931201089580911101262F30E0280F2F\r
+:103F1000311D2F3F310524F4680F6093110108957E\r
+:103F20008FEF80931101089580911001262F30E0CA\r
+:103F3000280F311D2F3F310524F4680F60931001C5\r
+:103F400008958FEF809310010895833011F128F4C4\r
+:103F5000813049F0823091F00895853081F120F16F\r
+:103F60008630C1F1089580911501681720F4861BF1\r
+:103F70008093150108951092150108958091140100\r
+:103F8000681720F4861B8093140108951092140181\r
+:103F9000089580911301681720F4861B8093130104\r
+:103FA000089510921301089580911201681720F46A\r
+:103FB000861B80931201089510921201089580913A\r
+:103FC0001101681720F4861B809311010895109247\r
+:103FD0001101089580911001681720F4861B8093C9\r
+:103FE000100108951092100108950F931F938D31C1\r
+:103FF00009F471C008F045C0803109F485C008F5A6\r
+:10400000873009F46FC068F4863009F0ADC0809144\r
+:10401000DF01817F8E7F8093DF0181E08093EF015C\r
+:10402000A4C08B3009F49EC08E3009F09DC08091F1\r
+:10403000DF0182FB222720F991E0922790FB82F991\r
+:104040006CC0863109F48EC060F4813109F08CC0F7\r
+:104050000E94181590910D0181E0892780930D0130\r
+:1040600081C0893109F47EC08B3109F07DC0809117\r
+:10407000DF0181FB222720F991E0922790FB81F953\r
+:104080004CC0853309F466C048F4873209F462C035\r
+:1040900008F44FC0893209F45DC066C0833438F437\r
+:1040A0008A3308F044C0883309F45CC05DC08334AF\r
+:1040B00009F450C0883409F057C00E9418150FEF5A\r
+:1040C00013ED20E3015010402040E1F700C0000054\r
+:1040D0000E948D1C47C00E947F210E947F100E9479\r
+:1040E000790940C09091DF01892F8095817080FB14\r
+:1040F00090F929F0966098609093DF0136C0997F1F\r
+:10410000977F9093DF012EC08091DF0183FB2227F0\r
+:1041100020F991E0922790FB83F98093DF019923A6\r
+:1041200009F18091DF0181608093DF011BC0895319\r
+:1041300001C08D5141E050E060E070E08A019B01D8\r
+:1041400004C0000F111F221F331F8A95D2F7C90127\r
+:10415000B80104C061E070E080E090E00E94D818EF\r
+:104160000E94181581E001C080E01F910F91089511\r
+:1041700080E0089580E008958E518A3030F4E82F71\r
+:10418000F0E0E65DFE4F8081089580E00895CF93D2\r
+:10419000C82F8091EF01813079F018F08230E9F179\r
+:1041A00086C0E0910E01F0910F018081813169F0AC\r
+:1041B000823209F07EC009C0E0910E01F0910F013A\r
+:1041C0008081813111F0823261F48C2F0E94B820FD\r
+:1041D000811104C08C2F0E94F51F1DC081E090E06A\r
+:1041E0001AC08C2F0E94BA20811114C0C43179F0FA\r
+:1041F00048F4CB3079F0C03109F05FC082E08093A1\r
+:10420000EF0108C0C93219F0C83321F056C010922E\r
+:10421000EF0153C081E0817052C0C93281F110F5C5\r
+:10422000C43169F1A8F4C73009F045C08AE0809331\r
+:10423000150194E19093140193E0909313018093FE\r
+:10424000120188E08093110188E28093100133C04D\r
+:1042500082EE8C0F863078F58C2F0E94BC208093E4\r
+:10426000EE0129C0CE34E9F020F4CB3421F56AE028\r
+:1042700013C0C13579F0C235F1F461E00DC0809111\r
+:10428000EE01882319F01092EE0115C081E08093B1\r
+:10429000EF0115C061E006C08091EE010E942F1F62\r
+:1042A0000AC06AE08091EE010E94A51F04C010922E\r
+:1042B000EF0180E004C081E002C080E0ACCFCF918C\r
+:1042C0000895E1E8F0E080818860808380818160EA\r
+:1042D00080838FB7F89493E09093890090ED90934A\r
+:1042E00088008FBF0895EFE6F0E0808182608083D0\r
+:1042F0000895EFE6F0E080818D7F80830895EFE6FA\r
+:10430000F0E0908182E08927808308951F920F92C8\r
+:104310000FB60F9211242F933F934F935F936F9398\r
+:104320007F938F939F93AF93BF93EF93FF9380916E\r
+:10433000F0019091F10101969093F1018093F001C9\r
+:10434000811103C082E00E947909E091F101E695B4\r
+:10435000E695F0E0EB54FB4FE4918091F0018E1371\r
+:1043600003C080E00E947909FF91EF91BF91AF9166\r
+:104370009F918F917F916F915F914F913F912F917D\r
+:104380000F900FBE0F901F9018950E94CC2168943B\r
+:10439000B1110C945B2208950E94402288F09F572F\r
+:1043A00098F0B92F9927B751B0F0E1F0660F771F59\r
+:1043B000881F991F1AF0BA95C9F714C0B13091F04F\r
+:1043C0000E945A22B1E008950C945A22672F782F48\r
+:1043D0008827B85F39F0B93FCCF386957795679514\r
+:1043E000B395D9F73EF490958095709561957F4F80\r
+:1043F0008F4F9F4F0895E89409C097FB3EF4909526\r
+:104400008095709561957F4F8F4F9F4F9923A9F0AD\r
+:10441000F92F96E9BB279395F6958795779567953C\r
+:10442000B795F111F8CFFAF4BB0F11F460FF1BC080\r
+:104430006F5F7F4F8F4F9F4F16C0882311F096E913\r
+:1044400011C0772321F09EE8872F762F05C06623C1\r
+:1044500071F096E8862F70E060E02AF09A95660F7A\r
+:10446000771F881FDAF7880F9695879597F9089533\r
+:1044700057FD9058440F551F59F05F3F71F0479515\r
+:10448000880F97FB991F61F09F3F79F087950895FA\r
+:10449000121613061406551FF2CF4695F1DF08C019\r
+:1044A000161617061806991FF1CF86957105610536\r
+:1044B00008940895E894BB2766277727CB0197F9DE\r
+:1044C00008950E9474220C94E5220E94D72238F0AD\r
+:1044D0000E94DE2220F0952311F00C94CE220C9441\r
+:1044E000D42211240C945B220E94382270F3959FF1\r
+:1044F000C1F3950F50E0551F629FF001729FBB27DB\r
+:10450000F00DB11D639FAA27F00DB11DAA1F649F76\r
+:104510006627B00DA11D661F829F2227B00DA11D29\r
+:10452000621F739FB00DA11D621F839FA00D611DAF\r
+:10453000221F749F3327A00D611D231F849F600DD0\r
+:10454000211D822F762F6A2F11249F5750409AF0F9\r
+:10455000F1F088234AF0EE0FFF1FBB1F661F771F85\r
+:10456000881F91505040A9F79E3F510580F00C9450\r
+:10457000CE220C945B225F3FE4F3983ED4F3869501\r
+:1045800077956795B795F795E7959F5FC1F7FE2BF0\r
+:10459000880F911D9695879597F9089597F99F67CC\r
+:1045A00080E870E060E008959FEF80EC08950024BB\r
+:1045B0000A941616170618060906089500240A9488\r
+:1045C00012161306140605060895092E0394000C0E\r
+:1045D00011F4882352F0BB0F40F4BF2B11F460FF9D\r
+:1045E00004C06F5F7F4F8F4F9F4F089597FB072E3B\r
+:1045F00016F4009407D077FD09D00E94102307FC21\r
+:1046000005D03EF4909581959F4F089570956195E2\r
+:104610007F4F0895EE0FFF1F0590F491E02D099450\r
+:10462000AA1BBB1B51E107C0AA1FBB1FA617B707D8\r
+:1046300010F0A61BB70B881F991F5A95A9F78095F4\r
+:104640009095BC01CD010895F999FECF92BD81BD31\r
+:10465000F89A992780B50895A8E1B0E042E050E0CB\r
+:104660000C944B23262FF999FECF92BD81BDF89A69\r
+:10467000019700B4021631F020BD0FB6F894FA9AF3\r
+:10468000F99A0FBE08950196272F0E9433230C94A8\r
+:104690003223DC01CB01FC01F999FECF06C0F2BD4B\r
+:1046A000E1BDF89A319600B40D9241505040B8F7F0\r
+:0646B0000895F894FFCF0D\r
+:1046B60002207B09090AE609B2097E090101CC013B\r
+:1046C60028080A03140A404D363975042804F203F3\r
+:1046D600B9034C0365037E03970301020304050631\r
+:0446E60007080900B8\r
+:00000001FF\r
diff --git a/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c b/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c
new file mode 100644 (file)
index 0000000..d1c7791
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  |CMD+{ |           | CMD+}|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  | Hyper|           |  Meh |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  LGui  |
+ * |--------+------+------+------+------+------| LGui |           | LGui |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Del  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   LGUI(LSFT(KC_LBRC)),
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   ALL_T(KC_NO),
+        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             LGUI(LSFT(KC_RBRC)),   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             MEH_T(KC_NO),          KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                                    KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOT,
+             KC_LGUI,               KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                                            KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_DELT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/tm2030/keymap.c b/keyboards/ergodox/keymaps/tm2030/keymap.c
new file mode 100644 (file)
index 0000000..1d861ee
--- /dev/null
@@ -0,0 +1,242 @@
+/* TypeMatrix-2030-like keymap  */
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "led.h"
+
+#define BASE 0 // default layer
+#define DVRK 1 // Dvorak layer
+#define NUMR 8 // numeric layer
+#define FNLR 9 // fn layer
+
+#define MDBL0 1
+#define MFNLR 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   ]    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |Backsp|           |Backsp|   Y  |   U  |   I  |   O  |   P  |   [    |
+ * |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
+ * | LShift |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | '/Shift|
+ * |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | \/Shift|
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   -  | Home |   =  |End/Ctl|
+ *   `-----------------------------------'                                      `-----------------------------------'
+ *                                       ,--------------.       ,-------------.
+ *                                       |Esc/Alt| num  |       | Left |Right |
+ *                                ,------+-------+------|       |------+------+------.
+ *                                |      |       | PgUp |       |  Up  |      |      |
+ *                                |Space |LShift |------|       |------|RShift|Space |
+ *                                |      |       | PgDn |       | Down |      |      |
+ *                                `---------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_DELT,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_BSPC,
+        KC_LSFT,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_ENT,
+        KC_LCTL,        M(MFNLR),     KC_LGUI,KC_MPLY,ALT_T(KC_APP),
+
+                                              ALT_T(KC_ESC),  TG(NUMR),
+                                                              KC_PGUP,
+                                            KC_SPC, KC_LSFT,  KC_PGDN,
+
+        // right hand
+             KC_DELT,     KC_6,   KC_7,    KC_8,    KC_9,    KC_0,     KC_RBRC,
+             KC_BSPC,     KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,     KC_LBRC,
+                          KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN,  SFT_T(KC_QUOT),
+             KC_ENT,      KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH,  SFT_T(KC_BSLS),
+                                  KC_RALT, KC_MINS, KC_HOME, KC_EQL,   CTL_T(KC_END),
+
+             KC_LEFT, KC_RGHT,
+             KC_UP,
+             KC_DOWN, KC_RSFT,  KC_SPC
+    ),
+/* Dvorak layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   '  |   ,  |   .  |   P  |   Y  |Backsp|           |Backsp|   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
+ * | LShift |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  | -/Shift|
+ * |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
+ * | LShift |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | \/Shift|
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   [  | Home |   ]  |End/Ctl|
+ *   `-----------------------------------'                                      `-----------------------------------'
+ *                                       ,--------------.       ,-------------.
+ *                                       |Esc/Alt| num  |       | Left |Right |
+ *                                ,------+-------+------|       |------+------+------.
+ *                                |      |       | PgUp |       |  Up  |      |      |
+ *                                |Space |LShift |------|       |------|RShift|Space |
+ *                                |      |       | PgDn |       | Down |      |      |
+ *                                `---------------------'       `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[DVRK] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,   KC_1,      KC_2,    KC_3,    KC_4,   KC_5,   KC_DELT,
+        KC_TAB,   KC_QUOT,   KC_COMM, KC_DOT,  KC_P,   KC_Y,   KC_BSPC,
+        KC_LSFT,  KC_A,      KC_O,    KC_E,    KC_U,   KC_I,
+        KC_LSFT,  KC_SCLN,   KC_Q,    KC_J,    KC_K,   KC_X,   KC_ENT,
+        KC_LCTL,  M(MFNLR),  KC_LGUI, KC_MPLY, ALT_T(KC_APP),
+
+                                              ALT_T(KC_ESC),  TG(NUMR),
+                                                              KC_PGUP,
+                                            KC_SPC, KC_LSFT,  KC_PGDN,
+
+        // right hand
+             KC_DELT,     KC_6,   KC_7,    KC_8,    KC_9,    KC_0,     KC_EQL,
+             KC_BSPC,     KC_F,   KC_G,    KC_C,    KC_R,    KC_L,     KC_SLSH,
+                          KC_D,   KC_H,    KC_T,    KC_N,    KC_S,     SFT_T(KC_MINS),
+             KC_ENT,      KC_B,   KC_M,    KC_W,    KC_V,    KC_Z,     SFT_T(KC_BSLS),
+                                  KC_RALT, KC_LBRC, KC_HOME, KC_RBRC,  CTL_T(KC_END),
+
+             KC_LEFT, KC_RGHT,
+             KC_UP,
+             KC_DOWN, KC_RSFT,  KC_SPC
+    ),
+/* Numeric Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
+ *   `----------------------------------'                                       `-----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |n.lock|c.lock|
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[NUMR] = KEYMAP(
+       // left hand
+       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
+       KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_TRNS,
+       KC_TRNS, KC_F11,  KC_F12,  KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                                               KC_TRNS, KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,   KC_TAB,  KC_PSLS, KC_PAST, KC_PMNS,
+       KC_TRNS, KC_TRNS, KC_HOME, KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
+                KC_UP,   KC_END,  KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+       KC_LEFT, KC_DOWN, KC_RGHT, KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+                         KC_TRNS, KC_P0,   M(MDBL0),KC_PDOT, CTL_T(KC_PENT),
+
+       KC_NLCK, KC_CAPS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* fn layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       | Next |      |      |
+ *                                 | Mute |      |------|       |------|      |      |
+ *                                 |      |      |      |       | Prev |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[FNLR] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_INS,
+       KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_VOLU,
+       KC_TRNS, KC_TRNS, KC_TRNS,      KC_CALC,     KC_MAIL,      KC_WHOM,
+       KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD,
+       KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,
+
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_MUTE, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_INS,   KC_EJCT, KC_PWR,  KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+       KC_TRNS, KC_TRNS,
+       KC_MPRV,
+       KC_MNXT, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+    switch(id) {
+        case MDBL0:
+            if (record->event.pressed) {
+              return MACRO( I(25), T(P0), T(P0), END );
+            }
+        break;
+        case MFNLR:
+            layer_invert(NUMR);
+            layer_invert(FNLR);
+            break;
+    }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    // led 1: numeric layer
+    if (layer_state & (1 << NUMR)) {
+        ergodox_right_led_1_on();
+    }
+    // led 2: Dvorak layer
+    if (default_layer_state == 1 << DVRK) {
+        ergodox_right_led_2_on();
+    }
+    // led 3: caps lock
+    if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+      ergodox_right_led_3_on();
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/tm2030/readme.md b/keyboards/ergodox/keymaps/tm2030/readme.md
new file mode 100644 (file)
index 0000000..6cd7947
--- /dev/null
@@ -0,0 +1,136 @@
+# TypeMatrix™ 2030 inspired layout
+
+This is a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ. The _TypeMatrix_ is a nice small ergonomic keyboard with a matrix layout, and it provides several nice features like `enter`, `backspace` and `delete` at the center, bigger `shift` keys and international `cut`, `copy` and `paste` keys.
+
+The idea in this ErgoDox layout is to make it is as close as possible to the TM2030, such that it would be easy to switch between the TM and the ErgoDox. No _fancy_ features have been implemented, as this is intended to be a base for further customization if desired. Some keys have been duplicated in order to accomodate for most people.
+
+Most of the TM2030 features are supported except
+* automatic window switching (alt-tab key, at the left of the space key)
+* show desktop key (at the right of the space key)
+* 102/106 modes
+
+Dvorak mode is even supported by pressing [`Magic`](/TMK_readme.md#magic-commands)+`1` (`Magic` is by default `LShift`+`RShift`)
+
+Some keys had to be moved around to fit into the ErgoDox, especially the `F1`-`F12` keys and the arrow keys.
+
+## Base Layer
+This is the default layer, close to the TM with the following differences:
+
+ - Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere.
+ - Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`.
+ - `shuffle` and `desktop` are not supported.
+ - `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination).
+ - `right-ctrl` is moved on `End`.
+ - `]` is moved in place of the dash (`-`).
+ - Dash (`-`) and `=` are moved on bottom right row.
+ - Arrows and `PgUp`/`PgDn` are moved on the thumbs.
+
+```
+,--------------------------------------------------.           ,--------------------------------------------------.
+|   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   ]    |
+|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+| Tab    |   Q  |   W  |   E  |   R  |   T  |Backsp|           |Backsp|   Y  |   U  |   I  |   O  |   P  |   [    |
+|--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
+| LShift |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | '/Shift|
+|--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
+| LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | \/Shift|
+`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+  |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   -  | Home |   =  |End/Ctl|
+  `-----------------------------------'                                      `-----------------------------------'
+                                      ,--------------.       ,-------------.
+                                      |Esc/Alt| num  |       | Left |Right |
+                               ,------+-------+------|       |------+------+------.
+                               |      |       | PgUp |       |  Up  |      |      |
+                               |Space |LShift |------|       |------|RShift|Space |
+                               |      |       | PgDn |       | Down |      |      |
+                               `---------------------'       `--------------------'
+```
+
+### Layer Switching
+- Use `num` to toggle the Numeric Layer.
+- Hold `fn` to temporarily activate the Numeric & Fn Layers.
+
+As on the original TM 2030, when `num` layer is activated, holding `fn` disables it but enables the other `fn` keys.
+
+## Dvorak Layer
+Same as Layer 0 but with _Dvorak_ layout, to use with QWERTY OS layout.
+
+Enable Dvorak layout with [`Magic`](/TMK_readme.md#magic-commands)+`1` (`LShift`+`RShift`+`1`), disable with `Magic`-`0`.
+
+The middle (green) led indicates when the Dvorak layer is activated.
+
+    ,--------------------------------------------------.           ,--------------------------------------------------.
+    |   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   =    |
+    |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+    | Tab    |   '  |   ,  |   .  |   P  |   Y  |Backsp|           |Backsp|   F  |   G  |   C  |   R  |   L  |   /    |
+    |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
+    | LShift |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  | -/Shift|
+    |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
+    | LShift |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | \/Shift|
+    `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+      |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   [  | Home |   ]  |End/Ctl|
+      `-----------------------------------'                                      `-----------------------------------'
+                                          ,--------------.       ,-------------.
+                                          |Esc/Alt| num  |       | Left |Right |
+                                   ,------+-------+------|       |------+------+------.
+                                   |      |       | PgUp |       |  Up  |      |      |
+                                   |Space |LShift |------|       |------|RShift|Space |
+                                   |      |       | PgDn |       | Down |      |      |
+                                   `---------------------'       `--------------------'
+
+## Numeric Layer
+Numeric layer close to the TM when toggling `num`, with the following differences:
+
+- Numpad is displaced by 1 to the top left.
+- Arrows are displaced by 1 to the left.
+- Provides access to `F1`-`F12`, `caps-lock` and `num-lock`.
+
+The numeric layer is indicated with the left (red) led. Caps-lock is indicated with the right (blue) led.
+
+    ,--------------------------------------------------.           ,--------------------------------------------------.
+    |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
+    |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+    |        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
+    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+    |        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
+    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+    |        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
+    `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+      |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
+      `----------------------------------'                                       `-----------------------------------'
+                                           ,-------------.       ,-------------.
+                                           |      |      |       |n.lock|c.lock|
+                                    ,------|------|------|       |------+------+------.
+                                    |      |      |      |       |      |      |      |
+                                    |      |      |------|       |------|      |      |
+                                    |      |      |      |       |      |      |      |
+                                    `--------------------'       `--------------------'
+
+## Fn Layer
+Activated simultaneously with the Numeric layer when holding the `fn` key. As on the TM, it provides access to the following features:
+- `cut`, `copy` and `paste`
+- `volume up`, `volume down` and `mute` — as opposed to the TM, these are only on left hand
+- `previous track` and `next track`
+- `calculator`, `mail` and `browser home`
+- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` and `pause`
+
+Note: the `eject` key does not work due to jackhumbert/qmk_firmware#82
+
+    ,--------------------------------------------------.           ,--------------------------------------------------.
+    |        |      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
+    |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+    |        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
+    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+    |        |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
+    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+    |        |      | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
+    `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+      |      |      |      |      |      |                                       |      |      |      |      |      |
+      `----------------------------------'                                       `----------------------------------'
+                                           ,-------------.       ,-------------.
+                                           |      |      |       |      |      |
+                                    ,------|------|------|       |------+------+------.
+                                    |      |      |      |       | Next |      |      |
+                                    | Mute |      |------|       |------|      |      |
+                                    |      |      |      |       | Prev |      |      |
+                                    `--------------------'       `--------------------'
diff --git a/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c b/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c
new file mode 100644 (file)
index 0000000..2a15fcb
--- /dev/null
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Esc    |   1  |   2  |   3  |   4  |   5  |   =  |           |   -  |   6  |   7  |   8  |   9  |   0  |  Enter |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '"   |
+ * |--------+------+------+------+------+------| LGui |           | LGui |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |  L1  |   `  |  {   |   }  |  '"  |                                       | Left |  Up  | Down | Right|  L2  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |  Del | Alt  |       | Alt  | Ctrl |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
+        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
+        TG(SYMB),       KC_GRV,       KC_LBRC,        KC_RBRC,KC_QUOT,
+                                                      KC_DELT,KC_LALT,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_MINS,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_ENT,
+             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          KC_QUOT,
+             KC_LGUI,     KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
+                                  KC_LEFT,KC_UP,  KC_DOWN,KC_RIGHT,          TG(MDIA),
+             KC_RALT,     KC_RCTL,
+             KC_PGUP,
+             KC_PGDN,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          register_code(KC_RSFT);
+        } else {
+          unregister_code(KC_RSFT);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/tonyabra_osx/readme.md b/keyboards/ergodox/keymaps/tonyabra_osx/readme.md
new file mode 100644 (file)
index 0000000..f9d76ef
--- /dev/null
@@ -0,0 +1,5 @@
+# ErgoDox EZ OS X Simplified Configuration
+
+This keyboard configuration replaces the hyper and meh keys with the command key. It also removes all of the meta keys that require a "hold" because I found that I hesitate when I type, which can accidentally fire those combinations. On the upper left of the left hand, I mimicked the Mac placement of tab and escape, and on the upper right of the right hand, I placed an additional enter key for convenience when breezing through prompts.
+
+This is my standard working configuration for now, but I can see myself tweaking it as I use it more. I highly recommend you do the same.
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/townk_osx/config.h b/keyboards/ergodox/keymaps/townk_osx/config.h
new file mode 100644 (file)
index 0000000..72d3e96
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "../../config.h"
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+//#define DEBUG_MATRIX_SCAN_RATE
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 3000
+
+#endif
diff --git a/keyboards/ergodox/keymaps/townk_osx/keymap.c b/keyboards/ergodox/keymaps/townk_osx/keymap.c
new file mode 100644 (file)
index 0000000..5043d49
--- /dev/null
@@ -0,0 +1,285 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+#include "led.h"
+#include "keymap.h"
+#include "timer.h"
+
+/*
+
+# Why this Layout
+
+This layout was based on Kinesis layout and other ErgoDox user layouts
+available. It's target to be used on a MacOS but I'm pretty sure it can be
+addapted to Windows and/or Linux easily.
+
+## Function Key
+
+The `fn` key work almost like it would in any other keyboard with the exception
+it has a semi-sticky behavior. What does that mean?
+
+Well, if you press the `fn` and release it, the keyboard will be put on the
+_function layout_ and the next key stroke will be processed as if the `fn` key
+was pressed. Aftwards, the leyout get back to _normal_. If you hold `fn` and
+press any other key, when you release them, the keyboard leyout is back to
+_normal_.
+
+While pressing the `fn` with the left hand and strikeing the other keys on the
+right hand is farly easy, the same cannot being said for the other keys on the
+left side. So, instead of trying to do contorcionism with my left hand, I
+decided to do a semi-sticky version of `fn`. This way, I can press the  `fn`
+key with my pinky, release it and press the `1` key to issue an `F1` to the
+operating system.
+
+## Key-Pad Key
+
+The `key pad` key is a layout switch key. If pressed, it will put the keyboard
+on the _key pad layout_ and stay there until key is pressed again.
+
+This is used to make the keyboard behave mostly like a **num pad keyboard**.
+
+## Notes
+- Regardless in which layout you are, keys from other layouts are not
+  accessible. This means that if you are on the _key pad layout_, the left hand
+  will be pretty much unusable.
+  Of course that like anything else, there are exceptions to this rule.
+  Modifiers should remain accessible throughout the layers.
+- The _shift key_ is, like the _function key_, also configured to have a sticky
+  behavior.
+- All sticky keys have a timeout of 3 seconds.
+
+*/
+#define BASE   0
+#define KEYPAD 1
+#define FN     2
+
+#define MACRO_TMUX_ESC        10
+#define MACRO_TMUX_PASTE      11
+#define MACRO_OSX_COPY        12
+#define MACRO_OSX_PASTE       13
+
+#define M_TESC   M(MACRO_TMUX_ESC)
+#define M_TPASTE M(MACRO_TMUX_PASTE)
+#define M_OSXCPY M(MACRO_OSX_COPY)
+#define M_OSXPST M(MACRO_OSX_PASTE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Base Layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |        `~ |   1  |   2  |   3  |   4  |   5  | ESC  |           | Pwr  |   6  |   7  |   8  |   9  |   0  | - _       |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * | Tab       |   Q  |   W  |   E  |   R  |   T  | F16  |           | F17  |   Y  |   U  |   I  |   O  |   P  | = +       |
+ * |-----------+------+------+------+------+------| Meh  |           | Meh  |------+------+------+------+------+-----------|
+ * | \ (Ctrl)  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | ' " (Ctrl)|
+ * |-----------+------+------+------+------+------| F18  |           | F19  |------+------+------+------+------+-----------|
+ * |  LShift   |   Z  |   X  |   C  |   V  |   B  | Hyper|           | Hyper|   N  |   M  |   ,  |   .  |   /  |   RShift  |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *     | FN    | KPAD |LCtrl | LAlt | LGui |                                       | RGui | RAlt | RCtrl| KPAD |    FN |
+ *     `-----------------------------------'                                       `-----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         | M(0) | M(1) |           | M(2) | M(3) |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      | Home |           | PgUp |      |      |
+ *                                  |Backsp| Del  |------|           |------| Enter| Space|
+ *                                  |      |      | End  |           | PgDn |      |      |
+ *                                  `--------------------'           `--------------------'
+ *
+ * M(0) = Ctrk+A Esc
+ *        (this is used to issue the Esc key to the Tmux application)
+ * M(1) = Ctrk+A P
+ *        (this is used to issue the Paste key to the Tmux application)
+ * M(2) = Cmd+C
+ * M(3) = Cmd+V
+ */
+[BASE]=KEYMAP(//left half
+              KC_GRV,         KC_1,       KC_2,     KC_3,           KC_4,       KC_5,     KC_ESC,
+              KC_TAB,         KC_Q,       KC_W,     KC_E,           KC_R,       KC_T,     MEH_T(KC_F16),
+              CTL_T(KC_BSLS), KC_A,       KC_S,     KC_D,           KC_F,       KC_G,
+              KC_FN2,         KC_Z,       KC_X,     KC_C,           KC_V,       KC_B,     ALL_T(KC_F18),
+              KC_FN1,         TG(KEYPAD), KC_LCTRL, KC_LALT,        KC_LGUI,
+                                                                                M_TESC,   M_TPASTE,
+                                                                                          KC_HOME,
+                                                                    KC_BSPC,    KC_DELT,  KC_END,
+              //right half
+              KC_POWER,       KC_6,       KC_7,     KC_8,           KC_9,       KC_0,     KC_MINS,
+              MEH_T(KC_F17),  KC_Y,       KC_U,     KC_I,           KC_O,       KC_P,     KC_EQL,
+                              KC_H,       KC_J,     KC_K,           KC_L,       KC_SCLN,  CTL_T(KC_QUOT),
+              ALL_T(KC_F19),  KC_N,       KC_M,     KC_COMM,        KC_DOT,     KC_SLSH,  KC_FN2,
+                              KC_RGUI,    KC_RALT,  CTL_T(KC_LBRC), KC_FN3,     KC_FN1,
+              M_OSXCPY,       M_OSXPST,
+              KC_PGUP,
+              KC_PGDN,        KC_ENT,     KC_SPC),
+
+/* Keymap 1: KeyPad Layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |      | LClk | RClk | MClk |      |      |           | BTab | Clear|   /  |   *  |   ^  |   (  |           |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * | M.Accel 2 |      |ScrlUp|  U   |ScrlDn|      |      |           | Tab  |   7  |   8  |   9  |   +  |   )  |           |
+ * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
+ * | M.Accel 1 |      |   L  |  D   |  R   |      |------|           |------|   4  |   5  |   6  |   -  |      |           |
+ * |-----------+------+------+------+------+------|      |           |Return|------+------+------+------+------+-----------|
+ * | M.Accel 0 |      |ScrlL |      |ScrlR |      |      |           |      |   1  |   2  |   3  |   =  |      |           |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *     |       | XXXX |      |      |      |                                       |   0  |   .  |   ,  | XXXX |       |
+ *     `-----------------------------------'                                       `-----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         |      |      |           |      |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |      |           |      | XXXX |      |
+ *                                  |      |      |------|           |------| XXXX |      |
+ *                                  |      |      |      |           |      | XXXX |      |
+ *                                  `--------------------'           `--------------------'
+ */
+[KEYPAD]=KEYMAP(//left half
+                KC_NO,        KC_NO,    KC_MS_BTN1,    KC_MS_BTN2,     KC_MS_BTN3,     KC_NO,   KC_NO,
+                KC_MS_ACCEL2, KC_NO,    KC_MS_WH_UP,   KC_MS_U,        KC_MS_WH_DOWN,  KC_NO,   KC_NO,
+                KC_MS_ACCEL1, KC_NO,    KC_MS_L,       KC_MS_D,        KC_MS_R,        KC_NO,
+                KC_MS_ACCEL0, KC_NO,    KC_MS_WH_LEFT, KC_NO,          KC_MS_WH_RIGHT, KC_NO,   KC_NO,
+                KC_NO,        KC_TRNS,  KC_NO,         KC_NO,          KC_NO,
+                                                                                       KC_NO,   KC_NO,
+                                                                                                KC_NO,
+                                                                       KC_NO,          KC_NO,   KC_NO,
+                //right half
+                LSFT(KC_TAB), KC_CLEAR, KC_KP_SLASH,   KC_KP_ASTERISK, KC_CIRCUMFLEX,  KC_LPRN, KC_NO,
+                KC_TAB,       KC_KP_7,  KC_KP_8,       KC_KP_9,        KC_KP_PLUS,     KC_RPRN, KC_NO,
+                              KC_KP_4,  KC_KP_5,       KC_KP_6,        KC_KP_MINUS,    KC_NO,   KC_NO,
+                KC_KP_ENTER,  KC_KP_1,  KC_KP_2,       KC_KP_3,        KC_KP_EQUAL,    KC_NO,   KC_NO,
+                                        KC_KP_0,       KC_KP_DOT,      KC_KP_COMMA,    KC_TRNS, KC_NO,
+                KC_NO,        KC_NO,
+                KC_NO,
+                KC_NO,        KC_TRNS,  KC_NO),
+
+/* Keymap 2: Functions Layer
+ *
+ * ,-----------------------------------------------------.           ,-----------------------------------------------------.
+ * |           |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |  Vol. Up  |
+ * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
+ * |           | Stop |  Rw  |  Rec |  FF  |      | XXXX |           | XXXX |      |      |      |      |      | Vol. Down |
+ * |-----------+------+------+------+------+------| XXXX |           | XXXX |------+------+------+------+------+-----------|
+ * |  CapsLock | Eject| Prev | Play | Next |      |------|           |------| Left | Down |  Up  | Right|      |   Mute    |
+ * |-----------+------+------+------+------+------| XXXX |           | XXXX |------+------+------+------+------+-----------|
+ * |  L Shift  |      |      |      |      |      | XXXX |           | XXXX |      |      |      |      |      |  R Shift  |
+ * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
+ *     | XXXXX |      | XXXX | XXXX | XXXX |                                       | XXXX | XXXX | XXXX |      | XXXXX |
+ *     `-----------------------------------'                                       `-----------------------------------'
+ *                                         ,-------------.           ,-------------.
+ *                                         |      |      |           |      |      |
+ *                                  ,------|------|------|           |------+------+------.
+ *                                  |      |      |      |           |      |      |      |
+ *                                  |      |      |------|           |------|      |      |
+ *                                  |      |      |      |           |      |      |      |
+ *                                  `--------------------'           `--------------------'
+ *
+ * XXX = These keys are transparent keys that, when pressed, they issue the key from the previous layer.
+ */
+[FN]=KEYMAP(//left half
+            KC_NO,   KC_F1,          KC_F2,               KC_F3,               KC_F4,                 KC_F5,  KC_F6,
+            KC_NO,   KC_MEDIA_STOP,  KC_MEDIA_REWIND,     KC_MEDIA_SELECT,     KC_MEDIA_FAST_FORWARD, KC_NO,  KC_TRNS,
+            KC_CAPS, KC_MEDIA_EJECT, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK,   KC_NO,
+            KC_LSFT, KC_NO,          KC_NO,               KC_NO,               KC_NO,                 KC_NO,  KC_TRNS,
+            KC_TRNS, KC_NO,          KC_TRNS,             KC_TRNS,             KC_TRNS,
+                                                                                                      KC_NO,  KC_NO,
+                                                                                                              KC_NO,
+                                                                               KC_NO,                 KC_NO,  KC_NO,
+            //right half
+            KC_F7,   KC_F8,          KC_F9,               KC_F10,              KC_F11,                KC_F12, KC_VOLU,
+            KC_TRNS, KC_NO,          KC_NO,               KC_NO,               KC_NO,                 KC_NO,  KC_VOLD,
+                     KC_LEFT,        KC_DOWN,             KC_UP,               KC_RIGHT,              KC_NO,  KC_MUTE,
+            KC_TRNS, KC_NO,          KC_NO,               KC_NO,               KC_NO,                 KC_NO,  KC_RSFT,
+                                     KC_TRNS,             KC_TRNS,             KC_TRNS,               KC_NO,  KC_TRNS,
+            KC_NO,   KC_NO,
+            KC_NO,
+            KC_NO,   KC_NO,          KC_NO)};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [1] = ACTION_LAYER_ONESHOT(FN),
+  [2] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+  [3] = ACTION_LAYER_TAP_KEY(KEYPAD, KC_RBRC),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  // MACRODOWN only works in this function
+  switch(id) {
+    case MACRO_TMUX_ESC:
+      if (record->event.pressed) {
+        return MACRO(D(LCTRL), T(A), U(LCTRL), D(ESC), END);
+      }
+      return MACRO(U(ESC), END);
+    case MACRO_TMUX_PASTE:
+      if (record->event.pressed) {
+        return MACRO(D(LCTRL), T(A), U(LCTRL), D(P), END);
+      }
+      return MACRO(U(P), END);
+    case MACRO_OSX_COPY:
+      if (record->event.pressed) {
+        return MACRO(D(LGUI), D(C), END);
+      }
+      return MACRO(U(C), U(LGUI), END);
+    case MACRO_OSX_PASTE:
+      if (record->event.pressed) {
+        return MACRO(D(LGUI), D(V), END);
+      }
+      return MACRO(U(V), U(LGUI), END);
+  }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+uint8_t current_layer = BASE;
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+
+  ergodox_led_all_off();
+  ergodox_led_all_set(LED_BRIGHTNESS_LO);
+
+  switch (layer) {
+  case BASE:
+    current_layer = BASE;
+    break;
+  case KEYPAD:
+    current_layer = KEYPAD;
+    break;
+  default:
+    // none
+    break;
+  }
+
+  // layer leds
+  if (current_layer == KEYPAD) {
+    ergodox_right_led_3_on();
+  }
+
+  // capslock
+  if (host_keyboard_leds() & (3<<USB_LED_CAPS_LOCK)) {
+    ergodox_right_led_1_on();
+  }
+
+  // Temporary leds
+
+  // The function layer takes over other layers and we need to reflect that on the leds.
+  // If the current layer is the BASE, we simply turn on the FN led, but if the current
+  // layer is the KEYPAD, than we must turn it off before turning on the FN led.
+  if (layer == FN && !has_oneshot_layer_timed_out()) {
+    ergodox_right_led_3_off();
+    ergodox_right_led_2_on();
+  }
+
+  // if the shifted is pressed I show the case led in a brighter color. This is nice to
+  // differenciate the shift from the capslock.
+  // Notice that I make sure that we're not using the shift on a chord shortcut (pressing
+  // shift togather with other modifiers).
+  if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) &&                                 // is shift pressed and there is no other
+      !(keyboard_report->mods & (~MOD_BIT(KC_LSFT) & ~MOD_BIT(KC_RSFT)))) ||                           //    modifier being pressed as well
+     (get_oneshot_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && !has_oneshot_mods_timed_out())) {  // or the one shot shift didn't timed out
+    ergodox_right_led_1_set(LED_BRIGHTNESS_HI);
+    ergodox_right_led_1_on();
+  }
+};
diff --git a/keyboards/ergodox/keymaps/townk_osx/makefile.mk b/keyboards/ergodox/keymaps/townk_osx/makefile.mk
new file mode 100644 (file)
index 0000000..c06021b
--- /dev/null
@@ -0,0 +1,2 @@
+# I don't want my keyboard blinking lights when is suppose to be asleep.
+SLEEP_LED_ENABLE = no
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/townk_osx/readme.md b/keyboards/ergodox/keymaps/townk_osx/readme.md
new file mode 100644 (file)
index 0000000..c2853ca
--- /dev/null
@@ -0,0 +1,77 @@
+# Townk's Keymap
+
+Trying to take care of an enjury on my arm I borrow an ergonomic keyboard from
+a frient ([Kinesis Advantage](http://www.kinesis-ergo.com/shop/advantage-pro-for-pc-mac/)).
+
+I really enjoyed my time with it but there were some anoyancies:
+
+* The curvature on the keys bothered me since I'm a Vim user and using the
+  motion keys on my editor was awkard.
+* I had to spend too much time remapping the keyboard to make some symbol keys
+  more accessible to me.
+* The fact that my hands had to stay close to each other was a bit stressfull
+  to my sholders.
+
+After a long research I find out that Ergodox EZ would be perfect for my needs
+and purchase one. Before the keyboard even got in my hands I started to think
+on the layout I would use on it and soon enough I planed couple adjustments
+from the Kinesis I was using so far.
+
+## The layout
+
+Here are the layout mapping in images so you can have a glimpse on it:
+
+![Base Layout](townk_osx_base.png)
+![fn Layout](townk_osx_fn.png)
+![Keypad & Mouse Layout](townk_osx_keypad.png)
+
+Notice that, differently from the default behavior, my layer keys are not transparent
+by default, which means that if you press any non-labeled white key, nothing will be
+handled to the OS.
+
+### One shot keys
+
+It all started with the access to the function keys (F1, F2, F3...), since
+those keys are located on a different layer I needed a way to press them with
+minimal effort without disrupting my flow.
+
+For me, togglihg a layer to press a button and than toggle it back is a waste
+of time (although I admit it's a single tap from what I have), so I decided to
+do it as a one shot key. I could press it and the next pressed key would be
+handled by the target layer which just after it delivers the key to the OS it
+would get back to the previous layer.
+
+After setting up my layout to do just that I realized that occasionally I
+would stop myseld on the middle of the process and the one shot layer would be
+still triggered until I press any other key. So to prevent me from tapping
+keys I don't want I added a timeout of 3 seconds for the one shot actions.
+
+Ultimately I tested the shift key as a one shot one and really like it, so
+here you have it, all the one shot keys on my layout.
+
+## Glossary
+
+If you're not familiar with the Mac symbols used on some keys, here is a
+reference to them:
+
+| Symbol | Description         |
+| :----: | ------------------- |
+|   ⌘    | Command             |
+|   ⇪    | Caps Lock           |
+|   ⇧    | Shift               |
+|   ⌥    | Option (alt)        |
+|   ⎋    | Esc                 |
+|   ⇥    | Tab forward         |
+|   ⇤    | Tab backward        |
+|   ⌃    | Control             |
+|   ␣    | Space               |
+|   ⌫    | Backspace           |
+|   ⌦    | Delete              |
+|   ⏎    | Enter               |
+|   ⌤    | Return              |
+|   ⌽    | Power on/off button |
+|   ↖    | Home                |
+|   ↘    | End                 |
+|   ⇞    | Page up             |
+|   ⇟    | Page down           |
+|   ⌧    | Clear               |
diff --git a/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png
new file mode 100644 (file)
index 0000000..f9bc8b4
Binary files /dev/null and b/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png differ
diff --git a/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png
new file mode 100644 (file)
index 0000000..983b723
Binary files /dev/null and b/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png differ
diff --git a/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png
new file mode 100644 (file)
index 0000000..8f04b43
Binary files /dev/null and b/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png differ
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c
new file mode 100644 (file)
index 0000000..c9dc43c
--- /dev/null
@@ -0,0 +1,213 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* Keymap 0: Basic Dvorak layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Hebrew |   1  |   2  |   3  |   4  |   5  |ALT+S |           |B.tick|  6   |   7  |   8  |   9  |   0  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | TAB    |   '  |   ,  |   .  |   P  |   Y  | LCK2 |           |      |   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | ESC    |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  |   -    |
+ * |--------+------+------+------+------+------| LCK1 |           |      |------+------+------+------+------+--------|
+ * | LShift |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | RSHIFT |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |FN2   | COPY | CUT  | PASTE| FN1  |                                       |   [  |   ]  |   \  | UNDO | CTRL+A |
+ *   `----------------------------------'                                       `------------------------------------'
+ *                                        ,-------------.       ,-------------.
+*                                         | DEL  |      |       | END  | HOME   |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | SUPER|       | PgUp |        |      |
+ *                                 | BACK | CTRL |------|       |------|  Enter |SPACE |
+ *                                 | SPACE|      | ALT  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+[0] = KEYMAP(
+       TG(1),     KC_1,       KC_2,       KC_3,       KC_4,  KC_5, LALT(KC_LSHIFT),
+       KC_TAB,    KC_QUOTE,   KC_COMMA,   KC_DOT,     KC_P,  KC_Y, TG(3),
+       KC_ESCAPE, KC_A,       KC_O,       KC_E,       KC_U,  KC_I,
+       KC_LSHIFT, KC_SCOLON,  KC_Q,       KC_J,       KC_K,  KC_X, TG(2),
+       MO(3),     LCTL(KC_C), LCTL(KC_X), LCTL(KC_V), MO(2),
+                                                 KC_DELETE, KC_TRNS,
+                                                            KC_LGUI,
+                                     KC_BSPACE,CTL_T(KC_NO),KC_LALT,
+       
+       KC_TILD,   KC_6,    KC_7,        KC_8,        KC_9,      KC_0,     KC_EQUAL,
+       KC_TRNS,   KC_F,    KC_G,        KC_C,        KC_R,      KC_L,     KC_SLASH,
+       KC_D,      KC_H,    KC_T,        KC_N,        KC_S,      KC_MINUS,
+       KC_TRNS,   KC_B,    KC_M,        KC_W,        KC_V,      KC_Z,     KC_LSHIFT,
+                           KC_LBRACKET, KC_RBRACKET, KC_BSLASH, KC_UNDO,  LCTL(KC_A),
+       KC_END,    KC_HOME,
+       KC_PGUP,
+       KC_PGDOWN, KC_ENTER, KC_SPACE
+),
+
+ /* Keymap 1: Hebrew layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[1] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_W,    KC_QUOTE, KC_SLASH, KC_R,    KC_T,    KC_TRNS,
+       KC_TRNS, KC_A,    KC_S,     KC_D,     KC_F,    KC_G,
+       KC_TRNS, KC_Z,    KC_X,     KC_C,     KC_V,    KC_B,    KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,
+                                                      KC_TRNS, KC_TRNS,
+                                                               KC_TRNS,
+                                             KC_TRNS, KC_TRNS, KC_TRNS,
+       
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,
+       KC_TRNS, KC_Y,    KC_U,    KC_E,     KC_O,      KC_P,      KC_TRNS,
+                KC_H,    KC_J,    KC_K,     KC_L,      KC_SCOLON, KC_TRNS,
+       KC_TRNS, KC_N,    KC_M,    KC_COMMA, KC_DOT,    KC_I,      KC_TRNS,
+                    KC_TRNS, KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Arrows ,Mouse Navigation and F Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |  F11 |      |      |  UP  |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      | LEFT | DOWN | RIGHT|      |        |
+ * |--------+------+------+------+------+------|      |           |  F12 |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       | Lclk | Rclk |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[2] = KEYMAP(
+       KC_TRNS, KC_F1,   KC_F2,      KC_F3,      KC_F4,       KC_F5,   KC_TRNS, 
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_MS_UP,   KC_TRNS,     KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, 
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,     KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,
+                                                              KC_TRNS, KC_TRNS,
+                                                                       KC_TRNS,
+                                                     KC_TRNS, KC_TRNS, KC_TRNS,
+
+       KC_TRNS,    KC_F6,      KC_F7,      KC_F8,      KC_F9,   KC_F10,  KC_TRNS,
+       KC_F11,     KC_TRNS,    KC_TRNS,    KC_UP,      KC_TRNS, KC_TRNS, KC_TRNS, 
+       KC_TRNS,    KC_LEFT,    KC_DOWN,    KC_RIGHT,   KC_TRNS, KC_TRNS,
+       KC_F12,     KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
+                               KC_MS_BTN1, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,    KC_TRNS,
+       KC_TRNS, 
+       KC_TRNS,    KC_TRNS,    KC_TRNS
+),
+
+ /* Keymap 3: Numpad Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      | NMLK |  P/  |  P*  |  P-  |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |  7   |   8  |  9   |  P+  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------|           |------|      |  4   |   5  |  6   |  P+  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |  1   |   2  |  3   | ENTER|        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |  0   |   0  |  .   | ENTER|      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[3] = KEYMAP(
+       // Left Hand
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,     KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,     KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,     KC_TRNS, 
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,     KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,
+       KC_TRNS,KC_TRNS,
+       KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,
+       // Right Hand
+       KC_TRNS, KC_TRNS,  KC_LOCKING_NUM, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS, 
+       KC_TRNS, KC_TRNS,  KC_KP_7,        KC_KP_8,     KC_KP_9,        KC_KP_PLUS,  KC_TRNS,
+                KC_TRNS,  KC_KP_4,        KC_KP_5,     KC_KP_6,        KC_KP_PLUS,  KC_TRNS,     
+       KC_TRNS, KC_TRNS,  KC_KP_1,        KC_KP_2,     KC_KP_3,        KC_ENTER,    KC_TRNS,
+                          KC_KP_0,        KC_KP_0,     KC_KP_DOT,      KC_ENTER,    KC_TRNS,
+       KC_TRNS,  KC_TRNS, 
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [1] = ACTION_LAYER_TAP_TOGGLE(1)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case 0:
+        if (record->event.pressed) {
+          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+        }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        case 3:
+            ergodox_right_led_3_on();
+        default:
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png
new file mode 100644 (file)
index 0000000..82c81dc
Binary files /dev/null and b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png differ
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png
new file mode 100644 (file)
index 0000000..ec8e749
Binary files /dev/null and b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png differ
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md
new file mode 100644 (file)
index 0000000..99b8182
--- /dev/null
@@ -0,0 +1,10 @@
+#Dvorak-Hebrew
+
+* This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play.
+
+* The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems.
+
+* these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout.
+
+![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png)
+![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png)
diff --git a/keyboards/ergodox/keymaps/twey/keymap.c b/keyboards/ergodox/keymaps/twey/keymap.c
new file mode 100644 (file)
index 0000000..5deacd6
--- /dev/null
@@ -0,0 +1,221 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_plover.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define STEN 2 // steno
+#define MDIA 3 // media keys
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,---------------------------------------------------.           ,---------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4   |   5  | STEN |           | NONE  |   6  |   7  |   8  |   9  |   0  |   \    |
+ * |--------+------+------+------+-------+-------------|           |-------+------+------+------+------+------+--------|
+ * | Del    |   '  |   ,  |   .  |   P   |   Y  |  Esc |           | Caps  |   F  |   G  |   C  |   R  |   L  |   /    |
+ * |--------+------+------+------+-------+------|      |           |       |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   O  |   E  |   U   |   I  |------|           |-------|   D  |   H  |   T  |   N  |   S  |   -    |
+ * |--------+------+------+------+-------+------|  Tab |           | Enter |------+------+------+------+------+--------|
+ * | LShift |   ;  |   Q  |   J  |   K   |   X  |      |           |       |   B  |   M  |   W  |   V  |   Z  | RShift |
+ * `--------+------+------+------+-------+-------------'           `--------------+------+------+------+------+--------'
+ *   |  L1  | NONE |  Grv | Left | Right |                                        |  Up  | Down |   [  |   ]  |  L1  |
+ *   `-----------------------------------'                                        `----------------------------------'
+ *                                        ,--------------.         ,---------------.
+ *                                        |  PgUp | PgDn |         | Home  |  End  |
+ *                                 ,------|-------|------|         |-------+-------+------.
+ *                                 |      |       | NONE |         | AltGr |       |      |
+ *                                 | Alt  | Enter |------|         |-------| Space | Ctrl |
+ *                                 |      |       | Supr |         | ~MDIA |       |      |
+ *                                 `---------------------'         `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   M(0),
+        KC_DELT,        KC_QUOT,      KC_COMM,KC_DOT, KC_P,   KC_Y,   KC_ESC,
+        KC_BSPC,        KC_A,         KC_O,   KC_E,   KC_U,   KC_I,
+        KC_LSFT,        KC_SCLN,      KC_Q,   KC_J,   KC_K,   KC_X,   KC_TAB,
+        MO(SYMB),       KC_NO,        KC_GRV, KC_LEFT,KC_RGHT,
+                                                      KC_PGUP,KC_PGDN,
+                                                              KC_NO,
+                                              KC_LALT,KC_ENT ,KC_LGUI,
+        // right hand
+             KC_NO,       KC_6,   KC_7,   KC_8,   KC_9,   KC_0,    KC_BSLS,
+             KC_CAPS,     KC_F,   KC_G,   KC_C,   KC_R,   KC_L,    KC_SLSH,
+                          KC_D,   KC_H,   KC_T,   KC_N,   KC_S,    KC_MINS,
+             KC_ENT,      KC_B,   KC_M,   KC_W,   KC_V,   KC_Z   , KC_RSFT,
+                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB),
+             KC_HOME, KC_END,
+             KC_RALT,
+             MO(MDIA),KC_SPC,KC_RCTL
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+[STEN] = KEYMAP(  // layout: layer 2: Steno for Plover
+        // left hand
+        KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,  KC_NO,   KC_TRNS,
+        KC_NO,  PV_NUM, PV_NUM, PV_NUM,  PV_NUM, PV_NUM,  PV_STAR,
+        KC_NO,  PV_LS,  PV_LT,  PV_LP,   PV_LH,  PV_STAR,
+        KC_NO,  PV_LS,  PV_LK,  PV_LW,   PV_LR,  PV_STAR, PV_STAR,
+        KC_TRNS,KC_NO,  KC_NO,  KC_TRNS, KC_TRNS,
+                                          KC_NO, KC_NO,
+                                                 KC_NO,
+                                   PV_A,  PV_O,  KC_NO,
+        // right hand
+          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
+        PV_STAR,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,
+                 PV_STAR,   PV_RF,   PV_RP,   PV_RL,   PV_RT,   PV_RD,
+        PV_STAR, PV_STAR,   PV_RR,   PV_RB,   PV_RG,   PV_RS,   PV_RZ,
+                          KC_TRNS, KC_TRNS,   KC_NO,   KC_NO, KC_TRNS,
+        KC_NO,  KC_NO,
+        KC_NO,
+        KC_TRNS,PV_E,    PV_U
+),
+
+/* Keymap 3: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      | Back |      | Frwd |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      | Prev | Play | Next |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_WBAK, KC_TRNS, KC_WFWD, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(MDIA)                // FN1 - Momentary Layer 3 (Media)
+};
+
+void toggle_steno(int pressed)
+{
+  uint8_t layer = biton32(layer_state);
+  
+  if (pressed) {
+    if (layer != STEN) layer_on(STEN); else layer_off(STEN);
+
+    register_code(PV_LP);
+    register_code(PV_LH);
+    register_code(PV_LR);
+    register_code(PV_O);
+    register_code(PV_RL);
+    register_code(PV_RG);
+  } else {
+    unregister_code(PV_LP);
+    unregister_code(PV_LH);
+    unregister_code(PV_LR);
+    unregister_code(PV_O);
+    unregister_code(PV_RL);
+    unregister_code(PV_RG);
+  }
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+        toggle_steno(record->event.pressed);
+        break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+    uint32_t layer0 = layer_state & (1UL << 0),
+             layer1 = layer_state & (1UL << 1),
+             layer2 = layer_state & (1UL << 2),
+             layer3 = layer_state & (1UL << 3);    
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+
+    if (layer1) ergodox_right_led_1_on();
+    if (layer2) ergodox_right_led_2_on();
+    if (layer3) ergodox_right_led_3_on();
+};
diff --git a/keyboards/ergodox/keymaps/twey/readme.md b/keyboards/ergodox/keymaps/twey/readme.md
new file mode 100644 (file)
index 0000000..979e426
--- /dev/null
@@ -0,0 +1,17 @@
+# Twey's Home Configuration
+## Layers
+- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all
+  modifiers on thumb keys, as well as return and space.
+- Layer 1: Default symbol layout.
+- Layer 2: Plover-oriented stenography layer.
+- Layer 3: Extended media/mouse layout.
+
+## Unusual features
+The Plover key (top right key on the left half) also sends my Plover
+‘toggle’ chord (SH-FT) when pressed, as well as toggling the steno
+layer, so you can toggle between steno and typing modes with a single
+keypress.
+
+If you want to use this feature, you'll need to add the
+`commands.json` dictionary to your Plover dictionaries, or define the
+toggle stroke (`PHROLG`) yourself.
diff --git a/keyboards/ergodox/keymaps/videck/Makefile b/keyboards/ergodox/keymaps/videck/Makefile
new file mode 100644 (file)
index 0000000..5c7d21f
--- /dev/null
@@ -0,0 +1,19 @@
+AUDIO_ENABLE:=no
+BACKLIGHT_ENABLE:=no
+BLUETOOTH_ENABLE:=no
+BOOTMAGIC_ENABLE:=no
+COMMAND_ENABLE:=no
+CONSOLE_ENABLE:=no
+EXTRAKEY_ENABLE:=yes
+MIDI_ENABLE:=no
+MOUSEKEY_ENABLE:=yes
+NKRO_ENABLE:=no
+RGBLIGHT_ENABLE:=no
+SLEEP_LED_ENABLE:=no
+TAP_DANCE_ENABLE:=yes
+UNICODEMAP_ENABLE:=no
+UNICODE_ENABLE:=no
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/videck/config.h b/keyboards/ergodox/keymaps/videck/config.h
new file mode 100644 (file)
index 0000000..d89aabe
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#ifndef NO_DEBUG
+  #define NO_DEBUG
+#endif
+#ifndef NO_PRINT
+  #define NO_PRINT
+#endif
+
+#endif
diff --git a/keyboards/ergodox/keymaps/videck/keymap.c b/keyboards/ergodox/keymaps/videck/keymap.c
new file mode 100644 (file)
index 0000000..7bd6274
--- /dev/null
@@ -0,0 +1,179 @@
+#include <stdbool.h>
+
+#include "ergodox.h"
+#include "action_layer.h"
+
+enum {
+  BASE = 0,     // Default layer
+  ARROWS = 1,   // Arrows and Fx keys layer
+  MOUSE = 2,    // Mouse movement and buttons layer
+  PARENS = 3,   // Parenthesis easy access layer
+
+  TD_L = 0,     // Tap dance index for left shift
+  TD_R = 1      // Tap dance index for right shift
+};
+
+// See the videck.png image for a visualization of the layout.
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = KEYMAP(
+    // left hand
+    KC_GRV,     KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_HOME,
+    KC_EQL,     KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_END,
+    MO(PARENS), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,
+    TD(TD_L),   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_BSPC,
+    KC_LCTL,    KC_LALT, KC_VOLD, KC_VOLU, KC_MUTE,
+                                                    KC_ESC,  KC_LGUI,
+                                                             TG(MOUSE),
+                                           KC_SPC,  KC_TAB,  TG(ARROWS),
+    // right hand
+    KC_PGUP, KC_6,   KC_7,    KC_8,    KC_9,   KC_0,    KC_MINS,
+    KC_PGDN, KC_Y,   KC_U,    KC_I,    KC_O,   KC_P,    KC_BSLS,
+             KC_H,   KC_J,    KC_K,    KC_L,   KC_SCLN, KC_QUOT,
+    KC_DELT, KC_N,   KC_M,    KC_COMM, KC_DOT, KC_SLSH, TD(TD_R),
+                     KC_LBRC, KC_RBRC, KC_EQL, KC_RALT, KC_RCTL,
+    KC_APP,  KC_ESC,
+    KC_INS,
+    KC_SLCK, KC_ENT, KC_SPC
+  ),
+  [ARROWS] = KEYMAP(
+    // left hand
+    KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                                 KC_TRNS, KC_TRNS,
+                                                          KC_NO,
+                                        KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+    KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
+             KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS,
+    KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+  [MOUSE] = KEYMAP(
+    // left hand
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                                 KC_BTN3, KC_TRNS,
+                                                          KC_TRNS,
+                                        KC_BTN1, KC_BTN2, KC_NO,
+    // right hand
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+             KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS,
+    KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+  [PARENS] = KEYMAP(
+    // left hand
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                                 KC_TRNS, KC_TRNS,
+                                                          KC_NO,
+                                        KC_TRNS, KC_TRNS, KC_NO,
+    // right hand
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS,
+             KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS,
+                      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS,
+    KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS
+  )
+};
+
+typedef void (*videck_tap_dance_trigger_t) (const uint16_t kc);
+
+typedef struct
+{
+  uint16_t kc1;
+  uint16_t kc2;
+  videck_tap_dance_trigger_t trigger;
+} videck_tap_dance_tuple_t;
+
+static void videck_tap_dance_finished (qk_tap_dance_state_t *state, void *user_data) {
+  videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data;
+
+  if (state->count == 1) {
+    register_code16 (tuple->kc1);
+  } else if (state->count == 2) {
+    register_code16 (tuple->kc2);
+  }
+}
+
+static void videck_tap_dance_reset (qk_tap_dance_state_t *state, void *user_data) {
+  videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data;
+
+  if (state->count == 1) {
+    unregister_code16 (tuple->kc1);
+  } else if (state->count == 2) {
+    unregister_code16 (tuple->kc2);
+    tuple->trigger(tuple->kc2);
+  }
+}
+
+static bool caps_lock_is_on;
+
+// Toggles caps lock status.
+static void videck_caps_trigger (const uint16_t kc) {
+  caps_lock_is_on ^= true;
+}
+
+#define ACTION_TAP_DANCE_DOUBLE_TRIGGER(kc1, kc2, double_trigger) { \
+    .fn = { NULL, videck_tap_dance_finished, videck_tap_dance_reset }, \
+    .user_data = (void *)&((videck_tap_dance_tuple_t) { kc1, kc2, double_trigger }),  \
+  }
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_L] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_LSFT, KC_CAPS, videck_caps_trigger),
+  [TD_R] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_RSFT, KC_CAPS, videck_caps_trigger)
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+  ergodox_led_all_set(LED_BRIGHTNESS_LO);
+  caps_lock_is_on = false;
+};
+
+static void indicate_using_led(const uint8_t led, const bool enabled) {
+  if (enabled) {
+    ergodox_right_led_on(led);
+  } else {
+    ergodox_right_led_off(led);
+  }
+}
+
+static inline void indicate_caps_lock_state(const bool enabled) {
+  indicate_using_led(1, enabled);
+}
+
+static inline void indicate_arrows_layer_state(const bool enabled) {
+  indicate_using_led(2, enabled);
+}
+
+static inline void indicate_mouse_layer_state(const bool enabled) {
+  indicate_using_led(3, enabled);
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+  // Check if we have shift locked.
+  indicate_caps_lock_state(caps_lock_is_on);
+  indicate_arrows_layer_state(IS_LAYER_ON(ARROWS));
+  indicate_mouse_layer_state(IS_LAYER_ON(MOUSE));
+};
diff --git a/keyboards/ergodox/keymaps/videck/readme.md b/keyboards/ergodox/keymaps/videck/readme.md
new file mode 100644 (file)
index 0000000..759e81b
--- /dev/null
@@ -0,0 +1,24 @@
+ViDeck keymap for ErgoDox
+=========================
+
+This is a QWERTY layout based on the US layout, where Vi functionality has been
+especially considered.
+
+# Features
+* Mouse movements using the Vi movement keys.
+* Vi movement keys doubling as arrow keys.
+* Shift lock using double tap.
+* A coder's modifier key for easy input of parenthesis.
+* Acess to the escape key using either thumb.
+* Reasonably accessible Scroll Lock key (useful if you, like me, want to switch
+  to a non-US layout once in a while in X).
+
+# Missing keys
+* Caps Lock (shift lock is used instead).
+* Pause/Break.
+* Print Screen.
+
+# LEDs
+* Shift lock is indicated using first LED.
+* Arrow keys layer is indicated using second LED.
+* Mouse keys layer is indicated using third LED.
diff --git a/keyboards/ergodox/keymaps/videck/videck.json b/keyboards/ergodox/keymaps/videck/videck.json
new file mode 100644 (file)
index 0000000..7068cf5
--- /dev/null
@@ -0,0 +1,443 @@
+[
+  {
+    "backcolor": "#333333",
+    "background": {
+      "name": "PBT Black",
+      "style": "background-image: url('/bg/plastic/pbt-black.png');"
+    },
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Red"
+  },
+  [
+    {
+      "x": 3.5,
+      "c": "#323232",
+      "t": "#ffffff\n\n\n#ac97d8"
+    },
+    "#\n3\n\nF3",
+    {
+      "x": 10.5
+    },
+    "*\n8\n\nF8"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "@\n2\n\nF2",
+    {
+      "x": 1
+    },
+    "$\n4\n\nF4",
+    {
+      "x": 8.5
+    },
+    "&\n7\n\nF7",
+    {
+      "x": 1,
+      "t": "#ffffff\n\n\n#ac97d8\n\n\n\n#555454"
+    },
+    "(\n9\n\nF9"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "t": "#ffffff\n\n\n#ac97d8"
+    },
+    "%\n5\n\nF5",
+    {
+      "t": "#ffffff"
+    },
+    "home",
+    {
+      "x": 4.5
+    },
+    "pgup",
+    {
+      "t": "#ffffff\n\n\n#ac97d8"
+    },
+    "^\n6\n\nF6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "t": "#ffffff",
+      "w": 1.5
+    },
+    "~\n`",
+    {
+      "t": "#ffffff\n\n\n#ac97d8"
+    },
+    "!\n1\n\nF1",
+    {
+      "x": 14.5
+    },
+    ")\n0\n\nF10",
+    {
+      "w": 1.5
+    },
+    "_\n-\n\nF11"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "t": "#ffffff"
+    },
+    "E",
+    {
+      "x": 10.5
+    },
+    "I"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "W",
+    {
+      "x": 1
+    },
+    "R",
+    {
+      "x": 8.5
+    },
+    "U",
+    {
+      "x": 1,
+      "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615"
+    },
+    "O\n\n\n\n\n\n\n\n\n{"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "t": "#ffffff"
+    },
+    "T",
+    {
+      "h": 1.5
+    },
+    "end",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "pgdn",
+    "Y"
+  ],
+  [
+    {
+      "y": -0.875,
+      "w": 1.5
+    },
+    "+\n=",
+    "Q",
+    {
+      "x": 14.5,
+      "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615"
+    },
+    "P\n\n\n\n\n\n\n\n\n}",
+    {
+      "t": "#ffffff\n\n\n#ac97d8",
+      "w": 1.5
+    },
+    "|\n\\\n\nF12"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "t": "#ffffff"
+    },
+    "D",
+    {
+      "x": 10.5,
+      "t": "#ffffff\n\n#5eb1e7\n#ac97d8"
+    },
+    "K\n\n<i class='fa fa-caret-up'></i>\n<i class='kb kb-Arrows-Up'></i>"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5,
+      "t": "#ffffff"
+    },
+    "S",
+    {
+      "x": 1,
+      "n": true
+    },
+    "F",
+    {
+      "x": 8.5,
+      "t": "#ffffff\n\n#5eb1e7\n#ac97d8",
+      "n": true
+    },
+    "J\n\n<i class='fa fa-caret-down'></i>\n<i class='kb kb-Arrows-Down'></i>",
+    {
+      "x": 1,
+      "t": "#ffffff\n\n#5eb1e7\n#ac97d8\n\n\n\n\n\n#f8d615"
+    },
+    "L\n\n<i class='fa fa-caret-right'></i>\n<i class='kb kb-Arrows-Right'></i>\n\n\n\n\n\n("
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "t": "#ffffff"
+    },
+    "G",
+    {
+      "x": 6.5,
+      "t": "#ffffff\n\n#5eb1e7\n#ac97d8"
+    },
+    "H\n\n<i class='fa fa-caret-left'></i>\n<i class='kb kb-Arrows-Left'></i>"
+  ],
+  [
+    {
+      "y": -0.875,
+      "t": "#f8d615",
+      "a": 6,
+      "w": 1.5
+    },
+    "( ) [ ] { }",
+    {
+      "t": "#ffffff",
+      "a": 4
+    },
+    "A",
+    {
+      "x": 14.5,
+      "t": "#ffffff\n\n\n\n\n\n\n#60605b\n\n#f8d615"
+    },
+    ":\n;\n\n\n\n\n\n&Ouml;\n\n)",
+    {
+      "t": "#ffffff\n\n\n\n\n\n\n#60605b",
+      "w": 1.5
+    },
+    "\"\n'\n\n\n\n\n\n&Auml;"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "t": "#ffffff",
+      "h": 1.5
+    },
+    "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "<i class='kb kb-Unicode-DeleteRight-Big'></i>"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5
+    },
+    "C",
+    {
+      "x": 10.5
+    },
+    "<\n,"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "X",
+    {
+      "x": 1
+    },
+    "V",
+    {
+      "x": 8.5
+    },
+    "M",
+    {
+      "x": 1,
+      "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615"
+    },
+    ">\n.\n\n\n\n\n\n\n\n["
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5,
+      "t": "#ffffff"
+    },
+    "B",
+    {
+      "x": 6.5
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "t": "#ffffff\n\n#f67f00",
+      "a": 6,
+      "fa": [
+        5
+      ],
+      "w": 1.5
+    },
+    "&uArr;\n\n2-tap<br/>locks",
+    {
+      "t": "#ffffff",
+      "a": 4,
+      "f": 3
+    },
+    "Z",
+    {
+      "x": 14.5,
+      "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615",
+      "f": 3
+    },
+    "?\n/\n\n\n\n\n\n\n\n]",
+    {
+      "t": "#ffffff\n\n#f67f00",
+      "a": 6,
+      "f": 3,
+      "w": 1.5
+    },
+    "&uArr;\n\n2-tap<br/>locks"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "t": "#ffffff",
+      "a": 4
+    },
+    "\n<i class='kb kb-Multimedia-Volume-Up-2'></i>",
+    {
+      "x": 10.5,
+      "f": 3
+    },
+    "}\n]"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "\n<i class='kb kb-Multimedia-Volume-Down-1'></i>",
+    {
+      "x": 1
+    },
+    "\n<i class='kb kb-Multimedia-Mute-1'></i>",
+    {
+      "x": 8.5,
+      "t": "#ffffff\n\n\n\n\n\n\n#60605b",
+      "f": 3
+    },
+    "{\n[\n\n\n\n\n\n&Aring;",
+    {
+      "x": 1,
+      "t": "#ffffff",
+      "f": 3
+    },
+    "+\n="
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5,
+      "f": 3
+    },
+    "ctrl",
+    {
+      "f": 3
+    },
+    "alt",
+    {
+      "x": 14.5,
+      "f": 3
+    },
+    "altgr",
+    {
+      "f": 3
+    },
+    "ctrl"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "x": 1,
+      "t": "#ffffff\n\n\n\n\n\n\n\n\n\n#5eb1e7",
+      "f": 3
+    },
+    "esc\n\n\n\n\n\n\n\n\n\n<i class='fa fa-mouse-pointer'></i>M",
+    {
+      "t": "#ffffff",
+      "f": 7
+    },
+    "<i class='kb kb-logo-linux-tux'></i>"
+  ],
+  [
+    {
+      "t": "#ffffff\n\n\n\n\n\n\n\n\n\n#5eb1e7",
+      "f": 3,
+      "h": 2
+    },
+    "space\n\n\n\n\n\n\n\n\n\n<i class='fa fa-mouse-pointer'></i>L",
+    {
+      "h": 2
+    },
+    "<i class='kb kb-Tab-1'></i>\n\n\n\n\n\n\n\n\n\n<i class='fa fa-mouse-pointer'></i>R",
+    {
+      "t": "#5eb1e7"
+    },
+    "<i class='fa fa-mouse-pointer'></i>"
+  ],
+  [
+    {
+      "x": 2,
+      "t": "#ac97d8"
+    },
+    "<i class='fa fa-arrows'></i>"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -3,
+      "t": "#ffffff"
+    },
+    "<i class='kb kb-Hamburger-Menu'></i>",
+    "esc"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "ins",
+    {
+      "h": 2
+    },
+    "<i class='kb kb-Return-2'></i>",
+    {
+      "h": 2
+    },
+    "space"
+  ],
+  [
+    {
+      "x": -3
+    },
+    "scroll<br/>lock"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/videck/videck.png b/keyboards/ergodox/keymaps/videck/videck.png
new file mode 100644 (file)
index 0000000..c99323f
Binary files /dev/null and b/keyboards/ergodox/keymaps/videck/videck.png differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/Makefile b/keyboards/ergodox/keymaps/win10_writers-block/Makefile
new file mode 100644 (file)
index 0000000..fbab4b7
--- /dev/null
@@ -0,0 +1,9 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+TAP_DANCE_ENABLE=yes
+
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/config.h b/keyboards/ergodox/keymaps/win10_writers-block/config.h
new file mode 100644 (file)
index 0000000..43259db
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
+#define KEYBOARDS_ERGODOX_CONFIG_H_
+
+#define MOUSEKEY_DELAY          100
+#define MOUSEKEY_INTERVAL       20
+#define MOUSEKEY_MAX_SPEED      3
+#define MOUSEKEY_TIME_TO_MAX    10
+
+#define TAPPING_TOGGLE  1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM    300
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+    keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#ifdef SUBPROJECT_ez
+    #include "ez/config.h"
+#endif
+#ifdef SUBPROJECT_infinity
+    #include "infinity/config.h"
+#endif
+
+
+#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png
new file mode 100644 (file)
index 0000000..d1cb198
Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png
new file mode 100644 (file)
index 0000000..c2019da
Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png
new file mode 100644 (file)
index 0000000..f866d3d
Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png
new file mode 100644 (file)
index 0000000..6f49aae
Binary files /dev/null and b/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c
new file mode 100644 (file)
index 0000000..3106b33
--- /dev/null
@@ -0,0 +1,324 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+#include "wait.h"
+
+#define BASE 0 // default layer  -  helpful for writing in Office-style word processors. 
+#define SYMB 1 // symbol layer   -  NumPad, etc. - same as Ergodox EZ default but no EEPROM or Version key 
+#define RIMW 2 // rimworld layer -  made for the game RimWorld, by Tynan Sylvester | feel free to remap for your favorite game!
+#define MDIA 3 // media layer    -  mouse and music - close to Ergodox EZ default media layer
+
+#define CO_PA M(0)                  // hold copy, tap paste
+
+#define W_CUT    LCTL(KC_X)         // C-x Cut
+#define W_COPY   LCTL(KC_C)         // C-c Copy
+#define W_PASTE  LCTL(KC_V)         // C-v Paste
+#define W_UNDO   LCTL(KC_Z)         // C-z Undo
+#define W_FIND   LCTL(KC_F)         // C-v Find
+#define W_CAD    LCTL(LALT(KC_DEL)) // one-tap ctrl-alt-del
+
+
+
+//Tap Dance Declarations
+enum {
+  CAKEWARP,
+  CTRLALTMDIA,
+};
+
+void cake_count (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 2) {         
+    layer_on (SYMB);        //define double tap here
+    layer_off (MDIA);
+  } 
+  else {    
+    layer_off (SYMB);       //define single tap or hold here
+    layer_off (MDIA);
+  }
+  if (state->count == 3) {         
+     layer_on (RIMW);       //define triple tap here
+     layer_off (MDIA);
+  } 
+  else {    
+       layer_off (RIMW);       //define single tap or hold here
+       layer_off (MDIA);
+    reset_tap_dance (state);
+  }
+}
+
+void dance_cad_mdia_fin (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    register_code (KC_LCTL);
+    register_code (KC_LALT);
+       register_code (KC_DEL);
+  } else {
+    layer_on (MDIA);
+  }
+}
+
+void dance_cad_mdia_reset (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    unregister_code (KC_DEL);
+    unregister_code (KC_LALT);
+       unregister_code (KC_LCTL);
+  } else {
+    ;
+  }
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  // tap for Layer 0, tap twice to switch to symbol layer, and tap three times to switch to rimworld layer.
+  [CAKEWARP] = ACTION_TAP_DANCE_FN(cake_count)
+  // tap for ctrl-alt-del, tap twice for media layer
+  ,[CTRLALTMDIA] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cad_mdia_fin, dance_cad_mdia_reset)
+  // Other declarations would go here, separated by commas, if you have them
+};
+
+//In Layer declaration, add tap dance item in place of a key code
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer - TD(one_tap, two_taps, three_taps...)
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |   1  |   2  |   3  |   4  |   5  | 6    |           |  7   |   7  |   8  |   9  |   0  |   -  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | F12/L1 |   Q  |   W  |   E  |   R  |   T  |  {/[ |           |TD(L0 |   Y  |   U  |   I  |   O  |   P  |   \    | 
+ * |--------+------+------+------+------+------|      |           |L1 L2)|------+------+------+------+------+--------|
+ * |Caps/Win|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+ * |--------+------+------+------+------+------|  }/] |           TD(ctrl|------+------+------+------+------+--------|
+ * |LShift/(|Z/Ctrl|   X  |   C  |   V  |   B  |      |           |altdel|   N  |   M  |   ,  |   .  |  /   |RShift/)|
+ * `--------+------+------+------+------+-------------'           |L3)   |------+------+------+------+------+--------'
+ * |  Undo  |  Cut |CopyPa| Meh  | LGui |                         '------|      | Enter| Left | Up   | Down | Right  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | Esc  | VolUp|       | F4   | Mute |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | VolDn|       | F5   |        |      |
+ *                                 |Backsp|Delete|------|       |------|  Tab / |Space |
+ *                                 |ace   |      | Find |       | Alt  |  CTRL  |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+          KC_GRV,         KC_1,         KC_2,         KC_3,        KC_4,   KC_5,   KC_6,
+LT(SYMB, KC_F12),         KC_Q,         KC_W,         KC_E,        KC_R,   KC_T,   KC_LBRC,
+  GUI_T(KC_CAPS),         KC_A,         KC_S,         KC_D,        KC_F,   KC_G,
+         KC_LSPO,  CTL_T(KC_Z),         KC_X,         KC_C,        KC_V,   KC_B,   KC_RBRC,
+          W_UNDO,        W_CUT,        CO_PA, MEH_T(KC_NO),     KC_LGUI,
+                                                                         KC_ESC, KC_VOLU,
+                                                                                 KC_VOLD,
+                                                             KC_BSPC, KC_DELETE,  W_FIND,
+        // right hand
+                       KC_7,   KC_7,   KC_8,   KC_9,    KC_0,   KC_MINS,          KC_EQL,
+               TD(CAKEWARP),   KC_Y,   KC_U,   KC_I,    KC_O,   KC_P,            KC_BSLS,
+                               KC_H,   KC_J,   KC_K,    KC_L,   KC_SCLN,         KC_QUOT,
+            TD(CTRLALTMDIA),   KC_N,   KC_M,   KC_COMM, KC_DOT, KC_SLSH,         KC_RSPC,
+                                       KC_ENT, KC_LEFT, KC_UP,  KC_DOWN,        KC_RIGHT,
+                      KC_F4,        KC_MUTE,
+                      KC_F5,
+                    KC_RALT, CTL_T(KC_TAB), KC_SPC
+    ),
+
+/* Keymap 1: Symbol Layer | No EEPROM Or Version keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |   xx |           | xx   |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   !  |   @  |   {  |   }  |   |  |      |           |TD(L0 |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |L1 L2)|------+------+------+------+------+--------|
+ * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |   -    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_NO,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+         KC_NO, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_MINS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,    KC_NO,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),     
+       
+/* Keymap 2: RimWorld Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |  ESC   |   1  |   2  |   3  |   4  |   5  |  6   |           |   7  |   7  |   8  |   9  |   0  |   -  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |  TAB   |   C  |  ,<  |   W  |   >. |   R  |      |           |TD(L0 |  U   |  B   |   N  |  J   |  M   |   PGUP |
+ * |--------+------+------+------+------+------| F10  |           |L1 L2)|------+------+------+------+------+--------|
+ * |   I    |   F  |   A  |   S  |   D  |   8  |------|           |------|  X   |  L   |   P  |  Y   |  H   |  ENTER |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |   K    |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 | F12  |   PGDN |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |  F   |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |SPACE |  C   |------|       |------|  E   |SPACE |
+ *                                 |      |      |  Q   |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// RIMWORLD 
+[RIMW] = KEYMAP(
+       // left hand
+        KC_ESC,   KC_1,    KC_2,     KC_3,    KC_4,    KC_5,    KC_6,
+        KC_TAB,   KC_C, KC_COMM,     KC_W,  KC_DOT,    KC_R,  KC_F10,
+          KC_I,   KC_F,    KC_A,     KC_S,    KC_D,    KC_8,
+          KC_K,  KC_F1,   KC_F2,    KC_F3,   KC_F4,   KC_F5,   KC_F6,
+       KC_TRNS,KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                                     KC_C,KC_Q,KC_TRNS,
+       // right hand
+          KC_7,    KC_7,    KC_8,        KC_9,    KC_0,    KC_MINS,  KC_EQL,
+       KC_TRNS,    KC_U,    KC_B,        KC_N,    KC_J,       KC_M, KC_PGUP,
+                   KC_X,    KC_L, SFT_T(KC_P),    KC_Y,       KC_H,  KC_ENT,
+         KC_F7,   KC_F8,   KC_F9,      KC_F10,  KC_F11,     KC_F12, KC_PGDN,
+                            KC_F,     KC_LEFT,   KC_UP,    KC_DOWN,KC_RIGHT,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS,    KC_E, KC_TRNS
+),
+/* Keymap 3: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 | Lclk | Rclk |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_BTN1, KC_BTN2, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+static uint16_t key_timer;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case 0: {
+            if (record->event.pressed) {
+                key_timer = timer_read(); // if the key is being pressed, we start the timer.
+            }
+            else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+                if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
+                    return MACRO( D(LCTL), T(C), U(LCTL), END  );
+                }
+                else {
+                    return MACRO( D(LCTL), T(V), U(LCTL), END  );
+                }
+            }
+            break;
+        }
+      }
+    return MACRO_NONE;
+};
+
+// Anything you want to do once when the keyboard initializes.
+// Tests LED function when the keyboard initializes.
+void matrix_init_user(void) {
+
+  wait_ms(500);
+  ergodox_board_led_on();
+  wait_ms(200);
+  ergodox_right_led_1_on();
+  wait_ms(200);
+  ergodox_right_led_2_on();
+  wait_ms(200);
+  ergodox_right_led_3_on();
+  wait_ms(200);
+  ergodox_board_led_off();
+  wait_ms(200);
+  ergodox_right_led_1_off();
+  wait_ms(200);
+  ergodox_right_led_2_off();
+  wait_ms(200);
+  ergodox_right_led_3_off();
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        case 3:
+            ergodox_right_led_3_on();
+            break;                     
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/readme.md b/keyboards/ergodox/keymaps/win10_writers-block/readme.md
new file mode 100644 (file)
index 0000000..e51e3c4
--- /dev/null
@@ -0,0 +1,113 @@
+<!-- -*- mode: markdown; fill-column: 8192 -*- -->
+
+Win10 Writer's Block ErgoDox - v1.0
+
+=======================
+
+This is a QWERTY layout for QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10.
+
+Professional writers may find this layout useful -- copywriters, technical writers, novelists, etc.  
+
+I use my ErgoDox with this keymap as a daily driver at my office.
+
+A gaming layer is unobtrusively built into this layout. I use that layer to play RimWorld. 
+
+Feel free to modify the gaming layer to your personal taste.
+
+## Table of Contents
+
+* [Layouts](#layouts)
+    - [Base layer](#base-layer)
+    - [Symbol layer](#symbol-layer)
+    - [Gaming layer](#rimworld-layer)
+    - [Media layer](#media-layer)
+* [Tools](#tools)
+    - [Layer notification](#layer-notification)
+* [Building](#building)
+    - [Using on Windows](#using-on-windows)
+* [License](#license)
+* [Special Thanks](#special-thanks)
+
+# Layouts
+
+* TapDance will teleport you to the layer you want: 
+* One Tap for the Base layer
+* Two Taps for the Symbol layer
+* Three Taps for the Rimworld/Gaming layer
+
+* Where the "Meh" key is located on the Ergodox EZ default layout, I've changed it to another tap dance key:
+* One Tap for CTRL-ALT-DEL
+* Two Taps for the Media/Mouse layer
+
+## Base layer
+
+[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/8fd9bbdd3a23bbb5a8779de3624a3be1)
+
+This is a QWERTY layout with some quirks. 
+
+* Enter is located on a key that won't cause as much thumb fatigue.  
+* Copy and Paste work from the same key. Just hold the key to copy and tap the key to paste!
+* Undo, Find and Cut are also one-touch keys. 
+* F12 is where you would normally find TAB on standard layouts. Quickly save in Word, safely.
+* You'll find bracket keys below the "6" key.
+
+* The Meh Key is a single-button CTRL+ALT+SHIFT modifier.
+
+* Space Cadet Shift: Tap L Shift for "(" and R Shift for ")" -- holding either shift works like a normal shift.
+* Tap "Z" or Tab to use either normally. Hold them for CTRL. 
+* Tap Caps Lock to use it normally. Hold it for Win key combinations (Win+D to minimize all programs, etc).
+
+## Symbol layer
+
+[![Symbol layer](images/symbol-layer.png)](http://www.keyboard-layout-editor.com/#/gists/04eb6458b8b17882e472f64d482f12b4)
+
+Your standard Ergodox EZ symbol + numpad layout, minus the Version and EEPROM keys.
+
+* From the base layer, hold the F12 Key to temporarily access this layer (use for quick access to numpad)
+* Release F12 to return to the base layer.
+
+## Rimworld layer
+
+[![Rimworld / Gaming Layer](images/rimworld-layer.png)](http://www.keyboard-layout-editor.com/#/gists/d53af8391e6e443ed0a98ccfbdb4eace)
+
+This layer was made to play RimWorld, a Sci-Fi Colony Survival Game by Tynan Sylvester and Ludeon Studios, available on Steam. 
+
+* Have fun!
+
+## Media layer
+
+[![Media layer](images/media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/3209d09ed4bd997e4f49f28c6ada2ab3)
+
+This is the standard Ergodox EZ media layout with more options for mouseclick buttons. 
+
+* In this layer, your "space" key changes into a back button for your browser.
+
+## LED states
+
+Your LEDs will change to indicate your layer. You'll know you are in the base layer if all LEDs are off.
+
+# Building
+
+To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/`
+
+[qmk]: https://github.com/jackhumbert/qmk_firmware
+
+```
+$ make keyboard=ergodox keymap=win10_writers-block
+```
+
+## Using on Windows
+
+This layout is tested in Windows 7 Pro and Windows 10 Home environments. 
+
+# License
+
+GPL 3+
+
+# Special Thanks
+
+* To algernon for his coding help. I'm a novice but I still made this work (and figured out tap dance) with his help.
+
+* To /r/MechanicalKeyboards for being an all-around great community.
+
+* To /u/profet23 for his amazing custom Ergodox boards.
\ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c
new file mode 100644 (file)
index 0000000..c05a101
--- /dev/null
@@ -0,0 +1,366 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+// readme
+// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer.
+// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of
+// blanks so still discovering what I like.
+// If you aren't familiar with a dead key, the idea is that you tap the dead key which switches the layout. the next key you hit
+// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I
+// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do.
+
+
+// TODO: Define layer names that make sense for the ErgoDox EZ.
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define DEAD 3 // dead version of the symbols layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   `    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   D  |   R  |   W  |   B  |  L1  |           |  L1  |   J  |   F  |   U  |   P  |   ;  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Hyper  |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |   I  |   '    |
+ * |--------+------+------+------+------+------|      |           | Meh  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      | CTRL |  OPT |  CMD |                                       | Left | Down |  Up  | Right|  L3  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |        |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 |Bckspc| Space|------|       |------| Space  |Enter |
+ *                                 |      |      | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_TAB,         KC_Q,         KC_D,   KC_R,   KC_W,   KC_B,   TG(1),
+        ALL_T(KC_ESC),  KC_A,         KC_S,   KC_H,   KC_T,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_M,   KC_C,   KC_V,   KC_NO,
+        KC_NO,          KC_NO,        KC_LCTL,KC_LALT,KC_LGUI,
+                                              KC_NO,  KC_NO,
+                                                              KC_HOME,
+                                               KC_BSPC,KC_SPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(1),       KC_J,   KC_F,   KC_U,   KC_P,   KC_SCLN,          KC_BSLS,
+                          KC_Y,   KC_N,   KC_E,   KC_O,   KC_I,             KC_QUOT,
+             MEH_T(KC_NO),KC_K,   KC_L,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,          KC_FN4,
+             KC_NO,        KC_NO,
+             KC_PGUP,
+             KC_PGDN,KC_SPC,KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   %  |   &  |   ?  |   +  |   @  |      |           |      |   $  |   _  |   [  |   ]  |   !  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   /  |   (  |   =  |   0  |   {  |------|           |------|   }  |   1  |   *  |   )  |   -  |   "    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   6  |   7  |   8  |   9  |   |  |      |           |      |   \  |   2  |   3  |   4  |   5  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,   KC_F1,    KC_F2,    KC_F3,          KC_F4,        KC_F5,          KC_TRNS,
+       KC_TRNS,   KC_PERC,  KC_AMPR,  LSFT(KC_SLSH),  LSFT(KC_EQL), KC_AT,          KC_TRNS,
+       KC_TRNS,   KC_SLSH,  KC_LPRN,  KC_EQL,         KC_0,     LSFT(KC_LBRC),
+       KC_TRNS,   KC_6,     KC_7,     KC_8,           KC_9,     KC_PIPE,        KC_TRNS,
+       KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,        KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,          KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,
+       KC_TRNS, KC_DLR,         KC_UNDERSCORE,  KC_LBRC,  KC_RBRC,  KC_EXLM,  KC_F12,
+                KC_RCBR,        KC_1,     KC_ASTR,  KC_RPRN,  KC_MINS,  KC_QUOT,
+       KC_TRNS, KC_SLSH,        KC_2,     KC_3,     KC_4,     KC_5,     KC_TRNS,
+                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+/* Keymap 4: Dead Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |  %   |   &  |   ?  |   +  |   @  |      |           |      |   $  |   _  |   [  |   ]  |   !  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   /  |   (  |   =  |   0  |   {  |------|           |------|   }  |   1  |   *  |   )  |   -  |   "    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   6  |   7  |   8  |   9  |   |  |      |           |      |   \  |   2  |   3  |   4  |   5  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[DEAD] = KEYMAP(
+       // left hand
+       KC_TRNS,   KC_F1,    KC_F2,    KC_F3,      KC_F4,    KC_F5,          KC_TRNS,
+       KC_TRNS,   M(100),   M(101),   M(102),     M(103),   M(104),         KC_TRNS,
+       KC_TRNS,   M(109),  M(110),  M(111),       M(112),   M(113),
+       KC_TRNS,   M(120),     M(121),     M(122),           M(123),     M(124),        KC_TRNS,
+       KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,        KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,
+       KC_TRNS, M(105),   M(106),   M(107),   M(108),   M(130),   KC_F12,
+                M(114),   M(115),   M(116),   M(117),   M(118),   M(119),
+       KC_TRNS, M(125),   M(126),   M(127),   M(128),   M(129),   KC_TRNS,
+                          KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),                // FN1 - Momentary Layer 1 (Symbols)
+    [2] = ACTION_LAYER_ON(BASE,0),                       // FN2 - Go back to the base layer
+    [3] = ACTION_LAYER_ON(DEAD,0),
+    [4] = ACTION_LAYER_TOGGLE(DEAD),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+          break;
+        case 100:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(5), U(LSFT), T(FN4), END);
+          break;
+        case 101:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(7), U(LSFT), T(FN4), END);
+          break;
+        case 102:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(SLSH), U(LSFT), T(FN4), END);
+          break;
+        case 103:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(EQL), U(LSFT), T(FN4), END);
+          break;
+        case 104:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(2), U(LSFT), T(FN4), END);
+          break;
+        case 105:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(4), U(LSFT), T(FN4), END);
+          break;
+        case 106:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(MINS), U(LSFT), T(FN4), END);
+          break;
+        case 107:
+          layer_clear();
+          return MACRODOWN(T(LBRC), T(FN4), END);
+          break;
+        case 108:
+          layer_clear();
+          return MACRODOWN(T(RBRC), T(FN4), END);
+          break;
+        case 130:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(1), U(LSFT), T(FN4), END);
+          break;
+        case 109:
+          layer_clear();
+          return MACRODOWN(T(SLSH), T(FN4), END);
+          break;
+        case 110:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(9), U(LSFT), T(FN4), END);
+          break;
+        case 111:
+          layer_clear();
+          return MACRODOWN(T(EQL), T(FN4), END);
+          break;
+        case 112:
+          layer_clear();
+          return MACRODOWN(T(0), T(FN4), END);
+          break;
+        case 113:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(LBRC), U(LSFT), T(FN4), END);
+          break;
+        case 114:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(RBRC), U(LSFT), T(FN4), END);
+          break;
+        case 115:
+          layer_clear();
+          return MACRODOWN(T(1), T(FN4), END);
+          break;
+        case 116:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(8), U(LSFT), T(FN4), END);
+          break;
+        case 117:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(0), U(LSFT), T(FN4), END);
+          break;
+        case 118:
+          layer_clear();
+          return MACRODOWN(T(MINS), T(FN4), END);
+          break;
+        case 119:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(QUOT), U(LSFT), T(FN4), END);
+          break;
+        case 120:
+          layer_clear();
+          return MACRODOWN(T(6), T(FN4), END);
+          break;
+        case 121:
+          layer_clear();
+          return MACRODOWN(T(7), T(FN4), END);
+          break;
+        case 122:
+          layer_clear();
+          return MACRODOWN(T(8), T(FN4), END);
+          break;
+        case 123:
+          layer_clear();
+          return MACRODOWN(T(9), T(FN4), END);
+          break;
+        case 124:
+          layer_clear();
+          return MACRODOWN(D(LSFT), T(BSLS), U(LSFT), T(FN4), END);
+          break;
+        case 125:
+          layer_clear();
+          return MACRODOWN(T(BSLS), T(FN4), END);
+          break;
+        case 126:
+          layer_clear();
+          return MACRODOWN(T(2), T(FN4), END);
+          break;
+        case 127:
+          layer_clear();
+          return MACRODOWN(T(3), T(FN4), END);
+          break;
+        case 128:
+          layer_clear();
+          return MACRODOWN(T(4), T(FN4), END);
+          break;
+        case 129:
+          layer_clear();
+          return MACRODOWN(T(5), T(FN4), END);
+          break;
+
+        default:
+        return MACRO_NONE;
+      }
+  return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c
new file mode 100644 (file)
index 0000000..08ee5ae
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+ * About this keymap:
+ * 
+ * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak
+ * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner
+ * keys. I've decided to continue using this layout with my ErgoDox.
+ *
+ * The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional
+ * keys as shown in the diagrams. The Colemak layout is merely an adaptation of that.
+ *
+ * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck
+ * layouts.
+ *
+ */
+
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _DV 0 // Dvorak layer
+#define _QW 1 // Qwerty layer
+#define _CM 2 // Colemak layer
+#define _MD 3 // Media Layer
+#define _KP 4 // Keypad Layer
+
+// Macro name shortcuts
+#define DVORAK M(_DV)
+#define QWERTY M(_QW)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Layer 0 : Dvorak
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |   ]    |   1  |   2  |   3  |   4  |   5  | ESC  | | ESC  |   6  |   7  |   8  |   9  |   0  |   [    |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab    |   '  |   ,  |   .  |   P  |   Y  |      | |      |   F  |   G  |   C  |   R  |   L  |   \    |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * | CapsLk |   A  |   O  |   E  |   U  |   I  |------| |------|   D  |   H  |   T  |   N  |   S  |   -    |
+ * |--------+------+------+------+------+------| _MD  | | _KP  |------+------+------+------+------+--------|
+ * | LShift |   ;  |   Q  |   J  |   K  |   X  |      | |      |   B  |   M  |   W  |   V  |   Z  | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ *   | LGUI |   `  |  INS | Left | Rght |                             |  Up  |  Dn  |   /  |   =  | RGUI |
+ *   `----------------------------------'                             `----------------------------------'
+ *                                      ,-------------. ,-------------.
+ *                                      | LCTL | LALT | | RALT | RCTL |
+ *                               ,------|------|------| |------+------+------.
+ *                               |      |      | Home | | PgUp |      |      |
+ *                               | BkSp | Del  |------| |------| Enter| Space|
+ *                               |      |      | End  | | PgDn |      |      |
+ *                               `--------------------' `--------------------'
+ *
+ */
+[_DV] = KEYMAP(
+        // left hand
+        KC_RBRC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_ESC,
+        KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    XXXXXXX,
+        KC_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,
+        KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    MO(_MD),
+        KC_LGUI, KC_GRV,  KC_INS,  KC_LEFT, KC_RGHT,
+                                            KC_LCTL, KC_LALT,
+                                                     KC_HOME,
+                                   KC_BSPC, KC_DEL,  KC_END,
+        // right hand
+        KC_ESC,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC,
+        XXXXXXX, KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSLS,
+                 KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS,
+        MO(_KP), KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT,
+                          KC_UP,   KC_DOWN, KC_SLSH, KC_EQL,  KC_RGUI,
+        KC_RALT, KC_RCTL,
+        KC_PGUP,
+        KC_PGDN, KC_ENT,  KC_SPC
+  ),
+
+
+/* Layer 1: QWERTY
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  | | ESC  |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   E  |   R  |   T  |      | |      |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * | CapsLk |   A  |   S  |   D  |   F  |   G  |------| |------|   H  |   J  |   K  |   L  |   ;  |   '    |
+ * |--------+------+------+------+------+------| _MD  | | _KP  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      | |      |   N  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ *   | LGUI |   `  |  INS | Left | Rght |                             |  Up  |  Dn  |   /  |   =  | RGUI |
+ *   `----------------------------------'                             `----------------------------------'
+ *                                      ,-------------. ,-------------.
+ *                                      | LCTL | LALT | | RALT | RCTL |
+ *                               ,------|------|------| |------+------+------.
+ *                               |      |      | Home | | PgUp |      |      |
+ *                               | BkSp | Del  |------| |------| Enter| Space|
+ *                               |      |      | End  | | PgDn |      |      |
+ *                               `--------------------' `--------------------'
+ */
+[_QW] = KEYMAP(
+        // left hand
+        KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_LEFT,
+        KC_DELT, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX,
+        KC_BSPC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    MO(_MD),
+        KC_LGUI, KC_GRV,  KC_INS,  KC_LEFT, KC_RGHT,
+                                            KC_LCTL, KC_LALT,
+                                                     KC_HOME,
+                                   KC_BSPC, KC_DEL,  KC_END,
+        // right hand
+        KC_ESC,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+        XXXXXXX, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
+                 KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+        MO(_KP), KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+                          KC_UP,   KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI,
+        KC_LALT, KC_LCTL,
+        KC_PGUP,
+        KC_PGDN, KC_ENT, KC_SPC
+  ),
+
+
+/* Layer 2 : Colemak
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  | | ESC  |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   W  |   F  |   P  |   G  |      | |      |   J  |   L  |   U  |   Y  |   ;  |   \    |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * | BkSpc  |   A  |   R  |   S  |   T  |   D  |------| |------|   H  |   N  |   E  |   I  |   O  |   '    |
+ * |--------+------+------+------+------+------| _MD  | | _KP  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   C  |   V  |   B  |      | |      |   K  |   M  |   ,  |   .  |   /  | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ *   | LGUI |   `  |  INS | Left | Rght |                             |  Up  |  Dn  |   /  |   =  | RGUI |
+ *   `----------------------------------'                             `----------------------------------'
+ *                                      ,-------------. ,-------------.
+ *                                      | LCTL | LALT | | RALT | RCTL |
+ *                               ,------|------|------| |------+------+------.
+ *                               |      |      | Home | | PgUp |      |      |
+ *                               | BkSp | Del  |------| |------| Enter| Space|
+ *                               |      |      | End  | | PgDn |      |      |
+ *                               `--------------------' `--------------------'
+ */
+[_CM] = KEYMAP( 
+        // left hand
+        KC_EQL,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_LEFT,
+        KC_DELT, KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    XXXXXXX,
+        KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    MO(_MD),
+        KC_LGUI, KC_GRV,  KC_INS,  KC_LEFT, KC_RGHT,
+                                            KC_LCTL, KC_LALT,
+                                                     KC_HOME,
+                                   KC_BSPC, KC_DEL,  KC_END,
+        // right hand
+        KC_ESC,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
+        XXXXXXX, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSLS,
+                 KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
+        MO(_KP), KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+                          KC_UP,   KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI,
+        KC_LALT, KC_LCTL,
+        KC_PGUP,
+        KC_PGDN, KC_ENT, KC_SPC
+  ),
+
+
+/* Layer 3 : Media layer
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | TEENSY |  F1  |  F2  |  F3  |  F4  |  F5  | F11  | |  F12 |  F6  |  F7  |  F8  |  F9  |  F10 |        |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * |        |      | PrSc | ScLk | Paus |      |      | |      |      | Mute | Vol- | Vol+ |      |        |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |------| |------| Stop | Prev | Play | Next | Sel  |        |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * |        |      |Dvorak|Qwerty|Colemk|      |      | |      |      |      |      |      |      |        |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                             |      |      |      |      |      |
+ *   `----------------------------------'                             `----------------------------------'
+ *                                      ,-------------. ,-------------.
+ *                                      |      |      | |      |      |
+ *                               ,------|------|------| |------+------+------.
+ *                               |      |      |      | |      |      |      |
+ *                               |      |      |------| |------|      |      |
+ *                               |      |      |      | |      |      |      |
+ *                               `--------------------' `--------------------'
+ */
+[_MD] = KEYMAP(
+        // left hand
+        RESET,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,
+        _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______,
+        _______, _______, _______, _______, _______, _______,
+        _______, _______, DVORAK,  QWERTY,  COLEMAK, _______, _______,
+        _______, _______, _______, _______, _______,
+                                            _______, _______,
+                                                     _______,
+                                   _______, _______, _______,
+        // right hand
+        KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______,
+        _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+                 KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, _______,
+        _______, _______, _______, _______, _______, _______, _______,
+                          _______, _______, _______, _______, _______,
+        _______, _______,
+        _______,
+        _______, _______, _______
+  ),
+
+
+/* Layer 4 : Keypad layer
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Power  |      |      |      |      |      |      | |      |      | NmLk | KP = | KP / | KP * |        |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Sleep  |      |      |      |      |      |      | |      |      | KP 7 | KP 8 | KP 9 | KP - |        |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * | Wake   |      |      |      |      |      |------| |------|      | KP 4 | KP 5 | KP 6 | KP + |        |
+ * |--------+------+------+------+------+------|      | |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      | |      |      | KP 1 | KP 2 | KP 3 |KP Ent|        |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                             | KP 0 |      | KP . |KP Ent|      |
+ *   `----------------------------------'                             `----------------------------------'
+ *                                      ,-------------. ,-------------.
+ *                                      |      |      | |      |      |
+ *                               ,------|------|------| |------+------+------.
+ *                               |      |      |      | |      |      |      |
+ *                               |      |      |------| |------|      |      |
+ *                               |      |      |      | |      |      |      |
+ *                               `--------------------' `--------------------'
+ */
+[_KP] = KEYMAP(
+        // left hand
+        KC_PWR,  _______, _______, _______, _______, _______, _______,
+        KC_SLEP, _______, _______, _______, _______, _______, _______,
+        KC_WAKE, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______,
+                                            _______, _______,
+                                                     _______,
+                                   _______, _______, _______,
+        // right hand
+        _______, _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______,
+        _______, _______, KC_P7,   KC_P8,   KC_P9,   KC_PMNS, _______,
+                 _______, KC_P4,   KC_P5,   KC_P6,   KC_PPLS, _______,
+        _______, _______, KC_P1,   KC_P2,   KC_P3,   KC_PENT, _______,
+                          KC_P0,   _______, KC_PDOT, KC_PENT, _______,
+        _______, _______,
+        _______,
+        _______, _______, _______
+  ),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _DV:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_DV);
+          }
+          break;
+        case _QW:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_QW);
+          }
+          break;
+        case _CM:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_CM);
+          }
+          break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md
new file mode 100644 (file)
index 0000000..6ecdabc
--- /dev/null
@@ -0,0 +1,122 @@
+# Xyverz's ErgoDox EZ Keymap
+
+## About this keymap:
+
+The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my ErgoDox.
+
+The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional keys as shown in the diagrams. The Colemak layout is merely an adaptation of that.
+
+I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts.
+
+## Still to do:
+
+ * Need to figure out a better position for the ESC key.
+ * Come up with a function for the empty keys shown in the alpha layers below.
+ * Fix the CapsLock, NumLock, and ScrLck LEDs.
+
+### Layer 0: Dvorak layer
+
+       ,--------------------------------------------------.,--------------------------------------------------.
+       |   ]    |   1  |   2  |   3  |   4  |   5  | ESC  || ESC  |   6  |   7  |   8  |   9  |   0  |   [    |
+       |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+       | Tab    |   '  |   ,  |   .  |   Y  |   Y  |      ||      |   F  |   G  |   C  |   R  |   L  |   \    |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       | CapsLk |   A  |   O  |   E  |   U  |   I  |------||------|   D  |   H  |   T  |   N  |   S  |   -    |
+       |--------+------+------+------+------+------| _MD  || _KP  |------+------+------+------+------+--------|
+       | LShift |   Z  |   X  |   C  |   V  |   X  |      ||      |   B  |   M  |   W  |   V  |   Z  | RShift |
+       `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+         | LGUI |   `  |  INS | Left | Rght |                            |  Up  |  Dn  |   /  |   =  | RGUI |
+         `----------------------------------'                            `----------------------------------'
+                                            ,-------------.,-------------.
+                                            | LCtr | LAlt || Ralt | RCtr |
+                                     ,------|------|------||------+------+------.
+                                     |      |      | Home || PgUp |      |      |
+                                     | BkSp | Del  |------||------| Enter| Space|
+                                     |      |      | End  || PgDn |      |      |
+                                     `--------------------'`--------------------'
+
+### Layer 1: QWERTY layer
+
+       ,--------------------------------------------------.,--------------------------------------------------.
+       |   =    |   1  |   2  |   3  |   4  |   5  | ESC  || ESC  |   6  |   7  |   8  |   9  |   0  |   -    |
+       |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+       | Tab    |   Q  |   W  |   E  |   R  |   T  |      ||      |   Y  |   U  |   I  |   O  |   P  |   \    |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       | CapsLk |   A  |   S  |   D  |   F  |   G  |------||------|   H  |   J  |   K  |   L  |   ;  |   '    |
+       |--------+------+------+------+------+------| _MD  || _KP  |------+------+------+------+------+--------|
+       | LShift |   Z  |   X  |   C  |   V  |   B  |      ||      |   N  |   M  |   ,  |   .  |   /  | RShift |
+       `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+         | LGUI |   `  |  INS | Left | Rght |                            |  Up  |  Dn  |   [  |   ]  | RGUI |
+         `----------------------------------'                            `----------------------------------'
+                                            ,-------------.,-------------.
+                                            | LCtr | LAlt || Ralt | RCtr |
+                                     ,------|------|------||------+------+------.
+                                     |      |      | Home || PgUp |      |      |
+                                     | BkSp | Del  |------||------| Enter| Space|
+                                     |      |      | End  || PgDn |      |      |
+                                     `--------------------'`--------------------'
+        
+### Keymap 2: Colemak layer
+
+       ,--------------------------------------------------.,--------------------------------------------------.
+       |   =    |   1  |   2  |   3  |   4  |   5  | ESC  || ESC  |   6  |   7  |   8  |   9  |   0  |   -    |
+       |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+       | Tab    |   Q  |   W  |   F  |   P  |   G  |      ||      |   J  |   L  |   U  |   Y  |   ;  |   \    |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       | BkSpc  |   A  |   R  |   S  |   T  |   D  |------||------|   H  |   N  |   E  |   I  |   O  |   '    |
+       |--------+------+------+------+------+------| _MD  || _KP  |------+------+------+------+------+--------|
+       | LShift |   Z  |   X  |   C  |   V  |   B  |      ||      |   K  |   M  |   ,  |   .  |   /  | RShift |
+       `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+         | LGUI |   `  |  INS | Left | Rght |                            |  Up  |  Dn  |   [  |   ]  | RGUI |
+         `----------------------------------'                            `----------------------------------'
+                                            ,-------------.,-------------.
+                                            | LCtr | LAlt || Ralt | RCtr |
+                                     ,------|------|------||------+------+------.
+                                     |      |      | Home || PgUp |      |      |
+                                     | BkSp | Del  |------||------| Enter| Space|
+                                     |      |      | End  || PgDn |      |      |
+                                     `--------------------'`--------------------'
+
+### layer 3 : Media layer
+
+       ,--------------------------------------------------.,--------------------------------------------------.
+       | TEENSY |  F1  |  F2  |  F3  |  F4  |  F5  | F11  ||  F12 |  F6  |  F7  |  F8  |  F9  |  F10 |        |
+       |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+       |        |      | PrSc | ScLk | Paus |      |      ||      |      | Mute | Vol- | Vol+ |      |        |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       |        |      |      |      |      |      |------||------| Stop | Prev | Play | Next | Sel  |        |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       |        |      |Dvorak|Qwerty|Colemk|      |      ||      |      |      |      |      |      |        |
+       `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+         |      |      |      |      |      |                            |      |      |      |      |      |
+         `----------------------------------'                            `----------------------------------'
+                                            ,-------------.,-------------.
+                                            |      |      ||      |      |
+                                     ,------|------|------||------+------+------.
+                                     |      |      |      ||      |      |      |
+                                     |      |      |------||------|      |      |
+                                     |      |      |      ||      |      |      |
+                                     `--------------------'`--------------------'
+
+
+
+### Keymap 4: Keypad layer
+
+       ,--------------------------------------------------.,--------------------------------------------------.
+       | Power  |      |      |      |      |      |      ||      |      | NmLk | KP = | KP / | KP * |        |
+       |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+       | Sleep  |      |      |      |      |      |      ||      |      | KP 7 | KP 8 | KP 9 | KP - |        |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       | Wake   |      |      |      |      |      |------||------|      | KP 4 | KP 5 | KP 6 | KP + |        |
+       |--------+------+------+------+------+------|      ||      |------+------+------+------+------+--------|
+       |        |      |      |      |      |      |      ||      |      | KP 1 | KP 2 | KP 3 |KP Ent|        |
+       `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+         |      |      |      |      |      |                            | KP 0 |      | KP . |KP Ent|      |
+         `----------------------------------'                            `----------------------------------'
+                                            ,-------------.,-------------.
+                                            |      |      ||      |      |
+                                     ,------|------|------||------+------+------.
+                                     |      |      |      ||      |      |      |
+                                     |      |      |------||------|      |      |
+                                     |      |      |      ||      |      |      |
+                                     `--------------------'`--------------------'
diff --git a/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf
new file mode 100644 (file)
index 0000000..ce4fce3
--- /dev/null
@@ -0,0 +1,6 @@
+Section "InputClass"
+       Identifier      "ErgoDox EZ"
+       MatchIsKeyboard "on"
+       MatchProduct    "ErgoDox EZ ErgoDox EZ"
+       Option          "XkbLayout"     "ergodox_yoruian"
+EndSection
diff --git a/keyboards/ergodox/keymaps/yoruian/Makefile b/keyboards/ergodox/keymaps/yoruian/Makefile
new file mode 100644 (file)
index 0000000..b43a24c
--- /dev/null
@@ -0,0 +1,13 @@
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
+
+install-xorg-configuration:
+       install -m 0664 90-$(KEYBOARD)-$(KEYMAP).conf \
+           /etc/X11/xorg.conf.d/90-$(KEYBOARD)-$(KEYMAP).conf
+       install -m 0644 $(KEYBOARD)_$(KEYMAP) \
+           /usr/share/X11/xkb/symbols/$(KEYBOARD)_$(KEYMAP)
+
+uninstall-xorg-configuration:
+       -rm -f /etc/X11/xorg.conf.d/90-$(KEYBOARD)-$(KEYMAP).conf
+       -rm -f /usr/share/X11/xkb/symbols/$(KEYBOARD)_$(KEYMAP)
diff --git a/keyboards/ergodox/keymaps/yoruian/README b/keyboards/ergodox/keymaps/yoruian/README
new file mode 100644 (file)
index 0000000..99b4143
--- /dev/null
@@ -0,0 +1,102 @@
+          Snarfangel's YORUIAN for the ErgoDox EZ
+          ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+DEFAULT
+┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ ┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓
+┃ ` │ ; │ : │ - │ / │ ( │ < ┃ ┃ > │ ) │ ^ │ * │ ~ │ Γ │ σ ┃
+┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨
+┃ ⎋ │ . │ y │ o │ r │ ? │ ✦ ┃ ┃ ✦ │ j │ v │ d │ f │ w │ q ┃
+┠───┼───┼───┼───┼───┼───┤   ┃ ┃   ├───┼───┼───┼───┼───┼───┨
+┃ ⎈ │ u │ i │ a │ n │ ! ├───┨ ┠───┤ m │ h │ t │ s │ c │ ⎈ ┃
+┠───┼───┼───┼───┼───┼───┤ ❖ ┃ ┃ ❖ ├───┼───┼───┼───┼───┼───┨
+┃ λ │ ' │ " │ , │ _ │ = │   ┃ ┃   │ k │ l │ p │ g │ b │ x ┃
+┠───┼───┼───┼───┼───╆━━━┷━━━┛ ┗━━━┷━━━╅───┼───┼───┼───┼───┨
+┃ ⎀ │ E │   │   │ ◆ ┃                 ┃ ◆ │   │   │ z │ ⎙ ┃
+┗━━━┷━━━┷━━━┷━━━┷━━━┛                 ┗━━━┷━━━┷━━━┷━━━┷━━━┛
+                    ┏━━━┯━━━┓ ┏━━━┯━━━┓
+                    ┃ ⌫ │ ⌥ ┃ ┃ ⎄ │ ↹ ┃
+                ┏━━━╃───┼───┨ ┠───┼───╄━━━┓
+                ┃   │   │   ┃ ┃   │   │   ┃
+                ┃ e │ ⇧ ├───┨ ┠───┤ ⏎ │ ␣ ┃
+                ┃   │   │   ┃ ┃   │   │   ┃
+                ┗━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┛
+SHIFTED
+┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ ┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓
+┃ 9 │ 7 │ 5 │ 3 │ 1 │ [ │ { ┃ ┃ } │ ] │ 0 │ 2 │ 4 │ 6 │ 8 ┃
+┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨
+┃   │ * │ Y │ O │ R │ \ │   ┃ ┃   │ J │ V │ D │ F │ W │ Q ┃
+┠───┼───┼───┼───┼───┼───┤   ┃ ┃   ├───┼───┼───┼───┼───┼───┨
+┃   │ U │ I │ A │ N │ | ├───┨ ┠───┤ M │ H │ T │ S │ C │   ┃
+┠───┼───┼───┼───┼───┼───┤   ┃ ┃   ├───┼───┼───┼───┼───┼───┨
+┃   │ # │ $ │ @ │ & │ + │   ┃ ┃   │ K │ L │ P │ G │ B │ X ┃
+┠───┼───┼───┼───┼───╆━━━┷━━━┛ ┗━━━┷━━━╅───┼───┼───┼───┼───┨
+┃   │   │   │   │   ┃                 ┃   │   │   │ Z │   ┃
+┗━━━┷━━━┷━━━┷━━━┷━━━┛                 ┗━━━┷━━━┷━━━┷━━━┷━━━┛
+                    ┏━━━┯━━━┓ ┏━━━┯━━━┓
+                    ┃   │   ┃ ┃   │   ┃
+                ┏━━━╃───┼───┨ ┠───┼───╄━━━┓
+                ┃   │   │   ┃ ┃   │   │   ┃
+                ┃   │   ├───┨ ┠───┤   │   ┃
+                ┃   │   │   ┃ ┃   │   │   ┃
+                ┗━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┛
+λ LAYER
+┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓ ┏━━━┯━━━┯━━━┯━━━┯━━━┯━━━┯━━━┓
+┃   │   │   │   │   │   │   ┃ ┃   │   │ ⑤ │ ⑥ │ ⑦ │ ⑧ │ ⑨ ┃
+┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨
+┃   │   │   │   │   │   │   ┃ ┃   │   │ ① │ ② │ ③ │ ④ │ ⑩ ┃
+┠───┼───┼───┼───┼───┼───┤   ┃ ┃   ├───┼───┼───┼───┼───┼───┨
+┃   │   │   │   │   │   ├───┨ ┠───┤ ⎉ │ ← │ ↓ │ ↑ │ → │ ⑪ ┃
+┠───┼───┼───┼───┼───┼───┤   ┃ ┃   ├───┼───┼───┼───┼───┼───┨
+┃ λ │   │   │   │   │   │   ┃ ┃   │   │ ⇱ │ ⎘ │ ⎗ │ ⇲ │ ⑫ ┃
+┠───┼───┼───┼───┼───╆━━━┷━━━┛ ┗━━━┷━━━╅───┼───┼───┼───┼───┨
+┃   │   │   │   │   ┃                 ┃   │   │   │   │   ┃
+┗━━━┷━━━┷━━━┷━━━┷━━━┛                 ┗━━━┷━━━┷━━━┷━━━┷━━━┛
+                    ┏━━━┯━━━┓ ┏━━━┯━━━┓
+                    ┃   │   ┃ ┃   │   ┃
+                ┏━━━╃───┼───┨ ┠───┼───╄━━━┓
+                ┃   │   │   ┃ ┃   │   │   ┃
+                ┃   │   ├───┨ ┠───┤   │   ┃
+                ┃   │   │   ┃ ┃   │   │   ┃
+                ┗━━━┷━━━┷━━━┛ ┗━━━┷━━━┷━━━┛
+
+Installation (X only)
+‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+   1. Build and flash firmware as usual
+
+   2. sudo make install-xorg-configuration
+
+   3. Restart X
+
+Features
+‾‾‾‾‾‾‾‾
+   • E on the thumb
+
+   • Emacs-friendly
+
+   • Symmetric control keys for finger wear levelling
+
+   • Greek and subscript dead keys
+
+   • Compose key for arbitrary Unicode input via ~/.XCompose
+
+Don't Cares
+‾‾‾‾‾‾‾‾‾‾‾
+   • Easy migration from QWERTY
+
+   • Compatbility with non-XKB systems
+
+   • Mouse emulation
+
+   • Media keys
+
+Acknowledgements
+‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+Snarfangel, for designing the layout.
+
+The GNU FreeFont project and Steve White, for adding new keyboard
+symbols.
+
+Xah Lee, for http://xahlee.info/comp/unicode_computing_symbols.html
+
+Colophon
+‾‾‾‾‾‾‾‾
+This file is best-viewed with an SVN version of GNU FreeFont Mono.
diff --git a/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian
new file mode 100644 (file)
index 0000000..0d13fbf
--- /dev/null
@@ -0,0 +1,34 @@
+partial alphanumeric_keys modifier_keys
+xkb_symbols "ergodox_yoruian" {
+    include "us"
+    name[Group1]= "English (yoruian-1.0.0)";
+
+    replace key <KP2>  { [    Multi_key, Multi_key    ] };
+    replace key <KP3>  { [    Hyper_L,   Hyper_L      ] };
+    replace key <AE09> { [        grave, 9            ] };
+    replace key <AE07> { [    semicolon, 7            ] };
+    replace key <AE05> { [        colon, 5            ] };
+    replace key <AE03> { [        minus, 3            ] };
+    replace key <AE01> { [        slash, 1            ] };
+    replace key <AE10> { [  asciicircum, 0            ] };
+    replace key <AE02> { [      percent, 2            ] };
+    replace key <AE04> { [   asciitilde, 4            ] };
+    replace key <AE06> { [   dead_greek, 6            ] };
+    replace key <AE08> { [   dead_caron, 8            ] };
+    replace key <KP1>  { [            E, E            ] };
+    replace key <AD12> { [       period, asterisk     ] };
+    replace key <BKSL> { [     question, backslash    ] };
+    replace key <AC10> { [       exclam, bar          ] };
+    replace key <AC11> { [   apostrophe, numbersign   ] };
+    replace key <AB08> { [     quotedbl, dollar       ] };
+    replace key <AB09> { [        comma, at           ] };
+    replace key <AB10> { [   underscore, ampersand    ] };
+    replace key <KP0>  { [        equal, plus         ] };
+    replace key <TLDE> { [    parenleft, bracketleft  ] };
+    replace key <AE11> { [         less, braceleft    ] };
+    replace key <AE12> { [      greater, braceright   ] };
+    replace key <AD11> { [   parenright, bracketright ] };
+
+    modifier_map none { <HYPR> };
+    modifier_map Mod3 { <KP3>  };
+};
diff --git a/keyboards/ergodox/keymaps/yoruian/keymap.c b/keyboards/ergodox/keymaps/yoruian/keymap.c
new file mode 100644 (file)
index 0000000..d3635dd
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "yoruian.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP\
+(9,  7,    5,    3,    1,    GRV,  MINS, EQL,  LBRC, 0,    2,    4,    6,    8,
+ ES, RBRC, Y,    O,    R,    BSLS, P3,   P3,   J,    V,    D,    F,    W,    Q,
+ LC, U,    I,    A,    N,    SCLN,             M,    H,    T,    S,    C,    RC,
+ FF, QUOT, COMM, DOT,  SLSH, P0,   LGUI, LGUI, K,    L,    P,    G,    B,    X,
+ IN, P1,   NO,   NO,   LALT,                         LALT, NO,   NO,   Z,    PS,
+                             BSPC, RALT, P2,   TAB,
+                                   NO,   NO,
+                       E,    LSFT, NO,   NO,   ENT,  SPC),
+[1] = KEYMAP\
+(TR, TR,   TR,   TR,   TR,   TR,   TR,   TR,   TR,   F5,   F6,   F7,   F8,   F9,
+ TR, TR,   TR,   TR,   TR,   TR,   TR,   TR,   TR,   F1,   F2,   F3,   F4,   FT,
+ TR, TR,   TR,   TR,   TR,   TR,               PAUS, LEFT, DOWN, UP,   RGHT, FE,
+ TR, TR,   TR,   TR,   TR,   TR,   TR,   TR,   TR,   HOME, PGDN, PGUP, END,  FW,
+ TR, TR,   TR,   TR,   TR,                           TR,   TR,   TR,   TR,   TR,
+                             TR,   TR,   TR,   TR,
+                                   TR,   TR,
+                       TR,   TR,   TR,   TR,   TR,   TR),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+    return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+};
+
+void matrix_scan_user(void) {
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+};
+
+/*
+ * Local Variables:
+ * electric-indent-mode: nil
+ * End:
+ */
diff --git a/keyboards/ergodox/keymaps/yoruian/yoruian.h b/keyboards/ergodox/keymaps/yoruian/yoruian.h
new file mode 100644 (file)
index 0000000..1adcb7f
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#undef KEYMAP
+#define KEYMAP\
+(                                                                      \
+ /* Spacial positions. */                                              \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
+ k20, k21, k22, k23, k24, k25,           k28, k29, k2A, k2B, k2C, k2D, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, \
+ k40, k41, k42, k43, k44,                     k49, k4A, k4B, k4C, k4D, \
+                          k55, k56, k57, k58,                           \
+                               k54, k59,                                \
+                     k53, k52, k51, k5C, k5B, k5A)                      \
+                                                                       \
+ /* Matrix positions. */                                               \
+ {                                                                     \
+   { KC_##k00, KC_##k10, KC_##k20, KC_##k30, KC_##k40, KC_NO    },     \
+   { KC_##k01, KC_##k11, KC_##k21, KC_##k31, KC_##k41, KC_##k51 },      \
+   { KC_##k02, KC_##k12, KC_##k22, KC_##k32, KC_##k42, KC_##k52 },      \
+   { KC_##k03, KC_##k13, KC_##k23, KC_##k33, KC_##k43, KC_##k53 },      \
+   { KC_##k04, KC_##k14, KC_##k24, KC_##k34, KC_##k44, KC_##k54 },      \
+   { KC_##k05, KC_##k15, KC_##k25, KC_##k35, KC_NO,    KC_##k55 },      \
+   { KC_##k06, KC_##k16, KC_NO,    KC_##k36, KC_NO,    KC_##k56 },      \
+   { KC_##k07, KC_##k17, KC_NO,    KC_##k37, KC_NO,    KC_##k57 },      \
+   { KC_##k08, KC_##k18, KC_##k28, KC_##k38, KC_NO,    KC_##k58 },      \
+   { KC_##k09, KC_##k19, KC_##k29, KC_##k39, KC_##k49, KC_##k59 },      \
+   { KC_##k0A, KC_##k1A, KC_##k2A, KC_##k3A, KC_##k4A, KC_##k5A },      \
+   { KC_##k0B, KC_##k1B, KC_##k2B, KC_##k3B, KC_##k4B, KC_##k5B },      \
+   { KC_##k0C, KC_##k1C, KC_##k2C, KC_##k3C, KC_##k4C, KC_##k5C },      \
+   { KC_##k0D, KC_##k1D, KC_##k2D, KC_##k3D, KC_##k4D, KC_NO    }       \
+ }
+
+#define KC_ES  KC_ESC
+#define KC_LC  KC_LCTL
+#define KC_RC  KC_RCTL
+#define KC_FF  MO(1)
+#define KC_IN  KC_INS
+#define KC_PS  KC_PSCR
+#define KC_TR  KC_TRNS
+#define KC_FT  KC_F10
+#define KC_FE  KC_F11
+#define KC_FW  KC_F12
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/Makefile b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
new file mode 100644 (file)
index 0000000..6e3d088
--- /dev/null
@@ -0,0 +1,2 @@
+# Don’t do a tricolor wave when the computer is shut down in Windows
+SLEEP_LED_ENABLE = no
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
new file mode 100644 (file)
index 0000000..725a73e
--- /dev/null
@@ -0,0 +1,233 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+#define SGWK 0 // "sagewick", ⌘S ⌘⇥
+#define SGWF 1 // "sagewick freshly", ⌘S ⌘⇥ ⌘R
+#define BBED 2 // BBEdit
+#define TMNL 3 // Terminal
+#define SAFA 4 // Safari
+#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  |  L1  |           |  L1  |   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |   ⌦    |   Q  |   W  |   E  |   R  |   T  | ~L1  |           | ~L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |   ⌫    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2| ' / L⌘ |
+ * |--------+------+------+------+------+------|  L⌘  |           |  L⌘  |------+------+------+------+------+--------|
+ * |  L⇧    |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | / / ⌃|  R⇧    |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |  L⌃  |  L⌥  |  L⌘  |   ←  |   →  |                                       |   ↑  |   ↓  |   [  |   ]  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,---------------.
+ *                                        |  `~  |  '"  |       |   ⎋  |    ⌫   |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | PgUp |       | PgDn |        |      |
+ *                                 |      |   ⇥  |------|       |------|    ⇥   |Enter |
+ *                                 |      |      |  R⌥  |       |  R⌃  |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   TG(SYMB),
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   MO(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
+        KC_LCTL,        KC_LALT,      KC_LGUI,KC_LEFT,KC_RGHT,
+                                              KC_GRV, KC_QUOT,
+                                                              KC_PGUP,
+                                               KC_SPC,KC_TAB ,KC_RALT,
+        // right hand
+             TG(SYMB),  KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
+             MO(SYMB),  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
+                        KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             KC_LGUI,   KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_SPC ,
+             KC_ESC,            KC_BSPC,
+             KC_PGDN,
+             KC_RCTL,           KC_TAB,      KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |   [  |   ]  |   {  |   }  |   "  |      |           |      |   /  |   7  |   8  |   9  |   *  |   F12  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |   <  |   >  |   (  |   )  |   '  |------|           |------|   -  |   4  |   5  |   6  |   +  |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |   =  |      |           |      |   :  |   1  |   2  |   3  |   =  |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |   0  |   .  |   ←  |   →  |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+       // left hand
+       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS,
+       KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,KC_TRNS,
+       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_SLSH, KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_MINS, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_COLN, KC_1,   KC_2,    KC_3,    KC_EQL,  KC_TRNS,
+                         KC_0,   KC_DOT,  KC_LEFT, KC_RGHT, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |  F14 |  F15 |PrtScr|SclLck| Pause|      |           |  ⌘Q  |  ⌘W  | ⌘⇧`  |  ⌘`  |      |      |  Power |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | PgUp |⌘S⌘⇥⌘R| Term |      |           |      |  ⌘]  | ⌥⌘↑  |   ↑  | ⌥⌘↓  |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |Safari| PgDn |      |      |------|           |------|  ⌘[  |   ←  |   ↓  |   →  |      |    ⏯  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |BBEdit|      |           |      |      |  ⏯  |  ⏮  |   ⏭ |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      | Home |       |  End |      |      |
+ *                                 |      |      |------|       |------|  ⌘C  |  ⌘V  |
+ *                                 |      |      |      |       |  ⌘X  |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+       KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,  /* F14 dims screen, F15 brightens */
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS,
+       KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_HOME,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       LGUI(KC_Q),  LGUI(KC_W),     LGUI(LSFT(KC_GRV)), LGUI(KC_GRV),   KC_TRNS,                KC_TRNS,        KC_PWR ,
+       KC_TRNS,     LGUI(KC_RBRC),  LGUI(LALT(KC_UP)),  KC_UP  ,        LGUI(LALT(KC_DOWN)),    KC_TRNS,        KC_TRNS,
+                    LGUI(KC_LBRC),  KC_LEFT,            KC_DOWN,        KC_RGHT,                KC_TRNS,        KC_MPLY,
+       KC_TRNS,     KC_TRNS,        KC_MPLY,            KC_MPRV,        KC_MNXT,                KC_TRNS,        KC_TRNS,
+                                    KC_VOLU,            KC_VOLD,        KC_MUTE,                KC_TRNS,        KC_TRNS,
+       KC_TRNS,     KC_TRNS,
+       KC_END ,
+       LGUI(KC_X),  LGUI(KC_C),     LGUI(KC_V)
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+          case SGWK:
+              if (record->event.pressed) {
+                  return MACRO(
+                               I(10),
+                               D(LGUI), T(S),   U(LGUI),
+                               D(LGUI), T(TAB), U(LGUI),
+                               END);
+              }
+              break;
+          case SGWF:
+              if (record->event.pressed) {
+                  return MACRO(
+                               I(10),
+                               D(LGUI), T(S),   U(LGUI),
+                               D(LGUI), T(TAB), U(LGUI),
+                               D(LGUI), T(R),   U(LGUI),
+                               END);
+              }
+              break;
+          case BBED:
+              if (record->event.pressed) {
+                  return MACRO(
+                               I(10),
+                               D(LALT), T(SPC),   U(LALT), W(ALFRED_LEAD_TIME),
+                               T(B), T(B), T(E), T(D), T(I), T(T),
+                               T(ENT),
+                               END);
+              }
+              break;
+          case TMNL:
+              if (record->event.pressed) {
+                  return MACRO(
+                               I(10),
+                               D(LALT), T(SPC),   U(LALT), W(ALFRED_LEAD_TIME),
+                               T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L),
+                               T(ENT),
+                               END);
+              }
+              break;
+          case SAFA:
+              if (record->event.pressed) {
+                  return MACRO(
+                               I(10),
+                               D(LALT), T(SPC),   U(LALT), W(ALFRED_LEAD_TIME),
+                               T(S), T(A), T(F), T(A), T(R), T(I),
+                               T(ENT),
+                               END);
+              }
+              break;
+      }
+    return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
new file mode 100644 (file)
index 0000000..5125a12
--- /dev/null
@@ -0,0 +1,47 @@
+# The Zweihander Layout
+
+NB: the backtick (\`) is special in Markdown. If I write ⌘\` in this readme, I mean “command-backtick”, not “command-backslash-backtick”.
+
+This layout is tuned for people who…
+
+
+## use OS X
+
+While this layout should work fine in Windows, it’s not tuned for it. No sane person who primarily uses Windows would put this many Windows keys on a keyboard layout.
+
+
+## mouse left-handed while doing other things with the right hand
+
+I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder:
+
+- Close Window (⌘W)
+- Back (⌘[)
+- Forward (⌘])
+- Open and Close Parent Folder (⌥⌘↓)
+- Go Up and Close Just-Left Folder (⌥⌘↑)
+- Cycle through open windows in current application (⌘\` and ⌘⇧\`)
+- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥)
+
+Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word.
+
+
+## use lots of modifier keys in OS X menu-item shortcuts
+
+I wanted to preserve the feel of a number of shortcuts that involve pressing lots of modifier keys at once; this is why the bottom left of the keyboard has shift, control, option, and command in the usual spaces. Further, some common shortcuts I press have a key on the right side of the keyboard. These shortcuts include:
+
+- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫)
+- Shut Down Without Asking for Confirmation (⇧⌥⌘ power)
+
+⇧⌥⌘⌫, when you press the backspace on the right half of the keyboard, is much more satisfying than if you curl your left hand into a claw to press all the keys on the left. Try both; you’ll agree.
+
+
+## use Emacs-style shortcuts
+
+I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key.
+
+Having trouble remembering which thumb key is alt and which is ctrl? It’s like on the lower right of a normal keyboard — leftmost is alt, rightmost is ctrl.
+
+
+## use spreadsheets
+
+All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. There’s also a colon there for entering times and maybe IPv6 addresses. Not that I expect people to type IPv6 addresses into a spreadsheet, but, y’know.
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex
new file mode 100644 (file)
index 0000000..832504b
--- /dev/null
@@ -0,0 +1,1151 @@
+:100000000C94D3020C941A030C941A030C941A0344\r
+:100010000C941A030C941A030C941A030C941A03EC\r
+:100020000C941A030C941A030C94B71F0C94892097\r
+:100030000C941A030C941A030C941A030C941A03CC\r
+:100040000C941A030C94FC1A0C941A030C941A03C3\r
+:100050000C941A030C9414160C941A030C941A039F\r
+:100060000C941A030C941A030C941A030C941A039C\r
+:100070000C941A030C941A030C941A030C941A038C\r
+:100080000C941A030C941A030C941A030C941A037C\r
+:100090000C941A030C941A030C941A030C941A036C\r
+:1000A0000C941A030C941A030C941A03730C730C1B\r
+:1000B000A20CA20CD80CF80C290E290E030D290E47\r
+:1000C000B30DB30D1A0E290E290E230EC00DC00D4F\r
+:1000D000C00DC00DC00DC00DC00DC00DC00DC00DB8\r
+:1000E000C00DC00DC00DC00DC00DC00DD20DDF0D77\r
+:1000F000E60DED0DF70DF620182106221821062237\r
+:100100005D2180210622D521E821750A01E2012C1A\r
+:10011000022C02E274FA011602160104020401091B\r
+:1001200002090104020401150215010C020C012848\r
+:10013000022800750A01E2012C022C02E274FA0185\r
+:10014000170217010802080115021501100210011B\r
+:100150000C020C0111021101040204010F020F0133\r
+:1001600028022800750A01E2012C022C02E274FA2E\r
+:100170000105020501050205010802080107020741\r
+:10018000010C020C011702170128022800750A0150\r
+:10019000E30116021602E301E3012B022B02E30145\r
+:1001A000E30115021502E300750A01E301160216C8\r
+:1001B00002E301E3012B022B02E3000000F0A12E79\r
+:1001C000004C002A00E100E00000001E00140004C2\r
+:1001D000001D00E200E2001F001A0016001B00E3F1\r
+:1001E000002B00200008000700060050002C002112\r
+:1001F000001500090019004F004B00220017000AEB\r
+:1002000000050000003500015301510000E300002B\r
+:10021000003400015301510000E3000000290023D5\r
+:10022000001C000B00110000002A00240018000D23\r
+:1002300000100052004E0025000C000E0036005148\r
+:10024000002800260012000F0037002F002B002787\r
+:10025000001300334238613000E0002D00310034DB\r
+:1002600068E5002C00000001000100010001000110\r
+:100270000000003A002F0036020100010001003B9F\r
+:1002800000300037020100010001003C002F02266F\r
+:10029000020100010001003D0030022702010001BF\r
+:1002A0000001003E00340234002E00000001000175\r
+:1002B0000001000000010000000100010001000039\r
+:1002C000000100000001003F0038002D0033020053\r
+:1002D0000001004000240021001E00270001004111\r
+:1002E00000250022001F00370001004200260023E5\r
+:1002F00000200050000100430025022E022E004F76\r
+:10030000000100440045000100010001000000015F\r
+:10031000000100010001000100000069000100016E\r
+:10032000000100010001006A000100043001000129\r
+:1003300000010001004B004E00010001000100011E\r
+:100340000001300100010001004A000100033001FA\r
+:100350000002300000010001000100000001000067\r
+:100360000001001408010000000100000001001A53\r
+:100370000830082F082C0200000100350A520C50EA\r
+:10038000002C00A9004D00350852005100AC00AA15\r
+:100390000019080100510C4F00AB00A8000608012D\r
+:1003A0000001000100010001001B08A5000100AED2\r
+:1003B000000100010000000000000000000000003B\r
+:1003C0000000010204060A0F17202C3A4A5D7187CB\r
+:1003D0009DB3C7DAE9F5FCFFFCF5E9DAC7B39D8701\r
+:1003E000715D4A3A2C20170F0A0604020100000032\r
+:1003F0000000000000000016034500720067006F57\r
+:100400000044006F007800200045005A00000016EC\r
+:10041000034500720067006F0044006F0078002001\r
+:100420000045005A0000000403090409026D00049D\r
+:100430000100A0FA090400000103010100092111D3\r
+:100440000100012240000705810308000A09040198\r
+:10045000000103010200092111010001224D0007E2\r
+:1004600005820308000A09040200010300000009D4\r
+:1004700021110100012236000705830308000A0943\r
+:1004800004030001030000000921110100012239C9\r
+:10049000000705840310000112011001000000088C\r
+:1004A000EDFE071301000102000105010906A1018B\r
+:1004B000050719E029E71500250195087501810256\r
+:1004C0000508190129059505750191029501750326\r
+:1004D0009101050719002977150025019578750107\r
+:1004E0008102C005010980A101850216810026B79D\r
+:1004F000001A81002AB700751095018100C0050C13\r
+:100500000901A1018503160100269C021A01002A97\r
+:100510009C02751095018100C005010902A1010925\r
+:1005200001A1000509190129051500250195057589\r
+:100530000181029501750381010501093009311519\r
+:1005400081257F95027508810609381581257F95DB\r
+:100550000175088106050C0A38021581257F950171\r
+:1005600075088106C0C005010906A101050719E04B\r
+:1005700029E7150025019508750181029501750887\r
+:10058000810105081901290595057501910295015B\r
+:10059000750391010507190029FF150026FF009535\r
+:1005A0000675088100C011241FBECFEFDAE0DEBF60\r
+:1005B000CDBF04B603FE27C08091010290910202D4\r
+:1005C000A0910302B09104028730904BA740B04B3A\r
+:1005D000D1F41092010210920202109203021092C2\r
+:1005E000040214BE84B7877F84BF0FB6F894A89521\r
+:1005F00080916000886180936000109260000FBE5F\r
+:10060000E0E0FFE3099511E0A0E0B1E0E0EAF7E403\r
+:1006100002C005900D92A433B107D9F712E0A4E30C\r
+:10062000B1E001C01D92A130B107E1F70E94FC1CAE\r
+:100630000C94CE230C9400001092B9008AE08093B1\r
+:10064000B800089594EA9093BC009091BC0097FF85\r
+:10065000FCCF9091B900987F983021F0903111F043\r
+:1006600081E008958093BB0084E88093BC00809172\r
+:10067000BC0087FFFCCF8091B900887F883111F0E2\r
+:10068000803471F780E0089584E98093BC00809104\r
+:10069000BC0084FDFCCF08958093BB0084E8809368\r
+:1006A000BC008091BC0087FFFCCF9091B900987F7F\r
+:1006B00081E0983209F480E0089584E88093BC00DA\r
+:1006C0008091BC0087FFFCCF8091BB00089580B370\r
+:1006D0008C7080BB81B3836F81BB089580910101D1\r
+:1006E000811115C080E40E942203809301018111D1\r
+:1006F0000CC082E10E944C0380930101811105C06E\r
+:100700008FEF0E944C03809301010E94440384B147\r
+:10071000807F84B985B1807F85B98AB1837F8AB9AA\r
+:100720008BB1837F8BB93E98469808950C94E4046E\r
+:100730000E942509809301010E946E030E946703B5\r
+:10074000A5E3B1E0E3E4F1E08EE08E0F11921D929B\r
+:100750008E13FCCF0C940F090E9425098093010190\r
+:100760000E946E030E946703A5E3B1E0E3E4F1E0B9\r
+:100770008EE08E0F11921D928E13FCCF0895BF92C2\r
+:10078000CF92DF92EF92FF920F931F93CF93DF935D\r
+:1007900080910101882379F0809134018F5F8093EB\r
+:1007A0003401811108C00E94250980930101811143\r
+:1007B00002C00E94B70805E311E0C0E0D0E0EE24DB\r
+:1007C000E394F12CDD24D39495E0C92EC730D105F4\r
+:1007D00000F58091010181113CC080E40E94220358\r
+:1007E00080930101811112C082E10E944C03809329\r
+:1007F000010181110BC0C7010C2E01C0880F0A94A2\r
+:10080000EAF780950E944C03809301010E94440303\r
+:1008100020C0CA30A1F028F4C83059F0C93061F0C6\r
+:1008200005C0CC3089F070F0CD3089F0209A28983E\r
+:1008300010C0219A29980DC0229A2A980AC0239A9A\r
+:100840002B9807C0529A01C0539A5B9802C03E9AF7\r
+:10085000469880EA8A95F1F7C730D10518F580915E\r
+:100860000101811144C080E40E94220380930101B0\r
+:10087000882311F0B12C12C083E10E944C038093B5\r
+:1008800001018111F7CF81E40E94220380930101CD\r
+:100890008111F0CF0E945D03B82EB0940E944403F2\r
+:1008A0008B2D26C08FB181708D25799902C092E081\r
+:1008B00001C090E0892B7C9902C024E001C020E0B7\r
+:1008C000822B7D9902C028E001C020E0822B7E9916\r
+:1008D00002C090E101C090E0892B9FB19095991FD3\r
+:1008E0009927991F9295990F907E892B01C080E0DE\r
+:1008F000F8019081981719F08083C09200010E943E\r
+:100900006E0321960F5F1F4FCE30D10509F05ECFE9\r
+:10091000809100018823A1F08150809300018823F9\r
+:1009200029F0F5E0FA95F1F700000AC0A3E4B1E080\r
+:10093000E5E3F1E0CF01825F91919D938E13FCCFAF\r
+:100940000E94410681E0DF91CF911F910F91FF90AE\r
+:10095000EF90DF90CF90BF900895E82FF0E0ED5B2F\r
+:10096000FE4F808108950895FC016230B9F028F4AB\r
+:10097000662341F0613061F023C06330A9F0643038\r
+:10098000C9F01EC082818823D9F088EA91E00895D9\r
+:1009900082818823A9F08DE891E0089582818823DF\r
+:1009A00079F084E691E008958281882349F083E319\r
+:1009B00091E008958281882319F08AE091E00895FA\r
+:1009C00080E090E0089508956091B0017091B101C8\r
+:1009D0008091B2019091B3010E94081556985E98DB\r
+:1009E00025982D9826982E9827982F98813019F0C1\r
+:1009F000823021F00895259A2D9A0895269A2E9AEC\r
+:100A0000089581E0089581E008950C9403050E9403\r
+:100A1000940E2FEF84E39CE0215080409040E1F75A\r
+:100A200000C000000C9439160F931F93CF93DF93EF\r
+:100A30008C01FC01C081D181CE010E948D13BE01C9\r
+:100A40000E94D807EC01B8010E940505882309F42B\r
+:100A500012C1B801CE010E946808882309F40BC1B5\r
+:100A6000B801CE010E948109882309F404C1C43170\r
+:100A7000F0E7DF0708F0CDC0C23080E7D80708F400\r
+:100A8000A3C0F8018281882309F4AAC00E947215CC\r
+:100A9000811102C00E9458150E94851590E0909324\r
+:100AA000F3018093F201C230F0E7DF0721F4809177\r
+:100AB000F201816082C0C33080E7D80721F48091C1\r
+:100AC000F20182607AC0C430E0E7DE0721F4809151\r
+:100AD000F201846072C0C530F0E7DF0719F480913D\r
+:100AE000F20127C0C63080E7D80721F48091F201D7\r
+:100AF000806163C0C730E0E7DE0721F48091F20136\r
+:100B000080625BC0C830F0E7DF0721F48091F2011A\r
+:100B1000806453C0C93080E7D80721F48091F20186\r
+:100B200080684BC0CA30E0E7DE0729F48091F2010B\r
+:100B30008460886042C0CB30F0E7DF0721F4809109\r
+:100B4000F2018E7F3AC0CC3080E7D80721F4809143\r
+:100B5000F2018D7F32C0CD30E0E7DE0721F48091D5\r
+:100B6000F2018B7F2AC0CE30F0E7DF0719F48091C5\r
+:100B7000F20122C0CF3080E7D80721F48091F20142\r
+:100B80008F7E1BC0C031E0E7DE0721F48091F201C7\r
+:100B90008F7D13C0C131F0E7DF0721F48091F201AE\r
+:100BA0008F7B0BC0C231D04721F48091F2018F7747\r
+:100BB00004C08091F2018B7F877F8093F201809146\r
+:100BC000F2010E94891557C0C115E0E7DE0779F0F0\r
+:100BD000C130D047A1F081E0809351018093520150\r
+:100BE000C801DF91CF911F910F910C940105F8017D\r
+:100BF0008281882309F43FC00E9407053CC0F801A8\r
+:100C000082818823C1F18091CD0181608093CD01E3\r
+:100C100032C0CB3380E7D807A1F4F8018281882362\r
+:100C200021F01092510182E016C080915101811192\r
+:100C300006C086E20E940C0B86E20E94DF0B82E077\r
+:100C400018C0CC33D04739F6F8018281882331F0BF\r
+:100C50001092520180E20E942E0C0DC08091520130\r
+:100C6000811106C087E20E940C0B87E20E94DF0B15\r
+:100C700080E20E94350C80E0DF91CF911F910F91AF\r
+:100C800008950C94960308950C9443060C9444061E\r
+:100C900026E0729FF001112444E5849FE00DF11DD0\r
+:100CA0001124E60FF11DEE0FFF1FE154FE4F859159\r
+:100CB00094910E94EA07811560E49607B0F58115CA\r
+:100CC00070E3970708F0E6C0803E9105D8F4803CB9\r
+:100CD000910508F06CC0883A910578F4853A910541\r
+:100CE00008F06BC08130910509F460C108F417C1A8\r
+:100CF0008430910508F05AC112C18D3B910508F46A\r
+:100D000067C00DC18F3F910509F048F4803F910500\r
+:100D100008F0B5C0883E910508F448C100C18115AE\r
+:100D200020E2920708F0ADC00895811543E59407CD\r
+:100D300090F4811562E5960708F0D0C0811571E541\r
+:100D4000970708F0C6C0811520E5920708F0A5C0F6\r
+:100D50009F70906A0895811545E59407D8F4811530\r
+:100D600064E5960708F0D0C0482F4695469570E296\r
+:100D7000479FA00111248370992721E030E0B90139\r
+:100D800002C0660F771F8A95E2F7CB01842B952B63\r
+:100D90009A680895811576E5970708F4BAC09C0112\r
+:100DA00030562115304108F0BAC09F70B6C0FC0122\r
+:100DB000EE0FFF1FE55CFF4F6AC0853A910509F40D\r
+:100DC000B1C0863A910509F0B0C082E890E4089578\r
+:100DD000883A910509F4ACC0893A910509F4ABC091\r
+:100DE0008A3A910509F4AAC08B3A910509F4A9C081\r
+:100DF0008C3A910509F4A8C08B3B910509F4A7C072\r
+:100E00008C3B910509F4A6C08D3A910509F4A5C063\r
+:100E1000803B910509F4A4C08E3A910509F4A3C062\r
+:100E20008F3A910509F4A2C0813B910509F4A1C054\r
+:100E3000823B910509F4A0C0833B910509F49FC052\r
+:100E4000843B910509F49EC0853B910509F49DC042\r
+:100E5000863B910509F49CC0873B910509F49BC032\r
+:100E6000883B910509F49AC0893B910509F499C022\r
+:100E70008A3B910509F498C080E094E40895906558\r
+:100E80000895FC01FF70EE0FFF1FE554FE4F8591A2\r
+:100E9000949108959927906C0895482F437021E00C\r
+:100EA00030E002C0220F331F4A95E2F73C68AC01E4\r
+:100EB00064E0569547956A95E1F74370342B8F703F\r
+:100EC0008695869560E2869FC0011124822B932B24\r
+:100ED0000895982F8827816F906A0895482F469526\r
+:100EE000469570E2479FA00111248370992721E065\r
+:100EF00030E0B90102C0660F771F8A95E2F7CB0197\r
+:100F0000842B952B9C680895982F8827846F906A6E\r
+:100F100008958F719927982F88279062089580E00F\r
+:100F200090E0089581E890E4089583E890E40895BE\r
+:100F300082EE94E4089589EE94E408958AEE94E4B0\r
+:100F4000089585EB94E4089586EB94E4089583EB8B\r
+:100F500094E4089584EB94E4089587EB94E4089571\r
+:100F60008CEC94E408958DEC94E4089583E895E482\r
+:100F700008958AE895E4089582E995E4089584E95E\r
+:100F800095E4089581E296E4089583E296E4089555\r
+:100F900084E296E4089585E296E4089586E296E474\r
+:100FA000089587E296E408958AE296E40895089504\r
+:100FB00096E0799FF001112494E5899FE00DF11DE1\r
+:100FC0001124E60FF11DEE0FFF1FE154FE4F859136\r
+:100FD000949108958238910549F1B0F481339105D7\r
+:100FE00009F458C048F48932910509F44EC08A3298\r
+:100FF000910509F454C008958533910509F440C062\r
+:101000008933910599F00895833E910529F138F4CB\r
+:10101000803E910591F0823E9105A1F00895863EB3\r
+:101020009105F9F0873E910531F108952091F20183\r
+:1010300020FD3AC021FD38C008958091F20180FD65\r
+:1010400035C032C08091F20182FF32C08091F2013E\r
+:1010500084FD30C083EE39C08091F20182FD28C04A\r
+:10106000F5CF8091F20183FF27C08091F20184FDCA\r
+:1010700021C087EE2AC08091F20183FD1DC0F5CF0B\r
+:101080008091F20185FD1AC01BC08091F20185FD9F\r
+:1010900017C014C08091F20186FD14C015C0809164\r
+:1010A000F20186FD11C00EC080EE0FC089E30DC0B5\r
+:1010B00082EE0BC080E009C086EE07C089E205C061\r
+:1010C00085E303C08AE201C081E390E008950895BA\r
+:1010D0000F931F93CF93FB012281211102C0C1E026\r
+:1010E00041C08C01C0916001C11125C0843190477D\r
+:1010F000B1F70E94670881E0809360010E94DE15CD\r
+:1011000090935F0180935E011092530110925501FC\r
+:1011100010925401109257011092560110925901E9\r
+:101120001092580110925B0110925A0110925D01C9\r
+:1011300010925C0117C080915E0190915F010E9446\r
+:10114000EA15883C910558F690915301E92FF0E09B\r
+:10115000EE0FFF1FEC5AFE4F118300839F5F9093A9\r
+:101160005301C0E08C2FCF911F910F910895569895\r
+:101170005E9825982D9826982E9827982F988FEF6F\r
+:1011800090E0909389008093880090938B008093E7\r
+:101190008A0090938D0080938C00259A2D9A2FEFD2\r
+:1011A00080E792E0215080409040E1F700C00000CD\r
+:1011B000269A2E9A2FEF80E792E0215080409040AF\r
+:1011C000E1F700C00000279A2F9A2FEF80E792E006\r
+:1011D000215080409040E1F700C0000025982D98F4\r
+:1011E0002FEF80E792E0215080409040E1F700C06F\r
+:1011F000000026982E982FEF80E792E02150804043\r
+:101200009040E1F700C0000027982F9856985E980C\r
+:1012100025982D9826982E9827982F98089589EA32\r
+:101220008093800089E08093810024982C983F98D7\r
+:101230008AB18F748AB96E98479A8BB1806B8BB9DB\r
+:10124000769A0E94B7080C94E30480E2809301012F\r
+:101250008091610181110EC00E941C0381E0809386\r
+:1012600061012FEF83ED90E3215080409040E1F742\r
+:1012700000C0000080E40E942203809301018111DC\r
+:101280002EC00E944C0380930101811128C00E944E\r
+:101290004C0380930101811122C08FE30E944C0313\r
+:1012A0008093010181111BC00E94440380E40E94CD\r
+:1012B000220380930101811112C08CE00E944C0333\r
+:1012C0008093010181110BC00E944C0380930101A6\r
+:1012D000811105C08FE30E944C03809301010E949D\r
+:1012E0004403809101010895282F882339F090E06C\r
+:1012F0002A3010F44D9608950697089587E290E0FD\r
+:101300000895FF920F931F93CF93DF93813020E8CE\r
+:10131000920708F44DC0FB012281222309F448C042\r
+:10132000EC01DF7780916201813079F050F08230FA\r
+:10133000C1F482EE0E940C0B87E50E940C0B87E53E\r
+:101340000EC082EE0E940C0B0CC080EE0E940C0BB3\r
+:1013500081EE0E940C0B88E10E940C0B88E10E9438\r
+:10136000DF0B0CE010E0CE01002E02C096958795B1\r
+:101370000A94E2F78F700E947409F82E0E940C0BF9\r
+:101380008F2D0E94DF0B045011090C3FFFEF1F0748\r
+:1013900051F780916201813029F010F0823041F4E0\r
+:1013A00082EE04C080EE0E94DF0B81EE0E94DF0B14\r
+:1013B00081E0DF91CF911F910F91FF90089590935D\r
+:1013C0006801809367010895E0916701F0916801D9\r
+:1013D000309721F00190F081E02D099480E008958C\r
+:1013E000E0916701F0916801309721F00280F3816C\r
+:1013F000E02D09940895E0916701F091680130971C\r
+:1014000021F00480F581E02D099408952091650173\r
+:10141000309166018217930771F090936601809373\r
+:101420006501E0916701F0916801309721F0068035\r
+:10143000F781E02D099408952091630130916401B2\r
+:101440008217930771F09093640180936301E09198\r
+:101450006701F0916801309721F00084F185E02D5B\r
+:101460000994089508950C94320A0E94D5150E949B\r
+:1014700098030C945B16CF92DF92EF92FF920F933A\r
+:101480001F93CF93DF93CDB7DEB72B970FB6F894AA\r
+:10149000DEBF0FBECDBF0E94BF038AE6C82E81E02B\r
+:1014A000D82E00E010E0E02E802F0E94AD04F6015F\r
+:1014B00041916F01F42EF826B1F40F5F1F4F0E30EB\r
+:1014C000110589F78FEF89838A831B820E94DE15BD\r
+:1014D0008160782F9D838C8349815A816B818D81B6\r
+:1014E0000E94DE0A40C09091CD0191FF04C08B871D\r
+:1014F0000E94B3048B8520E030E04F2D50E0922F06\r
+:10150000BA01022E02C0759567950A94E2F760FF52\r
+:1015100024C02E83EF8221E030E0690102C0CC0CB0\r
+:10152000DD1C9A95E2F790E08C219D21892B09F42E\r
+:1015300020E028870E94DE158160782F9A878987AE\r
+:101540004E815F8168858A850E94DE0AF801E6592E\r
+:10155000FE4F8081C826C08206C02F5F3F4F2630D5\r
+:10156000310569F6AACF0E94F317109169010E9414\r
+:10157000E4091817A1F00E94E409809369012B96F1\r
+:101580000FB6F894DEBF0FBECDBFDF91CF911F9194\r
+:101590000F91FF90EF90DF90CF900C9446062B9622\r
+:1015A0000FB6F894DEBF0FBECDBFDF91CF911F9174\r
+:1015B0000F91FF90EF90DF90CF900895CF93DF933E\r
+:1015C000CDB7DEB72B970FB6F894DEBF0FBECDBFF9\r
+:1015D0004F83588769877A878B87DE01119686E06B\r
+:1015E000FD0111928A95E9F785E0FE013796019099\r
+:1015F0000D928A95E1F749815A816B817C818D81B9\r
+:101600009E810E9432112B960FB6F894DEBF0FBE5A\r
+:10161000CDBFDF91CF910895CF93882309F4CDC03A\r
+:10162000C82F823859F40E94E40981FDC6C089E3BD\r
+:101630000E940C140E94D91489E30CC0833879F4F9\r
+:101640000E94E40980FDB9C083E50E940C140E9449\r
+:10165000D91483E50E944E14CF910C94D914843888\r
+:1016600059F40E94E40982FDA8C087E40E940C148A\r
+:101670000E94D91487E4EECF8CEF8C0F813A48F4A6\r
+:101680008C2F0E943D1A811198C08C2F0E940C143F\r
+:10169000E3CF80E28C0F883048F4C77081E001C04E\r
+:1016A000880FCA95EAF70E949214D6CF8BE58C0F6B\r
+:1016B000833078F4C53A29F0C63A31F083E890E0F7\r
+:1016C00005C081E890E002C082E890E0CF910C94E0\r
+:1016D000060A88E58C0F853108F06FC0C83A61F1C1\r
+:1016E000C93A69F1CA3A71F1CB3A79F1CC3A81F150\r
+:1016F000CB3B89F1CC3B91F1CD3A99F1C03BA1F1C3\r
+:10170000CE3AA9F1CF3AB1F1C13BB9F1C23BC1F137\r
+:10171000C33BC9F1C43BD1F1C53BD9F1C63BE1F1B3\r
+:10172000C73BE9F1C83BF1F1C93BF9F1CA3B09F408\r
+:101730003FC080E090E03EC082EE90E03BC089EE8A\r
+:1017400090E038C08AEE90E035C085EB90E032C082\r
+:1017500086EB90E02FC083EB90E02CC084EB90E010\r
+:1017600029C087EB90E026C08CEC90E023C08DEC84\r
+:1017700090E020C083E891E01DC08AE891E01AC0A3\r
+:1017800082E991E017C084E991E014C081E292E01F\r
+:1017900011C083E292E00EC084E292E00BC085E2C9\r
+:1017A00092E008C086E292E005C087E292E002C0C3\r
+:1017B0008AE292E0CF910C941C0ACF91089588237D\r
+:1017C00009F44BC0823859F40E94E40981FF45C0F6\r
+:1017D00089E30E940C140E94D91489E30CC0833859\r
+:1017E00071F40E94E40980FF38C083E50E940C1464\r
+:1017F0000E94D91483E50E944E140C94D9148438A5\r
+:1018000059F40E94E40982FF28C087E40E940C1466\r
+:101810000E94D91487E4EFCF9CEF980F913A58F3C8\r
+:1018200090E2980F983050F4877091E001C0990FC2\r
+:101830008A95EAF7892F0E949814DFCF9BE5980FCD\r
+:10184000933020F480E090E00C94060A885A8531A9\r
+:1018500020F480E090E00C941C0A0895882321F085\r
+:101860000E9492140C94D9140895882321F00E94A8\r
+:1018700098140C94D91408957F928F929F92AF92EE\r
+:10188000BF92CF92DF92EF92FF920F931F93CF936D\r
+:10189000DF931F92CDB7DEB77C01C62E772EFC01F9\r
+:1018A000058102950F70128111110E94AF140E94E0\r
+:1018B0000514882379F0112369F080E28C0D8830BB\r
+:1018C00048F082E00E94EE130E94051491E0D82EA9\r
+:1018D000D92601C0D12CE72DE295EF70F0E0EA5A4D\r
+:1018E000FF4F0C947F23872D807F072D0F70882357\r
+:1018F00011F00295007F112389F0002309F490C1B3\r
+:1019000080E28C0D883020F4802F0E94921403C056\r
+:10191000802F0E94A2140E94D91482C18C2D0E9493\r
+:10192000DF0B002309F495C180E28C0D883020F490\r
+:10193000802F0E94981403C0802F0E94A8140E9438\r
+:10194000D91487C1972D907F872D8F70903211F019\r
+:101950008295807FCC2021F0F1E0CF16B1F01EC03F\r
+:10196000112349F0002309F414C1013009F011C119\r
+:101970000E94C2146EC1002319F0013009F469C13C\r
+:1019800089830E94C51489810AC1112321F0023084\r
+:1019900008F05FC1FEC001115CC101C1112321F03B\r
+:1019A000002309F4F6C03CC1002309F4F8C03EC18D\r
+:1019B000872D86958695837090E0009719F00197A2\r
+:1019C00061F047C1112321F08C2D972D937002C037\r
+:1019D00080E090E00E94060A3CC1112321F08C2D8A\r
+:1019E000972D937002C080E090E00E941C0A31C1E4\r
+:1019F0008C2D112319F00E94FB1602C00E94631760\r
+:101A00000E94E81726C1872D837009F052C011117A\r
+:101A100020C18C2D829586958770880F880F9C2D0C\r
+:101A20009F70892E912CA12CB12C082E04C0880CFB\r
+:101A3000991CAA1CBB1C0A94D2F7C4FE14C00FE068\r
+:101A400010E020E030E0B901A80104C0440F551FA8\r
+:101A5000661F771F8A95D2F7CB01BA016095709502\r
+:101A60008095909503C060E070E0CB01272D26950E\r
+:101A70002695237030E02230310569F0233031059E\r
+:101A800089F0682979298A299B292130310571F04B\r
+:101A90000E947A12DEC0682979298A299B290E942E\r
+:101AA0009612D7C00E947A12C501B4010E945E123C\r
+:101AB000D0C0112319F0872D817001C0869588232D\r
+:101AC00009F4C7C08C2D829586958770880F880F82\r
+:101AD0009C2D9F70892E912CA12CB12C082E04C016\r
+:101AE000880C991CAA1CBB1C0A94D2F7C4FE14C013\r
+:101AF0000FE010E020E030E0B901A80104C0440F7D\r
+:101B0000551F661F771F8A95D2F7CB01BA016095E2\r
+:101B100070958095909503C060E070E0CB01272D13\r
+:101B2000269526952370422F50E04230510569F0EA\r
+:101B30004330510589F0682979298A299B29413048\r
+:101B4000510571F00E94541384C0682979298A29AB\r
+:101B50009B290E9470137DC00E945413C501B401DB\r
+:101B60000E94381376C08C2D90E0FC01E05EF109F4\r
+:101B7000E531F10508F050C0EA59FF4F0C947F237E\r
+:101B80000C2D0F70872D8F71112331F00E94D1120F\r
+:101B9000802F0E942E0C5DC00E94F212802F0E94A6\r
+:101BA000350C57C0112339F0011153C0872D8F71A7\r
+:101BB0000E9417134EC0023008F04BC0F7CF11231C\r
+:101BC00039F0872D8F710E94D11243C01123C9F3C0\r
+:101BD000872D8F710E94F2123CC0112329F0872DAE\r
+:101BE0008F710E94BC1235C00E94B21232C0112304\r
+:101BF00051F0172D1F71812F0E94D11263E0812FA8\r
+:101C00000E94E51326C081E00E94EE13023008F125\r
+:101C100082E00E94EE131DC0112331F0002389F2EF\r
+:101C20008C2D0E940C0B15C0002391F28C2D0E946C\r
+:101C3000DF0B0FC0472D4F706C2DC7010E94B404FD\r
+:101C40000E94D61106C0472D4F706C2DC7010E940F\r
+:101C5000D707DD20F9F00E94E11380FD1BC0F701DA\r
+:101C600012820E94DB130E94D112C7010E94590EFA\r
+:101C70000E94DB130F90DF91CF911F910F91FF9086\r
+:101C8000EF90DF90CF90BF90AF909F908F907F901C\r
+:101C90000C94F2120F90DF91CF911F910F91FF9052\r
+:101CA000EF90DF90CF90BF90AF909F908F907F90FC\r
+:101CB00008950F931F93CF93DF93EC01888199814F\r
+:101CC0002B813C81232BB9F09F3F11F48F3F99F07A\r
+:101CD000CE010E941405882371F0688179818A8180\r
+:101CE0000E94D7138C010E948C130E945312B801DA\r
+:101CF000CE010E943C0CDF91CF911F910F9108956E\r
+:101D00000E94AF140E94BF140E9484140E94D91430\r
+:101D10000E9499180E94E81780E090E00E94060A4D\r
+:101D200080E090E00C941C0A0E949F140C94800E9A\r
+:101D30000E94CC13292F22952F7030E02C303105D2\r
+:101D40004CF42A3031056CF422503109223031052F\r
+:101D5000A8F407C02C30310569F02F30310551F05F\r
+:101D60000DC0803F69F018F4803E40F409C0843F04\r
+:101D700029F406C093FB882780F9089580E0089530\r
+:101D800081E00895CF93DF9300D000D01F92CDB7AC\r
+:101D9000DEB70F900F900F900F900F90DF91CF91C3\r
+:101DA0000895CF93DF9300D000D000D0CDB7DEB739\r
+:101DB00026960FB6F894DEBF0FBECDBFDF91CF9150\r
+:101DC00008951F93CF93DF93C091780116E080911F\r
+:101DD0007901C81799F0D0E01C9FF0011D9FF00D0C\r
+:101DE0001124E658FE4F40815181628173818481C4\r
+:101DF00095810E94D10E2196C770E9CFDF91CF91D6\r
+:101E00001F9108954091AA015091AB016091AC01DE\r
+:101E10007091AD018091AE019091AF010C94D10E03\r
+:101E20008091AF0182958F7009F054C08091AC0110\r
+:101E3000882309F44FC080917801A09179016091C5\r
+:101E4000AA017091AB014091AD015091AE01B6E095\r
+:101E50008A1709F43FC090E041155105C1F17F3F59\r
+:101E600011F46F3FA1F1B89FF001B99FF00D11245B\r
+:101E7000E658FE4F218172132AC02081621327C0C9\r
+:101E80002281211124C0238134812417350710F4C5\r
+:101E900021503109241B350B283C3105C0F4209119\r
+:101EA000AF012F7020612093AF0126E0289FF00141\r
+:101EB000299FF00D1124E158FE4F80818F708061C1\r
+:101EC00080838AEA91E00E94590E0C94E10E0196FB\r
+:101ED0008770BECF0895CF92DF92EF92FF920F935B\r
+:101EE0001F93CF93DF93CDB7DEB762970FB6F89409\r
+:101EF000DEBF0FBECDBF8C0185E0F801DE011D966F\r
+:101F000001900D928A95E1F7D8014C9111965C9160\r
+:101F1000119712966C9112971396CD90DC901497AE\r
+:101F20003091AA017091AB018091AD019091AE0109\r
+:101F3000009709F46BC17F3F19F43F3F09F466C174\r
+:101F4000E090AC01EE2009F4C0C02091AF01C816AA\r
+:101F5000D90628F0F601E81BF90BCF0104C08095E3\r
+:101F600090958C0D9D1DFF24F394883C910578F08D\r
+:101F7000F12C207F09F0C6C07C2DD98AC88A8989B6\r
+:101F80000E94C20E8AEA91E00E94590EB1C0822FCF\r
+:101F9000807F09F046C0751314C0341312C061115C\r
+:101FA00010C02F7020612093AF010E94020F8AEAB7\r
+:101FB00091E00E94590E8091AF01D80115968C9343\r
+:101FC0002EC0CD2819F15F3F11F44F3FF9F0F62EE6\r
+:101FD00061111CC0809178012091790136E082174F\r
+:101FE00009F45AC090E0389FF001399FF00D112498\r
+:101FF000E658FE4F7181571306C07081471303C026\r
+:102000007281711103C001968770E9CFF62E6623A5\r
+:1020100009F418C18091AF0181608093AF01F12C68\r
+:1020200011C1751308C0341306C0611104C080913A\r
+:10203000AF01D801C3C04D875E878D859E856A8BB1\r
+:102040000E94980E6A898823E1F16623D1F12091DC\r
+:10205000AF01822F82958F7090E0029774F080918B\r
+:10206000AA019091AB0198878F831986DB86CA8677\r
+:102070002C87CE0107960E94590E86E0F801AAEA45\r
+:10208000B1E001900D928A95E1F70E94100F0E9435\r
+:10209000020FFF24F394D6C04D875E878D859E8501\r
+:1020A0000E94CC13292F22952F7030E02230310569\r
+:1020B0000CF0BCC09F7009F0B6C0805E883008F498\r
+:1020C000C1C0C8010E94590EE4CFC816D90608F451\r
+:1020D00053C0F601E81BF90BCF01883C910508F4C9\r
+:1020E00050C0F12C7C2DD98AC88A89890E94C20EE1\r
+:1020F000EAEAF1E086E0DF011D928A95E9F70E94A5\r
+:10210000020FA0C0751314C0341312C0611110C0A7\r
+:102110008091AF01F8018583C8010E94590E86E0C5\r
+:10212000EAEAF1E0DF011D928A95E9F7FE2C8AC008\r
+:102130004D875E878D859E856A8B0E94980E6A8981\r
+:10214000882309F4BECF662309F4BBCF2091AF01E9\r
+:10215000822F82958F7090E002970CF48ECF809141\r
+:10216000AA019091AB019A8389831B82DD82CC8284\r
+:102170002E83CE0101967FCF809590958C0D9D1D6D\r
+:10218000ACCFF62E662309F49CCF75132EC0341302\r
+:102190002CC02091AF0120FD1FC0822F82958F702F\r
+:1021A000D9F0D80115962C9315978F3049F08F5F91\r
+:1021B000982F9295907F822F8F70892B15968C93F4\r
+:1021C000C8010E94590E86E0F801AAEAB1E0019028\r
+:1021D0000D928A95E1F793CF86E0F801AAEAB1E083\r
+:1021E00001900D928A95E1F72DC04D875E878D8510\r
+:1021F0009E850E94980E811140CF8091AF01816031\r
+:102200008093AF01C8010E94590E1CC0662309F4D7\r
+:1022100058CF4D875E878D859E850E94980E8823B6\r
+:1022200009F44FCF2ACF811148CF0CC0243031059B\r
+:102230000CF047CF9F7009F440CFF8019581907F53\r
+:1022400009F03BCF8F2D62960FB6F894DEBF0FBE1C\r
+:10225000CDBFDF91CF911F910F91FF90EF90DF9055\r
+:10226000CF9008951F93CF93DF93CDB7DEB72C9710\r
+:102270000FB6F894DEBF0FBECDBF4F835887698776\r
+:102280007A878B879C87CE0107960E946B0F8823E5\r
+:1022900069F08F8198852A853B85232BF1F19F3F3B\r
+:1022A00009F063C08F3F09F060C037C086E0FE01CF\r
+:1022B0003796DE01119601900D928A95E1F76F81B4\r
+:1022C0007885EA85FB85309741F17F3F11F46F3FB8\r
+:1022D00021F12091790130E0C90101968770992799\r
+:1022E0004091780150E08417950709F447C069834D\r
+:1022F0007A83FD83EC8396E0929FD001939FB00D8B\r
+:102300001124A658BE4FFE01319601900D929A9568\r
+:10231000E1F7809379010E94E10E16E08091780147\r
+:10232000909179018917C1F1189FC0011124865835\r
+:102330009E4F0E946B0F882379F1E09178011E9FD8\r
+:10234000F0011124E658FE4F408151816281738172\r
+:10235000848195810E94D10E8091780190E0019650\r
+:102360008770992780937801D9CF4F8158856985E7\r
+:102370007A858B859C850E94D10ECFCF0E94940ECA\r
+:102380001092790110927801EAEAF1E086E0DF012B\r
+:102390001D928A95E9F7C1CF2C960FB6F894DEBF4F\r
+:1023A0000FBECDBFDF91CF911F910895EF92FF92A5\r
+:1023B0000F931F93CF93DF938C01892B09F46CC08B\r
+:1023C000F12CEE24E394E8012196F80184918437FE\r
+:1023D00040F4843008F051C0813081F0823019F12E\r
+:1023E0005BC0853709F444C0A8F19CE7980F90378B\r
+:1023F00008F052C08F770E94DF0B41C00E5F1F4F65\r
+:10240000FE01C49180E28C0F883048F4C7708E2D95\r
+:1024100001C0880FCA95EAF70E94B21414C08C2F2D\r
+:102420000E940C0B2DC00E5F1F4FFE01C49180E275\r
+:102430008C0F883058F4C7708E2D01C0880FCA9554\r
+:10244000EAF70E94B8140E94D9141AC08C2F0E9477\r
+:10245000DF0B16C00E5F1F4FFE01C491CC2381F02D\r
+:102460008FE99FE00197F1F700C00000C150F6CF5F\r
+:102470000E5F1F4FFE01F49003C00E940C0B8E01F3\r
+:102480008F2D882309F49FCFEFE9FFE03197F1F713\r
+:1024900000C000008150F5CFDF91CF911F910F91C7\r
+:1024A000FF90EF90089508956093B4017093B50183\r
+:1024B0008093B6019093B7010C94800E0F931F93F5\r
+:1024C0000091B4011091B5012091B6013091B7018E\r
+:1024D000DC01CB01802B912BA22BB32B8093B40179\r
+:1024E0009093B501A093B601B093B7011F910F91DE\r
+:1024F0000C94800E0F931F930091B4011091B501BD\r
+:102500002091B6013091B701DC01CB0180239123EA\r
+:10251000A223B3238093B4019093B501A093B60195\r
+:10252000B093B7011F910F910C94800E0F931F93DE\r
+:102530000091B4011091B5012091B6013091B7011D\r
+:10254000DC01CB0180279127A227B3278093B40118\r
+:102550009093B501A093B601B093B7011F910F916D\r
+:102560000C94800E1092B0011092B1011092B20141\r
+:102570001092B3010C94800E41E050E060E070E0F6\r
+:1025800004C0440F551F661F771F8A95D2F74093EA\r
+:10259000B0015093B1016093B2017093B3010C94F8\r
+:1025A000800E41E050E060E070E004C0440F551F31\r
+:1025B000661F771F8A95D2F78091B0019091B10183\r
+:1025C000A091B201B091B301482B592B6A2B7B2B00\r
+:1025D0004093B0015093B1016093B2017093B30185\r
+:1025E0000C94800E41E050E060E070E004C0440FC5\r
+:1025F000551F661F771F8A95D2F7409550956095B5\r
+:1026000070958091B0019091B101A091B201B0910B\r
+:10261000B301482359236A237B234093B00150938D\r
+:10262000B1016093B2017093B3010C94800E41E04C\r
+:1026300050E060E070E004C0440F551F661F771F34\r
+:102640008A95D2F78091B0019091B101A091B20129\r
+:10265000B091B301482759276A277B274093B001DF\r
+:102660005093B1016093B2017093B3010C94800E4A\r
+:102670000F931F930091B0011091B1012091B2010D\r
+:102680003091B301DC01CB01802B912BA22BB32B1A\r
+:102690008093B0019093B101A093B201B093B301C4\r
+:1026A0001F910F910C94800E0F931F930091B00116\r
+:1026B0001091B1012091B2013091B301DC01CB0145\r
+:1026C00080239123A223B3238093B0019093B1017F\r
+:1026D000A093B201B093B3011F910F910C94800E9F\r
+:1026E0000F931F930091B0011091B1012091B2019D\r
+:1026F0003091B301DC01CB0180279127A227B327BA\r
+:102700008093B0019093B101A093B201B093B30153\r
+:102710001F910F910C94800E0895CF92DF92EF924B\r
+:10272000FF920F931F93CF93DF938C01C090B4015E\r
+:10273000D090B501E090B601F090B7018091B00162\r
+:102740009091B101A091B201B091B301C82AD92AE8\r
+:10275000EA2AFB2ACFE1D0E0D701C6010C2E04C043\r
+:10276000B695A795979587950A94D2F780FF06C0EE\r
+:10277000B8018C2F0E944806019721F4219760F739\r
+:1027800080E001C08C2FDF91CF911F910F91FF90BE\r
+:10279000EF90DF90CF900895CF93DF93EC010E94EC\r
+:1027A0008D13BE010E944806DF91CF910895CB01A1\r
+:1027B0000E94CC1308958091B801859585958595E3\r
+:1027C00008958091B8018770089598E0899F9001DD\r
+:1027D0001124262B2093B8010C94D1122091B8011A\r
+:1027E000809582238093B801982F977069F430E028\r
+:1027F000482F552747FD50952417350729F0859513\r
+:10280000859585950C94F21208959091B801977072\r
+:1028100081E009F480E0089590911501992321F059\r
+:1028200090910201911109C020910301309104019E\r
+:10283000F90132969FEF40E01FC0982F969596952C\r
+:1028400096959F3050F5E0910301F0910401E90F56\r
+:10285000F11D877021E030E0A90102C0440F551F2F\r
+:102860008A95E2F7CA019181892B818308959F3F60\r
+:1028700039F04F5F4E3041F051915813F8CF0DC0F1\r
+:102880005111F7CF942FF5CF9F3F39F0F901E90FA0\r
+:10289000F11D97FDFA958283089508959091150191\r
+:1028A000992321F090910201911109C02091030117\r
+:1028B00030910401F9013296205F3F4F1FC0982FDD\r
+:1028C0009695969596959F30F0F4E0910301F091DE\r
+:1028D0000401E90FF11D877021E030E0A90102C079\r
+:1028E000440F551F8A95E2F7CA018095918189238B\r
+:1028F000818308953196E217F30729F090819813A8\r
+:10290000F9CF1082F7CF089581E090E0E0910301C4\r
+:10291000F0910401E80FF91F1082019680319105B2\r
+:10292000A9F708959091CC01892B8093CC0108954B\r
+:1029300080959091CC0189238093CC0108951092C9\r
+:10294000CC0108959091CB01892B8093CB01089500\r
+:1029500080959091CB0189238093CB0108951092AB\r
+:10296000CB0108959091CA01892B8093CA010895E3\r
+:1029700080959091CA0189238093CA01089510928D\r
+:10298000CA0108958093B90108951092B90108957C\r
+:102990008091030190910401FC0131969C01205F1C\r
+:1029A0003F4F80E0919191118F5FE217F307D1F7CC\r
+:1029B0000895E0910301F09104018091CC0180839E\r
+:1029C000E0910301F091040190818091CB01892B6A\r
+:1029D0008083E0910301F091040190818091CA010C\r
+:1029E000892B80838091B901882361F0E0910301F4\r
+:1029F000F09104019081892B80830E94C814811179\r
+:102A00001092B90180910301909104010C94F00996\r
+:102A1000CF92DF92EF92FF926C01EE24FF24C1145B\r
+:102A2000D104E104F10421F0C701B60120E101C0A5\r
+:102A300020E0C72ED82EE92EFF24C114D104E104D2\r
+:102A4000F10419F0285FC701B6016B017C0154E065\r
+:102A5000F694E794D794C7945A95D1F7C114D1044A\r
+:102A6000E104F10419F02C5FC701B6016B017C0190\r
+:102A700042E0F694E794D794C7944A95D1F7C114ED\r
+:102A8000D104E104F10419F02E5FC701B601DC01A5\r
+:102A9000CB01B695A79597958795892B8A2B8B2B7C\r
+:102AA00009F02F5F822FFF90EF90DF90CF90089575\r
+:102AB0006DEE7EEF80E090E00E94B82360E082E05F\r
+:102AC00090E00E94A72360E083E090E00E94A723AB\r
+:102AD00060E084E090E00E94A72360E085E090E061\r
+:102AE0000C94A72380E090E00E94A12321E08D3E7A\r
+:102AF0009E4F09F020E0822F089582E090E00C9430\r
+:102B0000992383E090E00C94992384E090E00C9466\r
+:102B10009923682F84E090E00C94A7238091F8011A\r
+:102B2000843039F11092CE0120E488E190E00FB6B4\r
+:102B3000F894A895809360000FBE2093600080E019\r
+:102B40000E94460683B7817F846083BF83B781601C\r
+:102B500083BF7894889583B78E7F83BF0FB6F89430\r
+:102B6000A895809160008861809360001092600059\r
+:102B70000FBE08950895CF930E94AC030E94BF0337\r
+:102B80000E94BA15C0E08C2F0E94AD04811104C0D0\r
+:102B9000CF5FCE30C1F701C081E0CF9108950E9490\r
+:102BA000940E0E94E4090C94460682E084BD93E0F2\r
+:102BB00095BD9AEF97BD80936E0008952FB7F89456\r
+:102BC0008091CF019091D001A091D101B091D2011B\r
+:102BD0002FBF0895CF92DF92EF92FF920F931F9332\r
+:102BE0002FB7F8944091CF015091D0016091D1015D\r
+:102BF0007091D2012FBF6A017B01EE24FF248C016A\r
+:102C000020E030E0C016D106E206F30610F4415091\r
+:102C100051099A01281B390BC9011F910F91FF908F\r
+:102C2000EF90DF90CF9008951F920F920FB60F9202\r
+:102C300011248F939F93AF93BF938091CF01909175\r
+:102C4000D001A091D101B091D2010196A11DB11D79\r
+:102C50008093CF019093D001A093D101B093D20182\r
+:102C6000BF91AF919F918F910F900FBE0F901F90CA\r
+:102C700018950E943C1FF8942FEF87EA91E62150A7\r
+:102C800080409040E1F700C0000087E090EBDC015D\r
+:102C90008093010290930202A0930302B093040276\r
+:102CA0009CE088E10FB6F894A895809360000FBE71\r
+:102CB00090936000FFCF0E947215811102C00E94A4\r
+:102CC00058150E947D158093CD010E94851590E0D6\r
+:102CD0009093F3018093F20187FB882780F980931A\r
+:102CE00002010E948115682F70E080E090E00C9452\r
+:102CF00054128091D50180FF0BC06091080185E0DE\r
+:102D0000689FB001112475956795759567952BC0DF\r
+:102D100081FF09C06091080185E0689FB00111241E\r
+:102D20007595679520C082FF07C06091080185E016\r
+:102D3000689FB001112417C09091D6019923D1F05A\r
+:102D400060910701961788F72091080185E0289F78\r
+:102D500090011124929FA001939F500D112470E0C7\r
+:102D6000CA010E946B236038710540F4611571053A\r
+:102D700039F002C065E070E0862F08958FE708956E\r
+:102D800081E008958091D50180FF08C0609106011F\r
+:102D900070E0759567957595679521C081FF06C0B0\r
+:102DA0006091060170E07595679519C082FF04C0B7\r
+:102DB0006091060170E010C09091D6019923C1F096\r
+:102DC000609105019617A0F780910601899FC001C7\r
+:102DD000112470E00E946B236038710528F461159E\r
+:102DE000710521F0862F08958FE7089581E00895F9\r
+:102DF00061E070E0F4CF803F21F40E947916819564\r
+:102E000004C0813F29F40E9479168093D901089566\r
+:102E1000823F21F40E947916819504C0833F29F4F2\r
+:102E20000E9479168093D8010895893F19F40E9471\r
+:102E3000C21605C08A3F31F40E94C2168195809364\r
+:102E4000DA0108958B3F21F40E94C216819504C0D7\r
+:102E50008C3F29F40E94C2168093DB010895843FC1\r
+:102E600021F48091D701816017C0853F21F48091C2\r
+:102E7000D701826011C0863F21F48091D701846020\r
+:102E80000BC0873F21F48091D701886005C0883F3F\r
+:102E900031F48091D70180618093D70108958D3FEF\r
+:102EA00021F48091D50181600BC08E3F21F4809187\r
+:102EB000D501826005C08F3F29F48091D5018460DF\r
+:102EC0008093D5010895803F39F48091D90187FF1F\r
+:102ED0006CC01092D90169C0813F29F48091D90159\r
+:102EE0001816BCF362C09091D801823F29F497FF75\r
+:102EF0005CC01092D80159C0833F19F41916CCF365\r
+:102F000054C0893F41F48091DA0118160CF04DC08D\r
+:102F10001092DA014AC08A3F29F48091DA0187FFD2\r
+:102F200044C0F6CF8B3F39F48091DB0187FF3DC071\r
+:102F30001092DB013AC08C3F29F48091DB01181616\r
+:102F4000BCF333C0843F21F48091D7018E7F17C03A\r
+:102F5000853F21F48091D7018D7F11C0863F21F4F8\r
+:102F60008091D7018B7F0BC0873F21F48091D701DF\r
+:102F7000877F05C0883F31F48091D7018F7E809391\r
+:102F8000D70113C08D3F21F48091D5018E7F0BC0F6\r
+:102F90008E3F21F48091D5018D7F05C08F3F29F4AC\r
+:102FA0008091D5018B7F8093D5018091D8018111CB\r
+:102FB0000EC08091D90181110AC08091DA0181117E\r
+:102FC00006C08091DB01811102C01092D6010895E4\r
+:102FD00087ED91E00E94FB090E94DE159093D401D9\r
+:102FE0008093D30108951F93CF93DF938091D301F2\r
+:102FF0009091D4010E94EA15AC019091D6019923D9\r
+:1030000021F02091090130E006C020910A018AE0F8\r
+:10301000289F900111244217530708F486C080911D\r
+:10302000D801C091D901D091DA011091DB01811151\r
+:1030300007C0C11176C0D11174C0111172C075C022\r
+:103040009F3F19F09F5F9093D601181624F40E94B9\r
+:1030500079168093D8018091D80187FF05C00E941E\r
+:10306000791681958093D8011C1624F40E94791654\r
+:103070008093D9018091D90187FF05C00E947916FC\r
+:1030800081958093D9016091D801662339F1C0916F\r
+:10309000D901CC2319F1772767FD7095872F972FDA\r
+:1030A0000E94722223E333E343E35FE30E94D622CC\r
+:1030B0000E943A226093D8016C2F772767FD7095A4\r
+:1030C000872F972F0E94722223E333E343E35FE3CA\r
+:1030D0000E94D6220E943A226093D9011D1624F440\r
+:1030E0000E94C2168093DA018091DA0187FF05C041\r
+:1030F0000E94C21681958093DA01111624F40E9471\r
+:10310000C2168093DB018091DB0187FF05C00E941E\r
+:10311000C21681958093DB01DF91CF911F910C94B2\r
+:10312000E8179F3F09F08ECF96CFDF91CF911F9187\r
+:103130000895E7EDF1E085E0DF011D928A95E9F75A\r
+:103140001092D6011092D5010895833081F128F4B0\r
+:10315000813059F08230D1F00895853009F449C0AA\r
+:10316000B8F1863009F456C0089580910A01262FDF\r
+:1031700030E0280F311D2F3F310524F4680F609394\r
+:103180000A0108958FEF80930A0108958091090143\r
+:10319000262F30E0280F311D2F3F310524F4680F12\r
+:1031A0006093090108958FEF80930901089580913C\r
+:1031B0000801262F30E0280F311D2F3F310524F460\r
+:1031C000680F6093080108958FEF809308010895B8\r
+:1031D00080910701262F30E0280F311D2F3F310548\r
+:1031E00024F4680F6093070108958FEF809307011F\r
+:1031F000089580910601262F30E0280F311D2F3FC2\r
+:10320000310524F4680F6093060108958FEF8093D1\r
+:103210000601089580910501262F30E0280F311D09\r
+:103220002F3F310524F4680F6093050108958FEF57\r
+:10323000809305010895833011F128F4813049F01D\r
+:10324000823091F00895853081F120F18630C1F10E\r
+:10325000089580910A01681720F4861B80930A0163\r
+:10326000089510920A01089580910901681720F4C9\r
+:10327000861B809309010895109209010895809199\r
+:103280000801681720F4861B8093080108951092A6\r
+:103290000801089580910701681720F4861B809328\r
+:1032A000070108951092070108958091060168179B\r
+:1032B00020F4861B8093060108951092060108955C\r
+:1032C00080910501681720F4861B809305010895FD\r
+:1032D0001092050108950F931F938D3109F471C069\r
+:1032E00008F045C0803109F485C008F5873009F43D\r
+:1032F0006FC068F4863009F0ADC08091CD01817F48\r
+:103300008E7F8093CD0181E08093DD01A4C08B305E\r
+:1033100009F49EC08E3009F09DC08091CD0182FBE2\r
+:10332000222720F991E0922790FB82F96CC0863128\r
+:1033300009F48EC060F4813109F08CC00E94940EB3\r
+:103340009091020181E089278093020181C0893137\r
+:1033500009F47EC08B3109F07DC08091CD0181FBE5\r
+:10336000222720F991E0922790FB81F94CC0853308\r
+:1033700009F466C048F4873209F462C008F44FC00B\r
+:10338000893209F45DC066C0833438F48A3308F0AA\r
+:1033900044C0883309F45CC05DC0833409F450C074\r
+:1033A000883409F057C00E94940E0FEF13ED20E30C\r
+:1033B000015010402040E1F700C000000E94391683\r
+:1033C00047C00E94F51A0E94E4090E94460640C0C8\r
+:1033D0009091CD01892F8095817080FB90F929F023\r
+:1033E000966098609093CD0136C0997F977F9093B7\r
+:1033F000CD012EC08091CD0183FB222720F991E0E1\r
+:10340000922790FB83F98093CD01992309F1809154\r
+:10341000CD0181608093CD011BC0895301C08D51C6\r
+:1034200041E050E060E070E08A019B0104C0000FC1\r
+:10343000111F221F331F8A95D2F7C901B80104C09A\r
+:1034400061E070E080E090E00E9454120E94940ECF\r
+:1034500081E001C080E01F910F91089580E0089500\r
+:1034600080E008958E518A3030F4E82FF0E0EA5E73\r
+:10347000FE4F8081089580E00895CF93C82F8091FA\r
+:10348000DD01813079F018F08230E9F186C0E091F9\r
+:103490000301F09104018081813169F0823209F0E9\r
+:1034A0007EC009C0E0910301F09104018081813167\r
+:1034B00011F0823261F48C2F0E942E1A811104C007\r
+:1034C0008C2F0E946B191DC081E090E01AC08C2FD8\r
+:1034D0000E94301A811114C0C43179F048F4CB3005\r
+:1034E00079F0C03109F05FC082E08093DD0108C04F\r
+:1034F000C93219F0C83321F056C01092DD0153C013\r
+:1035000081E0817052C0C93281F110F5C43169F196\r
+:10351000A8F4C73009F045C08AE080930A0194E11D\r
+:103520009093090193E0909308018093070188E04C\r
+:103530008093060188E28093050133C082EE8C0FF0\r
+:10354000863078F58C2F0E94321A8093DC0129C0D6\r
+:10355000CE34E9F020F4CB3421F56AE013C0C13554\r
+:1035600079F0C235F1F461E00DC08091DC0188236F\r
+:1035700019F01092DC0115C081E08093DD0115C0C7\r
+:1035800061E006C08091DC010E94A5180AC06AE0D3\r
+:103590008091DC010E941B1904C01092DD0180E0C3\r
+:1035A00004C081E002C080E0ACCFCF910895E1E893\r
+:1035B000F0E08081886080838081816080838FB724\r
+:1035C000F89493E09093890090ED909388008FBFDA\r
+:1035D0000895EFE6F0E08081826080830895EFE651\r
+:1035E000F0E080818D7F80830895EFE6F0E09081A8\r
+:1035F00082E08927808308951F920F920FB60F9261\r
+:1036000011242F933F934F935F936F937F938F93E7\r
+:103610009F93AF93BF93EF93FF938091DE019091BF\r
+:10362000DF0101969093DF018093DE01811103C0D9\r
+:1036300082E00E944606E091DF01E695E695F0E023\r
+:10364000E954FC4FE4918091DE018E1303C080E0C9\r
+:103650000E944606FF91EF91BF91AF919F918F918C\r
+:103660007F916F915F914F913F912F910F900FBE7E\r
+:103670000F901F9018958091F0010895CF93DF93DC\r
+:1036800000D01F92CDB7DEB79C018091F801843045\r
+:1036900019F593E099833B832A839093E9008FEF98\r
+:1036A0009091E800815095FD06C095ED9A95F1F74F\r
+:1036B00000008111F5CF8091E80085FF0DC040E04A\r
+:1036C00050E063E070E0CE0101960E94A71D80915A\r
+:1036D000E8008E778093E8000F900F900F90DF91B5\r
+:1036E000CF910895CF93DF9300D01F92CDB7DEB76F\r
+:1036F0002091F801243021F522E029839B838A83DD\r
+:1037000083E08093E9008FEF9091E800815095FD70\r
+:1037100006C095ED9A95F1F700008111F5CF8091E3\r
+:10372000E80085FF0DC040E050E063E070E0CE01AE\r
+:1037300001960E94A71D8091E8008E778093E80093\r
+:103740000F900F900F90DF91CF9108952091F80185\r
+:103750002430F1F422E02093E9002FEF3091E800CB\r
+:10376000215035FD06C035ED3A95F1F700002111E5\r
+:10377000F5CF2091E80025FF0BC040E050E065E068\r
+:1037800070E00E94A71D8091E8008E778093E8008A\r
+:103790000895CF93DF93EC019091F801943009F0F4\r
+:1037A00046C0809115018823D9F0809102018823B9\r
+:1037B000B9F09093E9008FEF9091E800815095FD6A\r
+:1037C00006C095E19A95F1F700008111F5CF80913F\r
+:1037D000E80085FF2CC040E050E060E170E017C0D9\r
+:1037E00081E08093E9008FEF9091E800815095FD92\r
+:1037F00006C095ED9A95F1F700008111F5CF809103\r
+:10380000E80085FF14C040E050E068E070E0CE01C1\r
+:103810000E94A71D8091E8008E778093E80080E1E8\r
+:10382000FE01A0EEB1E001900D928A95E1F7DF91E3\r
+:10383000CF9108958091F701811109C00E943C1F2A\r
+:103840000E94991F8091E20084608093E2000895B5\r
+:103850001092F701089508950C94E91A0E94CF156B\r
+:103860000E94EF1A0E94E4090C94460642E061ECC3\r
+:1038700081E00E94B61E42E061EC82E00E94B61E2A\r
+:1038800042E061EC83E00E94B61E42E161EC84E01C\r
+:103890000C94B61E8091FA01833009F455C030F4BF\r
+:1038A000813071F0823009F48EC008958A3009F4B5\r
+:1038B0007AC08B3009F460C0893009F09CC020C008\r
+:1038C0008091F901813A09F096C08091E800877FE4\r
+:1038D0008093E8008091FD019091FE01892B21F4F5\r
+:1038E00060E180EE91E003C060E080E090E070E095\r
+:1038F0000E94F21D8091E8008B778093E800089584\r
+:103900008091F901813209F076C08091FD0190919A\r
+:10391000FE01009719F0039709F06DC08091E8004F\r
+:10392000877F8093E8008091E80082FD05C0809148\r
+:10393000F8018111F8CF5FC08091F1008093F00110\r
+:103940008091E8008B7753C08091F901813A09F0AA\r
+:1039500052C08091FD019091FE01892B09F04BC06E\r
+:103960008091E800877F8093E8008091E80080FFE5\r
+:10397000FCCF8091150136C08091F9018132D9F5D3\r
+:103980008091FD019091FE01892BA9F58091E800BD\r
+:10399000877F8093E8000E94EB1E8091FB0180935B\r
+:1039A00015010C94940E8091F901813221F58091DA\r
+:1039B000E800877F8093E8000E94EB1E8091FC0165\r
+:1039C0008093F10108958091F901813AA1F48091E9\r
+:1039D000E800877F8093E8008091E80080FFFCCFBB\r
+:1039E0008091F1018093F1008091E8008E778093BF\r
+:1039F000E8000C94EB1E089584B7877F84BF0FB650\r
+:103A0000F894A8958091600088618093600010927E\r
+:103A100060000FBE80E880936100109261000E94F8\r
+:103A2000330A0E943C1F0E94991F8091E20084602B\r
+:103A30008093E20078940E941F220E94350A8BE056\r
+:103A400091E00E94DF090E94D71A8091F801853029\r
+:103A500069F40E948E158091F6018823B1F30E94CB\r
+:103A6000BB15882391F30E94911DEFCF0E943B0A62\r
+:103A7000ECCF292F332723303105C9F064F42130EE\r
+:103A8000310581F02230310509F043C08DE690E028\r
+:103A90002BE234E042C021323105F1F0223231050F\r
+:103AA00041F137C082E190E028E934E036C099273F\r
+:103AB0008130910541F08230910541F0892B49F523\r
+:103AC000E7E2F4E005C0EFE0F4E002C0E7EFF3E086\r
+:103AD000849190E09F0121C06430D8F4E62FF0E09B\r
+:103AE000EE0FFF1FE45DFE4F2081318189E090E001\r
+:103AF00014C0643070F470E0FB01EE0FFF1FEC5D4A\r
+:103B0000FE4F20813181FB01E05EFE4F808190E01D\r
+:103B100004C080E090E020E030E0FA0131832083AF\r
+:103B2000089580E189BD82E189BD09B400FEFDCF21\r
+:103B30008091D8008F7D8093D8008091E0008260D2\r
+:103B40008093E0008091E00081FDFCCF0895CF924A\r
+:103B5000DF92EF92FF920F931F93CF93DF93EC01CD\r
+:103B60008B016A010E940A1F811133C0C114D10464\r
+:103B700039F0F60180819181081B190BC80FD91FFC\r
+:103B8000E12CF12C0115110519F18091E80085FD5A\r
+:103B900016C08091E8008E778093E800C114D104AC\r
+:103BA00049F0F60180819181E80EF91EF182E082F0\r
+:103BB00085E00FC00E940A1F882321F30AC0899163\r
+:103BC0008093F10001501109FFEFEF1AFF0ADACFDD\r
+:103BD00080E0DF91CF911F910F91FF90EF90DF90E8\r
+:103BE000CF9008952091FF013091000226173707EA\r
+:103BF00048F06115710539F42091E8002E77209383\r
+:103C0000E80001C0B90140E061157105A9F12091FA\r
+:103C1000F801222309F443C0253009F442C0209161\r
+:103C2000E80023FD40C02091E80022FD32C0209131\r
+:103C3000E80020FFE9CF4091F3002091F20030E04E\r
+:103C4000342BFC01CF016115710559F02830310585\r
+:103C500040F481918093F100615071092F5F3F4FD3\r
+:103C6000F1CF41E02830310509F040E02091E80033\r
+:103C70002E772093E800C8CF4111C9CF0AC08091A8\r
+:103C8000F801882361F0853061F08091E80083FDC0\r
+:103C90000AC08091E80082FFF2CF80E0089582E0C0\r
+:103CA000089583E0089581E008952091FF01309107\r
+:103CB00000022617370748F06115710539F4209185\r
+:103CC000E8002E772093E80001C0B901FC0120E054\r
+:103CD0006115710591F18091F801882309F440C0C4\r
+:103CE000853009F43FC08091E80083FD3DC080919C\r
+:103CF000E80082FD2FC08091E80080FFE9CF20918D\r
+:103D0000F3008091F20090E0922B6115710559F05B\r
+:103D10008830910540F424912093F1003196615050\r
+:103D200071090196F2CF21E0089709F020E0809117\r
+:103D3000E8008E778093E800CBCF2111CCCF0AC06A\r
+:103D40008091F801882361F0853061F08091E8006E\r
+:103D500083FD0AC08091E80082FFF2CF80E00895E1\r
+:103D600082E0089583E0089581E00895982F9730C8\r
+:103D700058F59093E900981739F07091EC00209174\r
+:103D8000ED005091F00003C0242F762F50E021FF6A\r
+:103D900019C03091EB003E7F3093EB003091ED0085\r
+:103DA0003D7F3093ED003091EB0031603093EB00BC\r
+:103DB0007093EC002093ED005093F0002091EE0002\r
+:103DC00027FF07C09F5FD3CF8F708093E90081E00A\r
+:103DD000089580E008958091F90187FF11C08091D6\r
+:103DE000E80082FD05C08091F8018111F8CF11C073\r
+:103DF0008091E8008B770BC08091F801882349F00F\r
+:103E00008091E80080FFF8CF8091E8008E77809362\r
+:103E1000E80008952091E4003091E50095E6409196\r
+:103E2000EC00842F817040FF22C08091E80080FD6B\r
+:103E30001CC08091F801882391F0853091F0809129\r
+:103E4000EB0085FD10C04091E4005091E500421761\r
+:103E5000530729F39A01915011F784E0089582E005\r
+:103E6000089583E0089581E0089580E008954091E9\r
+:103E7000E80042FFDECF08950E94AA1F0E94B21FF1\r
+:103E8000E0EEF0E0808181608083E8EDF0E0808109\r
+:103E90008F77808319BCA7EDB0E08C918E7F8C93D7\r
+:103EA00080818F7E80831092F70108950F931F9376\r
+:103EB000CF93DF930E94AA1F0E94B21FC8EDD0E0EB\r
+:103EC00088818F77888388818068888388818F7DC7\r
+:103ED000888319BC1092F8011092F4011092F60137\r
+:103EE0001092F50100EE10E0F80180818B7F808355\r
+:103EF00088818160888342E060E080E00E94B61E95\r
+:103F0000E1EEF0E080818E7F8083E2EEF0E0808160\r
+:103F100081608083808188608083F80180818E7FCA\r
+:103F20008083888180618883DF91CF911F910F9179\r
+:103F30000895E8EDF0E080818F7E8083E7EDF0E08A\r
+:103F400080818160808384E082BF81E08093F7017B\r
+:103F50000C94561FE8EDF0E080818E7F80831092F4\r
+:103F6000E20008951092DA001092E10008951F9285\r
+:103F70000F920FB60F9211242F933F934F935F939D\r
+:103F80006F937F938F939F93AF93BF93EF93FF9321\r
+:103F90008091E10082FF0BC08091E20082FF07C0A8\r
+:103FA0008091E1008B7F8093E1000E941E2280912E\r
+:103FB000DA0080FF1FC08091D80080FF1BC0809175\r
+:103FC000DA008E7F8093DA008091D90080FF0DC0E7\r
+:103FD00080E189BD82E189BD09B400FEFDCF81E0A9\r
+:103FE0008093F8010E941A1C05C019BC1092F801B8\r
+:103FF0000E94281C8091E10080FF19C08091E2009E\r
+:1040000080FF15C08091E2008E7F8093E200809156\r
+:10401000E20080618093E2008091D800806280930A\r
+:10402000D80019BC85E08093F8010E942C1C809177\r
+:10403000E10084FF30C08091E20084FF2CC080E169\r
+:1040400089BD82E189BD09B400FEFDCF8091D80011\r
+:104050008F7D8093D8008091E1008F7E8093E10076\r
+:104060008091E2008F7E8093E2008091E200816087\r
+:104070008093E2008091F401882311F084E007C06E\r
+:104080008091E30087FD02C081E001C083E080935E\r
+:10409000F8010E942E1C8091E10083FF29C08091CD\r
+:1040A000E20083FF25C08091E100877F8093E100DB\r
+:1040B00082E08093F8011092F4018091E1008E7FFC\r
+:1040C0008093E1008091E2008E7F8093E2008091F6\r
+:1040D000E20080618093E20042E060E080E00E94C4\r
+:1040E000B61E8091F00088608093F0000E942B1C27\r
+:1040F000FF91EF91BF91AF919F918F917F916F91C0\r
+:104100005F914F913F912F910F900FBE0F901F9095\r
+:1041100018951F920F920FB60F9211242F933F9371\r
+:104120004F935F936F937F938F939F93AF93BF93BF\r
+:10413000CF93DF93EF93FF93C091E900CF7080910D\r
+:10414000EC00D82FD17080FDD0E81092E90080916A\r
+:10415000F000877F8093F00078940E94CD20109229\r
+:10416000E9008091F00088608093F000CD2BCF7043\r
+:10417000C093E900FF91EF91DF91CF91BF91AF9193\r
+:104180009F918F917F916F915F914F913F912F916F\r
+:104190000F900FBE0F901F9018951F93CF93DF9332\r
+:1041A000CDB7DEB7AA970FB6F894DEBF0FBECDBF6E\r
+:1041B000E9EFF1E088E08E0F9091F10091938E137A\r
+:1041C000FBCF0E944A1C8091E80083FF1FC18091B1\r
+:1041D000F9019091FA01492F50E04A30510508F059\r
+:1041E00015C1FA01E558FF4F0C947F23803881F008\r
+:1041F000823809F00BC18091FD018F708093E90036\r
+:104200008091EB0085FB882780F91092E90006C0B9\r
+:104210008091F5019091F601911182609091E800F2\r
+:10422000977F9093E8008093F1001092F100C8C04E\r
+:10423000282F2D7F09F0EAC0882319F0823061F021\r
+:10424000E5C08091FB01813009F0E0C0933009F0B6\r
+:1042500080E08093F6012BC08091FB01811127C083\r
+:104260008091FD018F7009F4D1C08093E900209105\r
+:10427000EB0020FF1CC0933021F48091EB008062A2\r
+:1042800014C09091EB0090619093EB0021E030E03E\r
+:10429000A90102C0440F551F8A95E2F74093EA0036\r
+:1042A0001092EA008091EB0088608093EB001092FE\r
+:1042B000E9008091E800877F86C08111A7C0109136\r
+:1042C000FB011F778091E3008078812B8093E300CE\r
+:1042D0008091E800877F8093E8000E94EB1E809128\r
+:1042E000E80080FFFCCF8091E30080688093E300CA\r
+:1042F000111102C082E001C083E08093F80186C002\r
+:104300008058823008F082C08091FB019091FC01BE\r
+:104310008C3D53E0950779F583E08A838AE28983AF\r
+:104320004FB7F894DE01139620E03EE051E2E32F10\r
+:10433000F0E050935700E49120FF03C0E295EF7046\r
+:104340003F5FEF708E2F90E0EA3010F0C79601C00B\r
+:10435000C0968D939D932F5F243149F74FBF809175\r
+:10436000E800877F8093E8006AE270E0CE01019662\r
+:104370000E94F21D14C0AE014F5F5F4F6091FD01BE\r
+:104380000E94391DBC01892B09F440C09091E800BE\r
+:10439000977F9093E80089819A810E94551E8091B1\r
+:1043A000E8008B778093E80031C0803879F5809100\r
+:1043B000E800877F8093E8008091F4018093F1000A\r
+:1043C0008091E8008E778093E8000E94EB1E1EC06B\r
+:1043D00081111CC09091FB019230C0F48091E800E3\r
+:1043E000877F8093E8009093F4010E94EB1E8091F8\r
+:1043F000F401811106C08091E30087FD02C081E0D5\r
+:1044000001C084E08093F8010E94361C8091E8008E\r
+:1044100083FF0AC08091E800877F8093E800809145\r
+:10442000EB0080628093EB00AA960FB6F894DEBF93\r
+:104430000FBECDBFDF91CF911F9108950895CF9307\r
+:104440008091F8018823A1F0C091E900CF7090918C\r
+:10445000EC00892F817090FD80E8C82B1092E90054\r
+:104460008091E80083FD0E94CD20CF70C093E900C9\r
+:10447000CF9108950E9441226894B1110C94D022EA\r
+:1044800008950E94B52288F09F5798F0B92F992778\r
+:10449000B751B0F0E1F0660F771F881F991F1AF02F\r
+:1044A000BA95C9F714C0B13091F00E94CF22B1E0A3\r
+:1044B00008950C94CF22672F782F8827B85F39F0A2\r
+:1044C000B93FCCF3869577956795B395D9F73EF4C8\r
+:1044D00090958095709561957F4F8F4F9F4F089570\r
+:1044E000E89409C097FB3EF490958095709561958E\r
+:1044F0007F4F8F4F9F4F9923A9F0F92F96E9BB2744\r
+:104500009395F695879577956795B795F111F8CFBF\r
+:10451000FAF4BB0F11F460FF1BC06F5F7F4F8F4F2A\r
+:104520009F4F16C0882311F096E911C0772321F020\r
+:104530009EE8872F762F05C0662371F096E8862FB8\r
+:1045400070E060E02AF09A95660F771F881FDAF70F\r
+:10455000880F9695879597F9089557FD9058440FC1\r
+:10456000551F59F05F3F71F04795880F97FB991FD2\r
+:1045700061F09F3F79F0879508951216130614068F\r
+:10458000551FF2CF4695F1DF08C01616170618061C\r
+:10459000991FF1CF86957105610508940895E894F7\r
+:1045A000BB2766277727CB0197F908950E94E92258\r
+:1045B0000C945A230E944C2338F00E94532320F07D\r
+:1045C000952311F00C9443230C94492311240C944B\r
+:1045D000D0220E94AD2270F3959FC1F3950F50E059\r
+:1045E000551F629FF001729FBB27F00DB11D639FA5\r
+:1045F000AA27F00DB11DAA1F649F6627B00DA11D4B\r
+:10460000661F829F2227B00DA11D621F739FB00DF0\r
+:10461000A11D621F839FA00D611D221F749F332760\r
+:10462000A00D611D231F849F600D211D822F762FF9\r
+:104630006A2F11249F5750409AF0F1F088234AF0D6\r
+:10464000EE0FFF1FBB1F661F771F881F9150504042\r
+:10465000A9F79E3F510580F00C9443230C94D0227F\r
+:104660005F3FE4F3983ED4F3869577956795B795C9\r
+:10467000F795E7959F5FC1F7FE2B880F911D9695E3\r
+:10468000879597F9089597F99F6780E870E060E053\r
+:1046900008959FEF80EC089500240A9416161706DB\r
+:1046A00018060906089500240A9412161306140623\r
+:1046B00005060895092E0394000C11F4882352F086\r
+:1046C000BB0F40F4BF2B11F460FF04C06F5F7F4F3E\r
+:1046D0008F4F9F4F089597FB072E16F4009407D035\r
+:1046E00077FD09D00E94852307FC05D03EF4909504\r
+:1046F00081959F4F0895709561957F4F0895EE0FB6\r
+:10470000FF1F0590F491E02D0994AA1BBB1B51E1FA\r
+:1047100007C0AA1FBB1FA617B70710F0A61BB70B31\r
+:10472000881F991F5A95A9F780959095BC01CD01D6\r
+:104730000895F999FECF92BD81BDF89A992780B569\r
+:104740000895A8E1B0E042E050E00C94C023262F89\r
+:10475000F999FECF92BD81BDF89A019700B4021677\r
+:1047600031F020BD0FB6F894FA9AF99A0FBE089569\r
+:104770000196272F0E94A8230C94A723DC01CB01CC\r
+:10478000FC01F999FECF06C0F2BDE1BDF89A319661\r
+:1047900000B40D9241505040B8F70895F894FFCFFF\r
+:1047A000052001BA0128080A03140A3B1BC91BA6ED\r
+:1047B0001B721B3E1B0101020304050607080900CA\r
+:1047C000404D363966051905E304AA043D04560434\r
+:0447D0006F048804E6\r
+:00000001FF\r
diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md
new file mode 100644 (file)
index 0000000..3bbe98f
--- /dev/null
@@ -0,0 +1,165 @@
+# The Easy Way
+
+If you can find firmware someone else has made that does what you want, that
+is the easiest way to customize your ErgoDox.  It requires no programming
+experience or the setup of a build environment.
+
+Quickstart:
+
+  - Find and download an existing firmware
+    [from Other Firmware Options](#other-firmware-options)
+
+  - Then flash the firmware to your [ErgoDox Ez](#ergodox-ez)
+    or [ErgoDox Infinity](#ergodox-infinity)
+
+# Customizing Keymaps
+
+There are many existing keymaps in the "keymaps" directory.  If you just want
+to use one of them, you don't need to modify keymaps and can just build and
+flash the firmware as described below.  These directories each have a
+"readme.md" file which describe them.
+
+If none of the existing keymaps suit you, you can create your own custom
+keymap.  This will require some experience with coding.  Follow these steps
+to customize a keymap:
+
+  - Read the [qmk firmware README](https://github.com/jackhumbert/qmk_firmware) from top to bottom.  Then come back here.  :)
+
+  - Clone the qmk_firmware repository
+
+  - Set up your build environment (see below).
+
+  - Make a new directory under "keymaps" to hold your customizations.
+
+  - Copy an existing keymap that is close to what you want, such as
+    "keymaps/default/keymap.c".
+
+  - Use an editor to modify the new "keymap.c".  See "Finding the keycodes you
+    need" below).  Try to edit the comments as well, so the "text graphics"
+    represent your layout correctly.
+
+  - Compile your new firmware (see below)
+
+  - Flash your firmware (see below)
+
+  - Test the changes.
+
+  - Submit your keymap as a pull request to the qmk_firmware repository so
+    others can use it.  You will want to add a "readme.md" that describes the
+    keymap.
+
+# Build Dependencies
+
+Before you can build, you will need the build dependencies.  There is a script
+to try to do this for Linux:
+
+  - Run the `util/install_dependencies.sh` script as root.
+
+For the Infinity, you need the chibios submodules to be checked out or you
+will receive errors about the build process being unable to find the chibios
+files.  Check them out with:
+
+  - Go to the top level repo directory and run: `git submodule update --init --recursive`
+
+# Flashing Firmware
+
+## ErgoDox Ez
+
+The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html).
+
+Linux users need to modify udev rules as described on the Teensy Linux page.
+Some distributions provide a binary, maybe called `teensy-loader-cli`).
+
+To flash the firmware:
+
+  - Build the firmware with `make keymapname`, for example `make default` 
+  - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g.
+    `ergodox_ez_default.hex`
+
+  - Start the teensy loader.
+
+  - Load the .hex file into it.
+
+  - Press the Reset button by inserting a paperclip gently into the reset hole
+    in the top right corder.
+
+  - Click the button in the Teensy app to download the firmware.
+
+## ErgoDox Infinity
+
+The Infinity is two completely independent keyboards, and needs to be flashed
+for the left and right halves seperately.  To flash them:
+
+  - Build the firmware with `make infinity-keymapname`
+
+  - Plug in the left hand keyboard only.
+
+  - Press the program button (back of keyboard, above thumb pad).
+
+  - Install the firmware with `sudo make infinity-keymapname-dfu-util`
+
+  - Build left hand firmware with `make infinity-keymapname MASTER=right`
+
+  - Plug in the right hand keyboard only.
+
+  - Press the program button (back of keyboard, above thumb pad).
+
+  - Install the firmware with `sudo make infinity-keymapname-dfu-util MASTER=right`
+
+More information on the Infinity firmware is available in the [TMK/chibios for
+Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md)
+
+### Infinity Master/Two Halves
+
+The Infinity is two completely independent keyboards, that can connect together.
+You have a few options in how you flash the firmware:
+
+- Flash the left half, rebuild the firmware with "MASTER=right" and then flash
+  the right half.  This allows you to plug in either half directly to the
+  computer and is what the above instructions do.
+
+- Flash the left half, then flash the same firmware on the right.  This only
+  works when the left half is plugged directly to the computer and the keymap
+  is mirrored.  It saves the small extra step of rebuilding with
+  "MASTER=right".
+
+- The same as the previous one but with "MASTER=right" when you build the
+  firmware, then flash the same firmware to both halves.  You just have to
+  directly connect the right half to the computer.
+
+- For minor changes such as changing only the keymap without having updated
+  any part of the firmware code itself, you can program only the MASTER half.
+  It is safest to program both halves though.
+
+# Contributing your keymap
+
+The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format.
+
+1. All work goes inside your keymap subdirectory (`keymaps/german` in this example).
+2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did.
+3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :)
+4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout.
+
+# Finding the keycodes you need
+
+Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`.
+
+That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot).
+
+If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out.
+
+# Other Firmware Options
+
+There are external tools for customizing the layout, but those do not use
+the featurs of this qmk firmware.  These sites include:
+
+  - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez
+  - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files
+
+You can also find an existing firmware that you like, for example from:
+
+  - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/)
+
+This qmk firmware also provides the ability to customize keymaps, but requires
+a toolchain to build the firmware.  See below for instructions on building
+firmware and customizing keymaps.
diff --git a/keyboards/ergodox/rules.mk b/keyboards/ergodox/rules.mk
new file mode 100644 (file)
index 0000000..2e501e8
--- /dev/null
@@ -0,0 +1,28 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make = Make software.
+#
+# make clean = Clean out built project files.
+#
+# That's pretty much all you need. To compile, always go make clean, 
+# followed by make.
+#
+# For advanced users only:
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+#----------------------------------------------------------------------------
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE  ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE   ?= no  # Console for debug(+400)
+COMMAND_ENABLE   ?= yes # Commands for debug and configuration
+CUSTOM_MATRIX    ?= yes # Custom matrix file for the ErgoDox EZ
+SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE      ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+UNICODE_ENABLE   ?= yes # Unicode
+ONEHAND_ENABLE   ?= yes # Allow swapping hands of keyboard
diff --git a/keyboards/ergodox_ez/190hotfix.sh b/keyboards/ergodox_ez/190hotfix.sh
deleted file mode 100755 (executable)
index bdc3adc..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/bash
-#a tool to fix broken keymaps as a result of pull request #190 
-#changing the declaration of matrix_scan_user() and matrix_init_user()
-#
-#This script will save a copy of the specified keymap as keymap.c.bak
-#and then create a new keymap.c with the definion corrected.
-#this script must be run from the ergodox_ez directory
-if [ $# -ne 1 ]; then
-    echo $0: usage: ./190hotfix keymap_name
-    exit 1
-fi
-
-echo Saving backup as ./keymaps/$1/keymap.c.bak ...
-mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak
-
-echo Modifying ./keymaps/$1/keymap.c ...
-cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c
-
-echo Complete!
diff --git a/keyboards/ergodox_ez/Makefile b/keyboards/ergodox_ez/Makefile
deleted file mode 100644 (file)
index 54edaed..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make = Make software.
-#
-# make clean = Clean out built project files.
-#
-# That's pretty much all you need. To compile, always go make clean, 
-# followed by make.
-#
-# For advanced users only:
-# make teensy = Download the hex file to the device, using teensy_loader_cli.
-#               (must have teensy_loader_cli installed).
-#
-#----------------------------------------------------------------------------
-
-# # project specific files
-SRC = twimaster.c \
-         matrix.c
-
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= no  # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE  ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE  ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE   ?= no  # Console for debug(+400)
-COMMAND_ENABLE   ?= yes # Commands for debug and configuration
-CUSTOM_MATRIX    ?= yes # Custom matrix file for the ErgoDox EZ
-SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE      ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-MIDI_ENABLE      ?= no  # MIDI controls
-UNICODE_ENABLE   ?= yes # Unicode
-
-ifndef QUANTUM_DIR
-       include ../../Makefile
-endif
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h
deleted file mode 100644 (file)
index 2bb5673..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x1307
-#define DEVICE_VER      0x0001
-#define MANUFACTURER    ErgoDox EZ
-#define PRODUCT         ErgoDox EZ
-#define DESCRIPTION     QMK keyboard firmware for Ergodox EZ
-
-/* key matrix size */
-#define MATRIX_ROWS 14
-#define MATRIX_COLS 6
-
-#define MOUSEKEY_DELAY          100
-#define MOUSEKEY_INTERVAL       20
-#define MOUSEKEY_MAX_SPEED      3
-#define MOUSEKEY_TIME_TO_MAX    10
-
-#define TAPPING_TOGGLE  1
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE    5
-#define TAPPING_TERM    200
-#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
-    keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
-    keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
-)
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-//#define DEBUG_MATRIX_SCAN_RATE
-
-#endif
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
deleted file mode 100644 (file)
index f0558d9..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "ergodox_ez.h"
-#include "i2cmaster.h"
-
-bool i2c_initialized = 0;
-uint8_t mcp23018_status = 0x20;
-
-void matrix_init_kb(void) {
-   // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
-    TCCR1A = 0b10101001;  // set and configure fast PWM
-    TCCR1B = 0b00001001;  // set and configure fast PWM
-
-    // (tied to Vcc for hardware convenience)
-    DDRB  &= ~(1<<4);  // set B(4) as input
-    PORTB &= ~(1<<4);  // set B(4) internal pull-up disabled
-
-    // unused pins - C7, D4, D5, D7, E6
-    // set as input with internal pull-ip enabled
-    DDRC  &= ~(1<<7);
-    DDRD  &= ~(1<<7 | 1<<5 | 1<<4);
-    DDRE  &= ~(1<<6);
-    PORTC |=  (1<<7);
-    PORTD |=  (1<<7 | 1<<5 | 1<<4);
-    PORTE |=  (1<<6);
-
-    ergodox_blink_all_leds();
-
-    matrix_init_user();
-}
-
-void ergodox_blink_all_leds(void)
-{
-    ergodox_led_all_off();
-    ergodox_led_all_set(LED_BRIGHTNESS_HI);
-    ergodox_right_led_1_on();
-    _delay_ms(50);
-    ergodox_right_led_2_on();
-    _delay_ms(50);
-    ergodox_right_led_3_on();
-    _delay_ms(50);
-    ergodox_right_led_1_off();
-    _delay_ms(50);
-    ergodox_right_led_2_off();
-    _delay_ms(50);
-    ergodox_right_led_3_off();
-    //ergodox_led_all_on();
-    //_delay_ms(333);
-    ergodox_led_all_off();
-}
-
-uint8_t init_mcp23018(void) {
-    mcp23018_status = 0x20;
-
-    // I2C subsystem
-    if (i2c_initialized == 0) {
-        i2c_init();  // on pins D(1,0)
-        i2c_initialized++;
-        _delay_ms(1000);
-    }
-
-    // set pin direction
-    // - unused  : input  : 1
-    // - input   : input  : 1
-    // - driving : output : 0
-    mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
-    mcp23018_status = i2c_write(IODIRA);            if (mcp23018_status) goto out;
-    mcp23018_status = i2c_write(0b00000000);        if (mcp23018_status) goto out;
-    mcp23018_status = i2c_write(0b00111111);        if (mcp23018_status) goto out;
-    i2c_stop();
-
-    // set pull-up
-    // - unused  : on  : 1
-    // - input   : on  : 1
-    // - driving : off : 0
-    mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
-    mcp23018_status = i2c_write(GPPUA);             if (mcp23018_status) goto out;
-    mcp23018_status = i2c_write(0b00000000);        if (mcp23018_status) goto out;
-    mcp23018_status = i2c_write(0b00111111);        if (mcp23018_status) goto out;
-
-out:
-    i2c_stop();
-
-    return mcp23018_status;
-}
-
-
diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h
deleted file mode 100644 (file)
index db4ec86..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef ERGODOX_EZ_H
-#define ERGODOX_EZ_H
-
-#include "quantum.h"
-#include <stdint.h>
-#include <stdbool.h>
-#include "i2cmaster.h"
-#include <util/delay.h>
-
-#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
-#define CPU_16MHz       0x00
-
-// I2C aliases and register addresses (see "mcp23018.md")
-#define I2C_ADDR        0b0100000
-#define I2C_ADDR_WRITE  ( (I2C_ADDR<<1) | I2C_WRITE )
-#define I2C_ADDR_READ   ( (I2C_ADDR<<1) | I2C_READ  )
-#define IODIRA          0x00            // i/o direction register
-#define IODIRB          0x01
-#define GPPUA           0x0C            // GPIO pull-up resistor register
-#define GPPUB           0x0D
-#define GPIOA           0x12            // general purpose i/o port register (write modifies OLAT)
-#define GPIOB           0x13
-#define OLATA           0x14            // output latch register
-#define OLATB           0x15
-
-extern uint8_t mcp23018_status;
-
-void init_ergodox(void);
-void ergodox_blink_all_leds(void);
-uint8_t init_mcp23018(void);
-uint8_t ergodox_left_leds_update(void);
-
-#define LED_BRIGHTNESS_LO       15
-#define LED_BRIGHTNESS_HI       255
-
-
-inline void ergodox_board_led_on(void)      { DDRD |=  (1<<6); PORTD |=  (1<<6); }
-inline void ergodox_right_led_1_on(void)    { DDRB |=  (1<<5); PORTB |=  (1<<5); }
-inline void ergodox_right_led_2_on(void)    { DDRB |=  (1<<6); PORTB |=  (1<<6); }
-inline void ergodox_right_led_3_on(void)    { DDRB |=  (1<<7); PORTB |=  (1<<7); }
-inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); }
-
-inline void ergodox_board_led_off(void)     { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
-inline void ergodox_right_led_1_off(void)   { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
-inline void ergodox_right_led_2_off(void)   { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
-inline void ergodox_right_led_3_off(void)   { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
-inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
-
-inline void ergodox_led_all_on(void)
-{
-    ergodox_board_led_on();
-    ergodox_right_led_1_on();
-    ergodox_right_led_2_on();
-    ergodox_right_led_3_on();
-}
-
-inline void ergodox_led_all_off(void)
-{
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-}
-
-inline void ergodox_right_led_1_set(uint8_t n)    { OCR1A = n; }
-inline void ergodox_right_led_2_set(uint8_t n)    { OCR1B = n; }
-inline void ergodox_right_led_3_set(uint8_t n)    { OCR1C = n; }
-inline void ergodox_right_led_set(uint8_t led, uint8_t n)  {
-    (led == 1) ? (OCR1A = n) :
-    (led == 2) ? (OCR1B = n) :
-                 (OCR1C = n);
-}
-
-inline void ergodox_led_all_set(uint8_t n)
-{
-    ergodox_right_led_1_set(n);
-    ergodox_right_led_2_set(n);
-    ergodox_right_led_3_set(n);
-}
-
-#define KEYMAP(                                                 \
-                                                                \
-    /* left hand, spatial positions */                          \
-    k00,k01,k02,k03,k04,k05,k06,                                \
-    k10,k11,k12,k13,k14,k15,k16,                                \
-    k20,k21,k22,k23,k24,k25,                                    \
-    k30,k31,k32,k33,k34,k35,k36,                                \
-    k40,k41,k42,k43,k44,                                        \
-                            k55,k56,                            \
-                                k54,                            \
-                        k53,k52,k51,                            \
-                                                                \
-    /* right hand, spatial positions */                         \
-        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
-        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
-            k28,k29,k2A,k2B,k2C,k2D,                            \
-        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
-                k49,k4A,k4B,k4C,k4D,                            \
-    k57,k58,                                                    \
-    k59,                                                        \
-    k5C,k5B,k5A )                                               \
-                                                                \
-   /* matrix positions */                                       \
-   {                                                            \
-    { k00, k10, k20, k30, k40, KC_NO },   \
-    { k01, k11, k21, k31, k41, k51 },   \
-    { k02, k12, k22, k32, k42, k52 },   \
-    { k03, k13, k23, k33, k43, k53 },   \
-    { k04, k14, k24, k34, k44, k54 },   \
-    { k05, k15, k25, k35, KC_NO, k55 },   \
-    { k06, k16, KC_NO, k36, KC_NO, k56 },   \
-                                                                 \
-    { k07, k17, KC_NO, k37,KC_NO, k57 },   \
-    { k08, k18, k28, k38,KC_NO, k58 },   \
-    { k09, k19, k29, k39, k49, k59 },   \
-    { k0A, k1A, k2A, k3A, k4A, k5A },   \
-    { k0B, k1B, k2B, k3B, k4B, k5B },   \
-    { k0C, k1C, k2C, k3C, k4C, k5C },   \
-    { k0D, k1D, k2D, k3D, k4D, KC_NO }    \
-   }
-
-#endif
diff --git a/keyboards/ergodox_ez/i2cmaster.h b/keyboards/ergodox_ez/i2cmaster.h
deleted file mode 100644 (file)
index 3917b9e..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-#ifndef _I2CMASTER_H
-#define _I2CMASTER_H   1
-/************************************************************************* 
-* Title:    C include file for the I2C master interface 
-*           (i2cmaster.S or twimaster.c)
-* Author:   Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
-* File:     $Id: i2cmaster.h,v 1.10 2005/03/06 22:39:57 Peter Exp $
-* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
-* Target:   any AVR device
-* Usage:    see Doxygen manual
-**************************************************************************/
-
-#ifdef DOXYGEN
-/**
- @defgroup pfleury_ic2master I2C Master library
- @code #include <i2cmaster.h> @endcode
-  
- @brief I2C (TWI) Master Software Library
-
- Basic routines for communicating with I2C slave devices. This single master 
- implementation is limited to one bus master on the I2C bus. 
-
- This I2c library is implemented as a compact assembler software implementation of the I2C protocol 
- which runs on any AVR (i2cmaster.S) and as a TWI hardware interface for all AVR with built-in TWI hardware (twimaster.c).
- Since the API for these two implementations is exactly the same, an application can be linked either against the
- software I2C implementation or the hardware I2C implementation.
-
- Use 4.7k pull-up resistor on the SDA and SCL pin.
- Adapt the SCL and SDA port and pin definitions and eventually the delay routine in the module 
- i2cmaster.S to your target when using the software I2C implementation ! 
- Adjust the  CPU clock frequence F_CPU in twimaster.c or in the Makfile when using the TWI hardware implementaion.
-
- @note 
-    The module i2cmaster.S is based on the Atmel Application Note AVR300, corrected and adapted 
-    to GNU assembler and AVR-GCC C call interface.
-    Replaced the incorrect quarter period delays found in AVR300 with 
-    half period delays. 
-    
- @author Peter Fleury pfleury@gmx.ch  http://jump.to/fleury
-
- @par API Usage Example
-  The following code shows typical usage of this library, see example test_i2cmaster.c
-
- @code
-
- #include <i2cmaster.h>
-
-
- #define Dev24C02  0xA2      // device address of EEPROM 24C02, see datasheet
-
- int main(void)
- {
-     unsigned char ret;
-
-     i2c_init();                             // initialize I2C library
-
-     // write 0x75 to EEPROM address 5 (Byte Write) 
-     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode
-     i2c_write(0x05);                        // write address = 5
-     i2c_write(0x75);                        // write value 0x75 to EEPROM
-     i2c_stop();                             // set stop conditon = release bus
-
-
-     // read previously written value back from EEPROM address 5 
-     i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode
-
-     i2c_write(0x05);                        // write address = 5
-     i2c_rep_start(Dev24C02+I2C_READ);       // set device address and read mode
-
-     ret = i2c_readNak();                    // read one byte from EEPROM
-     i2c_stop();
-
-     for(;;);
- }
- @endcode
-
-*/
-#endif /* DOXYGEN */
-
-/**@{*/
-
-#if (__GNUC__ * 100 + __GNUC_MINOR__) < 304
-#error "This library requires AVR-GCC 3.4 or later, update to newer AVR-GCC compiler !"
-#endif
-
-#include <avr/io.h>
-
-/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
-#define I2C_READ    1
-
-/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
-#define I2C_WRITE   0
-
-
-/**
- @brief initialize the I2C master interace. Need to be called only once 
- @param  void
- @return none
- */
-extern void i2c_init(void);
-
-
-/** 
- @brief Terminates the data transfer and releases the I2C bus 
- @param void
- @return none
- */
-extern void i2c_stop(void);
-
-
-/** 
- @brief Issues a start condition and sends address and transfer direction 
-  
- @param    addr address and transfer direction of I2C device
- @retval   0   device accessible 
- @retval   1   failed to access device 
- */
-extern unsigned char i2c_start(unsigned char addr);
-
-
-/**
- @brief Issues a repeated start condition and sends address and transfer direction 
-
- @param   addr address and transfer direction of I2C device
- @retval  0 device accessible
- @retval  1 failed to access device
- */
-extern unsigned char i2c_rep_start(unsigned char addr);
-
-
-/**
- @brief Issues a start condition and sends address and transfer direction 
-   
- If device is busy, use ack polling to wait until device ready 
- @param    addr address and transfer direction of I2C device
- @return   none
- */
-extern void i2c_start_wait(unsigned char addr);
-
-/**
- @brief Send one byte to I2C device
- @param    data  byte to be transfered
- @retval   0 write successful
- @retval   1 write failed
- */
-extern unsigned char i2c_write(unsigned char data);
-
-
-/**
- @brief    read one byte from the I2C device, request more data from device 
- @return   byte read from I2C device
- */
-extern unsigned char i2c_readAck(void);
-
-/**
- @brief    read one byte from the I2C device, read is followed by a stop condition 
- @return   byte read from I2C device
- */
-extern unsigned char i2c_readNak(void);
-
-/** 
- @brief    read one byte from the I2C device
- Implemented as a macro, which calls either i2c_readAck or i2c_readNak
- @param    ack 1 send ack, request more data from device<br>
-               0 send nak, read is followed by a stop condition 
- @return   byte read from I2C device
- */
-extern unsigned char i2c_read(unsigned char ack);
-#define i2c_read(ack)  (ack) ? i2c_readAck() : i2c_readNak(); 
-
-
-/**@}*/
-#endif
diff --git a/keyboards/ergodox_ez/keymaps/ab/Makefile b/keyboards/ergodox_ez/keymaps/ab/Makefile
deleted file mode 100644 (file)
index b673c5c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Having a file like this allows you to override Makefile definitions
-# for your own particular keymap
-
-SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
-COMMAND_ENABLE   = no  # Commands for debug and configuration
-
-ifndef QUANTUM_DIR
-       include ../../../../Makefile
-endif
diff --git a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json b/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json
deleted file mode 100644 (file)
index e2badad..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-[
-  {
-    "name": "Beginner's Keymap for Ergodox-EZ",
-    "author": "Anand Babu Periasamy"
-  },
-  [
-    {
-      "x": 3.5
-    },
-    "#\n3\n\n\nF3",
-    {
-      "x": 10.5
-    },
-    ")\n0\n\n\nF10"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 2.5
-    },
-    "@\n2\n\n\nF2",
-    {
-      "x": 1
-    },
-    "$\n4\n\n\nF4",
-    {
-      "x": 8.5
-    },
-    "(\n9\n\n\nF9",
-    {
-      "x": 1
-    },
-    "_\n-\n\n\nF11"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 5.5
-    },
-    "%\n5\n\n\nF5",
-    "^\n6\n\n\nF6",
-    {
-      "x": 4.5
-    },
-    "&\n7\n\n\nF7",
-    "*\n8\n\n\nF8"
-  ],
-  [
-    {
-      "y": -0.875,
-      "w": 1.5
-    },
-    "~\n`\n\n\nEsc",
-    "!\n1\n\n\nF1",
-    {
-      "x": 14.5
-    },
-    "+\n=\n\n\nF12",
-    {
-      "a": 7,
-      "w": 1.5
-    },
-    "Backspace\n\n\n\nBackspace"
-  ],
-  [
-    {
-      "y": -0.375,
-      "x": 3.5
-    },
-    "E\n\n\n\n<i class=\"fa fa-caret-up\" aria-hidden=\"true\"></i>",
-    {
-      "x": 10.5
-    },
-    "I"
-  ],
-  [
-    {
-      "y": -0.8799999999999999,
-      "x": 2.5
-    },
-    "W"
-  ],
-  [
-    {
-      "y": -0.9950000000000001,
-      "x": 4.5,
-      "a": 4
-    },
-    "R",
-    {
-      "x": 8.5,
-      "a": 7
-    },
-    "U",
-    {
-      "x": 1
-    },
-    "O"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 5.5
-    },
-    "T",
-    {
-      "h": 1.5
-    },
-    "<i class=\"fa fa-chevron-circle-left\" aria-hidden=\"true\"></i>",
-    {
-      "x": 4.5,
-      "h": 1.5
-    },
-    "<i class=\"fa fa-chevron-circle-right\" aria-hidden=\"true\"></i>",
-    "Y"
-  ],
-  [
-    {
-      "y": -0.875,
-      "a": 6,
-      "w": 1.5
-    },
-    "Tab",
-    {
-      "a": 7
-    },
-    "Q",
-    {
-      "x": 14.5
-    },
-    "P",
-    {
-      "a": 4,
-      "w": 1.5
-    },
-    "|\n\\"
-  ],
-  [
-    {
-      "y": -0.375,
-      "x": 3.5,
-      "a": 7
-    },
-    "D\n\n\n\n<i class=\"fa fa-caret-down\" aria-hidden=\"true\"></i>",
-    {
-      "x": 10.5
-    },
-    "K"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 2.5
-    },
-    "S\n\n\n\n<i class=\"fa fa-caret-left\" aria-hidden=\"true\"></i>",
-    {
-      "x": 1,
-      "c": "#c4bcbc"
-    },
-    "F\n\n\n\n<i class=\"fa fa-caret-right\" aria-hidden=\"true\"></i>",
-    {
-      "x": 8.5
-    },
-    "J",
-    {
-      "x": 1,
-      "c": "#cccccc"
-    },
-    "L"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 5.5
-    },
-    "G",
-    {
-      "x": 6.5
-    },
-    "H"
-  ],
-  [
-    {
-      "y": -0.875,
-      "a": 4,
-      "fa": [
-        0,
-        0,
-        0,
-        2
-      ],
-      "w": 1.5
-    },
-    "\n\n\nCtrl\n\n\nCaps",
-    {
-      "a": 7
-    },
-    "A",
-    {
-      "x": 14.5,
-      "a": 4
-    },
-    ":\n;",
-    {
-      "a": 7,
-      "w": 1.5
-    },
-    "Enter"
-  ],
-  [
-    {
-      "y": -0.625,
-      "x": 6.5,
-      "h": 1.5
-    },
-    "PgDn",
-    {
-      "x": 4.5,
-      "h": 1.5
-    },
-    "PgUp"
-  ],
-  [
-    {
-      "y": -0.75,
-      "x": 3.5
-    },
-    "C\n\n\n\n<i class=\"fa fa-hand-o-up\" aria-hidden=\"true\"></i>",
-    {
-      "x": 10.5,
-      "a": 4
-    },
-    "<\n,"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 2.5,
-      "a": 7
-    },
-    "X\n\n\n\n<i class=\"fa fa-hand-o-left\" aria-hidden=\"true\"></i>",
-    {
-      "x": 1
-    },
-    "V\n\n\n\n<i class=\"fa fa-hand-o-right\" aria-hidden=\"true\"></i>",
-    {
-      "x": 8.5
-    },
-    "M",
-    {
-      "x": 1,
-      "a": 4
-    },
-    ">\n."
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 5.5,
-      "a": 7
-    },
-    "B",
-    {
-      "x": 6.5
-    },
-    "N"
-  ],
-  [
-    {
-      "y": -0.875,
-      "w": 1.5
-    },
-    "Shift",
-    "Z",
-    {
-      "x": 14.5,
-      "a": 4
-    },
-    "?\n/",
-    {
-      "w": 1.5
-    },
-    "\"\n'"
-  ],
-  [
-    {
-      "y": -0.375,
-      "x": 3.5,
-      "a": 7
-    },
-    "Alt\n\n\n\n<i class=\"fa fa-search-minus\" aria-hidden=\"true\"></i>",
-    {
-      "x": 10.5
-    },
-    "<i class=\"fa fa-long-arrow-down\" aria-hidden=\"true\"></i>\n\n\n\n<i class='fa fa-volume-down'></i>"
-  ],
-  [
-    {
-      "y": -0.875,
-      "x": 2.5
-    },
-    "<i class='fa fa-linux'></i>\n\n\n\n<i class=\"fa fa-search\" aria-hidden=\"true\"></i>",
-    {
-      "x": 1
-    },
-    "Alt\n\n\n\n<i class=\"fa fa-search-plus\" aria-hidden=\"true\"></i>",
-    {
-      "x": 8.5
-    },
-    "<i class=\"fa fa-long-arrow-left\" aria-hidden=\"true\"></i>\n\n\n\n<i class=\"fa fa-undo\" aria-hidden=\"true\"></i>",
-    {
-      "x": 1
-    },
-    "<i class=\"fa fa-long-arrow-up\" aria-hidden=\"true\"></i>\n\n\n\n<i class='fa fa-volume-up'></i>"
-  ],
-  [
-    {
-      "y": -0.75,
-      "x": 0.5
-    },
-    "Ctrl\n\n\n\n<i class='fa fa-download'></i>",
-    "Esc",
-    {
-      "x": 14.5
-    },
-    "<i class=\"fa fa-long-arrow-right\" aria-hidden=\"true\"></i>\n\n\n\n<i class='fa fa-volume-off'></i>",
-    "Fn"
-  ],
-  [
-    {
-      "r": 30,
-      "rx": 6.5,
-      "ry": 4.25,
-      "y": -1,
-      "x": 1
-    },
-    "<i class=\"fa fa-clone\" aria-hidden=\"true\"></i>",
-    "("
-  ],
-  [
-    {
-      "h": 2
-    },
-    "Space",
-    {
-      "h": 2
-    },
-    "Del",
-    "["
-  ],
-  [
-    {
-      "x": 2
-    },
-    "{"
-  ],
-  [
-    {
-      "r": -30,
-      "rx": 13,
-      "y": -1,
-      "x": -3
-    },
-    ")",
-    "<i class=\"fa fa-paste\" aria-hidden=\"true\"></i>"
-  ],
-  [
-    {
-      "x": -3
-    },
-    "]",
-    {
-      "h": 2
-    },
-    "Enter",
-    {
-      "h": 2
-    },
-    "<i class=\"fa fa-chevron-left\" aria-hidden=\"true\"></i>"
-  ],
-  [
-    {
-      "x": -3
-    },
-    "}"
-  ]
-]
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png b/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png
deleted file mode 100644 (file)
index 7406844..0000000
Binary files a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/ab/keymap.c b/keyboards/ergodox_ez/keymaps/ab/keymap.c
deleted file mode 100644 (file)
index df6f334..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define FN1  1 // media layer
-
-#define CAPS_CTL CTL_T(KC_CAPS)  // Caps on tap, Ctrl on hold.
-#define COPY     LCTL(KC_V)      // C-c Copy
-#define PASTE    LCTL(KC_V)      // C-v Paste
-#define ZM_NRM   LCTL(KC_0)      // C-0 Zoom Normal
-#define ZM_OUT   LCTL(KC_MINS)   // C-- Zoom Out
-#define ZM_IN    LCTL(KC_PLUS)   // C-+ Zoom In
-#define EM_UNDO  LCTL(KC_UNDS)   // C-_ Emacs Undo
-
-#define _MOB  1 // Mobile#
-#define _CUS1 2 // Custom macro 1
-#define _CUS2 3 // Custom macro 2
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  |  6   |           |   7  |   8  |   9  |   0  |   -  |   =  | BSpace |
- * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  | Fwd  |           | Back |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Caps/Ctl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | Enter  |
- * |--------+------+------+------+------+------| PgDn |           | PgUp |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  |   '    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | Ctrl |  Esc | LGui | Alt  | Alt  |                                       | Left |  Dn  |  Up  | Right|  Fn  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | Copy |  (   |       |   )  | Paste|
- *                                 ,------|------+------|       |------+------+------.
- *                                 |      |      |  [   |       |   ]  |      |      |
- *                                 |Space | Del  |------|       |------| Enter|BSpace|
- *                                 |      |      |  {   |       |   }  |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-    [BASE] = KEYMAP(  // layer 0 : default
-       // Left hand
-       KC_GRV,   KC_1,    KC_2,    KC_3,     KC_4,     KC_5,    KC_6,
-       KC_TAB,   KC_Q,    KC_W,    KC_E,     KC_R,     KC_T,    KC_WBAK,
-       CAPS_CTL, KC_A,    KC_S,    KC_D,     KC_F,     KC_G,
-       KC_LSFT,  KC_Z,    KC_X,    KC_C,     KC_V,     KC_B,    KC_PGDN,
-       KC_LCTL,  KC_ESC,  KC_LGUI, KC_LALT,  KC_LALT,
-       COPY,     KC_LCBR,
-       KC_LPRN,
-       KC_SPC,   KC_DEL,  KC_LBRC,
-       // Right hand
-       KC_7,     KC_8,    KC_9,    KC_0,     KC_MINS,  KC_EQL,  KC_BSPC,
-       KC_WFWD,  KC_Y,    KC_U,    KC_I,     KC_O,     KC_P,    KC_BSLS,
-       KC_H,     KC_J,    KC_K,    KC_L,     KC_SCLN,  KC_ENT,
-       KC_PGUP,  KC_N,    KC_M,    KC_COMM,  KC_DOT,   KC_SLSH, KC_QUOT,
-       KC_LEFT,  KC_DOWN, KC_UP,   KC_RIGHT, TG(FN1),
-       KC_RCBR,  PASTE,
-       KC_RPRN,
-       KC_RBRC,  KC_ENT,  KC_BSPC),
-/* Keymap 1: Fn Keys, media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |  Esc   |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 | BSpace |
- * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      | LClk | MClk | RClk |      |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Teensy|      | ZmNrm| ZmOut| ZmIn |                                       | Undo |VolDn |VolUp | Mute |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------+------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// FN1 Layer
-    [FN1] = KEYMAP(
-       // Left hand
-       KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN3, KC_BTN2, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, ZM_NRM,  ZM_OUT,  ZM_IN,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       RESET,   KC_TRNS, KC_TRNS,
-       // Right hand
-       KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_BSPC,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS, M(_MOB), KC_TRNS, M(_CUS1),M(_CUS2),KC_TRNS, KC_TRNS,
-       EM_UNDO, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-       ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    // MACRODOWN only works in this function
-    switch(id) {
-    case _MOB: // Your mobile# here.
-       return MACRODOWN(T(1), T(2), T(3), T(MINS),
-                        T(1), T(2), T(3), T(MINS),
-                        T(1), T(2), T(3), T(4),
-                        END);
-    case _CUS1: // Your custom macro 1
-       return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(SPC), END);
-    case _CUS2: // Your custom macro 2
-       return MACRODOWN(T(L), T(S), T(SPC), T(MINS), T(L), T(ENT), END);
-    };
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-       // TODO: Make this relevant to the ErgoDox EZ.
-    case 1:
-       ergodox_right_led_1_on();
-       break;
-    case 2:
-       ergodox_right_led_2_on();
-       break;
-    default:
-       // none
-       break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/ab/readme.md b/keyboards/ergodox_ez/keymaps/ab/readme.md
deleted file mode 100644 (file)
index 6b1ac2b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# Beginner's keymap for Ergodox-EZ
-Beginner's keymap emulates standard QWERTY keyboard for beginners. Once you get comfortable with the Ergodox-EZ, you may fork this keymap and customize it for your own needs or find a suitable one from the community contributed keymaps. 
-
-![Beginner's Keymap](keyboard-layout.png)
-
-#### Pros
-* Easier to switch between regular keyboards and Ergodox-EZ.
-* Easy on beginners. It has everything you need for your day to day usage.
-
-#### Cons
-* Keys are not ergonomically placed to take full advantage of Ergodox-EZ. Take a look at this [Default Keymap](https://github.com/jackhumbert/qmk_firmware/blob/master/keyboards/ergodox_ez/keymaps/default/readme.md)
-* While multiple layers are possible, beginner's keymap only uses one additional layer for mouse, function and volume keys.
-
-#### Notes
-* Ideally number key [6] should have started from the right-hand side of the keyboard. Doing so breaks the familiar QWERTY layout.
-* Quote key ['] should have been placed between [:] and [Enter]. Due to lack of key space, it is placed below [Enter].
-* Double [Alt] keys are placed adjacent to each other for convenience.
-* [CapsLock] also acts as [Ctrl] key when you press and hold. It is convenient for GNU Emacs users.
-* Additional bracket keys are placed in the center of the keyboard for programmer's convenience.
-
-
diff --git a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c b/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c
deleted file mode 100644 (file)
index 052517d..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_german.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   K  |   .  |   O  |   ,  |   Y  |  L1  |           |  L1  |   V  |   G  |   C  |   L  |   ß  |   Z    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   H  |   A  |   E  |   I  |   U  |------|           |------|   D  |   T  |   R  |   N  |   S  |   F    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |X/Ctrl|   Q  |   Ä  |   Ü  |   Ö  |      |           |      |   B  |   P  |   W  |   M  |   J  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Enter |------|       |------|  Tab   |RShift|
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        DE_K,         DE_DOT, DE_O,   DE_COMM,DE_Y,   TG(SYMB),
-        KC_BSPC,        DE_H,         DE_A,   DE_E,   DE_I,   DE_U,
-        KC_LSFT,        CTL_T(DE_X),  DE_Q,   DE_AE,  DE_UE,  DE_OE,  ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_ENT ,KC_END,
-        // right hand
-        KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-        TG(SYMB),    DE_V,   DE_G,   DE_C,   DE_L,   DE_SS,            DE_Z,
-                     DE_D,   DE_T,   DE_R,   DE_N,   LT(MDIA, DE_S),   GUI_T(KC_F),
-        MEH_T(KC_NO),KC_B,   KC_P,   KC_W,   KC_M,   CTL_T(KC_J),      KC_RSFT,
-                          KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-        KC_LALT,        CTL_T(KC_ESC),
-        KC_PGUP,
-        KC_PGDN,KC_TAB, KC_RSFT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md b/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md
deleted file mode 100644 (file)
index f0dd381..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# Basic implementation for k.o,y variant of the adnw layout
-
-adnw is a layout optimised for usage with german and english language
-k.o,y is a variant of this layout
-http://www.adnw.de/index.php?n=Main.SeitlicheNachbaranschl%C3%A4ge
-
-The os must use the de_DE layout
diff --git a/keyboards/ergodox_ez/keymaps/alexjj/keymap.c b/keyboards/ergodox_ez/keymaps/alexjj/keymap.c
deleted file mode 100644 (file)
index 448f62d..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-#define UNIC 3 // unicode entry layer
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   ESC  |  1!  |  2@  |  3#  |  4$  |  5%  |  6^  |           |  7&  |  8*  |  9(  |  0)  |  -_  |  +=  |  BkSp  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  {   |           |   }  |   Y  |   U  |   I  |   O  |   P  |  |\    |
- * |--------+------+------+------+------+------|  [   |           |   ]  |------+------+------+------+------+--------|
- * | Win    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  :;  |  '"    |
- * |--------+------+------+------+------+------| Home |           | End  |------+------+------+------+------+--------|
- * | LShift |Z/Alt |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | Alt  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |LCtrl | COPY | PASTE| Left | Right|                                       | Down |  Up  |Hyper |  `~  | RCtrl |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *   Hyper = Ctrl+Super+Alt+Shift         | ~L3  |  F5  |       |  F2  | ~L2  |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | PgUp |       | Ins  |      |      |
- *                                 | Enter| BkSp |------|       |------| ~L1  |Space |
- *                                 |      |      | PgDn |       | Del  |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_6,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_LBRC,
-        KC_LGUI,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        ALT_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   KC_HOME,
-        KC_LCTRL,       LCTL(KC_C), LCTL(KC_V),  KC_LEFT,KC_RGHT,
-                                                      KC_FN3,  KC_F5,
-                                                              KC_PGUP,
-                                               KC_ENT,KC_BSPC,KC_PGDN,
-        // right hand
-             KC_7,     KC_8,   KC_9,   KC_0,   KC_MINS,   KC_EQL,        KC_BSPC,
-             KC_RBRC,  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                       KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,
-             KC_END,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,   KC_RSFT,
-             KC_DOWN,KC_UP, ALL_T(KC_NO),KC_GRV,   KC_RCTRL,
-             KC_F2, KC_FN2,
-             KC_INS,
-             KC_DELT,KC_FN1, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |PrintScr|
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |   £  |      |      |      |                                       |      |    . |   0  |   =  |Alt+F4|
- *   `----------------------------------'                                       `----------------------------------'
- *              ↑                         ,-------------.       ,-------------.
- *           THERE!                       |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *    CAD = Ctrl + Alt + Delete    |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       | CAD  |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,M(3),KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_F7, KC_F8,   KC_F9,  KC_F10,   KC_F11,   KC_F12,  KC_PSCR,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_TRNS,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  LALT(KC_F4),
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       LCTL(LALT(KC_DEL)), KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | TEENSY |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolDn |VolUp | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-/* Keymap 3: Unicode Entry
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |  Alt   |  1   |   2  |  3   |  4   |   5  |  6   |           |   7  |  8   |   9  |  0   |  +   |  +   |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |  Alt   |      |      |   E  |      |      |      |           |      |      |   7  |   8  |  9   |  +   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Alt   |   A  |      |   D  |   F  |      |------|           |------|      |   4  |   5  |  6   |  +   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Alt   |      |      |   C  |      |   B  |      |           |      |      |   1  |   2  |  3   |  +   |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | Alt  |  Alt | Alt  |      |      |                                       |   0  |   0  |  0   |  +   |       |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *      WINDOWS ONLY SETUP!!              | ~L3  |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |  Alt |  Alt |------|       |------|  Alt | Alt  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[UNIC] = KEYMAP(  // layer 3 : Unicode Entry
-        // left hand
-       KC_LALT,       KC_P1,      KC_P2,      KC_P3,  KC_P4,     KC_P5,   KC_P6,
-      KC_LALT,       KC_TRNS,    KC_TRNS,    KC_E,   KC_TRNS,   KC_TRNS, KC_TRNS,
-      KC_LALT,       KC_A,       KC_TRNS,    KC_D,   KC_F,      KC_TRNS,
-      KC_LALT,       KC_TRNS,    KC_TRNS,    KC_C,   KC_TRNS,   KC_B,    KC_TRNS,
-      KC_LALT,       KC_LALT,    KC_LALT,    KC_TRNS,KC_TRNS,
-                                                     KC_TRNS,   KC_TRNS,
-                                                                KC_TRNS,
-                                             KC_LALT,KC_LALT,   KC_TRNS,
-        // right hand
-           KC_P7,    KC_P8,     KC_P9,   KC_P0,   KC_PPLS,KC_PPLS,      KC_TRNS,
-           KC_TRNS,  KC_TRNS,   KC_P7,   KC_P8,   KC_P9,  KC_PPLS,      KC_TRNS,
-                     KC_TRNS,   KC_P4,   KC_P5,   KC_P6,  KC_PPLS,      KC_TRNS,
-           KC_TRNS,  KC_TRNS,   KC_P1,   KC_P2,   KC_P3,  KC_PPLS,      KC_TRNS,
-                                KC_P0,   KC_P0,   KC_P0,  KC_PPLS,      KC_TRNS,
-           KC_TRNS, KC_TRNS,
-           KC_TRNS,
-           KC_TRNS,KC_LALT, KC_LALT
-                  ),
-};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),                // FN1 - Momentary Layer 1 (Symbols)
-    [2] = ACTION_LAYER_TAP_TOGGLE(MDIA),                // FN2 - Momentary Layer 2 (Media)
-    [3] = ACTION_LAYER_TAP_TOGGLE(UNIC)                 // FN3 - Momentary Layer 3 (Unicode entry)
-}; 
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-      case 3: // this would trigger when you hit a key mapped as M(3)
-        if (record->event.pressed) {
-          return MACRO( I(255), D(LALT), T(P1), T(P5), T(P6), U(LALT), END  );
-      }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        case 3:
-            ergodox_right_led_3_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/alexjj/readme.md b/keyboards/ergodox_ez/keymaps/alexjj/readme.md
deleted file mode 100644 (file)
index 239e32d..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-Englishman in New York
-===========================
-
-:microphone: :tea:
-
-About
-------
-
-After using the massdrop configurator to get the basics, I wanted to add a
-little extra to my ergodox. Notably the Hyper hotkey, the press and hold,
-and a way to have my beloved £ :pound: symbol available<sup>[1](#unicode)</sup>. Why not switch to a GB
-layout? Well the computers I use are US keymap'd and I can't always change
-that. Plus I've got used to 2/@ and 3/# and moving to the ergodox was hard
-enough. :sweat_smile:
-
-I started from the default and edited from there as I needed. It's somewhat
-similar to a regular layout, particularly R1 and shift/controls. I ended up
-with a few keys that were blank, so I'm testing out some shortcuts. Alt+F4 for
-quitting things in Windows, is one example, but I felt it was better placed on 
-the 1st layer - in case of fat fingers.
-
-Layout
--------
-
-![Layout](rl-layout.jpg "Isn't it lovely")
-
-### Base Layer
-
-```
-,--------------------------------------------------.           ,--------------------------------------------------.
-|   ESC  |  1!  |  2@  |  3#  |  4$  |  5%  |  6^  |           |  7&  |  8*  |  9(  |  0)  |  -_  |  +=  |  BkSp  |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-| Tab    |   Q  |   W  |   E  |   R  |   T  |  {   |           |   }  |   Y  |   U  |   I  |   O  |   P  |  |\    |
-|--------+------+------+------+------+------|  [   |           |   ]  |------+------+------+------+------+--------|
-| Win    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  :;  |  '"    |
-|--------+------+------+------+------+------| Home |           | End  |------+------+------+------+------+--------|
-| LShift |Z/Alt |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | Alt  | RShift |
-`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-  |LCtrl | COPY | PASTE| Left | Right|                                       | Down |  Up  |Hyper |  `~  | RCtrl |
-  `----------------------------------'                                       `----------------------------------'
-                                       ,-------------.       ,-------------.
-  Hyper = Ctrl+Super+Alt+Shift         | ~L3  |  F5  |       |  F2  | ~L2  |
-                                ,------|------|------|       |------+------+------.
-                                |      |      | PgUp |       | Ins  |      |      |
-                                | Enter| BkSp |------|       |------| ~L1  |Space |
-                                |      |      | PgDn |       | Del  |      |      |
-                                `--------------------'       `--------------------'
-``` 
-
-### Symbol Layer
-
-```
-,--------------------------------------------------.           ,--------------------------------------------------.
-|        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |PrintScr|
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |        |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
-`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-  |      |   £  |      |      |      |                                       |      |    . |   0  |   =  |Alt+F4|
-  `----------------------------------'                                       `----------------------------------'
-             ↑                         ,-------------.       ,-------------.
-          THERE!                       |      |      |       |      |      |
-                                ,------|------|------|       |------+------+------.
-   CAD = Ctrl + Alt + Delete    |      |      |      |       |      |      |      |
-                                |      |      |------|       |------|      |      |
-                                |      |      |      |       | CAD  |      |      |
-                                `--------------------'       `--------------------'
-```
-### Media Layer
-
-Not touched this, not used either.
-
-```
-,--------------------------------------------------.           ,--------------------------------------------------.
-| TEENSY |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
-`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-  |      |      |      | Lclk | Rclk |                                       |VolDn |VolUp | Mute |      |      |
-  `----------------------------------'                                       `----------------------------------'
-                                       ,-------------.       ,-------------.
-                                       |      |      |       |      |      |
-                                ,------|------|------|       |------+------+------.
-                                |      |      |      |       |      |      |Brwser|
-                                |      |      |------|       |------|      |Back  |
-                                |      |      |      |       |      |      |      |
-                                `--------------------'       `--------------------'
-```
-### Unicode Layer
-
-Used to enter/test unicode input on Windows. All numbers are numpad keys.
-
-```
-,--------------------------------------------------.           ,--------------------------------------------------.
-|  Alt   |  1   |   2  |  3   |  4   |   5  |  6   |           |   7  |  8   |   9  |  0   |  +   |  +   |        |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|  Alt   |      |      |   E  |      |      |      |           |      |      |   7  |   8  |  9   |  +   |        |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|  Alt   |   A  |      |   D  |   F  |      |------|           |------|      |   4  |   5  |  6   |  +   |        |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|  Alt   |      |      |   C  |      |   B  |      |           |      |      |   1  |   2  |  3   |  +   |        |
-`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-  | Alt  |  Alt | Alt  |      |      |                                       |   0  |   0  |  0   |  +   |       |
-  `----------------------------------'                                       `----------------------------------'
-                                       ,-------------.       ,-------------.
-     WINDOWS ONLY SETUP!!              | ~L3  |      |       |      |      |
-                                ,------|------|------|       |------+------+------.
-                                |      |      |      |       |      |      |      |
-                                |  Alt |  Alt |------|       |------|  Alt | Alt  |
-                                |      |      |      |       |      |      |      |
-                                `--------------------'       `--------------------'
-```
-
-
-Usage
-------
-
-~L1 / L2 / L3 will momentarily switch to a layer if held and another key is pressed.
-If pressed and released will remain on layer until pressed again.
-
-### Unicode
-
-This layout is for Windows only. To enter a character Press and Hold Alt, type + and hex code then release Alt.
-
-Changelog
------------
-
-### [0.2.1] - 2016-04-05
-
-* Changed £ to alt code in Windows. Windows sucks at unicode.
-
-### [0.2.0] - 2016-03-27
-
-* Added unicode layer
-* Moved Copy/Paste to left hand side
-* Switched Enter and Space (again)
-* Added L3 (unicode layer) toggle
-* Removed Press and Hold for Alt on right hand size (/)
-* Swapped Volume Up/Down to match arrows
-* Tried fixing £ macro
-* Removed * in the matrix function things (upstream change)
-
-### [0.1.1] - 2016-03-23
-
-* Changed £ input to a macro
-
-
-### [0.1.0] - 2016-03-22
-
-After actually using the keyboard, I've made some changes:
-
-* Swapped Enter and Space
-* Moved backspace to thumb keys (top right still remains)
-* Added Ctrl+Alt+Delete
-* Added Teensy Reset on 2nd layer
-* Switched Up and Down
-* Changed copy/paste to be Ctrl+c and Ctrl+v as KC_COPY/PASTE didn't work (in Windows)
-* Moved ~L2 to replace +L1 after learning how the function works (notes above)
-* Hopefully fixed GBP symbol (unicode enabled in MakeFile)
-
-### [0.0.1] - 2016-03-21
-
-First version
-
-
-Issues
--------
-
-Space for feedback and notes for future improvements
-
-----
-<sup><a name="unicode">1</a></sup>: For Windows only, and you have to edit the [registry](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input).
diff --git a/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg b/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg
deleted file mode 100644 (file)
index e4e92bf..0000000
Binary files a/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/COPYING b/keyboards/ergodox_ez/keymaps/algernon/COPYING
deleted file mode 100644 (file)
index 94a9ed0..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/keyboards/ergodox_ez/keymaps/algernon/Makefile b/keyboards/ergodox_ez/keymaps/algernon/Makefile
deleted file mode 100644 (file)
index cd7e9e9..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-BOOTMAGIC_ENABLE=no
-COMMAND_ENABLE=no
-SLEEP_LED_ENABLE=no
-UNICODE_ENABLE=no
-FORCE_NKRO ?= yes
-
-ifeq (${FORCE_NKRO},yes)
-OPT_DEFS += -DFORCE_NKRO
-endif
-
-KEYMAP_VERSION = $(shell \
- if [ -d "${KEYMAP_PATH}/.git" ]; then \
-  cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
- else echo QMK; fi)
-
-KEYMAP_BRANCH = $(shell \
- if [ -d "${KEYMAP_PATH}/.git" ]; then \
-  cd "${KEYMAP_PATH}"; \
- fi; \
- git rev-parse --abbrev-ref HEAD 2>/dev/null)
-
-OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\"
-
-ifndef QUANTUM_DIR
-       include ../../../../Makefile
-endif
diff --git a/keyboards/ergodox_ez/keymaps/algernon/config.h b/keyboards/ergodox_ez/keymaps/algernon/config.h
deleted file mode 100644 (file)
index 9bb1025..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef CONFIG_ALGERNON_H
-#define CONFIG_ALGERNON_H
-
-#include "../../config.h"
-
-#undef MOUSEKEY_TIME_TO_MAX
-#undef MOUSEKEY_MAX_SPEED
-
-#define MOUSEKEY_TIME_TO_MAX 1
-#define MOUSEKEY_MAX_SPEED 2
-
-#undef MOUSEKEY_DELAY
-#define MOUSEKEY_DELAY 0
-
-#undef MOUSEKEY_WHEEL_DELAY
-#define MOUSEKEY_WHEEL_DELAY 0
-
-#define ONESHOT_TAP_TOGGLE 2
-#define ONESHOT_TIMEOUT 3000
-
-#undef LOCKING_SUPPORT_ENABLE
-#undef LOCKING_RESYNC_ENABLE
-
-#undef LEADER_TIMEOUT
-#define LEADER_TIMEOUT 1000
-
-#endif
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png
deleted file mode 100644 (file)
index c4e298b..0000000
Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png
deleted file mode 100644 (file)
index 8115585..0000000
Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png
deleted file mode 100644 (file)
index 104a954..0000000
Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png
deleted file mode 100644 (file)
index 16d29e1..0000000
Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png
deleted file mode 100644 (file)
index 698d11e..0000000
Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png
deleted file mode 100644 (file)
index fe3c03c..0000000
Binary files a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/keymap.c b/keyboards/ergodox_ez/keymaps/algernon/keymap.c
deleted file mode 100644 (file)
index 2af3d5f..0000000
+++ /dev/null
@@ -1,1104 +0,0 @@
-/*
- * algernon's ErgoDox EZ layout, please see the readme.md file!
- */
-
-#include "ergodox_ez.h"
-#include "led.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "action_util.h"
-#include "mousekey.h"
-#include "timer.h"
-#include "keymap_plover.h"
-
-/* Layers */
-
-enum {
-  BASE = 0,
-  EXPRM,
-  ARRW,
-  APPSEL,
-  HUN,
-  NMDIA,
-  OHLFT,
-  OHRGT,
-  PLVR,
-};
-
-/* Macros */
-
-enum {
-  NONE = 0,
-  // Buttons that do extra stuff
-  A_GUI,
-  A_PLVR,
-  A_ESC,
-  A_MPN,
-
-  // Function / number keys
-  KF_1, // 1, F1
-  KF_2, // 2, F2
-  KF_3, // ...
-  KF_4,
-  KF_5,
-  KF_6,
-  KF_7,
-  KF_8,
-  KF_9,
-  KF_10,
-  KF_11, // =, F11
-
-  // Application select keys
-  APP_SLK, // Slack
-  APP_EMCS, // Emacs
-  APP_TERM, // Terminal
-  APP_CHRM, // Chrome
-  APP_MSIC, // Music
-
-  // Diagonal mouse movement
-  A_MUL,
-  A_MUR,
-  A_MDL,
-  A_MDR,
-
-  // Hungarian layer keys
-  HU_AA, // Á
-  HU_OO, // Ó
-  HU_EE, // É
-  HU_UU, // Ú
-  HU_II, // Í
-  HU_OE, // Ö
-  HU_UE, // Ü
-  HU_OEE, // Ő
-  HU_UEE, // Ű
-
-  // One-handed layout specials
-  OH_BSSPC,
-  OH_ENTSFT,
-  OH_BASE,
-  OH_LEFT,
-  OH_RIGHT,
-};
-
-/* Fn keys */
-
-enum {
-  F_BSE = 0,
-  F_HUN,
-  F_GUI,
-  F_SFT,
-  F_ALT,
-  F_CTRL
-};
-
-/* Custom keycodes */
-
-enum {
-  CT_CLN = 0x7101
-};
-
-/* States & timers */
-
-uint16_t gui_timer = 0;
-
-uint16_t kf_timers[12];
-
-uint16_t oh_base_timer = 0;
-uint16_t oh_bsspc_timer = 0;
-uint16_t oh_entsft_timer = 0;
-
-#define OH_BLINK_INTERVAL 500
-
-uint8_t oh_left_blink = 0;
-uint16_t oh_left_blink_timer = 0;
-uint8_t oh_right_blink = 0;
-uint16_t oh_right_blink_timer = 0;
-
-uint8_t ct_cln_count = 0;
-uint16_t ct_cln_timer = 0;
-
-/* The Keymap */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Keymap 0: Base Layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |        `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr |           | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10|       F11 |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * | Next/Prev |   '  |   ,  |   .  |   P  |   Y  |   [  |           |  ]   |   F  |   G  |   C  |   R  |  L   | \         |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |       Tab |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |  S   | =         |
- * |-----------+------+------+------+------+------|   (  |           |  )   |------+------+------+------+------+-----------|
- * | Play/Pause|   /  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |  Z   |      Stop |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *     |       |      | Left |  Up  |   :  |                                       |   -  | Down | Rght |      |       |
- *     `-----------------------------------'                                       `-----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         | LAlt | GUI  |           | MDIA | ARRW |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      | Ctrl |           | LEAD |      |      |
- *                                  |Backsp|LShift|------|           |------| Enter| Space|
- *                                  |      |      | ESC  |           | HUN  |      |      |
- *                                  `--------------------'           `--------------------'
- */
-[BASE] = KEYMAP(
-// left hand
- KC_GRV             ,M(KF_1)     ,M(KF_2)     ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
-,M(A_MPN)           ,KC_QUOT     ,KC_COMM     ,KC_DOT ,KC_P   ,KC_Y   ,KC_LBRC
-,KC_TAB             ,KC_A        ,KC_O        ,KC_E   ,KC_U   ,KC_I
-,KC_MPLY            ,KC_SLSH     ,KC_Q        ,KC_J   ,KC_K   ,KC_X   ,KC_LPRN
-,KC_NO              ,KC_NO       ,KC_LEFT     ,KC_UP  ,CT_CLN
-
-                                                            ,F(F_ALT),F(F_GUI)
-                                                                     ,F(F_CTRL)
-                                                    ,KC_BSPC,F(F_SFT),M(A_ESC)
-
-                                                                // right hand
-                                                               ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9)     ,M(KF_10)    ,KC_F11
-                                                               ,KC_RBRC   ,KC_F   ,KC_G   ,KC_C   ,KC_R        ,KC_L        ,KC_BSLS
-                                                                          ,KC_D   ,KC_H   ,KC_T   ,KC_N        ,KC_S        ,KC_EQL
-                                                               ,KC_RPRN   ,KC_B   ,KC_M   ,KC_W   ,KC_V        ,KC_Z        ,KC_MSTP
-                                                                                  ,KC_MINS,KC_DOWN,KC_RGHT     ,KC_NO       ,KC_NO
-
-                                                               ,OSL(NMDIA),OSL(ARRW)
-                                                               ,KC_LEAD
-                                                               ,F(F_HUN)  ,KC_ENT ,KC_SPC
-    ),
-
-/* Keymap 1: Experimental layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |        `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr |           | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10|       F11 |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * | Next/Prev |   '  |   ,  |   .  |   P  |   Y  |   [  |           |  ]   |   L  |   F  |   C  |   R  |  J   | =         |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |       Tab |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |  S   | \         |
- * |-----------+------+------+------+------+------|   (  |           |  )   |------+------+------+------+------+-----------|
- * | Play/Pause|   Z  |   G  |   V  |   K  |   X  |      |           |      |   Q  |   M  |   W  |   B  |  /   |      Stop |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *     |       |      | Left |  Up  |   :  |                                       |   -  | Down | Rght |      |       |
- *     `-----------------------------------'                                       `-----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         | LAlt | GUI  |           | MDIA | ARRW |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      | Ctrl |           | LEAD |      |      |
- *                                  |Backsp|LShift|------|           |------| Enter| Space|
- *                                  |      |      | ESC  |           | HUN  |      |      |
- *                                  `--------------------'           `--------------------'
- */
-[EXPRM] = KEYMAP(
-// left hand
- KC_GRV             ,M(KF_1)     ,M(KF_2)     ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
-,M(A_MPN)           ,KC_QUOT     ,KC_COMM     ,KC_DOT ,KC_P   ,KC_Y   ,KC_LBRC
-,KC_TAB             ,KC_A        ,KC_O        ,KC_E   ,KC_U   ,KC_I
-,KC_MPLY            ,KC_Z        ,KC_G        ,KC_V   ,KC_K   ,KC_X   ,KC_LPRN
-,KC_NO              ,KC_NO       ,KC_LEFT     ,KC_UP  ,CT_CLN
-
-                                                            ,F(F_ALT),F(F_GUI)
-                                                                     ,F(F_CTRL)
-                                                    ,KC_BSPC,F(F_SFT),M(A_ESC)
-
-                                                                // right hand
-                                                               ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9)     ,M(KF_10)    ,KC_F11
-                                                               ,KC_RBRC   ,KC_L   ,KC_F   ,KC_C   ,KC_R        ,KC_J        ,KC_BSLS
-                                                                          ,KC_D   ,KC_H   ,KC_T   ,KC_N        ,KC_S        ,KC_EQL
-                                                               ,KC_RPRN   ,KC_Q   ,KC_M   ,KC_W   ,KC_B        ,KC_SLSH     ,KC_MSTP
-                                                                                  ,KC_MINS,KC_DOWN,KC_RGHT     ,KC_NO       ,KC_NO
-
-                                                               ,OSL(NMDIA),OSL(ARRW)
-                                                               ,KC_LEAD
-                                                               ,F(F_HUN)  ,KC_ENT ,KC_SPC
-    ),
-
-/* Keymap 2: Arrow layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |------|           |------|      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *      |      |      | Home | PgUp |      |                                       |      | PgDn | End  |      |      |
- *      `----------------------------------'                                       `----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         |      |      |           |      |      |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |      |           |      |      |      |
- *                                  |      |      |------|           |------|      |      |
- *                                  |      |      |      |           |      |      |      |
- *                                  `--------------------'           `--------------------'
- */
-
-[ARRW] = KEYMAP(
-// left hand
- KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_HOME   ,KC_PGUP    ,KC_TRNS
-
-                                             ,KC_TRNS ,KC_TRNS
-                                                      ,KC_TRNS
-                                    ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
-                                                                // right hand
-                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                                        ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                                                 ,KC_TRNS ,KC_PGDN ,KC_END  ,KC_TRNS ,KC_TRNS
-
-                                                               ,KC_TRNS ,KC_TRNS
-                                                               ,KC_TRNS
-                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS
-    ),
-
-/* Keymap 3: Application select layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |Music |Slack |Emacs |Term  |Chrome|      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |------|           |------|      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *      |      |      |      |      |      |                                       |      |      |      |      |      |
- *      `----------------------------------'                                       `----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         |      |      |           |      |      |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |      |           |      |      |      |
- *                                  |      |      |------|           |------|      |      |
- *                                  |      |      |      |           |      |      |      |
- *                                  `--------------------'           `--------------------'
- */
-
-[APPSEL] = KEYMAP(
-// left hand
- KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS    ,KC_TRNS    ,KC_TRNS
-,KC_TRNS ,KC_TRNS    ,KC_TRNS   ,KC_TRNS    ,KC_TRNS
-
-                                             ,KC_TRNS ,KC_TRNS
-                                                      ,KC_TRNS
-                                    ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
-                                                                // right hand
-                                                               ,KC_TRNS ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_TRNS
-                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                                        ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                               ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                                                 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
-                                                               ,KC_TRNS ,KC_TRNS
-                                                               ,KC_TRNS
-                                                               ,KC_TRNS ,KC_TRNS  ,KC_TRNS
-    ),
-
-
-/* Keymap 4: Hungarian Layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * |           |      |  Ő   |      |  Ű   |      |      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |   Á  |  Ó   |  É   |  Ú   |  Í   |------|           |------|      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |  Ö   |      |  Ü   |      |      |           |      |      |      |      |      |      |           |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *      |      |      |      |      |      |                                       |      |      |      |      |      |
- *      `----------------------------------'                                       `----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         |      |      |           |      |      |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |      |           |      |      |      |
- *                                  |      |      |------|           |------|      |      |
- *                                  |      |      |      |           | BASE |      |      |
- *                                  `--------------------'           `--------------------'
- */
-
-[HUN] = KEYMAP(
-// left hand
- KC_NO   ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO
-,KC_NO   ,KC_NO   ,M(HU_OEE),KC_NO   ,M(HU_UEE),KC_NO   ,KC_NO
-,KC_NO   ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
-,KC_NO   ,KC_NO   ,M(HU_OE) ,KC_NO   ,M(HU_UE) ,KC_NO   ,KC_NO
-,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO   ,KC_NO
-
-                                             ,KC_NO   ,KC_NO
-                                                      ,KC_NO
-                                    ,KC_NO   ,KC_TRNS ,KC_TRNS
-
-                                                                // right hand
-                                                               ,KC_TRNS ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
-                                                               ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
-                                                                        ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
-                                                               ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
-                                                                                 ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO
-
-                                                               ,KC_NO   ,KC_NO
-                                                               ,KC_NO
-                                                               ,F(F_BSE),KC_TRNS  ,KC_TRNS
-    ),
-
-/* Keymap 5: Navigation & Media layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * | MS Slow   |      |      |      |      |      |ScrLCK|           |ScrLCK|      |      |      |      |      |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * | MS Normal |      | Home |  Up  | PgUp |      |      |           |Scroll|      |MsUpL | MsUp |MsUpR |      |PrintScreen|
- * |-----------+------+------+------+------+------|      |           |  Up  |------+------+------+------+------+-----------|
- * | MS Fast   |      | Left | Down | Right|      |------|           |------|      |MsLeft| MsDn |MsRght|      |           |
- * |-----------+------+------+------+------+------|      |           |Scroll|------+------+------+------+------+-----------|
- * | Play/Pause|      | End  | Down | PgDn |      |      |           | Down |      |MsDnL | MsDn |MsDnR |      |      Stop |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *      |      |      |      |      |      |                                       |      |      |      |      |      |
- *      `----------------------------------'                                       `----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         | Mute | VlUp |           | BASE | MClk |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      | VlDn |           | Prev |Left  |Right |
- *                                  |  SPC | Enter|------|           |------| Click| Click|
- *                                  |      |      | ESC  |           | Next |      |      |
- *                                  `--------------------'           `--------------------'
- */
-[NMDIA] = KEYMAP(
-// left hand
- KC_ACL0    ,KC_NO       ,KC_NO      ,KC_NO   ,KC_NO   ,KC_NO   ,LGUI(KC_L)
-,KC_ACL1    ,KC_NO       ,KC_HOME    ,KC_UP   ,KC_PGUP ,KC_NO   ,KC_NO
-,KC_ACL2    ,KC_NO       ,KC_LEFT    ,KC_DOWN ,KC_RIGHT,KC_NO
-,KC_MPLY    ,KC_NO       ,KC_END     ,KC_DOWN ,KC_PGDN ,KC_NO   ,KC_NO
-,KC_NO      ,KC_NO       ,KC_NO      ,KC_NO   ,KC_NO
-                                                        ,KC_MUTE ,KC_VOLU
-                                                                 ,KC_VOLD
-                                                 ,KC_SPC,KC_ENTER,M(A_ESC)
-
-                                                                     // right hand
-                                                                     ,LGUI(KC_L),KC_NO   ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
-                                                                     ,KC_WH_U   ,KC_NO   ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO    ,KC_PSCR
-                                                                                ,KC_NO   ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO    ,KC_NO
-                                                                     ,KC_WH_D   ,KC_NO   ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO    ,KC_MSTP
-                                                                                         ,KC_NO   ,KC_NO   ,KC_NO   ,KC_NO    ,KC_NO
-
-                                                                     ,KC_TRNS   ,KC_MS_BTN3
-                                                                     ,KC_MPRV
-                                                                     ,KC_MNXT   ,KC_BTN1 ,KC_BTN2
-    ),
-
-/* Keymap 6: One-handed, left side
- *
- * ,-----------------------------------------------------.
- * |        `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A  BSE|
- * |-----------+------+------+------+------+-------------|
- * |       Tab |   '  |   ,  |   .  |   P  |   Y  |   [  |
- * |-----------+------+------+------+------+------|      |
- * |         - |   A  |   O  |   E  |   U  |   I  |------|
- * |-----------+------+------+------+------+------|   (  |
- * | Play/Pause|   ;  |   Q  |   J  |   K  |   X  |      |
- * `-----------+------+------+------+------+-------------'
- *     |  Home | End  | Down |  Up  | ESC  |
- *     `-----------------------------------'
- *                                         ,-------------.
- *                                         | LAlt | GUI  |
- *                                  ,------|------|------|
- *                                  |BackSp|LShift| Ctrl |
- *                                  |      |      |------|
- *                                  |Space |Enter |OTHER |
- *                                  `--------------------'
- */
-[OHLFT] = KEYMAP(
-// left hand
- KC_GRV     ,M(KF_1)     ,M(KF_2)     ,M(KF_3)   ,M(KF_4)    ,M(KF_5) ,M(OH_BASE)
-,KC_TAB     ,KC_QUOT     ,KC_COMM     ,KC_DOT    ,KC_P       ,KC_Y    ,KC_LBRC
-,KC_MINS    ,KC_A        ,KC_O        ,KC_E      ,KC_U       ,KC_I
-,KC_MPLY    ,KC_SCLN     ,KC_Q        ,KC_J      ,KC_K       ,KC_X    ,KC_LPRN
-,KC_HOME    ,KC_END      ,KC_DOWN     ,KC_UP     ,M(A_ESC)
-
-                                                                ,KC_TRNS     ,KC_TRNS
-                                                                             ,KC_TRNS
-                                                    ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
-
-                                                                // right hand
-                                                               ,KC_NO   ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                               ,KC_NO   ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                                        ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                               ,KC_NO   ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                                                ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-
-                                                               ,KC_NO   ,KC_NO
-                                                               ,KC_NO
-                                                               ,KC_NO   ,KC_NO  ,KC_NO
-    ),
-
-/* Keymap 7: One-handed, right side
- *
- * ,-----------------------------------------------------.
- * | =     F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A  BSE|
- * |-----------+------+------+------+------+-------------|
- * |         / |   L  |   R  |   C  |   G  |   F  |   ]  |
- * |-----------+------+------+------+------+------|      |
- * |         \ |   S  |   N  |   T  |   H  |   D  |------|
- * |-----------+------+------+------+------+------|   )  |
- * |      Stop |   Z  |   V  |   W  |   M  |   B  |      |
- * `-----------+------+------+------+------+-------------'
- *     |  PgDn | PgUp | Right| Left | ESC  |
- *     `-----------------------------------'
- *                                         ,-------------.
- *                                         | LAlt | GUI  |
- *                                  ,------|------|------|
- *                                  |BackSp|LShift| Ctrl |
- *                                  |      |      |------|
- *                                  |Space |Enter |OTHER |
- *                                  `--------------------'
- */
-[OHRGT] = KEYMAP(
-// left hand
- M(KF_11)   ,M(KF_10)    ,M(KF_9)     ,M(KF_8)   ,M(KF_7)    ,M(KF_6) ,M(OH_BASE)
-,KC_SLSH    ,KC_L        ,KC_R        ,KC_C      ,KC_G       ,KC_F    ,KC_RBRC
-,KC_BSLS    ,KC_S        ,KC_N        ,KC_T      ,KC_H       ,KC_D
-,KC_MSTP    ,KC_Z        ,KC_V        ,KC_W      ,KC_M       ,KC_B    ,KC_RPRN
-,KC_PGDN    ,KC_PGUP     ,KC_RGHT     ,KC_LEFT   ,M(A_ESC)
-
-                                                                ,KC_TRNS     ,KC_TRNS
-                                                                             ,KC_TRNS
-                                                    ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
-
-                                                                // right hand
-                                                               ,KC_NO   ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                               ,KC_NO   ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                                        ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                               ,KC_NO   ,KC_NO  ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-                                                                                ,KC_NO  ,KC_NO  ,KC_NO       ,KC_NO       ,KC_NO
-
-                                                               ,KC_NO   ,KC_NO
-                                                               ,KC_NO
-                                                               ,KC_NO   ,KC_NO  ,KC_NO
-    ),
-
-/* Keymap 8: Steno for Plover
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      | BASE |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   #  |   #  |   #  |   #  |   #  |   #  |           |  #   |  #   |  #   |   #  |   #  |  #   |   #    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |   T  |   P  |   H  |      |------|           |------|      |  F   |   P  |   L  |  T   |   D    |
- * |--------+   S  +------+------+------+   *  |   *  |           |  *   |  *   +------+------+------+------+--------|
- * |        |      |   K  |   W  |   R  |      |      |           |      |      |  R   |   B  |   G  |  S   |   Z    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |   A  |   O  |------|       |------|  E   |  U   |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-
-[PLVR] = KEYMAP(
-// left hand
-KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,  KC_NO,   M(A_PLVR),
-KC_NO,  PV_NUM, PV_NUM, PV_NUM,  PV_NUM, PV_NUM,  PV_NUM,
-KC_NO,  PV_LS,  PV_LT,  PV_LP,   PV_LH,  PV_STAR,
-KC_NO,  PV_LS,  PV_LK,  PV_LW,   PV_LR,  PV_STAR, PV_STAR,
-KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,
-                                           KC_NO, KC_NO,
-                                           KC_NO,
-                                           PV_A,  PV_O,  KC_NO,
-
-                                                 // right hand
-                                                 KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-                                                 PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,
-                                                          PV_STAR, PV_RF,   PV_RP,   PV_RL,   PV_RT,   PV_RD,
-                                                 PV_STAR, PV_STAR, PV_RR,   PV_RB,   PV_RG,   PV_RS,   PV_RZ,
-                                                                   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-                                           KC_NO,      KC_NO,
-                                           KC_NO,
-                                           KC_NO,PV_E, PV_U
- ),
-
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-   [F_BSE]  = ACTION_LAYER_CLEAR(ON_PRESS)
-  ,[F_HUN]  = ACTION_LAYER_INVERT(HUN, ON_PRESS)
-  ,[F_GUI]  = ACTION_MACRO_TAP(A_GUI)
-  ,[F_SFT]  = ACTION_MODS_ONESHOT (MOD_LSFT)
-  ,[F_ALT]  = ACTION_MODS_ONESHOT (MOD_LALT)
-  ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
-};
-
-void toggle_steno(int pressed)
-{
-  uint8_t layer = biton32(layer_state);
-
-  if (pressed) {
-    if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
-
-    register_code(PV_LP);
-    register_code(PV_LH);
-    register_code(PV_LR);
-    register_code(PV_O);
-    register_code(PV_RL);
-    register_code(PV_RG);
-  } else {
-    unregister_code(PV_LP);
-    unregister_code(PV_LH);
-    unregister_code(PV_LR);
-    unregister_code(PV_O);
-    unregister_code(PV_RL);
-    unregister_code(PV_RG);
-  }
-}
-
-macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
-{
-  uint8_t need_shift = 0;
-  uint8_t hold_shift = 0;
-
-  if (!record->event.pressed)
-    return MACRO_NONE;
-
-  layer_off (HUN);
-
-  if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
-    hold_shift = 1;
-    need_shift = 1;
-    unregister_code (KC_LSFT);
-  }
-  if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
-    need_shift = 1;
-    hold_shift = 0;
-    unregister_code (KC_LSFT);
-  }
-
-  clear_oneshot_mods ();
-
-  register_code (KC_RALT);
-  unregister_code (KC_RALT);
-  if (accent == (KC_DQT)) {
-    register_code (KC_RSFT);
-  }
-  register_code (accent);
-  unregister_code (accent);
-  if (need_shift && accent != (KC_DQT)) {
-    register_code (KC_RSFT);
-  } else if (accent == (KC_DQT) && !need_shift) {
-    unregister_code (KC_RSFT);
-  }
-  register_code (hun_char);
-  unregister_code (hun_char);
-  if (need_shift || accent == (KC_DQT))
-    unregister_code (KC_RSFT);
-  if (hold_shift)
-    register_code (KC_LSFT);
-
-  return MACRO_NONE;
-}
-
-void ang_handle_kf (keyrecord_t *record, uint8_t id)
-{
-  uint8_t code = id - KF_1;
-
-  if (record->event.pressed) {
-    kf_timers[code] = timer_read ();
-  } else {
-    uint8_t kc;
-
-    if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
-      // Long press
-      kc = KC_F1 + code;
-    } else {
-      if (id == KF_11)
-        kc = KC_EQL;
-      else
-        kc = KC_1 + code;
-    }
-
-    register_code (kc);
-    unregister_code (kc);
-  }
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-      switch(id) {
-      case A_ESC:
-        if (record->event.pressed) {
-          if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
-            clear_oneshot_mods ();
-          } else {
-            register_code (KC_ESC);
-          }
-          layer_off (HUN);
-        } else {
-          unregister_code (KC_ESC);
-        }
-        break;
-
-      case A_MPN:
-        if (record->event.pressed) {
-          if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
-              ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
-            int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
-
-            if (oneshot)
-              clear_oneshot_mods ();
-            unregister_code (KC_LSFT);
-
-            register_code (KC_MPRV);
-            unregister_code (KC_MPRV);
-
-            if (!oneshot)
-              register_code (KC_LSFT);
-          } else {
-            return MACRO (T(MNXT), END);
-          }
-        }
-        break;
-
-        /* Hungarian layer */
-      case HU_AA:
-        return ang_do_hun (record, KC_QUOT, KC_A);
-      case HU_OO:
-        return ang_do_hun (record, KC_QUOT, KC_O);
-      case HU_EE:
-        return ang_do_hun (record, KC_QUOT, KC_E);
-      case HU_UU:
-        return ang_do_hun (record, KC_QUOT, KC_U);
-      case HU_II:
-        return ang_do_hun (record, KC_QUOT, KC_I);
-      case HU_OE:
-        return ang_do_hun (record, KC_DQT, KC_O);
-      case HU_UE:
-        return ang_do_hun (record, KC_DQT, KC_U);
-      case HU_OEE:
-        return ang_do_hun (record, KC_EQL, KC_O);
-      case HU_UEE:
-        return ang_do_hun (record, KC_EQL, KC_U);
-
-        /* Mouse movement */
-      case A_MUL:
-        if (record->event.pressed) {
-          mousekey_on(KC_MS_UP);
-          mousekey_on(KC_MS_LEFT);
-        } else {
-          mousekey_off(KC_MS_UP);
-          mousekey_off(KC_MS_LEFT);
-        }
-        mousekey_send();
-        break;
-
-      case A_MUR:
-        if (record->event.pressed) {
-          mousekey_on(KC_MS_UP);
-          mousekey_on(KC_MS_RIGHT);
-        } else {
-          mousekey_off(KC_MS_UP);
-          mousekey_off(KC_MS_RIGHT);
-        }
-        mousekey_send();
-        break;
-
-      case A_MDL:
-        if (record->event.pressed) {
-          mousekey_on(KC_MS_DOWN);
-          mousekey_on(KC_MS_LEFT);
-        } else {
-          mousekey_off(KC_MS_DOWN);
-          mousekey_off(KC_MS_LEFT);
-        }
-        mousekey_send();
-        break;
-
-      case A_MDR:
-        if (record->event.pressed) {
-          mousekey_on(KC_MS_DOWN);
-          mousekey_on(KC_MS_RIGHT);
-        } else {
-          mousekey_off(KC_MS_DOWN);
-          mousekey_off(KC_MS_RIGHT);
-        }
-        mousekey_send();
-        break;
-
-        /* Plover base */
-      case A_PLVR:
-        toggle_steno(record->event.pressed);
-        break;
-
-        /* GUI & AppSel */
-      case A_GUI:
-        if (record->event.pressed) {
-          register_code (KC_LGUI);
-          if (record->tap.count && !record->tap.interrupted) {
-            if (record->tap.count >= 2) {
-              register_code (KC_W);
-              layer_on (APPSEL);
-              set_oneshot_layer (APPSEL, ONESHOT_START);
-            }
-          } else {
-            record->tap.count = 0;
-          }
-          gui_timer = 0;
-        } else {
-          if (record->tap.count >= 2)
-            {
-              unregister_code (KC_W);
-              clear_oneshot_layer_state (ONESHOT_PRESSED);
-            }
-          gui_timer = timer_read ();
-        }
-        break;
-
-      case APP_SLK:
-        return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
-
-      case APP_EMCS:
-        return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
-
-      case APP_TERM:
-        return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
-
-      case APP_CHRM:
-        return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
-
-      case APP_MSIC:
-        return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
-
-        /* Function keys */
-      case KF_1 ... KF_11:
-        ang_handle_kf (record, id);
-        break;
-
-        /* 1HAND layout */
-      case OH_BASE:
-        if (record->event.pressed) {
-          oh_base_timer = timer_read ();
-        } else {
-          if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
-            layer_clear ();
-          } else {
-            return MACRO (T(APP), END);
-          }
-        }
-        break;
-
-      case OH_BSSPC:
-        if (record->event.pressed) {
-          oh_bsspc_timer = timer_read ();
-        } else {
-          if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
-            return MACRO (T(BSPC), END);
-          } else {
-            return MACRO (T(SPC), END);
-          }
-        }
-        break;
-
-      case OH_ENTSFT:
-        if (record->event.pressed) {
-          oh_entsft_timer = timer_read ();
-        } else {
-          if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
-            if (keyboard_report->mods & MOD_BIT(KC_LSFT))
-              unregister_code (KC_LSFT);
-            else
-              register_code (KC_LSFT);
-          } else {
-            return MACRO (T(ENT), END);
-          }
-        }
-        break;
-
-      case OH_LEFT:
-        if (record->event.pressed) {
-          layer_move (OHLFT);
-          oh_left_blink = 1;
-          oh_left_blink_timer = timer_read ();
-          ergodox_right_led_1_on ();
-        }
-        break;
-
-      case OH_RIGHT:
-        if (record->event.pressed) {
-          layer_move (OHRGT);
-          oh_right_blink = 1;
-          oh_right_blink_timer = timer_read ();
-          ergodox_right_led_3_on ();
-        }
-        break;
-      }
-      return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-  ergodox_led_all_on();
-  for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
-    ergodox_led_all_set (i);
-    _delay_ms (5);
-  }
-  _delay_ms(1000);
-  for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
-    ergodox_led_all_set (i);
-    _delay_ms (10);
-  }
-  ergodox_led_all_off();
-};
-
-LEADER_EXTERNS();
-
-void ang_do_unicode (void) {
-  register_code (KC_RCTL);
-  register_code (KC_RSFT);
-  register_code (KC_U);
-  unregister_code (KC_U);
-  unregister_code (KC_RSFT);
-  unregister_code (KC_RCTL);
-  _delay_ms (100);
-}
-
-void ang_tap (uint16_t codes[]) {
-  for (int i = 0; codes[i] != 0; i++) {
-    register_code (codes[i]);
-    unregister_code (codes[i]);
-    _delay_ms (50);
-  }
-}
-
-#define TAP_ONCE(code) \
-  register_code (code); \
-  unregister_code (code)
-
-uint8_t is_exp = 0;
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-  uint8_t layer = biton32(layer_state);
-
-  if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
-    unregister_code (KC_LGUI);
-
-  if (ct_cln_timer && timer_elapsed (ct_cln_timer) > TAPPING_TERM) {
-    if (ct_cln_count == 1) {
-      register_code (KC_RSFT);
-      register_code (KC_SCLN);
-      unregister_code (KC_SCLN);
-      unregister_code (KC_RSFT);
-    } else if (ct_cln_count == 2) {
-      register_code (KC_SCLN);
-      unregister_code (KC_SCLN);
-    }
-
-    ct_cln_count = 0;
-    ct_cln_timer = 0;
-  }
-
-  if (layer != OHLFT)
-    oh_left_blink = 0;
-  if (layer != OHRGT)
-    oh_right_blink = 0;
-
-  if (layer == HUN) {
-    ergodox_right_led_2_on();
-    ergodox_right_led_3_on();
-  } else if (layer == NMDIA) {
-    ergodox_right_led_1_on();
-    ergodox_right_led_2_on();
-  } else if (layer == PLVR) {
-    ergodox_right_led_1_on ();
-    ergodox_right_led_2_on ();
-    ergodox_right_led_3_on ();
-  } else if (layer == EXPRM) {
-    ergodox_right_led_1_on ();
-    ergodox_right_led_2_on ();
-    ergodox_right_led_3_on ();
-
-    ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
-  }
-
-  if (layer == OHLFT || layer == OHRGT) {
-    ergodox_right_led_2_on();
-
-    if (oh_left_blink) {
-      if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
-        if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
-          ergodox_right_led_1_off ();
-      }
-      if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
-        ergodox_right_led_1_on ();
-        oh_left_blink_timer = timer_read ();
-      }
-    }
-
-    if (oh_right_blink) {
-      if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
-        if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
-          ergodox_right_led_3_off ();
-      }
-      if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
-        ergodox_right_led_3_on ();
-        oh_right_blink_timer = timer_read ();
-      }
-    }
-  }
-
-  if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
-      ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
-    ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
-    ergodox_right_led_1_on ();
-  } else {
-    ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
-    if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM)
-      ergodox_right_led_1_off ();
-  }
-
-  if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
-      ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
-    ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
-    ergodox_right_led_2_on ();
-  } else {
-    ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
-    if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM)
-      ergodox_right_led_2_off ();
-  }
-
-  if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
-      ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
-    ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
-    ergodox_right_led_3_on ();
-  } else {
-    ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
-    if (layer != OHRGT && layer != HUN && layer != PLVR && layer != EXPRM)
-      ergodox_right_led_3_off ();
-  }
-
-  LEADER_DICTIONARY() {
-    leading = false;
-    leader_end ();
-
-    SEQ_ONE_KEY (KC_U) {
-      ang_do_unicode ();
-    }
-
-    SEQ_ONE_KEY (KC_V) {
-      SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
-    }
-
-    SEQ_ONE_KEY (KC_L) {
-      /* λ */
-      ang_do_unicode ();
-
-      uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
-      ang_tap (codes);
-    }
-
-    SEQ_ONE_KEY (KC_Y) {
-      uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
-      ang_tap (codes);
-    }
-
-    SEQ_ONE_KEY (KC_S) {
-      ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
-      TAP_ONCE (KC_BSLS);
-      register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
-      ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
-      register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
-      TAP_ONCE (KC_SLSH);
-      ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
-    }
-
-    SEQ_TWO_KEYS (KC_W, KC_M) {
-      register_code (KC_LALT);
-      register_code (KC_F2);
-      unregister_code (KC_F2);
-      unregister_code (KC_LALT);
-
-      _delay_ms (1000);
-
-      uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
-      ang_tap (codes);
-      register_code (KC_LGUI);
-      register_code (KC_UP);
-      unregister_code (KC_UP);
-      unregister_code (KC_LGUI);
-    }
-
-    SEQ_ONE_KEY (KC_E) {
-      if (is_exp == 0) {
-        default_layer_and (0);
-        default_layer_or ((1 << EXPRM));
-        is_exp = 1;
-
-        ergodox_led_all_off ();
-        ergodox_right_led_3_on ();
-        _delay_ms (100);
-        ergodox_right_led_2_on ();
-        _delay_ms (100);
-        ergodox_right_led_3_off ();
-        ergodox_right_led_1_on ();
-        _delay_ms (100);
-        ergodox_right_led_2_off ();
-        _delay_ms (100);
-        ergodox_right_led_1_off ();
-      } else {
-        is_exp = 0;
-        default_layer_and (0);
-        default_layer_or (1 << BASE);
-
-        ergodox_led_all_off ();
-        ergodox_right_led_1_on ();
-        _delay_ms (100);
-        ergodox_right_led_2_on ();
-        _delay_ms (100);
-        ergodox_right_led_1_off ();
-        ergodox_right_led_3_on ();
-        _delay_ms (100);
-        ergodox_right_led_2_off ();
-        _delay_ms (100);
-        ergodox_right_led_3_off ();
-      }
-    }
-  }
-}
-
-bool process_record_user (uint16_t keycode, keyrecord_t *record) {
-  switch(keycode) {
-  case CT_CLN:
-    if (record->event.pressed) {
-      ct_cln_count++;
-      ct_cln_timer = timer_read ();
-    } else {
-    }
-    return false;
-    break;
-
-  default:
-    if (ct_cln_count == 1) {
-      register_code (KC_RSFT);
-      register_code (KC_SCLN);
-      unregister_code (KC_SCLN);
-      unregister_code (KC_RSFT);
-    } else if (ct_cln_count == 2) {
-      register_code (KC_SCLN);
-      unregister_code (KC_SCLN);
-    }
-    ct_cln_count = 0;
-    ct_cln_timer = 0;
-    break;
-  }
-
-  return true;
-}
diff --git a/keyboards/ergodox_ez/keymaps/algernon/readme.md b/keyboards/ergodox_ez/keymaps/algernon/readme.md
deleted file mode 100644 (file)
index 6b7e8fa..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-algernon's layout
-=======================
-
-This is an unconventional layout for the ErgoDox EZ. For more details about the
-history of the layout, see my
-[blog posts about my ErgoDox journey][blog-ergodox].
-
- [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/
-
-Some of the things in the layout only work when one uses Spacemacs and GNOME
-under Linux. Your mileage may vary.
-
-## Table of Contents
-
-* [Layouts](#layouts)
-  - [Base layer](#base-layer)
-  - [Experimental layer](#experimental-layer)
-  - [Hungarian layer](#hungarian-layer)
-  - [Navigation and media layer](#navigation-and-media-layer)
-  - [One-handed layer](#one-handed-layer)
-  - [Steno layer](#steno-layer)
-  - [LED states](#led-states)
-* [Building](#building)
-  - [Using on Windows](#using-on-windows)
-* [Changelog](#changelog)
-* [License](#license)
-
-# Layouts
-
-## Base layer
-
-[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b)
-
-At its core, this is a Dvorak layout, with some minor changes. The more
-interesting parts are how certain keys behave:
-
-* The keys on the number row double as function keys, when held for a bit longer
-  than an usual tap. This allows me to use the function keys without having to
-  switch layers.
-* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they
-  are considered active for the next key press only. When double tapped, they
-  toggle on, until a third, single tap sometime later. When held, they act as
-  expected. My usual pattern is that I use these for the next keypress only, so
-  this behaviour is perfect. If I need them held, I'll just double-tap.
-* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`,
-  which pops up an application selector. It also switches to a one-shot layer,
-  where the number row on the left half turns into app selector macros, for the
-  most common things I usually want to switch to. Otherwise it behaves as on a
-  normal layout.
-* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of
-  the one-shot modifiers are in-flight (as in, single-tapped, and not expired
-  yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if
-  active. Otherwise it sends the usual keycode.
-* The **Media**, **Arrow**, and **Hun** layer keys are one-shot, the **1Hand**
-  and **STENO** keys are toggles.
-* Toggling the **Arrow** layer toggles between the cursor arrows and the paging
-  keys on the bottom row.
-* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
-* The **Lead** key allows me to type in a sequence of keys, and trigger some
-  actions:
-    - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that
-      does this.
-    - `LEAD l` uses the unicode input method to enter a `λ`.
-    - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯`
-    - `LEAD y` types `\o/`.
-    - `LEAD w m` maximises the currently focused window.
-    - `LEAD e` makes the [experimental layer](#experimental-layer) the default.
-    - `LEAD v` prints the firmware version, the keyboard and the keymap.
-
-## Experimental layer
-
-[![Experimental layer](images/experimental-layer.png)](http://www.keyboard-layout-editor.com/#/gists/6ff50bf71248e05aab5b3fec4fae3d08)
-
-While using the standard Dvorak layout, I encountered a number of
-inconveniences, and on this layer, I am playing with ideas to make the layout
-feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too,
-had shortcomings I was not happy with. So now this is something inbetween, with
-own observations thrown in. How it works out in the long run remains to be seen.
-
- [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm
-
-## Hungarian layer
-
-[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9)
-
-On this layer, the accented characters are at the same position as their base
-variant. For some, which can have other diatribes, the long one is on top,
-short's on bottom. Tapping any of the accented characters takes us back to the
-base layer.
-
-## Navigation and media layer
-
-[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892)
-
-This layer is primarily for navigating with the cursor or the mouse, and some
-media things.
-
-## One-handed layer
-
-[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece)
-
-The one-handed layer is used in situations where the right hand is occupied, by
-mousing around, for example. Tapping the `OTHER` key switches which side is
-active. For the most part, keys remain in their usual position. When the right
-half is active, keys are mirrored to the left half.
-
-The differences are as follows:
-
-* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier
-  to tap.
-* Most keys on the thumb cluster now have dual uses, and these do not change
-  when switching sides:
-    - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held
-      for longer than a normal tap.
-    - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap.
-* The `Apps`/`BASE` key can be used to go back to the base layer, by
-  long-tapping it. A short-tap will send the `App` key, as usual.
-
-## Steno layer
-
-[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
-
-This is to be used with [Plover](http://www.openstenoproject.org/plover/),
-nothing really fancy here. The **STENO** key toggles the layer on and off, and
-sends the toggle command to Plover too.
-
-## LED states
-
-The primary purpose of the LEDs is to show the modifier status, a secondary, to
-show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each
-have their designated LEDs: the *red*, *green* and *blue*, respectively. When a
-modifier is in a one-shot state, the respective LED will turn on with a dimmer
-light. If the modifier is toggled on, the brightness of the LED turns full.
-
-For the layers, the following rules apply:
-
-* When the [Experimental layer](#experimental-layer) is toggled on, LEDs will
-  light up from left to right in a sequence, then turn off. When the layer is
-  toggled off, the LEDs light up and turn off in the other direction. No LEDs
-  are on while the layer is active.
-* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue*
-  LEDs are on.
-* When the [Navigation and media layer](#navigation-and-media-layer) is active,
-  the *red* and *green* ones are on.
-* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is
-  on and bright, and either the *red* or the *blue* one is going to slowly
-  blink, depending on the currently active side.
-* For the [Steno layer](#steno-layer), all LEDs will be turned on.
-
-Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers
-use a stronger one, and modifiers override any layer preferences. For example,
-when on the one-handed layer, with the left side active (*red* light blinking),
-if `Shift` is on, the *red* light will be constantly on.
-
-# Building
-
-To make my workflow easier, this layout is maintained in
-[its own repository][algernon:ez-layout]. To build it, you will need the
-[QMK][qmk] firmware checked out, and this repo either checked out to something
-like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
-
- [algernon:ez-layout]: https://github.com/algernon/ergodox-layout
- [qmk]: https://github.com/jackhumbert/qmk_firmware
-
-```
-$ git clone https://github.com/jackhumbert/qmk_firmware.git
-$ cd qmk_firmware
-$ git clone https://github.com/algernon/ergodox-layout.git \
-            keyboards/ergodox_ez/keymaps/algernon-master
-$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master
-```
-
-From time to time, updates may be submitted back to the QMK repository. If you
-are reading it there, you can build the firmware like any other firmware
-included with it (assuming you are in the root directory of the firmware):
-
-```
-$ make KEYBOARD=ergodox_ez KEYMAP=algernon
-```
-
-## Using on Windows
-
-The keymap default to forcing NKRO, which seems to upset Windows, and except the
-modifiers, none of them work. If you experience this problem, recompile the
-firmware with `FORCE_NKRO=no` added to the `make` command line.
-
-# Changelog
-
-## v1.2 - 2016-06-22
-
-* The forced NKRO mode can be easily toggled off at compile-time, to make the
-  firmware compatible with [certain operating systems](#using-on-windows).
-* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to
-  be double-tapped, instead of shifted.
-* The `=` and `\` keys were swapped, `=` moved to the home row, on both the
-  [base](#base-layer) and the [experimental](#experimental-layer) layers.
-* The arrow and navigation keys were redone, they are now more accessible, but
-  the navigation keys require an extra tap to access.
-* The **Emacs** layer is gone, replaced by a simplified
-  [navigation and media](#navigation-and-media-layer) layer.
-* `LEAD v` types the firmware version, and the keymap version.
-* On the [experimental](#experimental-layer) layer, the `L` and `Q`, and the `K`
-  and `G` keys were swapped.
-* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it
-  easier on my fingers.
-
-## v1.1 - 2016-06-14
-
-* The keyboard starts in NKRO mode, bootmagic and other things are disabled.
-* A [Steno](#steno-layer) layer was added, to be used with Plover.
-* An [experimental](#experimental-layer) layer was added, something halfway
-  between Dvorak and Capewell-Dvorak. A work in progress.
-* `LEAD y` types `\o/`.
-* Some keys on the [Base](#base-layer) layer have been moved around:
-  - `?` moved to the left pinky, left of `Q`.
-  - `=` shifted one row down, but `F11` stayed where it was.
-  - `-` on the left half was replaced by `Tab`.
-  - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key.
-  - `:` now inputs `;` when shifted.
-* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers.
-
-## v1.0 - 2016-05-26
-
-Initial version.
-
-# License
-
-The layout, being a derivative of the original TMK firmware which is under the
-GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older
-version.
diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused b/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused
deleted file mode 100755 (executable)
index 4d5220a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-WIN="$(xdotool getactivewindow)"
-wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz
-xdotool windowsize ${WIN} 100% 100%
-wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz
diff --git a/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c b/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c
deleted file mode 100644 (file)
index 48257d2..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// Netable differences vs. the default firmware for the ErgoDox EZ:
-// 1. The Cmd key is now on the right side, making Cmd+Space easier.
-// 2. The media keys work on OSX (But not on Windows).
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  |  '"  |           |  '"  |   6  |   7  |   8  |   9  |   0  | BkSp   |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  | ~L1  |           | ~L1  |   Y  |   U  |   I  |   O  |   P  |   -    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   /    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1| Alt  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  |  L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Esc  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      |  (   |       |  {   |        |      |
- *                                 | Space| LGui |------|       |------| RGui   |Enter |
- *                                 |      |      |  )   |       |  }   |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_QUOT,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_FN1,
-        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_LALT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_LPRN,
-                                               KC_SPC,KC_LGUI,KC_RPRN,
-        // right hand
-             KC_QUOT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSPC,
-             KC_FN1,      KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_MINS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_BSLS,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          TG(1),
-             KC_ESC,        CTL_T(KC_ESC),
-             KC_LCBR,
-             KC_RCBR,KC_RGUI, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/bepo/bepo.png b/keyboards/ergodox_ez/keymaps/bepo/bepo.png
deleted file mode 100644 (file)
index 3df7aa6..0000000
Binary files a/keyboards/ergodox_ez/keymaps/bepo/bepo.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/bepo/keymap.c b/keyboards/ergodox_ez/keymaps/bepo/keymap.c
deleted file mode 100644 (file)
index 921a94d..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_bepo.h"
-
-#define BASE 0 // default layer
-#define QWER 1 // qwerty compat layer
-#define SQWER 2 // shifted qwerty compat layer
-#define AQWER 3 // alted qwerty compat layer
-#define FNAV 4 // function / navigation keys
-#define NUM 5 // numeric keypad keys
-#define MSE 6 // mouse keys
-
-#define KP_00 0
-#define CA_Fx 1
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Base layer
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |   $    |   "  |   <  |   >  |   (  |   )  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |   %    |   B  |E_ACUT|   P  |   O  |E_GRAV|Backsp|                                  |CapsLo|   ^  |   V  |   D  |   L  |   J  |   Z    |
- * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
- * |   W    |   A  |   U  |   I  |   E  |   ,  |------|                                  |------|   C  |   T  |   S  |   R  |   N  |   M    |
- * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
- * | E_CIRC |A_GRAV|   Y  |   X  |   .  |   K  |      |                                  |      |   '  |   Q  |   G  |   H  |   F  | C_CEDIL|
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   |QWERTY|      |LSuper| LCtrl|  LAlt|             |Escape| L_Mse|      |      |Insert|             | AltGr| RCtrl|RSuper|PrntSc| Pause|
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      | L_Num|      | CA_Fx|      |      |
- *                                             | Space|LShift|------|      |------|RShift|Enter |
- *                                             |      |      |L_FNav|      |L_FNav|      |      |
- *                                             `--------------------'      `--------------------'
- */
-[BASE] = KEYMAP(
-// Left hand
-BP_DOLLAR,     BP_DQOT,        BP_LGIL,        BP_RGIL,        BP_LPRN,        BP_RPRN,        KC_DEL,
-BP_PERCENT,    BP_B,           BP_E_ACUTE,     BP_P,           BP_O,           BP_E_GRAVE,     KC_BSPC,
-BP_W,          BP_A,           BP_U,           BP_I,           BP_E,           BP_COMMA,
-BP_ECRC,       BP_A_GRAVE,     BP_Y,           BP_X,           BP_DOT,         BP_K,           KC_TAB,
-TG(QWER),      KC_NO,          KC_LGUI,        KC_LCTL,        KC_LALT,
-                                                                                                               KC_ESC,         MO(MSE),
-                                                                                                                               MO(NUM),
-                                                                                               KC_SPC,         KC_LSHIFT,      MO(FNAV),
-// Right hand
-                               KC_SLCK,        BP_AT,          BP_PLUS,        BP_MINUS,       BP_SLASH,       BP_ASTR,        BP_EQUAL,
-                               KC_CAPSLOCK,    BP_DCRC,        BP_V,           BP_D,           BP_L,           BP_J,           BP_Z,
-                                               BP_C,           BP_T,           BP_S,           BP_R,           BP_N,           BP_M,
-                               KC_NUMLOCK,     BP_APOS,        BP_Q,           BP_G,           BP_H,           BP_F,           BP_CCED,
-                                                               BP_ALGR,        KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
-KC_NO,         KC_INS,
-M(CA_Fx),
-MO(FNAV),      KC_RSHIFT,      KC_ENTER),
-/* Keymap 1: QWERTY system compatibility layer
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |   $    |   "  |   <  |   >  |   (  |   )  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |   %    |   b  |   e  |   p  |   o  |   e  |Backsp|                                  |CapsLo|   ^  |   v  |   d  |   l  |   j  |   z    |
- * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
- * |   w    |   a  |   u  |   i  |   e  |   ,  |------|                                  |------|   c  |   t  |   s  |   r  |   n  |   m    |
- * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
- * |   e    |   a  |   y  |   x  |   .  |   k  |      |                                  |      |   '  |   q  |   g  |   h  |   f  |   c    |
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   | BEPO |      |LSuper| LCtrl|  LAlt|             |Escape| L_Mse|      |      |Insert|             | AltGr| RCtrl|RSuper|PrntSc| Pause|
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      | L_Num|      |      |      |      |
- *                                             | Space|LShift|------|      |------|RShift|Enter |
- *                                             |      |      |L_FNav|      |L_FNav|      |      |
- *                                             `--------------------'      `--------------------'
- */
-[QWER] = KEYMAP(
-// Left hand
-KC_DOLLAR,     S(KC_QUOT),     S(KC_COMM),     S(KC_DOT),      KC_LPRN,        KC_RPRN,        KC_DEL,
-KC_PERCENT,    KC_B,           KC_E,           KC_P,           KC_O,           KC_E,           KC_BSPC,
-KC_W,          KC_A,           KC_U,           KC_I,           KC_E,           KC_COMMA,
-KC_E,          KC_A,           KC_Y,           KC_X,           KC_DOT,         KC_K,           KC_TAB,
-KC_TRNS,       KC_NO,          KC_LGUI,        KC_LCTL,        KC_LALT,
-                                                                                                               KC_ESC,         MO(MSE),
-                                                                                                                               MO(NUM),
-                                                                                               KC_SPC,         MO(SQWER),      MO(FNAV),
-// Right hand
-                               KC_SLCK,        KC_AT,          KC_PLUS,        KC_MINUS,       KC_SLASH,       KC_ASTR,        KC_EQUAL,
-                               KC_CAPSLOCK,    KC_CIRC,        KC_V,           KC_D,           KC_L,           KC_J,           KC_Z,
-                                               KC_C,           KC_T,           KC_S,           KC_R,           KC_N,           KC_M,
-                               KC_NUMLOCK,     KC_QUOT,        KC_Q,           KC_G,           KC_H,           KC_F,           KC_C,
-                                                               MO(AQWER),      KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
-KC_NO,         KC_INS,
-KC_TRNS,
-MO(FNAV),      MO(SQWER),      KC_ENTER),
-/* Keymap 2: QWERTY shifted system compatibility layer
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |   #    |   1  |   2  |   3  |   4  |   5  |Delete|                                  |ScroLo|   6  |   7  |   8  |   9  |   0  |   =    |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |   `    |   B  |   E  |   P  |   O  |   E  |Backsp|                                  |CapsLo|   !  |   V  |   D  |   L  |   J  |   Z    |
- * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
- * |   W    |   A  |   U  |   I  |   E  |   ;  |------|                                  |------|   C  |   T  |   S  |   R  |   N  |   M    |
- * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
- * |   E    |   A  |   Y  |   X  |   :  |   K  |      |                                  |      |   ?  |   Q  |   G  |   H  |   F  |   C    |
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   | BEPO |      |LSuper| LCtrl|  LAlt|             |Escape| L_Mse|      |      |Insert|             | AltGr| RCtrl|RSuper|PrntSc| Pause|
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      | L_Num|      |      |      |      |
- *                                             | Space|LShift|------|      |------|RShift|Enter |
- *                                             |      |      |L_FNav|      |L_FNav|      |      |
- *                                             `--------------------'      `--------------------'
- */
-[SQWER] = KEYMAP(
-// Left hand
-KC_HASH,       KC_1,           KC_2,           KC_3,           KC_4,           KC_5,           KC_TRNS,
-KC_GRV,                S(KC_B),        S(KC_E),        S(KC_P),        S(KC_O),        S(KC_E),        KC_TRNS,
-S(KC_W),       S(KC_A),        S(KC_U),        S(KC_I),        S(KC_E),        KC_SCOLON,
-S(KC_E),       S(KC_A),        S(KC_Y),        S(KC_X),        KC_COLON,       S(KC_K),        S(KC_TAB),
-KC_TRNS,       KC_TRNS,        S(KC_LGUI),     S(KC_LCTL),     S(KC_LALT),
-                                                                                                               KC_TRNS,        KC_TRNS,
-                                                                                                                               KC_TRNS,
-                                                                                               KC_TRNS,        KC_TRNS,        KC_TRNS,
-// Right hand
-                               KC_TRNS,        KC_6,           KC_7,           KC_8,           KC_9,           KC_0,           KC_TRNS,
-                               KC_TRNS,        KC_EXLM,        S(KC_V),        S(KC_D),        S(KC_L),        S(KC_J),        S(KC_Z),
-                                               S(KC_C),        S(KC_T),        S(KC_S),        S(KC_R),        S(KC_N),        S(KC_M),
-                               KC_TRNS,        S(KC_SLASH),    S(KC_Q),        S(KC_G),        S(KC_H),        S(KC_F),        S(KC_C),
-                                                               S(KC_RALT),     S(KC_RCTL),     S(KC_RGUI),     KC_TRNS,        KC_TRNS,
-KC_TRNS,       KC_TRNS,
-KC_TRNS,
-KC_TRNS,       KC_TRNS,        KC_TRNS),
-/* Keymap 3: QWERTY alted system compatibility layer
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |   $    |   "  |   <  |   >  |   [  |   ]  |Delete|                                  |ScroLo|   @  |   +  |   -  |   /  |   *  |   =    |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |   %    |   |  |   e  |   &  |   o  |   e  |Backsp|                                  |CapsLo|   ^  |   v  |   d  |   l  |   j  |   z    |
- * |--------+------+------+------+------+------|  ace |                                  |      |------+------+------+------+------+--------|
- * |   w    |   a  |   u  |   i  |   €  |   ,  |------|                                  |------|   c  |   t  |   s  |   r  |   n  |   m    |
- * |--------+------+------+------+------+------|  Tab |                                  | NumLo|------+------+------+------+------+--------|
- * |   e    |   \  |   {  |   }  |   .  |   ~  |      |                                  |      |   '  |   q  |   g  |   h  |   f  |   c    |
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   | BEPO |      |LSuper| LCtrl|  LAlt|             |Escape| L_Mse|      |      |Insert|             | AltGr| RCtrl|RSuper|PrntSc| Pause|
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      | L_Num|      |      |      |      |
- *                                             |   _  |LShift|------|      |------|RShift|Enter |
- *                                             |      |      |L_FNav|      |L_FNav|      |      |
- *                                             `--------------------'      `--------------------'
- */
-[AQWER] = KEYMAP(
-// Left hand
-KC_DOLLAR,     S(KC_QUOT),     S(KC_COMM),     S(KC_DOT),      KC_LBRC,        KC_RBRC,        KC_DEL,
-KC_PERCENT,    KC_PIPE,        KC_E,           KC_AMPR,        KC_O,           KC_E,           KC_BSPC,
-KC_W,          KC_A,           KC_U,           KC_I,           RALT(KC_5),     KC_COMMA,
-KC_E,          KC_BSLASH,      KC_LCBR,        KC_RCBR,        KC_DOT,         KC_TILDE,       KC_TAB,
-KC_TRNS,       KC_NO,          KC_LGUI,        KC_LCTL,        KC_LALT,
-                                                                                                               KC_ESC,         MO(MSE),
-                                                                                                                               MO(NUM),
-                                                                                               KC_UNDS,        MO(SQWER),      MO(FNAV),
-// Right hand
-                               KC_SLCK,        KC_AT,          KC_PLUS,        KC_MINUS,       KC_SLASH,       KC_ASTR,        KC_EQUAL,
-                               KC_CAPSLOCK,    KC_CIRC,        KC_V,           KC_D,           KC_L,           KC_J,           KC_Z,
-                                               KC_C,           KC_T,           KC_S,           KC_R,           KC_N,           KC_M,
-                               KC_NUMLOCK,     KC_QUOT,        KC_Q,           KC_G,           KC_H,           KC_F,           KC_C,
-                                                               KC_TRNS,        KC_RCTL,        KC_RGUI,        KC_PSCREEN,     KC_PAUSE,
-KC_NO,         KC_INS,
-KC_TRNS,
-MO(FNAV),      MO(SQWER),      KC_ENTER),
-/* Keymap 4: function / navigation layer
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |VolMut|                                  |      |  F6  |  F7  |  F8  |  F9  |  F10 |        |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |VolDwn|                                  |      | PgUp | Home |  Up  |  End |  F11 |        |
- * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|                                  |------| PgDn | Left | Down | Right|  F12 |        |
- * |--------+------+------+------+------+------| VolUp|                                  |      |------+------+------+------+------+--------|
- * |        | Undo |  Cut | Copy | Paste|      |      |                                  |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |             |      |      |      |      |      |             |      |      |      |      |      |
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      |      |      |      |      |      |
- *                                             |      |      |------|      |------|      |      |
- *                                             |      |      |      |      |      |      |      |
- *                                             `--------------------'      `--------------------'
- */
-[FNAV] = KEYMAP(
-// Left hand
-KC_NO,         KC_F1,          KC_F2,          KC_F3,          KC_F4,          KC_F5,          KC_MUTE,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_VOLU,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_UNDO,        KC_CUT,         KC_COPY,        KC_PASTE,       KC_NO,          KC_VOLD,
-KC_NO,         KC_NO,          KC_TRNS,        KC_TRNS,        KC_TRNS,
-                                                                                                               KC_NO,          KC_NO,
-                                                                                                                               KC_NO,
-                                                                                               KC_NO,          KC_TRNS,        KC_TRNS,
-// Right hand
-                               KC_NO,          KC_F6,          KC_F7,          KC_F8,          KC_F9,          KC_F10,         KC_NO,
-                               KC_NO,          KC_PGUP,        KC_HOME,        KC_UP,          KC_END,         KC_F11,         KC_NO,
-                                               KC_PGDOWN,      KC_LEFT,        KC_DOWN,        KC_RIGHT,       KC_F12,         KC_NO,
-                               KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-                                                               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_NO,          KC_NO,
-KC_NO,         KC_NO,
-KC_TRNS,
-KC_TRNS,       KC_TRNS,        KC_NO),
-/* Keymap 5: numeric layer, sends keypad codes
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |                                  |      |      |   +  |   -  |   /  |   *  |        |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |                                  |      |      |   7  |   8  |   9  |      |        |
- * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|                                  |------|      |   4  |   5  |   6  |      |        |
- * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |                                  |      |      |   1  |   2  |   3  |      |        |
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |             |      |      |      |      |      |             |   0  |  00  |   .  |      |      |
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      |      |      |      |      |      |
- *                                             |      |      |------|      |------|      | Enter|
- *                                             |      |      |      |      |      |      |      |
- *                                             `--------------------'      `--------------------'
- */
-[NUM] = KEYMAP(
-// Left hand
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_TRNS,        KC_TRNS,        KC_TRNS,
-                                                                                                               KC_NO,          KC_NO,
-                                                                                                                               KC_TRNS,
-                                                                                               KC_NO,          KC_TRNS,        KC_NO,
-// Right hand
-                               KC_NO,          KC_NO,          KC_KP_PLUS,     KC_KP_MINUS,    KC_KP_SLASH,    KC_KP_ASTERISK, KC_NO,
-                               KC_NO,          KC_NO,          KC_KP_7,        KC_KP_8,        KC_KP_9,        KC_NO,          KC_NO,
-                                               KC_NO,          KC_KP_4,        KC_KP_5,        KC_KP_6,        KC_NO,          KC_NO,
-                               KC_NO,          KC_NO,          KC_KP_1,        KC_KP_2,        KC_KP_3,        KC_NO,          KC_NO,
-                                                               KC_KP_0,        M(KP_00),       KC_KP_COMMA,    KC_NO,          KC_NO,
-KC_NO,         KC_NO,
-KC_NO,
-KC_NO,         KC_TRNS,        KC_KP_ENTER),
-/* Keymap 6: mouse layer
- *
- * ,--------------------------------------------------.                                  ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |                                  |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|                                  |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |                                  |      |      |LClick|  Up  |RClick| WhUp |        |
- * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|                                  |------|      | Left | Down | Right|WhDown|        |
- * |--------+------+------+------+------+------|      |                                  |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |                                  |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------,-------------.      ,-------------`-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |             |      |      |      |      |      |             |      |      |      |      |      |
- *   `----------------------------------'      ,------|------|------|      |------+------+------.      `----------------------------------'
- *                                             |      |      |      |      |      |      |      |
- *                                             |      |      |------|      |------|      |      |
- *                                             |      |      |      |      |      |      |      |
- *                                             `--------------------'      `--------------------'
- */
-[MSE] = KEYMAP(
-// Left hand
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-KC_NO,         KC_NO,          KC_TRNS,        KC_TRNS,        KC_TRNS,
-                                                                                                               KC_NO,          KC_TRNS,
-                                                                                                                               KC_NO,
-                                                                                               KC_NO,          KC_TRNS,        KC_NO,
-// Right hand
-                               KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-                               KC_NO,          KC_NO,          KC_MS_BTN1,     KC_MS_UP,       KC_MS_BTN2,     KC_MS_WH_UP,    KC_NO,
-                                               KC_NO,          KC_MS_LEFT,     KC_MS_DOWN,     KC_MS_RIGHT,    KC_MS_WH_DOWN,  KC_NO,
-                               KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,
-                                                               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_NO,          KC_NO,
-KC_NO,         KC_NO,
-KC_NO,
-KC_NO,         KC_TRNS,        KC_NO)
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  switch(id) {
-    case KP_00:
-      if (record->event.pressed) {
-        return MACRO( T(KP_0), D(KP_0), END );
-      } else {
-        return MACRO( U(KP_0), END );
-      }
-      break;
-    case CA_Fx:
-      if (record->event.pressed) {
-        layer_on(FNAV);
-        return MACRO( D(LALT), D(LCTL), END );
-      } else {
-        layer_off(FNAV);
-        return MACRO( U(LCTL), U(LALT), END );
-      }
-      break;
-  }
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-};
diff --git a/keyboards/ergodox_ez/keymaps/bepo/readme.md b/keyboards/ergodox_ez/keymaps/bepo/readme.md
deleted file mode 100644 (file)
index 4a18cd8..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# BEPO keymap for the ErgoDox
-
-This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french.
-
-# Disposition BÉPO pour l'ErgoDox
-
-Cette keymap a été pensée pour la disposition BÉPO (http://bepo.fr), qui est une disposition de clavier francophone, ergonomique et libre, élaborée selon la méthode Dvorak. L'adaptation de cette disposition à l'ErgoDox a été réalisée en conservant les points forts du clavier TypeMatrix 2030 (très répandu dans la communauté bépo, avec un excellent rapport ergonomie / prix) voir en réglant certains de ses défauts (3 colonnes pour l'auriculaire droit et touche "Ê") et en apportant son lot de nouveautés (compatibilité avec les systèmes azerty et qwerty).
-
-Particularités
---------------
-
-Touches de repos des pouces : "espace" à gauche et "entrée" à droite.
-
-Placement des touches de combinaison ("Shift", "Alt", "Ctrl"...) adapté aux pouces, et permettant de conserver chaque doigt pour les rangées de lettres auxquelles ils sont assignés sans avoir à changer la touche de combinaison de côté (exemple : "A" majuscule puis "M" majuscule avec les auriculaires et un seul appui d'une touche "Shift").
-
-Les touches "Alt" et "Alt Gr" sont accessibles avec les pouces sur la rangée du bas comme sur la TypeMatrix 2030, avec une symétrie gauche / droite.
-
-Les touches "Ctrl" sont placées sur la même ligne que les touche "Alt" et "Alt Gr" comme sur un clavier clasique, elles sont accessibles aux pouces sur la rangée du bas (moins éloigné que le groupe de touches de pouces pour des petites mains).
-
-Les touches "Backspace" et "Delete" sont placées comme sur la TypeMatrix 2030, du côté gauche uniquement (pour laisser celles de la main droite servir de {caps,num,scroll}lock puisqu'elles ont des LED).
-
-La touche "Tab" est placée comme sur la TypeMatrix 2020.
-
-Meilleure symétrie et accessibilité que la TypeMatrix 2030 : les touches "W" et "%" ont dû être déplacées du côté gauche en raison du nombre de touches de l'ErgoDox, mais l'auriculaire droit ne gère maintenant que deux colonnes de touches au lieu de trois. La touche "Ê" redevient accessible sur la même rangée que les autres lettres, comme sur un clavier classique en disposition bépo. Les lettres, chiffres et symboles sont tous regroupés sur 4 lignes et 6 colonnes pour chaque main, et la première rangée de lettres à la main gauche conserve une identité visuelle "BÉPO".
-
-Touche de fonction permettant de saisir les touches F1 à F12, les touches F1 à F10 sont placées de façon logique par rapport aux chiffres 1 à 0. Cette même touche permet l'accès aux touches directionnelles sans déplacer la main droite. Les touches "Home" et "End" sont placées de la même façon que sur une TypeMatrix 2030 par rapport aux touches directionnelles. Les touches "Page Up" et "Page Down" sont également accessibles facilement sans déplacer la main droite. Les fonctions "VolUp" et "VolDown" sont placées comme sur la TypeMatrix 2030, avec la fonction "Mute" juste au dessus. Les fonctions "Undo", "Cut", "Copy" et "Paste" sont placées côte à côte comme elles le seraient sur un clavier QWERTY en combinaison avec la touche "Ctrl" (à l'emplacement des lettres "Z", "X", "C" et "V"). Par rapport au layout "SpaceFN", l'utilisation d'une touche de fonction dédiée au pouce permet de ne pas ajouter de latence, et la touche espace reste compatible avec les jeux (action au moment de l'appui et possibilité d'appui long).
-
-Touche de fonction permettant l'accès au pavé numérique comme sur la TypeMatrix 2030, mais sans avoir à déplacer la main droite : avec les doigts sur la rangée de repos, possibilité de saisir les chiffres "4", "5" et "6" comme sur un pavé numérique classique. Le double "0" de la TypeMatrix a été conservé, et gagne une possibilité de répétition en simples "0".
-
-L'appui sur une touche permet de basculer en mode BEPO sur un système configuré pour un clavier QWERTY. Cette compatibilité n'est pas parfaite (pas encore de gestion des accents mais ça devrait être faisable avec une disposition en qwerty international, et les combinaisons de touches ne sont pas toutes supportées puisque le clavier traduit déjà certaines touches en combinaisons) mais reste pratique pour une saisie de texte occasionnelle.
-
-TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY.
-
-> Olivier Smedts <olivier@gid0.org>
diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile
deleted file mode 100644 (file)
index e7b2d0a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-UNICODE_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c
deleted file mode 100644 (file)
index d25e2b9..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_neo2.h"
-
-// Layer names
-#define BASE 0      // default layer
-#define PMQ  1      // poor man’s QWERTZ
-#define PMN  2      // poor man’s Neo
-#define FMU  3      // FMU layer
-#define NHL  4      // Neo’s software layer 4 rebuilt in Hardware
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Layer 0: default
- * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
- * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
- * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
- * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
- * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
- * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
- * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │     │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤
- * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
- * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
- *   │ CTL │ ALT │ MO1 │ Win │ Mod4│                             │ Mod4│ Win │ MO1 │ Alt │ CTL │
- *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
- *                                   │  ←  │  ↑  │ │  ↓  │  →  │
- *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
- *                             │     │     │  ─  │ │  ─  │     │     │
- *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
- *                             │     │     │ HYP │ │ MEH │     │     │
- *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
- */
-[BASE] = KEYMAP(
-        // left hand
-        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
-        NEO_Y,      NEO_X,  NEO_V,  NEO_L,  NEO_C,  NEO_W,  KC_HOME,
-        NEO_L1_L,   NEO_U,  NEO_I,  NEO_A,  NEO_E,  NEO_O,
-        KC_LSFT,    NEO_UE, NEO_OE, NEO_AE, NEO_P,  NEO_Z,  TG(PMQ),
-        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L,
-                                                    KC_LEFT,    KC_UP,
-                                                                KC_MINS,
-                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
-        // right hand
-        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
-        KC_END,     NEO_K,  NEO_H,  NEO_G,  NEO_F,  NEO_Q,  NEO_SS,
-                    NEO_S,  NEO_N,  NEO_R,  NEO_T,  NEO_D,  NEO_L1_R,
-        TG(PMN),    NEO_B,  NEO_M,  KC_COMM,KC_DOT, NEO_J,  KC_RSFT,
-                            NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
-        KC_DOWN,    KC_RGHT,
-        KC_MINS,
-        MEH_T(KC_NO),KC_ENT,KC_SPC
-    ),
-
-/* Layer 1: poor man’s QWERTZ
- * based on kaimi’s layout
- * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
- * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
- * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
- * │   C   │  P  │  T  │  F  │  K  │  L  │ HOM │     │ END │  B  │  A  │  S  │  G  │  V  │  Y    │
- * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
- * │ Mod3  │  D  │  H  │  Ö  │  O  │  I  ├─────┤     ├─────┤  U  │  -  │  Z  │  E  │  X  │ Mod3  │
- * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
- * │ LSHFT │  Ä  │  Q  │  R  │  W  │  N  │     │     │     │  J  │  M  │  ,  │  .  │  ẞ  │ Shift │
- * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
- *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
- *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
- *                                   │  ←  │  ↑  │ │  ↓  │  →  │
- *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
- *                             │     │     │  ─  │ │  ─  │     │     │
- *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
- *                             │     │     │ HYP │ │ MEH │     │     │
- *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
- */
-[PMQ] = KEYMAP(
-        // left hand
-        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
-        DE_C,       DE_P,   DE_T,   DE_F,   DE_K,   DE_L,   KC_HOME,
-        NEO_L1_L,   DE_D,   DE_H,   DE_OE,  DE_O,   DE_I,
-        KC_LSFT,    DE_AE,  DE_Q,   DE_R,   DE_W,   DE_N,   KC_TRNS,
-        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
-                                                    KC_LEFT,    KC_UP,
-                                                                KC_MINS,
-                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
-        // right hand
-        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
-        KC_END,     DE_B,   DE_A,   DE_S,   DE_G,   DE_V,   DE_Y,
-                    DE_U,   DE_MINS,DE_Z,   DE_E,   DE_X,   NEO_L1_R,
-        KC_TRNS,    DE_J,   DE_M,   DE_COMM,DE_DOT, DE_SS,  KC_RSFT,
-                            MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
-        KC_DOWN,    KC_RGHT,
-        KC_MINS,
-        MEH_T(KC_NO),KC_ENT,KC_SPC
-    ),
-
-/* Layer 2: poor man’s Neo
- * based on kaimi’s layout
- * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
- * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
- * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
- * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
- * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
- * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
- * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
- * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
- * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
- *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
- *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
- *                                   │  ←  │  ↑  │ │  ↓  │  →  │
- *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
- *                             │     │     │  ─  │ │  ─  │     │     │
- *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
- *                             │     │     │ HYP │ │ MEH │     │     │
- *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
- */
-[PMN] = KEYMAP(
-        KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
-        DE_Y,       DE_X,   DE_V,   DE_L,   DE_C,   DE_W,   KC_HOME,
-        KC_NO,      DE_U,   DE_I,   DE_A,   DE_E,   DE_O,
-        KC_LSFT,    DE_UE,  DE_OE,  DE_AE,  DE_P,   DE_Z,   KC_TRNS,
-        KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
-                                                    KC_LEFT,    KC_UP,
-                                                                KC_MINS,
-                                            KC_SPC, KC_ENT,    ALL_T(KC_NO),
-        // right hand
-        DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
-        KC_END,     DE_K,   DE_H,   DE_G,   DE_F,   DE_Q,   DE_SS,
-                    DE_S,   DE_N,   DE_R,   DE_T,   DE_D,   KC_NO,
-        KC_TRNS,    DE_B,   DE_M,   KC_COMM,KC_DOT, DE_J,   KC_RSFT,
-                            MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
-        KC_DOWN,    KC_RGHT,
-        KC_MINS,
-        MEH_T(KC_NO),KC_ENT,KC_SPC
-    ),
-
-/* Layer 3: F-keys, Mouse and Unicode
- * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
- * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
- * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
- * │       │     │     │     │  ✕  │     │     │     │     │     │ F9  │ F10 │ F11 │ F12 │       │
- * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
- * │       │     │     │     │  ✓  │     ├─────┤     ├─────┤     │ F5  │ F6  │ F7  │ F8  │       │
- * ├───────┼─────┼─────┼─────╄─────╃─────┤     │     │     ├─────╄─────╃─────┼─────┼─────┼───────┤
- * │       │     │     │     │     │     │     │     │     │     │ F1  │ F2  │ F3  │ F4  │       │
- * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
- *   │     │     │(MO1)│     │     │                             │     │     │(MO1)│     │     │
- *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
- *                                   │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │
- *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
- *                             │     │     │ MLC │ │ MRC │     │     │
- *                             │     │     ├─────┤ ├─────┤     │     │
- *                             │     │     │     │ │     │     │     │
- *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
- */
-[FMU] = KEYMAP(
-        // left hand
-        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS,
-        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,
-        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                                    KC_MS_L,    KC_MS_U,
-                                                                KC_BTN1,
-                                            KC_TRNS,KC_TRNS,    KC_TRNS,
-        // right hand
-        KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-        KC_TRNS,    KC_TRNS,KC_F9,  KC_F10, KC_F11, KC_F12, KC_TRNS,
-                    KC_TRNS,KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_TRNS,
-        KC_TRNS,    KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_TRNS,
-                            KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-        KC_MS_D,    KC_MS_R,
-        KC_BTN2,
-        KC_TRNS,    KC_TRNS,KC_TRNS
-    ),
-
-/* Layer 4: Neo’s software layer 4 rebuilt in Hardware
- * based on kaimi’s layout
- * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
- * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
- * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
- * │       │ PgUp│ BSpc│  ↑  │ Del │ PgDn│     │     │     │     │  7  │  8  │  9  │  +  │   −   │
- * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
- * │       │ Home│  ←  │  ↓  │  →  │ End ├─────┤     ├─────┤     │  4  │  5  │  6  │  ,  │   .   │
- * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
- * │       │ Esc │ Tab │ Ins │ Ret │ Undo│     │     │     │     │  1  │  2  │  3  │     │       │
- * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
- *   │     │     │(MO1)│     │(MO4)│                             │(MO4)│     │(MO1)│     │     │
- *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
- *                                   │     │     │ │     │     │
- *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
- *                             │     │     │     │ │     │     │     │
- *                             │     │     ├─────┤ ├─────┤     │     │
- *                             │     │     │     │ │     │     │     │
- *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
- */
-[NHL] = KEYMAP(
-        // left hand
-        KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
-        KC_NO,      KC_PGUP,KC_BSPC,KC_UP,  KC_DELT,KC_PGDN,KC_NO,
-        KC_NO,      KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END,
-        KC_NO,      KC_ESC, KC_TAB, KC_INS, KC_ENT, KC_UNDO,KC_TRNS,
-        KC_NO,      KC_NO,  KC_TRNS,KC_NO,  KC_TRNS,
-                                                    KC_NO,      KC_NO,
-                                                                KC_NO,
-                                            KC_NO,  KC_NO,      KC_NO,
-        // right hand
-        KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
-        KC_NO,      KC_NO,  KC_7,   KC_8,   KC_9,   DE_PLUS,DE_MINS,
-                    KC_NO,  KC_4,   KC_5,   KC_6,   KC_COMM,KC_DOT,
-        KC_TRNS,    KC_NO,  KC_1,   KC_2,   KC_3,   KC_NO,  KC_NO,
-                            KC_TRNS,KC_NO,  KC_TRNS,KC_NO,  KC_NO,
-        KC_NO,      KC_NO,
-        KC_NO,
-        KC_NO,      KC_NO,  KC_NO
-    ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [BASE] = ACTION_FUNCTION(BASE),
-    [PMQ]  = ACTION_FUNCTION(PMQ),
-    [PMN]  = ACTION_FUNCTION(PMN),
-    [FMU]  = ACTION_LAYER_TAP_TOGGLE(FMU),
-    [NHL]  = ACTION_LAYER_TAP_TOGGLE(NHL)
-};
-
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    // MACRODOWN only works in this function
-    switch(id) {
-        case 0:
-            if (record->event.pressed) {
-                register_code(KC_RSFT);
-            }
-            else {
-                unregister_code(KC_RSFT);
-            }
-        break;
-    }
-
-    return MACRO_NONE;
-};
-
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void)
-{
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case FMU:
-            ergodox_right_led_1_on();
-        break;
-        case PMQ:
-            ergodox_right_led_2_on();
-        break;
-        case PMN:
-            ergodox_right_led_3_on();
-        break;
-        default:
-            ergodox_board_led_off();
-        break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md
deleted file mode 100644 (file)
index 2a4d3a5..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# coderkun’s Neo2 layout for the ErgoDox EZ
-
-The idea of this layout is to use it for [Neo2](http://www.neo-layout.org) but also provide layers to use QWERTZ with activated Neo driver and to use (basic) Neo when no driver is available (standard QWERTZ driver is active) (e. g. on other computers, in virtual machines) and to make heavily use of thumb keys.
-
-The main goal of the default layer is to provide a complete symmetric layout with each modifier equally placed for both hands (mirror, of course).
-
-It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols.
-
-
-## Layers
-
-0. Default layer for Neo2
-1. Poor man’s QWERTZ
-2. Poor man’s Neo
-3. F-keys, mouse keys und Unicode symbols
-4. Neo’s software layers 4 rebuilt in hardware
-
-
-## Build
-
-1. Enable Unicode in Makefile
-
-    ```
-    UNICODE_ENABLE   = yes
-    ```
-2. Build as usual
-
-    ```
-    make clean
-    make KEYMAP=coderkun_neo2
-    ```
diff --git a/keyboards/ergodox_ez/keymaps/colemak/keymap.c b/keyboards/ergodox_ez/keymaps/colemak/keymap.c
deleted file mode 100644 (file)
index 9601726..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |O / L2|   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_F,   KC_P,   KC_G,   TG(SYMB),
-        KC_BSPC,        KC_A,         KC_R,   KC_S,   KC_T,   KC_D,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(SYMB),    KC_J,   KC_L,   KC_U,   KC_Y,   KC_SCLN,          KC_BSLS,
-                          KC_H,   KC_N,   KC_E,   KC_I,   LT(MDIA, KC_O),   KC_QUOT,
-             MEH_T(KC_NO),KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/colemak/readme.md b/keyboards/ergodox_ez/keymaps/colemak/readme.md
deleted file mode 100644 (file)
index e28b2f0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# ErgoDox EZ Colemak Configuration
-
-Colemak layout with same layers as default ergodox ez keymap.
-
diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png
deleted file mode 100644 (file)
index 57df5a1..0000000
Binary files a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c
deleted file mode 100644 (file)
index 3b74d26..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_norwegian.h"
-
-#define BASE 0 // default layer
-#define BASE_MAC 1 // default layer mac
-#define NUMB_SYMB 2 // numbers and symbols
-#define NUMB_SYMB_MAC 3 // numbers and symbols mac
-#define FUNCTION 4 // function keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Keymap 0: Basic layer PC
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |    \   |   [  |   ]  |   {  |   }  |   *  |Mac/PC|           |   ^  |   $  |   (  |   )  |   <  |   >  |   @    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |    ?   |   Q  |   W  |   F  |   P  |   G  |  "   |           |   '  |   J  |   L  |   U  |   Y  |   Å  |   Æ    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |    :   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |   O  |   Ø    |
- * |--------+------+------+------+------+------|  ;   |           |   =  |------+------+------+------+------+--------|
- * |    !   |   Z  |   X  |   C  |   V  |   B  |      |           |      |   K  |   M  | RIGHT| DOWN |   UP |   _    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | Func | Lclk | Rclk | TAB  |,/CTRL|                                       | LEFT | Esc  |   `  |   #  | Num  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,--------------.
- *                                        |   &  |   |  |       |Insert|   /   |
- *                                 ,------|------|------|       |------+-------+------.
- *                                 |      |      |   +  |       |  Del |        |     |
- *                                 | Shift| ./Spc|------|       |------|  Enter |Space|
- *                                 |      |      |-/Alt |       | Bspc |        |     |
- *                                 `--------------------'       `---------------------'
- */
-[BASE] = KEYMAP(
-        // left hand
-        NO_BSLS,       NO_LBRC, NO_RBRC, NO_LCBR,  NO_RCBR, NO_ASTR,  TG(1),
-        NO_QUES,         KC_Q,         KC_W,    KC_F,   KC_P,   KC_G,   NO_QUO2,
-        NO_COLN,         KC_A,         KC_R,    KC_S,   KC_T,   KC_D,
-        KC_EXLM,        KC_Z,         KC_X,    KC_C,   KC_V,   KC_B,   NO_SCLN,
-        MO(4),     KC_BTN1,      KC_BTN2, KC_TAB,GUI_T(KC_COMMA),
-                                                      NO_AMP, NO_PIPE,
-                                                              NO_PLUS,
-                                               KC_FN1,CTL_T(KC_DOT),ALT_T(NO_MINS),
-        // right hand
-             KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
-             NO_APOS,      KC_J,    KC_L,    KC_U,      KC_Y,     NO_AA,   NO_AE  ,
-                           KC_H,    KC_N,    KC_E,      KC_I,      KC_O,    NO_OSLH,
-             NO_EQL,        KC_K,    KC_M, KC_RIGHT,  KC_DOWN,   KC_UP, NO_UNDS,
-                                  KC_LEFT,  KC_ESC,   KC_FN7,   KC_HASH,   MO(2),
-             KC_INSERT,  NO_SLSH,
-             KC_DELT,
-             KC_BSPC,KC_ENT,KC_SPC
-    ),
-/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   \    |      |      |   {  |   }  |      |      |           |      |   $  |      |      |  <   |   >  |    @   |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |  '   |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | Func |      |      |      |,/Ctrl|                                       |      |      |  `   |      | Num  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |  |   |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |./Cmd |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[BASE_MAC] = KEYMAP(
-       NO_BSLS_MAC, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, CTL_T(KC_COMMA),
-                                           KC_TRNS, NO_PIPE_MAC,
-                                                    KC_TRNS,
-                                  KC_TRNS,GUI_T(KC_DOT) , KC_TRNS,
-    // right hand
-       KC_TRNS,  NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
-       NO_APOS_MAC,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_TRNS, KC_TRNS, NO_GRV_MAC, KC_TRNS, MO(3),
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-
-/* Keymap 2: Number ++ layer pc
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |   %  |      |      |           |      |      |   ~  |   ´  |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   3  |  2   |  1   |   0  |      |------|           |------|      |   5  |   6  |   7  |   8  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |   4  |      |      |           |      |      |   9  |  END | PGDWN| PGUP |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[NUMB_SYMB] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS,
-       KC_TRNS, KC_3   , KC_2   , KC_1   , KC_0   , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_FN2, KC_FN6 , KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS,
-       KC_TRNS,  KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
-                          KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-
-/* Keymap 3: Number ++ layer mac. Some keys have to be repeated from the pc symbol layer, since transient keys inherit from the layer we jump from, not the layer above.
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |   %  |      |      |           |      |      |   ~  |   ´  |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   3  |  2   |  1   |   0  |      |------|           |------|      |   5  |   6  |   7  |   8  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |   4  |      |      |           |      |      |   9  |  END | PGDWN| PGUP |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       | HOME |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[NUMB_SYMB_MAC] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_PERC, KC_TRNS , KC_TRNS,
-       KC_TRNS, KC_3   , KC_2   , KC_1   , KC_0   , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_FN2, KC_FN10, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_5, KC_6, KC_7, KC_8, KC_TRNS,
-       KC_TRNS,  KC_HOME, KC_9, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
-                          KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-
-/* Keymap 4: Function layer mac + pc
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |  F3  |  F2  |  F1  |     |      |------|           |------|       |  F5  |  F6  |  F7  |  F8  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |  F4  |      |      |           |      |      |  F9  |  F10 |  F11 |  F12 |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[FUNCTION] = KEYMAP(
-       KC_5, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
-       KC_TRNS, KC_F3   , KC_F2   , KC_F1 , KC_TRNS   , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F4, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
-       KC_TRNS,  NO_TILD, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
-                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-)
-};
-
-enum macro_id {
-    TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO,  GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
-    [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
-    [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
-    [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
-    [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
-    [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
-    [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
-    [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
-    [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
-    [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
-};
-
-
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    keyevent_t event = record->event;
-
-    switch (id) {
-        case TILDE_NO:
-            return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
-        case LESS_NO:
-            return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
-        case GRTR_NO:
-            return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
-        case CIRC_NO:
-            return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
-        case ACUT_NO:
-            return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC),  END ) : MACRO_NONE);
-        case GRV_NO:
-            return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT),  END ) : MACRO_NONE);
-        case LESS_NO_MAC:
-            return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
-        case GRTR_NO_MAC:
-            return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
-        case ACUT_NO_MAC:
-            return (event.pressed ? MACRO( T(EQL), T(SPC),  END ) : MACRO_NONE);
-    }
-    return MACRO_NONE;
-};
diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md b/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md
deleted file mode 100644 (file)
index 48f095c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Norwegian Colemak setup with osx/pc toggle
-
-## Motivation
-I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I  also wanted it to translate from a standard Norwegian keyboard OS setup.
-
-## Overview
-The setup is created to be programmer friendly.
-- Most of the symbols used in code can be activated without using layers or shift key.
-- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb.
-- Navigation is prioritized, arrows are right below the home row.
-
-## PC/Mac toggle
-The default setup is for Norwegian keyboard setting(not colemak variants) on a PC(Windows or Linux). Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard.
-
-## Layers
-Numbers and function buttons are on their own layers. The easiest way to switch layers(at least with my hands) in this setup, is to push your hand right below the little finger, on the layer switches. You will then have all your fingers free to type numbers or press function buttons.
-
-## Shift-key
-Tap for the next character to be shifted, hold down for regular shift functionality
-
-## Layout
-
-![keyboard-layout](keyboard-layout.png)
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png b/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png
deleted file mode 100644 (file)
index 6fba568..0000000
Binary files a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png b/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png
deleted file mode 100644 (file)
index b0a1c51..0000000
Binary files a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c b/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c
deleted file mode 100644 (file)
index e9648ed..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define FKEYS 1 // F keys + macros
-
-#define MACRO_PUBLIC 10
-#define MACRO_PRIVATE 11
-
-#define MACRO_STATIC 12
-#define MACRO_CONST 13
-
-#define MACRO_VOID 14
-#define MACRO_VAR 15
-#define MACRO_STRING 16
-
-#define MACRO_INT 17
-#define MACRO_FLOAT 18
-#define MACRO_BOOL 19
-
-#define MACRO_RETURN 20
-#define MACRO_NULL 21
-#define MACRO_BREAK 22
-
-#define MACRO_TODO 23
-#define MACRO_NEW 24
-#define MACRO_PARENTHESE 25
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   (    |   1  |   2  |   3  |   4  |   5  |  "   |           | Save |   6  |   7  |   8  |   9  |   0  |   [    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |   )    |   Q  |   W  |   E  |   R  |   T  |Bkspa |           | Del  |   Y  |   U  |   I  |   O  |   P  |   ]    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |   {    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   _  |   Redo |
- * |--------+------+------+------+------+------|   /  |           |  ;   |------+------+------+------+------+--------|
- * |   }    |Z~Alt |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   '  |   !  |   ?  |   Undo |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Tab~CL|  <   |  >   |   |  |  &   |                                       |   =  |   +  |   -  |   *  |  L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |. ~L1 | ,    |       |Home  |End~L1|
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | Copy |       | UP   |      |      |
- *                                 | Enter| Space|------|       |------| Space|Enter |
- *                                 | ~WIN | ~LSFT| Past |       | DOWN | ~LSFT| ~WIN |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_LPRN,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   LSFT(KC_QUOTE),
-        KC_RPRN,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_BSPACE,
-        KC_LCBR,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_RCBR,        ALT_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   KC_SLASH,
-        CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR, 
-                                              LT(1,KC_DOT),  KC_COMM,
-                                                              LCTL(KC_C),
-                                               GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V),
-        // right hand
-             LCTL(KC_S)  ,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_LBRACKET,
-             KC_DELETE,       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_RBRACKET,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_UNDS,LCTL(KC_Y),
-             KC_SCOLON,KC_N,   KC_M, KC_QUOTE  ,KC_EXLM , LSFT(KC_SLASH),   LCTL(KC_Z),
-                                  KC_EQUAL,KC_PLUS  ,  KC_MINUS,KC_ASTR  ,     TG(1),
-             KC_HOME,         LT(1,KC_END),
-             KC_UP,
-             KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER)
-    ),
-
-/* Keymap 1:  F keys + macros
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |  ESC   |  F1  |  F2  |  F3  |  F4  |  F5  |  `   |           | Calc |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |  Tab   |Public|Static|string|int   |return|      |           |      |//TODO|      |      |      |      |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |Privat|Const |var   |float |null  |------|           |------|new   |      |      |      |      |        |
- * |--------+------+------+------+------+------|  \   |           |  ~   |------+------+------+------+------+--------|
- * |        |      |      |void  |bool  |break;|      |           |      |();   |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |  WIN | Alt  |      |      |                                       | PgUp | PgDw | Ins  | PtSc |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      | Cut  |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------| Left | Right|
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// FKEYS + MACROS
-[FKEYS] = KEYMAP(
-       // left hand
-       KC_ESCAPE,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_GRAVE,
-       KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC),  M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
-       KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL),
-       KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH,
-       KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,LCTL(KC_X),
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_CALCULATOR, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, M(MACRO_TODO),   KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_F12,
-                M(MACRO_NEW), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
-       KC_TILD, M(MACRO_PARENTHESE), KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS, KC_TRNS,
-                         KC_PGUP,KC_PGDOWN,  KC_INSERT,   KC_PSCREEN,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_LEFT, KC_RIGHT
-),
-
-
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(FKEYS)                // FN1 - Momentary Layer 1
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-               case MACRO_PUBLIC:
-                       if (record->event.pressed) {
-                               return MACRO( T(P), T(U), T(B), T(L), T(I), T(C), T(SPACE),END);
-                       } 
-                       break;
-               case MACRO_PRIVATE:
-                       if (record->event.pressed) {
-                               return MACRO( T(P), T(R), T(I), T(V), T(A), T(T), T(E), T(SPACE),END);
-                       } 
-                       break;
-               case MACRO_STATIC:
-                       if (record->event.pressed) {
-                               return MACRO( T(S), T(T), T(A), T(T), T(I), T(C), T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_CONST:
-                       if (record->event.pressed) {
-                               return MACRO( T(C), T(O), T(N), T(S), T(T), T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_VOID:
-                       if (record->event.pressed) {
-                               return MACRO( T(V), T(O), T(I), T(D), T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_VAR:
-                       if (record->event.pressed) {
-                               return MACRO( T(V), T(A), T(R), T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_STRING:
-                       if (record->event.pressed) {
-                               return MACRO( T(S), T(T), T(R), T(I), T(N), T(G), T(SPACE), END);
-                       } 
-                       break;          
-               case MACRO_BOOL:
-                       if (record->event.pressed) {
-                               return MACRO( T(B), T(O), T(O), T(L), T(SPACE), END);
-                       } 
-                       break;          
-               case MACRO_INT:
-                       if (record->event.pressed) {
-                               return MACRO( T(I), T(N), T(T), T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_FLOAT:
-                       if (record->event.pressed) {
-                               return MACRO( T(F), T(L), T(O), T(A),T(T),T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_RETURN:
-                       if (record->event.pressed) {
-                               return MACRO( T(R), T(E), T(T), T(U),T(R),T(N), END);
-                       } 
-                       break;
-               case MACRO_NULL:
-                       if (record->event.pressed) {
-                               return MACRO( T(N), T(U), T(L), T(L), END);
-                       } 
-               case MACRO_BREAK:
-                       if (record->event.pressed) {
-                               return MACRO( T(B), T(R), T(E), T(A), T(K), T(SCOLON), END);
-                       } 
-                       break;
-               case MACRO_TODO:
-                       if (record->event.pressed) {
-                               return MACRO( T(SLASH), T(SLASH), D(LSHIFT) ,T(T), T(O), T(D), T(O),U(LSHIFT), T(SPACE),END);
-                       } 
-                       break;
-               case MACRO_NEW:
-                       if (record->event.pressed) {
-                               return MACRO( T(N), T(E), T(W), T(SPACE), END);
-                       } 
-                       break;
-               case MACRO_PARENTHESE:
-                       if (record->event.pressed) {
-                               return MACRO(  D(LSHIFT),T(9), T(0),U(LSHIFT), T(SCOLON), END);
-                       } 
-                       break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md b/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md
deleted file mode 100644 (file)
index 96af077..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# ErgoDox EZ C# Developer configuration
-
-## Changelog
-
-* Feb 12, 2016 (V1): 
-  * First version commit
-* Mar 20, 2016 (V2):
-  * Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter
-
-## About
-This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions.
-
-I came to the realization that my main tool as a developer, the qwerty keyboard was something that did not evolved at its core in almost 150 years.
-There are a lot of reasons to this, and it would be a massive entreprise to change a standard so strongly anchored, but I wanted to give it a try and see how would look an input device dedicated to developers, more specifically a C# developer in my case.
-The biggest flaw in standard QWERTY keyboards was that I always needed to perform key combination to access commonly used characters or actions. Think about it a minute, how many times a day do you press a modifier key such as Ctrl or Shift, it's insane and could be so easily optimized to require only one key press.
-
-Then I came across the ErgoDox EZ project, that allowed a full customization of its firmware, and a unique 2 parts design.
-
-![CSharpDev](csharp_dev_legend.png)
-
-## Layout design principles
-* No key combination required for the most common input characters ( (),[],{},<> ... )
-* No key combination required for the most common actions (copy/paste/undo/save)
-* Regroup characters by usage ( + - * =  ...)
-* Easy access to the most commonly used characters: ; / " . ,
-* Preregistered macro for the most common C# langage instructions: public / private / string / int / float ...
-
-## Why is it specific to C Sharp
-I defined the characters priority based on their usage in C# language, most of this characters are also used in other coding languages but it may require some tweaking. 
-For example there is no direct access to ~ or $ keys which can be very common in some languages.
-Note it is also specific to Windows environement as the shortcut used in action keys would not work on Mac Os
-
-## In usage
-It was relatively easy to get used to the layout, but it's hard for me to define how easy it was as I was getting used to a blank Ergodox keyboard at the same time.
-Still it's extremely satisfying to Save your file with just one easily accessible key or to have one big key to end your code line ( ; )
-
-## Improvements
-This layout was shared after a bunch of iterations and only once I was happy with it.
-Still there are many way to improve or iterate on this:
-* Make it language agnostic
-* Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g.  https://dzone.com/articles/most-pressed-keys-various )
-* QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur
-
-## Issues 
-One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold )
-
-
diff --git a/keyboards/ergodox_ez/keymaps/dave/keymap.c b/keyboards/ergodox_ez/keymaps/dave/keymap.c
deleted file mode 100644 (file)
index e9480af..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define PROG 1 // programming
-#define NAVI 2 // navigation
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | Esc    |   1  |   2  |   3  |   4  |   5  |   6  |           |   6  |   7  |   8  |   9  |   0  |   -  | BkSpce |
- * |--------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |   Y  |           |   G  |   Y  |   U  |   I  |   O  |   P  | Enter  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | LCtrl  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | Enter  |
- * |--------+------+------+------+------+------|   H  |           |   B  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |`/Ctrl|   \  |      |      | LAlt |                                       | RAlt |   [  |   ]  |      |'/Ctrl|
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | PrtS | PrtS |       | CtAl | CtAl |
- *                                 ,------+------+------|       |------+------+------.
- *                                 |      |      |  L1  |       |  L1  |      |      |
- *                                 | Spce | ~L2  +------|       |------+  ~L1 | Spce |
- *                                 |      |      | LGui |       | RGui |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_ESC,   KC_1,     KC_2,    KC_3,    KC_4,    KC_5,   KC_6,
-        KC_TAB,   KC_Q,     KC_W,    KC_E,    KC_R,    KC_T,   KC_Y,
-        KC_LCTRL, KC_A,     KC_S,    KC_D,    KC_F,    KC_G,
-        KC_LSFT,  KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,   KC_H,
-        CTL_T(KC_GRV),KC_NUBS,KC_NO, KC_NO,   KC_LALT,
-                                                  KC_PSCREEN, KC_PSCREEN,
-                                                      TO(PROG, ON_PRESS),
-                                               KC_SPC, MO(NAVI), KC_LGUI,
-        // right hand
-             KC_6,    KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS, KC_BSPC,
-             KC_G,    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,    KC_ENTER,
-                      KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN, KC_ENTER,
-             KC_B,    KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
-                              KC_RALT,KC_LBRC,KC_RBRC,KC_NO,   CTL_T(KC_QUOT),
-             MT(0x5, KC_NO), MT(0x5, KC_NO),
-             TO(PROG, ON_PRESS),
-             KC_RGUI, MO(PROG), KC_SPC
-    ),
-
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |  K/  |  K*  |  K-  |   =    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   (  |   )  |   |  |      |           |      |      |  K7  |  K8  |  K9  |  K+  |   #    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   {  |   }  |   `  |------|           |------|      |  K4  |  K5  |  K6  |  K+  |   '    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |      |  K1  |  K2  |  K3  |  K=  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |  K0  |  K0  |  K.  |  K=  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |  L2  |       |  L2  |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// PROGRAMMING
-[PROG] = KEYMAP(
-       // left hand
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
-       KC_TRNS, KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,
-       KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                        KC_TRNS, KC_TRNS,
-                                      TO(NAVI, ON_PRESS),
-                               KC_TRNS, KC_TRNS, KC_TRNS,
-       // right hand
-       KC_TRNS, KC_TRNS, KC_NO,  KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL,
-       KC_TRNS, KC_TRNS, KC_P7,  KC_P8,   KC_P9,   KC_PPLS, KC_NUHS,
-                KC_TRNS, KC_P4,  KC_P5,   KC_P6,   KC_PPLS, KC_QUOT,
-       KC_TRNS, KC_TRNS, KC_P1,  KC_P2,   KC_P3,   KC_PENT, KC_TRNS,
-                         KC_P0,  KC_P0,   KC_PDOT, KC_PENT, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       TO(NAVI, ON_PRESS),
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-
-/* Keymap 2: Navigation and system keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  | F10  | F11  | F12  |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        | Home |  Up  | End  | Ins  | PgUp |      |           |      |      |      | Ins  |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | Left | Down | Rght | Del  | PgDn |------|           |------|      | Back | Del  | Fwrd |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | Lclk | MsUp | Rclk |      |      |      |           |      |      | Prev | Play | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      | MsLt | MsDn | MsRt |      |                                       |VolDn | Mute |VolUp |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |  L0  |       |  L0  |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// NAVIGATION
-[NAVI] = KEYMAP(
-       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
-       KC_TRNS, KC_HOME, KC_UP,   KC_END,  KC_INS,  KC_PGUP, KC_TRNS,
-       KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DELT, KC_PGDN,
-       KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                         TO(BASE, ON_PRESS),
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_INS,  KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_WBAK, KC_DELT, KC_WFWD, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       TO(BASE, ON_PRESS),
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    //[1] = ACTION_LAYER_TAP_TOGGLE(PROG),               // FN1 - Momentary Layer 1 (Symbols)
-    //[2] = ACTION_LAYER_TAP_TOGGLE(NAVI)                // FN2 - Momentary Layer 2 (Navigation)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-    /* leds is a static array holding the current brightness of each of the
-     * three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and
-     * -1s in the code below, and because wasting a byte really doesn't matter
-     * that much (no, it *doesn't*, stop whinging!). Note that because it's
-     * static it'll maintain state across invocations of this routine.
-     */
-    static uint8_t leds[4];
-    uint8_t led;
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-
-    /* Loop over each LED/layer */
-    for (led = 1; led <= 3; ++led) {
-        /* If the current layer matches the current LED, increment its
-         * brightness by 1 up to a maximum of 255. If the current layer doesn't
-         * match, decrement its brightness by 1 down to a minimum of zero.
-         */
-        leds[led] += (layer == led) ?
-            (leds[led] < 255 ? 1 : 0):
-            (leds[led] > 0 ? -1 : 0);
-        /* Set LED state according to the new brightness */
-        if (leds[led]) {
-            ergodox_right_led_on(led);
-            ergodox_right_led_set(led, leds[led]);
-        }
-        else {
-            ergodox_right_led_off(led);
-        }
-    }
-
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/dave/readme.md b/keyboards/ergodox_ez/keymaps/dave/readme.md
deleted file mode 100644 (file)
index aa0f9bd..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-This keymap is my preferred layout (after a certain amount of experimentation).
-The rationale behind the design is as follows:
-
-I grew up typing from a very early age and thus never learned the "correct" way
-to touch type (essentially, I'm self-taught). As a, result my fingers don't
-tend to stay on the "home keys" and occasionally my right hand wants to type
-keys that are on the left of the keyboard, and vice versa.
-
-Hence, despite liking the idea of split keyboards in principle, I've never been
-able to get on with them because the split simply doesn't work with my style of
-typing. The Ergodox solves this neatly by virtue of having a few extra keys in
-the "middle" of the keyboard which I can utilise for deliberate redundancy.
-Thus in this keymap there are two "6" keys (one on the left, one on the right)
-and likewise Y, H, G, and B are all duplicated to enable one-handed patterns
-that I use frequently (e.g. "byobu" with the right hand, "yes" with the left,
-etc.).
-
-I occasionally use the numeric pad for data entry, thus this is duplicated
-under the natural home position of the right hand in layer 1 (activated by
-holding one of the right thumb buttons), while the cursor keys are duplicated
-under the classic WASD gaming layout of the left hand in layer 2 (activated by
-holding one of the left thumb buttons). Various other useful keys also appear
-in these layers (brackets and symbols for coding in layer 1, navigation and
-F-keys in layer 2, etc.).
-
-Finally, modifier keys like Ctrl, Shift, and Alt, along with Backspace and
-Enter are all in traditional locations in an effort to reuse existing muscle
-memory as much as possible (keys like =, #, and ' are in layer 1). The layout
-maps are in the comments of keymap_dave.c so I won't bother duplicating them
-here.
-
-Oh, and the LEDs are rather pimped ... because I could!
-
-Anyway, although I'm sure this keymap won't be to many people's taste you might
-find some interesting ideas in here for your own layouts. Do tweet me
-(@waveform80) if you have any questions / suggestions / bugs.
-
-Dave.
diff --git a/keyboards/ergodox_ez/keymaps/default/default.png b/keyboards/ergodox_ez/keymaps/default/default.png
deleted file mode 100644 (file)
index 6575f7b..0000000
Binary files a/keyboards/ergodox_ez/keymaps/default/default.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/default/default_highres.png b/keyboards/ergodox_ez/keymaps/default/default_highres.png
deleted file mode 100644 (file)
index 7d9f045..0000000
Binary files a/keyboards/ergodox_ez/keymaps/default/default_highres.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c
deleted file mode 100644 (file)
index b48a54a..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
-        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/default/readme.md b/keyboards/ergodox_ez/keymaps/default/readme.md
deleted file mode 100644 (file)
index 8f6dba4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# ErgoDox EZ Default Configuration
-
-## Changelog
-
-* Feb 2, 2016 (V1.1): 
-  * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
-
-This is what we ship with out of the factory. :) The image says it all:
-
-![Default](default_highres.png)
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png b/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png
deleted file mode 100644 (file)
index 04f46bb..0000000
Binary files a/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c b/keyboards/ergodox_ez/keymaps/default_osx/keymap.c
deleted file mode 100644 (file)
index c57ffbb..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// Netable differences vs. the default firmware for the ErgoDox EZ:
-// 1. The Cmd key is now on the right side, making Cmd+Space easier.
-// 2. The media keys work on OSX (But not on Windows).
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  LGui  |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
-        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(SYMB),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_LGUI,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/readme.md b/keyboards/ergodox_ez/keymaps/default_osx/readme.md
deleted file mode 100644 (file)
index aa749aa..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# The OSX Friendly Version of the Default Firmware
-
-So, I took the default firmware and just made a couple of tweaks that make it easier to use with OS X:
-
-1. The Cmd key is now on the right side, making Cmd+Space easier.
-2. The media keys work on OSX (But not on Windows).
-
-![default osx](default_osx_highres.png)
diff --git a/keyboards/ergodox_ez/keymaps/dragon788/keymap.c b/keyboards/ergodox_ez/keymaps/dragon788/keymap.c
deleted file mode 100644 (file)
index 3aec8c6..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-#define PLVR 3 // Plover layer
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LGui |           |Plover|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L2  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | '"/Ctrl|
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | ~L1  | Grv  |  '"  | Left |Rgt/L2|                                       | Up/L2| Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | Home |       | PgUp |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 |Backsp|Delete|------|       |------| Enter  |Space |
- *                                 | ace  |      | LAlt |       |TabCtl|        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LGUI,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
-        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-         KC_FN1,      KC_GRV,      KC_QUOT,KC_LEFT, LT(MDIA, KC_RGHT),
-                                                     KC_APP,  KC_HOME,
-                                                               KC_END,
-                                              KC_BSPC,KC_DELT,KC_LALT,
-        // right hand
-             TG(3),       KC_6,   KC_7,   KC_8,   KC_9,   KC_0,           KC_MINS,
-             TG(2),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,           KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN, CTL_T(KC_QUOT),
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,        KC_RSFT,
-                       LT(MDIA, KC_UP),   KC_DOWN,KC_LBRC,KC_RBRC,         KC_FN1,
-             KC_PGUP,        CTL_T(KC_ESC),
-             KC_PGDN,
-             CTL_T(KC_TAB),KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      | Calc |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_CALC,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | Rclk | Lclk |      |      |           |      |      | Lclk | Rclk |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft| MsUp |MsDown|MsRght|------|           |------|MsLeft|MsDown| MsUp |MsRght|      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      | Prev |       |VolUp |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | Play |       | Mute |Brwser|Brwser|
- *                                 | Lclk | Rclk |------|       |------|Fwd   |Back  |
- *                                 |      |      | Next |       |VolDn |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-         RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_MPRV,
-                                                    KC_MPLY,
-                                  KC_BTN1, KC_BTN2, KC_MNXT,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_VOLU,  KC_TRNS,
-       KC_MUTE,
-       KC_VOLD,  KC_WBAK, KC_WFWD
-),
-
-/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   1  |   2  |   3  |   4  |   5  |      |           |      |  6   |  7   |   8  |   9  |  0   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   q  |   w  |   e  |   r  |   t  |------|           |------|  y   |  u   |   i  |   o  |  p   |   [    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   a  |   s  |   d  |   f  |   g  |      |           |      |  h   |  j   |   k  |   l  |  ;   |   '    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |   c  |   v  |------|       |------|  n   |  m   |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-
-[PLVR] = KEYMAP(  // layout: layer 4: Steno for Plover
-        // left hand
-        KC_NO, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
-        KC_NO,  KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
-        KC_NO,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,
-        KC_NO,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_NO,
-        KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
-                                      KC_FN4, KC_NO,
-                                           KC_NO,
-                                 KC_C,   KC_V,   KC_NO,
-        // right hand
-             KC_TRNS,  KC_NO,   KC_NO,   KC_NO,  KC_NO,   KC_NO,   KC_TRNS,
-               KC_NO,   KC_6,    KC_7,    KC_8,   KC_9,    KC_0,   KC_TRNS,
-                        KC_Y,   KC_U,    KC_I,    KC_O,   KC_P,    KC_LBRC,
-               KC_NO,   KC_H,    KC_J,    KC_K,   KC_L, KC_SCLN,   KC_QUOT,
-                              KC_TRNS, KC_TRNS,  KC_NO,   KC_NO,     KC_NO,
-        KC_TRNS, KC_TRNS,
-        KC_TRNS,
-        KC_NO,  KC_N,   KC_M
-),
-
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png b/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png
deleted file mode 100644 (file)
index cb83163..0000000
Binary files a/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak/keymap.c
deleted file mode 100644 (file)
index 2294732..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   \    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   '  |   ,  |   .  |   P  |   Y  |  L1  |           |  L1  |   F  |   G  |   C  |   R  |   L  |   /    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |S / L2|   -    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |:/Ctrl|   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   TG(1),
-        KC_BSPC,        KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
-        KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSLS,
-             TG(1),       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
-                          KC_D,   KC_H,   KC_T,   KC_N,   LT(MDIA, KC_S),   KC_MINS,
-             MEH_T(KC_NO),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png
deleted file mode 100644 (file)
index 6a36f9b..0000000
Binary files a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png
deleted file mode 100644 (file)
index c6e6d91..0000000
Binary files a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png
deleted file mode 100644 (file)
index 23f56ff..0000000
Binary files a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c
deleted file mode 100644 (file)
index 82f55b4..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | BrBck|           | Play |   6  |   7  |   8  |   9  |   0  | \ / L2 |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Esc    |   '  |   ,  |   .  |   P  |   Y  | Del  |           | Ins  |   F  |   G  |   C  |   R  |   L  |   /    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  |   -    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |:/Ctrl|   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1| LAlt | LGui | Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,---------------.
- *                                        | App  | L1   |       | L2   |PrntScr |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space| Tab  |------|       |------| AltShf |Enter |
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_WBAK,
-        KC_ESC,         KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   KC_DELT,
-        KC_BSPC,        KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
-        KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_LALT,      KC_LGUI,  KC_LEFT,KC_RGHT,
-                                              CTL_T(KC_APP),  TG(1),
-                                                              KC_HOME,
-                                               KC_SPC,KC_TAB,KC_END,
-        // right hand
-             KC_MPLY,      KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             LT(MDIA, KC_BSLS),
-             KC_INS,       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
-                          KC_D,   KC_H,   KC_T,   KC_N,   KC_S,             KC_MINS,
-             MEH_T(KC_NO),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             TG(2),        KC_PSCREEN,
-             KC_PGUP,
-             KC_PGDN,RALT(KC_RSFT), KC_ENT
-    ), 
-/* Keymap 1: Symbol & Media Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Prev | Next |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |VolUp |      |      |
- *                                 |      |      |------|       |------| Mute |      |
- *                                 |      |      |      |       |VolDn |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MNXT,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_VOLU,
-       KC_VOLD, KC_MUTE, KC_TRNS
-),
-/* Keymap 2: QWERTY Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl|        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(  // layer 0 : default
-        // left hand
-        KC_TRNS,        KC_TRNS,      KC_TRNS,   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-        KC_TRNS,        KC_Q,         KC_W,      KC_E,   KC_R,   KC_T,   KC_TRNS,
-        KC_TRNS,        KC_A,         KC_S,      KC_D,   KC_F,   KC_G,
-        KC_TRNS,        CTL_T(KC_Z),  KC_X,      KC_C,   KC_V,   KC_B,   KC_TRNS,
-        KC_TRNS,        KC_TRNS,      KC_TRNS,   KC_TRNS,KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-        // right hand
-        KC_TRNS,     KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,
-        KC_TRNS,     KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_TRNS,
-                     KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_TRNS,
-        KC_TRNS,     KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_TRNS,
-                             KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,
-        KC_TRNS, KC_TRNS,
-        KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS
-    ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md b/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md
deleted file mode 100644 (file)
index 984106f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# ErgoDox EZ Dvorak International Squisher
-
-Dvorak layout adjusted with several (linux) applications in mind:
-
-* Easier Escape for VIM
-* Windows/Super key for awesome WM
-* Alt+Shift for international characters
-* PrintScreen for sys-rq
-* Insert for the X11 clip-board
-
-Major layer changes:
-
-* Common multimedia keys are integrated into layer 0, less common into layer 1
-* No mouse keys
-* Layer 2 is qwerty (for easier gaming & less fortunate keyboard users)
-
-Known issues:
-
-* Alt+Shift does not work reliably (depends on the X11 kb layout? Not
-  entirely clear...)
-
-![layer0](keyboard-layout0.png)
-![layer1](keyboard-layout1.png)
-![layer2](keyboard-layout2.png)
-
-## Changelog
-
-* 2016-03-29
-  * Initial release
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c
deleted file mode 100755 (executable)
index 6eb864b..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-/******************************************************************************************
- * SPANISH DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
- * Layer 1: auxiliary keys
- * Layer 2: full qwerty layout
- ******************************************************************************************
- * IMPORTANT: Software layout must be set to SPANISH QWERTY to work properly
- *****************************************************************************************/
-
-// LAYERS
-#define BASE    0 // dvorak layout (default)
-#define AUX     1 // auxiliary keys
-#define QWERTY  2 // qwerty layout
-
-// MACROS
-#define OBRACE 0 // key { or shift
-#define CBRACE 1 // key } or shift
-#define OBRACK 2 // key [ or left alt
-#define CBRACK 3 // key ] or left alt
-#define CAPS   4 // caps lock
-
-// LEDS
-#define USB_LED_NUM_LOCK    0
-#define USB_LED_CAPS_LOCK   1
-#define USB_LED_SCROLL_LOCK 2
-#define USB_LED_COMPOSE     3
-#define USB_LED_KANA        4
-
-// TIMERS
-#define KEY_TAP_FAST 85
-#define KEY_TAP_SLOW 95
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Base layer
- * Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | F1/~L1 |   .  |   ,  |   Ñ  |   P  |   Y  |MEH_T |           |  L1  |   F  |   G  |   C  |   H  |   L  |ALL_T/+ |
- * |--------+------+------+------+------+------| DEL  |           | ~L1  |------+------+------+------+------+--------|
- * |Esc/Ctrl|   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   R  |   T  |   N  |   S  |'/RCtrl |
- * |--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
- * | {/LSft |   -  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |F5/CAG|F6/~L1|       |F7/~L1|F8/CAG|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      |F4/CA |       |F11/CA|        |      |
- *                                 | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
- *                                 |      |      |F3/SA |       |F12/SA|        |      |
- *                                 `--------------------'       `----------------------'
- *  CAG = CTRL-ALT-GUI
- *   CA = CTRL-ALT
- *   SA = SHIFT-ALT
- *
- */
-[BASE] = KEYMAP(
-        // left hand
-        KC_GRAVE,       KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NONUS_BSLASH,
-        LT(AUX, KC_F1), KC_DOT, KC_COMM,KC_SCLN,KC_P,   KC_Y,   MEH_T(KC_DEL),
-        CTL_T(KC_ESC),  KC_A,   KC_O,   KC_E,   KC_U,   KC_I,
-        M(OBRACE),      KC_SLSH,KC_Q,   KC_J,   KC_K,   KC_X,   KC_LGUI,
-        M(OBRACK),      KC_HOME,KC_PGDN,KC_PGUP,KC_END,
-                                                           LCAG_T(KC_F5),  LT(AUX, KC_F6),
-                                                           MT((MOD_LALT | MOD_LCTL), KC_F4),
-                                           KC_ENT,KC_TAB,MT((MOD_LALT | MOD_LSFT), KC_F3),
-        // right hand
-                    KC_EQL,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINUS,
-                    KC_FN1,    KC_F,   KC_G,   KC_C,   KC_H,   KC_L,   ALL_T(KC_RBRACKET),
-                               KC_D,   KC_R,   KC_T,   KC_N,   KC_S,   CTL_T(KC_QUOTE),
-                    KC_RALT,   KC_B,   KC_M,   KC_W,   KC_V,   KC_Z,   M(CBRACE),
-                                       KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,M(CBRACK),
-        LT(AUX, KC_F7), LCAG_T(KC_F8),
-        MT((MOD_LALT | MOD_LCTL), KC_F11),
-        MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC
-    ),
-/* Keymap 1: Aux layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP            | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  `^    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
- * |--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
- * |CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      | Play |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       | VolUp|      |      |
- *                                 | Lclk | Rclk |------|       |------| Prev | Next |
- *                                 |      |      |  L2  |       | VolDn|      |      |
- *                                 `--------------------'       `--------------------'
- */
-[AUX] = KEYMAP(
-       // left hand
-       KC_NO  , KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_SLEP,
-       KC_TRNS, KC_NONUS_BSLASH, LSFT(KC_NONUS_BSLASH), KC_MS_U, KC_NO, KC_NO, KC_NO,
-       KC_NO  , KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO  ,
-       M(CAPS), KC_NO, KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO,
-       LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V),
-                                                            KC_NO  , KC_TRNS,
-                                                                       KC_NO,
-                                                KC_BTN1, KC_BTN2, TG(QWERTY),
-       // right hand
-            KC_PWR,  KC_F6,   KC_F7,  KC_F8,  KC_F9,   KC_F10,  KC_F11,
-            KC_TRNS, KC_NO,   KC_7,   KC_8,   KC_9,    KC_PAST, KC_LBRACKET,
-                     KC_NO,   KC_4,   KC_5,   KC_6,    KC_PPLS, KC_BSLASH,
-            KC_PSCR, KC_NO,   KC_1,   KC_2,   KC_3,    KC_PSLS, KC_NO,
-                              KC_NO  ,KC_DOT, KC_0,    KC_PEQL, KC_NO,
-       KC_TRNS, KC_MPLY,
-       KC_VOLU,
-       KC_VOLD, KC_MPRV, KC_MNXT
-),
-/* Keymap 2: QWERTY layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
- * |--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
- * |Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
- * |--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
- * | {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |F5/CAG| TRANS|       | TRANS|F8/CAG|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      |F4/CA |       |F11/CA|        |      |
- *                                 | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
- *                                 |      |      | TRANS|       |F12/SA|        |      |
- *                                 `--------------------'       `----------------------'
- *  CAG = CTRL-ALT-GUI
- *   CA = CTRL-ALT
- *   SA = SHIFT-ALT
- *
- */
-[QWERTY] = KEYMAP(
-        // left hand
-        KC_GRAVE,       KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NONUS_BSLASH,
-        KC_TRNS,        KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   MEH_T(KC_DEL),
-        CTL_T(KC_ESC),  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,
-        M(OBRACE),      KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
-        M(OBRACK),      KC_HOME,KC_PGDN,KC_PGUP,KC_END,
-                                                                  LCAG_T(KC_F5),  KC_TRNS,
-                                                           MT((MOD_LALT | MOD_LCTL), KC_F4),
-                                                                    KC_ENT,KC_TAB,KC_TRNS,
-        // right hand
-                    KC_EQL,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINUS,
-                    KC_TRNS,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   ALL_T(KC_RBRACKET),
-                               KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,CTL_T(KC_QUOTE),
-                    KC_RALT,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,M(CBRACE),
-                                       KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,M(CBRACK),
-        KC_TRNS, LCAG_T(KC_F8),
-        MT((MOD_LALT | MOD_LCTL), KC_F11),
-        MT((MOD_LALT | MOD_LSFT), KC_F12),KC_BSPC, KC_SPC
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(AUX)                // FN1 - Momentary Layer 1 (Aux)
-};
-
-static uint16_t key_timer;
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-      switch(id) {
-        case OBRACE: {
-            if (record->event.pressed) {
-                key_timer = timer_read();
-                register_code(KC_RSFT);
-            } else {
-                unregister_code(KC_RSFT);
-                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) {
-                    register_code(KC_RALT);
-                    register_code(KC_QUOTE);
-                    unregister_code(KC_QUOTE);
-                    unregister_code(KC_RALT);
-                }
-            }
-            break;
-        }
-        case CBRACE: {
-            if (record->event.pressed) {
-                key_timer = timer_read();
-                register_code(KC_RSFT);
-            } else { 
-                unregister_code(KC_RSFT);
-                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { 
-                    register_code(KC_RALT); 
-                    register_code(KC_BSLS); 
-                    unregister_code(KC_BSLS); 
-                    unregister_code(KC_RALT); 
-                }
-            }
-            break;
-        }
-        case OBRACK: {
-            if (record->event.pressed) {
-                key_timer = timer_read();
-                register_code(KC_LALT);
-            } else { 
-                unregister_code(KC_LALT);
-                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { 
-                    register_code(KC_RALT); 
-                    register_code(KC_LBRACKET); 
-                    unregister_code(KC_LBRACKET); 
-                    unregister_code(KC_RALT); 
-                }
-            }
-            break;
-        }
-        case CBRACK: {
-            if (record->event.pressed) {
-                key_timer = timer_read();
-                register_code(KC_LALT);
-            } else { 
-                unregister_code(KC_LALT);
-                if (timer_elapsed(key_timer) < KEY_TAP_SLOW) { 
-                    register_code(KC_RALT); 
-                    register_code(KC_RBRACKET); 
-                    unregister_code(KC_RBRACKET); 
-                    unregister_code(KC_RALT); 
-                }
-            }
-            break;
-        }
-        case CAPS: {
-            if (record->event.pressed) {
-                register_code(KC_CAPSLOCK);
-            } else { 
-                unregister_code(KC_CAPSLOCK);
-            }
-            break;
-        }
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case 1:
-            ergodox_right_led_3_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-    
-    // Turn the caps lock led on
-    if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
-        ergodox_right_led_1_on();
-    }
-
-}
-
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md b/keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md
deleted file mode 100644 (file)
index e075e3c..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-# Ergodox Spanish Dvorak Layout
- * See spanish dvorak layout [here](http://djelibeibi.unex.es/dvorak/)
- * Software layout must be set to SPANISH QWERTY to work properly
-
-## Keymap Layers
- - L0: spanish dvorak with some customizations (see layout below)
- - L1: auxiliary keys (includes qwerty shortcuts, numpad...)
- - L2: qwerty layout with customizations
-
-
-### Keymap 0: Base layer
-Keys with double values (like Esc/Ctrl) correspond to the 'tapped' key and the 'held' key, respectively
-
-<pre><code>
-
-,--------------------------------------------------.           ,--------------------------------------------------.
-|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-| F1/~L1 |   .  |   ,  |   Ñ  |   P  |   Y  |MEH_T |           |  L1  |   F  |   G  |   C  |   H  |   L  |ALL_T/+ |
-|--------+------+------+------+------+------| DEL  |           | ~L1  |------+------+------+------+------+--------|
-|Esc/Ctrl|   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   R  |   T  |   N  |   S  |'/RCtrl |
-|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
-| {/LSft |   -  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | }/RSft |
-'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
-  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
-  '----------------------------------'                                       '----------------------------------'
-                                       ,-------------.       ,-------------.
-                                       |F5/CAG|F6/~L1|       |F7/~L1|F8/CAG|
-                                ,------|------|------|       |------+--------+------.
-                                |      |      |F4/CA |       |F11/CA|        |      |
-                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
-                                |      |      |F3/SA |       |F12/SA|        |      |
-                                '--------------------'       '----------------------'
- CAG = CTRL-ALT-GUI
-  CA = CTRL-ALT
-  SA = SHIFT-ALT
-
-</pre></code>
-
-### Keymap 1: Aux layer
-
-<pre><code>
-
-,--------------------------------------------------.           ,--------------------------------------------------.
-|        |  F1  |  F2  |  F3  |  F4  |  F5  | SLEEP|           | PWR  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|        |  <   |  >   | MsUp |      |      |      |           | ~L0  |      |   7  |   8  |   9  |   *  |  '^    |
-|--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-|        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |   4  |   5  |   6  |   +  |   Ç    |
-|--------+------+------+------+------+------|      |           |PSCR  |------+------+------+------+------+--------|
-|CAPSLOCK|      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   /  |        |
-'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
-  |CTRL-S|CTRL-Z|CTRL-X|CTRL-C|CTRL-V|                                       |      |    . |   0  |   =  |      |
-  '----------------------------------'                                       '----------------------------------'
-                                       ,-------------.       ,-------------.
-                                       |      |      |       |      | Play |
-                                ,------|------|------|       |------+------+------.
-                                |      |      |      |       | VolUp|      |      |
-                                | Lclk | Rclk |------|       |------| Prev | Next |
-                                |      |      |  L2  |       | VolDn|      |      |
-                                '--------------------'       '--------------------'
-
-</pre></code>
-
-### Keymap 2: QWERTY layer
-
-<pre><code>
-
-,--------------------------------------------------.           ,--------------------------------------------------.
-|   \    |   1  |   2  |   3  |   4  |   5  |  <>  |           |   ¡  |   6  |   7  |   8  |   9  |   0  |   '    |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-|  TRANS |   Q  |   W  |   E  |   R  |   T  |MEH_T |           | TRANS|   Y  |   U  |   I  |   O  |   P  |ALL_T/+ |
-|--------+------+------+------+------+------| DEL  |           |      |------+------+------+------+------+--------|
-|Esc/Ctrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ñ  |'/RCtrl |
-|--------+------+------+------+------+------| LGUI |           | RALT |------+------+------+------+------+--------|
-| {/LSft |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   -  | }/RSft |
-'--------+------+------+------+------+-------------'           '-------------+------+------+------+------+--------'
-  |[/LALT| HOME |PGDOWN| PGUP | END  |                                       | LEFT | DOWN |  UP  |RIGHT |]/LALT|
-  '----------------------------------'                                       '----------------------------------'
-                                       ,-------------.       ,-------------.
-                                       |F5/CAG| TRANS|       | TRANS|F8/CAG|
-                                ,------|------|------|       |------+--------+------.
-                                |      |      |F4/CA |       |F11/CA|        |      |
-                                | ENTER| TAB  |------|       |------|  BSPC  | SPACE|
-                                |      |      | TRANS|       |F12/SA|        |      |
-                                '--------------------'       '----------------------'
- CAG = CTRL-ALT-GUI
-  CA = CTRL-ALT
-  SA = SHIFT-ALT
-
-</pre></code>
-
-
-## Generation of .hex file
-> [Download scripts from here](https://github.com/johgh/keyboard/tree/master/ergodox)
-
-> Execute install.sh and generate.sh scripts.
-
-> Flash with `teensy_loader` binary (should be installed from previous step)
diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png b/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png
deleted file mode 100644 (file)
index 1d25837..0000000
Binary files a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c b/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c
deleted file mode 100644 (file)
index 1d8e66a..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   Grv  |   1  |   2  |   3  |   4  |   5  |  L1  |           |  L2  |   6  |   7  |   8  |   9  |   0  |   =    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |   Tab  |   Q  |   W  |   E  |   R  |   T  |  [   |           |   ]  |   Y  |   U  |   I  |   O  |   P  |   -    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | \/LCtrl|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |'/RCtrl |
- * |--------+------+------+------+------+------| RAlt |           | RAlt |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | ~L1  | LCtrl|  Left| Right| LAlt |                                       | LAlt | Up   | Down | RCtrl|  ~L2 |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | Del  | Ins  |       | Esc  | App  |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  LGui  |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   TG(SYMB),
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_LBRC,
-        CTL_T(KC_BSLS), KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_RALT,
-        MO(SYMB),       KC_LCTRL,     KC_LEFT,KC_RGHT,KC_LALT,
-                                                      KC_DELT,KC_INS,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             TG(MDIA),    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_EQL,
-             KC_RBRC,     KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_MINS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          CTL_T(KC_QUOT),
-             KC_RALT,     KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
-                                  KC_LALT,KC_UP,  KC_DOWN,KC_RCTRL,         MO(MDIA),
-             KC_ESC,      KC_APP,
-             KC_PGUP,
-             KC_PGDN,     KC_LGUI, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |   0  |    0 |   .  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_0,   KC_0,    KC_DOT,  KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md b/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md
deleted file mode 100644 (file)
index 4839988..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# ErgoDox EZ Emacs-OSX-DeadKeys Configuration
-
-Since I'm an Emacs user, ctrl keys are very important and gets a placement where the usual caps_lock is. There
-are an extra pair of ctrls, just in case there where problems with the holding one's, but not as comfortable.
-
-Gui button takes a predominant place on the thumb cluster, as I'm using a mac os x and it relies heavily on it.
-
-Finally there is also two Right Alts to easily access to accented letters of the spanish alphabet.
-
-![Default](default_highres.png)
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile b/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile
deleted file mode 100644 (file)
index b673c5c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Having a file like this allows you to override Makefile definitions
-# for your own particular keymap
-
-SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
-COMMAND_ENABLE   = no  # Commands for debug and configuration
-
-ifndef QUANTUM_DIR
-       include ../../../../Makefile
-endif
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/config.h b/keyboards/ergodox_ez/keymaps/erez_experimental/config.h
deleted file mode 100644 (file)
index e5d7fe1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define ONESHOT_TAP_TOGGLE 2
-#define ONESHOT_TIMEOUT 300
-
-#undef LEADER_TIMEOUT
-#define LEADER_TIMEOUT 300
-
-#endif
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c
deleted file mode 100644 (file)
index 04ad2a8..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#include <keymap_extras/keymap_colemak.h>
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  | Alt/J|   K  |   L  |; / L2| LGui/' |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * |LShift/(|Z/Ctrl|   X  |   C  |   V  |   B  |   [  |           |  ]   |   N  |   M  |   ,  |   .  |//Ctrl|RShift/)|
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | -/L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Leader|------|       |------| Tab/L1 |Enter |
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,     KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,     KC_T,   TG(SYMB),
-        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,     KC_G,
-        KC_LSPO,       CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,     KC_B,   ALL_T(KC_LBRC),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,  KC_RGHT,
-                                              ALT_T(KC_APP),    KC_LGUI,
-                                                                KC_HOME,
-                                                 KC_SPC,KC_LEAD,KC_END,
-        // right hand
-             KC_RGHT,       KC_6,KC_7,       KC_8,   KC_9,   KC_0,            KC_MINS,
-             TG(SYMB),      KC_Y,KC_U,       KC_I,   KC_O,   KC_P,            KC_BSLS,
-                            KC_H,ALT_T(KC_J),KC_K,   KC_L,   LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
-             MEH_T(KC_RBRC),KC_N,KC_M,       KC_COMM,KC_DOT, CTL_T(KC_SLSH),  KC_RSPC,
-                            KC_UP,           KC_DOWN,KC_LBRC,KC_RBRC,         LT(SYMB,KC_MINS),
-             KC_LALT,       CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,LT(SYMB, KC_TAB), KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   1  |   2  |   3  |   4  |   5  |------|           |------|   &  |   _  |   -  |   ;  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   6  |   7  |   8  |   9  |   0  |      |           |      |   |  |   @  |   =  |   %  |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |NxtTab|PrvTab|                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS, KC_F1,  KC_F2,  KC_F3,         KC_F4,        KC_F5,   KC_TRNS,
-       KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,       KC_TRNS,      KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_1,   KC_2,   KC_3,          KC_4,         KC_5,
-       KC_TRNS, KC_6,   KC_7,   KC_8,          KC_9,         KC_0,    KC_TRNS,
-       KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN),
-                                                                              KC_TRNS,KC_TRNS,
-                                                                                      KC_TRNS,
-                                                                      KC_TRNS,KC_TRNS,KC_TRNS,
-               // right hand
-       KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
-                KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_PIPE, KC_AT,   KC_EQL,  KC_PERC,   KC_TRNS, KC_TRNS,
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | PgUp | Home | End  | PgDn |      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_PGUP, KC_HOME, KC_END,  KC_PGDN, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),               // FN1 - Momentary Layer 1 (Symbols)
-    [2] = ACTION_MACRO_TAP(0),                         // Eric Tang's Famous Macro!
-    [3] = ACTION_MACRO_TAP(1)                          // Eric Tang's Famous Macro!
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-LEADER_EXTERNS();
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-  uint8_t layer = biton32(layer_state);
-
-  ergodox_board_led_off();
-  ergodox_right_led_1_off();
-  ergodox_right_led_2_off();
-  ergodox_right_led_3_off();
-  switch (layer) {
-    // TODO: Make this relevant to the ErgoDox EZ.
-    case 1:
-      ergodox_right_led_1_on();
-      break;
-    case 2:
-      ergodox_right_led_2_on();
-      break;
-    default:
-      // none
-      break;
-  }
-
-  LEADER_DICTIONARY() {
-    leading = false;
-    leader_end();
-
-    SEQ_ONE_KEY(KC_W) {
-      register_code(KC_LALT);
-      register_code(KC_F4);
-      unregister_code(KC_F4);
-      unregister_code(KC_LALT);
-    }
-    SEQ_ONE_KEY(KC_O) {
-      register_code(KC_LCTL);
-      register_code(KC_LSFT);
-      register_code(KC_O);
-      unregister_code(KC_O);
-      unregister_code(KC_LSFT);
-      unregister_code(KC_LCTL);
-    }
-  }
-}
-
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md b/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md
deleted file mode 100644 (file)
index 66acfa1..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# Erez's experimental layout
-
-This is my personal layout which I use to test out ideas which may or may not make it onto the default layout we ship with. It's based off the default layout, with various tweaks.
-
-Changelog:
-
-## May 24, 2016:
-
-* Implements Leader key example
-  * Leader, W sends Alt-F4
-  * Leader, O sends Ctrl-shift-o (a shortcut I use in FrontApp) 
-
-## May 8, 2016:
-
-* Makes bottom-right key send minus/underscore when tapped, L1 temporary toggle when held
-* Tweaked the positions of the numbers on the symbol layer. Basically, 12345 are now directly under their number-row counterparts in layer 0. You can imagine pulling the number row down to the home row. And 67890 are directly under 12345 - so it's a matter of just adding 5 and going to the next row (1+5 = 6, 2+5 = 7 and so on).
-* Tweaks media/nav layer
-  * Removes mouse control, as I don't use it
-  * Makes left home row keys PgUp, Home, End, PgDn
-
-## Apr 29, 2016:
-
-* Tweaks the Hyper and Meh key to send brackets when tapped
-* Turns bottom-right key into a minus/underscore (easy to reach with the right pinky)
-
-## Apr 25, 2016:
-
-* Made it so that the right and left Shift keys send opening and closing parens ( ) when tapped
-
-## Feb 11, 2016:
-
-* Updated ASCII legend for thumb clusters
-* Made it so outer left-hand thumb key is L1 momentary toggle
-* Added % and @ to L1
-* Swapped positions for _ and - on L1
-
-## Feb 5, 2016:
-
-* A whole new design for the symbol layer. Specifically:
-  * Put the minus, underscore, and semicolon right in the homerow for the right hand
-  * Parens are in better places for me
-  * The arrow keys now send Ctrl-PgUp and Ctrl-PgDn, for switching browser tabs with the arrows when in symbol layer
-  * Tab (right-hand outer thumb key) now does double duty to toggle symbol layer when held down
-  * Backspace (left-hand outer thumb key) now just toggles symbol layer (I wasn't using it as a backspace)
-  
-
-## Jan 19, 2016:
-
-* Made J into dual-action key (Alt when held down), to make Alt-tab more ergonomic.
-* Made ' into dual-action key (Win/Cmd when held down).
-
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c b/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c
deleted file mode 100644 (file)
index b1cecf0..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-// German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan.
-//
-// chschmitz, 2016-01-27
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_german.h"
-
-// Layer names
-#define BASE 0 // default layer
-#define SYMB 1 // symbol layer
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * X'es mark the spots where this is different from the "german" layout which it is based on.
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |X Esc  X|   1  |   2  |   3  |   4  |   5  |X `  X|           |XPRSCX|   6  |   7  |   8  |   9  |   0  |   ß    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |X Tab  X|   Q  |   W  |   E  |   R  |   T  |X L1 X|           |X L1 X|   Z  |   U  |   I  |   O  |   P  |   Ü    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Caps  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ö  |  Ä/L2  |
- * |--------+------+------+------+------+------|X L2 X|           |X L2 X|------+------+------+------+------+--------|
- * | LShift |   Y  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |X -  X| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |XLGuiX|X  ^ X|X  < X|XLEFTX|XRIGHT|                                       |XDownX|X Up X|X #  X|X  + X|XRGuiX|
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |XCTRLX|XALTX |       | Alt  |Ctrl/Esc|
- *                                 ,------+------+------|       |------+--------+------.
- *                                 |XXX   |XXX   | Home |       | PgUp |XXX     |XXX   |
- *                                 | Bkspc|Del   |------|       |------|  Enter | Space|
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_ESC,         KC_1,           KC_2,     KC_3,     KC_4,     KC_5,   DE_ACUT,
-        KC_TAB,         KC_Q,           KC_W,     KC_E,     KC_R,     KC_T,   MO(1),
-        KC_CAPS,         KC_A,           KC_S,     KC_D,     KC_F,     KC_G,
-        KC_LSFT,         DE_Y,           KC_X,     KC_C,     KC_V,     KC_B,   MO(2),
-        KC_LGUI,      DE_CIRC, DE_LESS,  KC_LEFT,  KC_RIGHT,
-                                               KC_LCTRL, KC_LALT,
-                                                              KC_HOME,
-                                               KC_BSPC,KC_DELT,KC_END,
-        // right hand
-        KC_PSCREEN,  KC_6,   KC_7,    KC_8,    KC_9,   KC_0,             KC_MINS,
-        MO(1),       DE_Z,   KC_U,    KC_I,    KC_O,   KC_P,             DE_UE,
-                     KC_H,   KC_J,    KC_K,    KC_L,   DE_OE,            LT(MDIA,DE_AE),
-        MO(2),       KC_N,   KC_M,    KC_COMM, KC_DOT, DE_MINS,          KC_RSFT,
-                             KC_DOWN, KC_UP,   DE_HASH,  DE_PLUS,          KC_RGUI,
-        KC_RALT, KC_RCTRL,
-        KC_PGUP,
-        KC_PGDN, KC_ENT, KC_SPC
-    ),
-// [BASE] = KEYMAP(  // layer 0 : default
-//         // left hand
-//         KC_CIRC,         KC_1,           KC_2,     KC_3,     KC_4,     KC_5,   KC_MPLY,
-//         KC_DELT,         KC_Q,           KC_W,     KC_E,     KC_R,     KC_T,   TG(1),
-//         KC_CAPS,         KC_A,           KC_S,     KC_D,     KC_F,     KC_G,
-//         KC_LSFT,         DE_Y,           KC_X,     KC_C,     KC_V,     KC_B,   ALL_T(KC_NO),
-//         LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT,  DE_MINS,  DE_PLUS,
-//                                                ALT_T(KC_APP), KC_LGUI,
-//                                                               KC_HOME,
-//                                                KC_SPC,KC_BSPC,KC_END,
-//         // right hand
-//         KC_MNXT,     KC_6,   KC_7,    KC_8,    KC_9,   KC_0,             KC_MINS,
-//         TG(2),       DE_Z,   KC_U,    KC_I,    KC_O,   KC_P,             DE_UE,
-//                      KC_H,   KC_J,    KC_K,    KC_L,   DE_OE,            LT(MDIA,DE_AE),
-//         MEH_T(KC_NO),KC_N,   KC_M,    KC_COMM, KC_DOT, CTL_T(DE_MINS),   KC_RSFT,
-//                              KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT,          KC_FN1,
-//         KC_LALT,CTL_T(KC_ESC),
-//         KC_PGUP,
-//         KC_PGDN,KC_TAB, KC_ENT
-//     ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,DE_EXLM,DE_AT,  DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS,
-       KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV,
-       KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    DE_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    DE_PLUS, KC_TRNS,
-       KC_TRNS, DE_AMPR, KC_1,   KC_2,    KC_3,    DE_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    DE_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      | Lclk | MsUp | Rclk |      |      |           |      |      |VolDwn| Mute |VolUp |      |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------|           |------|      | Prev | Stop | Play | Next |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |WhRght|WhDown| WhUp |WhLeft|WhClk |      |           |      |BwSrch|BwBack|BwHome|BwRefr|BwFwd |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |MsAcl0|MsAcl1|MsAcl2|                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |Brwser|Brwser|
- *                                 | Lclk | Rclk |------|       |------|Back  |Forwd |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
-       KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_BTN1, KC_BTN2, KC_TRNS,
-    // right hand
-       KC_TRNS, KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11,
-       KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
-                KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
-       KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_WBAK, KC_WFWD
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case SYMB:
-            ergodox_right_led_1_on();
-            break;
-        case MDIA:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            ergodox_board_led_off();
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png b/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png
deleted file mode 100644 (file)
index a0ef551..0000000
Binary files a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png b/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png
deleted file mode 100644 (file)
index 56aea1d..0000000
Binary files a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png b/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png
deleted file mode 100644 (file)
index 76a1aa5..0000000
Binary files a/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md b/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md
deleted file mode 100644 (file)
index 557d85a..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# German Layout for the ErgoDox
-
-This layout is inspired by the "kinesis-qwerty-mod" from benblazak's
-[ergodox-firmware](https://github.com/benblazak/ergodox-firmware), as well as by the "german" layout from the 
-[qmk_firmware](https://github.com/jackhumbert/qmk_firmware).
-The goal was to have a layout that is pretty close to an ordinary German
-keyboard, so I don't have to make adjustments on the operating system level
-and I keep some of the muscle memory to use a regular keyboard.
-
-Modifications I made with regard to the aforementioned layouts:
-
-* The key layout is pretty close to the layout of a German Kinesis Ergo Elan.
-  The only exception I made is that I reversed the "up" and "down" cursor keys,
-  since that feels more natural to me.
-
-* All layer changes are "momentary", i.e. they only last as long as the respective key is pressed.
-
-* I sacrificed the Hyper and Meh keys, which I don't use, and put layer change keys in their place.
-
-* I added a PrintScreen key which I use quite regularly for screenshots.
-
-## Default Layer
-
-![Layout of the default layer](layout.png "Layout of the default layer")
-
-## Code Layer
-
-![Layout of the code layer](layout-code.png "Layout of the code layer")
-
-## Media Layer
-
-![Layout of the media layer](layout-media.png "Layout of the media layer")
-
-Christoph Schmitz &lt;schm4704 at web dot de&gt;
-2016-01-28
diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py
deleted file mode 100644 (file)
index 7076a6e..0000000
+++ /dev/null
@@ -1,710 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""Compiler for keymap.c files
-
-This scrip will generate a keymap.c file from a simple
-markdown file with a specific layout.
-
-Usage:
-    python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
-"""
-from __future__ import division
-from __future__ import print_function
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import os
-import io
-import re
-import sys
-import json
-import unicodedata
-import collections
-import itertools as it
-
-PY2 = sys.version_info.major == 2
-
-if PY2:
-    chr = unichr
-
-
-KEYBOARD_LAYOUTS = {
-    # These map positions in the parsed layout to
-    # positions in the KEYMAP MATRIX
-    'ergodox_ez': [
-        [ 0,  1,  2,  3,  4,  5,  6],  [38, 39, 40, 41, 42, 43, 44],
-        [ 7,  8,  9, 10, 11, 12, 13],  [45, 46, 47, 48, 49, 50, 51],
-        [14, 15, 16, 17, 18, 19    ],  [    52, 53, 54, 55, 56, 57],
-        [20, 21, 22, 23, 24, 25, 26],  [58, 59, 60, 61, 62, 63, 64],
-        [27, 28, 29, 30, 31        ],  [        65, 66, 67, 68, 69],
-        [                    32, 33],  [70, 71                    ],
-        [                        34],  [72                        ],
-        [                35, 36, 37],  [73, 74, 75                ],
-    ]
-}
-
-ROW_INDENTS = {
-    'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0]
-}
-
-BLANK_LAYOUTS = [
-# Compact Layout
-"""
-.------------------------------------.------------------------------------.
-|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-|     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
-!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- |    |    |    |    |    |                     !    |    |    |    |    |
- '------------------------'                     '------------------------'
-                        .-----------. .-----------.
-                        |     |     | !     |     |
-                  .-----+-----+-----! !-----+-----+-----.
-                  !     !     |     | !     |     !     !
-                  !     !     !-----! !-----!     !     !
-                  |     |     |     | !     |     |     |
-                  '-----------------' '-----------------'
-""",
-
-# Wide Layout
-"""
-.---------------------------------------------. .---------------------------------------------.
-|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
-!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
-|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
-!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
-|       |     |     |     |     |     |-------! !-------!     |     |     |     |     |       |
-!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
-|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
-'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- |      |     |     |     |     |                             !     |     |     |     |      |
- '------------------------------'                             '------------------------------'
-                              .---------------. .---------------.
-                              |       |       | !       |       |
-                      .-------+-------+-------! !-------+-------+-------.
-                      !       !       |       | !       |       !       !
-                      !       !       !-------! !-------!       !       !
-                      |       |       |       | !       |       |       |
-                      '-----------------------' '-----------------------'
-""",
-]
-
-
-DEFAULT_CONFIG = {
-    "keymaps_includes": [
-        "keymap_common.h",
-    ],
-    'filler': "-+.'!:x",
-    'separator': "|",
-    'default_key_prefix': ["KC_"],
-}
-
-
-SECTIONS = [
-    'layout_config',
-    'layers',
-]
-
-
-#       Markdown Parsing
-
-ONELINE_COMMENT_RE = re.compile(r"""
-    ^                       # comment must be at the start of the line
-    \s*                     # arbitrary whitespace
-    //                      # start of the comment
-    (.*)                    # the comment
-    $                       # until the end of line
-""", re.MULTILINE | re.VERBOSE
-)
-
-INLINE_COMMENT_RE = re.compile(r"""
-    ([\,\"\[\]\{\}\d])      # anythig that might end a expression
-    \s+                     # comment must be preceded by whitespace
-    //                      # start of the comment
-    \s                      # and succeded by whitespace
-    (?:[^\"\]\}\{\[]*)      # the comment (except things which might be json)
-    $                       # until the end of line
-""", re.MULTILINE | re.VERBOSE)
-
-TRAILING_COMMA_RE = re.compile(r"""
-    ,                       # the comma
-    (?:\s*)                 # arbitrary whitespace
-    $                       # only works if the trailing comma is followed by newline
-    (\s*)                   # arbitrary whitespace
-    ([\]\}])                # end of an array or object
-""", re.MULTILINE | re.VERBOSE)
-
-
-def loads(raw_data):
-    if isinstance(raw_data, bytes):
-        raw_data = raw_data.decode('utf-8')
-
-    raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
-    raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
-    raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
-    return json.loads(raw_data)
-
-
-def parse_config(path):
-    def reset_section():
-        section.update({
-            'name': section.get('name', ""),
-            'sub_name': "",
-            'start_line': -1,
-            'end_line': -1,
-            'code_lines': [],
-        })
-
-    def start_section(line_index, line):
-        end_section()
-        if line.startswith("# "):
-            name = line[2:]
-        elif line.startswith("## "):
-            name = line[3:]
-        else:
-            name = ""
-
-        name = name.strip().replace(" ", "_").lower()
-        if name in SECTIONS:
-            section['name'] = name
-        else:
-            section['sub_name'] = name
-        section['start_line'] = line_index
-
-    def end_section():
-        if section['start_line'] >= 0:
-            if section['name'] == 'layout_config':
-                config.update(loads("\n".join(
-                    section['code_lines']
-                )))
-            elif section['sub_name'].startswith('layer'):
-                layer_name = section['sub_name']
-                config['layer_lines'][layer_name] = section['code_lines']
-
-        reset_section()
-
-    def amend_section(line_index, line):
-        section['end_line'] = line_index
-        section['code_lines'].append(line)
-
-    config = DEFAULT_CONFIG.copy()
-    config.update({
-        'layer_lines': collections.OrderedDict(),
-        'macro_ids': {'UM'},
-        'unicode_macros': {},
-    })
-
-    section = {}
-    reset_section()
-
-    with io.open(path, encoding="utf-8") as fh:
-        for i, line in enumerate(fh):
-            if line.startswith("#"):
-                start_section(i, line)
-            elif line.startswith("    "):
-                amend_section(i, line[4:])
-            else:
-                # TODO: maybe parse description
-                pass
-
-    end_section()
-    assert 'layout' in config
-    return config
-
-#       header file parsing
-
-IF0_RE = re.compile(r"""
-    ^
-    #if 0
-    $.*?
-    #endif
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-COMMENT_RE = re.compile(r"""
-    /\*
-    .*?
-    \*/"
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-def read_header_file(path):
-    with io.open(path, encoding="utf-8") as fh:
-        data = fh.read()
-    data, _ = COMMENT_RE.subn("", data)
-    data, _ = IF0_RE.subn("", data)
-    return data
-
-
-def regex_partial(re_str_fmt, flags):
-    def partial(*args, **kwargs):
-        re_str = re_str_fmt.format(*args, **kwargs)
-        return re.compile(re_str, flags)
-    return partial
-
-
-KEYDEF_REP = regex_partial(r"""
-    #define
-    \s
-    (
-        (?:{})          # the prefixes
-        (?:\w+)         # the key name
-    )                   # capture group end
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-ENUM_RE = re.compile(r"""
-    (
-        enum
-        \s\w+\s
-        \{
-        .*?             # the enum content
-        \}
-        ;
-    )                   # capture group end
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-ENUM_KEY_REP = regex_partial(r"""
-    (
-        {}              # the prefixes
-        \w+             # the key name
-    )                   # capture group end
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-def parse_keydefs(config, data):
-    prefix_options = "|".join(config['key_prefixes'])
-    keydef_re = KEYDEF_REP(prefix_options)
-    enum_key_re = ENUM_KEY_REP(prefix_options)
-    for match in keydef_re.finditer(data):
-        yield match.groups()[0]
-
-    for enum_match in ENUM_RE.finditer(data):
-        enum = enum_match.groups()[0]
-        for key_match in enum_key_re.finditer(enum):
-            yield key_match.groups()[0]
-
-
-def parse_valid_keys(config, out_path):
-    basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
-    dirpaths = []
-    subpaths = []
-    while len(subpaths) < 6:
-        path = os.path.join(basepath, *subpaths)
-        dirpaths.append(path)
-        dirpaths.append(os.path.join(path, "tmk_core", "common"))
-        dirpaths.append(os.path.join(path, "quantum"))
-        subpaths.append('..')
-
-    includes = set(config['keymaps_includes'])
-    includes.add("keycode.h")
-
-    valid_keycodes = set()
-    for dirpath, include in it.product(dirpaths, includes):
-        include_path = os.path.join(dirpath, include)
-        if os.path.exists(include_path):
-            header_data = read_header_file(include_path)
-            valid_keycodes.update(
-                parse_keydefs(config, header_data)
-            )
-    return valid_keycodes
-
-
-#       Keymap Parsing
-
-def iter_raw_codes(layer_lines, filler, separator):
-    filler_re = re.compile("[" + filler + " ]")
-    for line in layer_lines:
-        line, _ = filler_re.subn("", line.strip())
-        if not line:
-            continue
-        codes = line.split(separator)
-        for code in codes[1:-1]:
-            yield code
-
-
-def iter_indexed_codes(raw_codes, key_indexes):
-    key_rows = {}
-    key_indexes_flat = []
-
-    for row_index, key_indexes in enumerate(key_indexes):
-        for key_index in key_indexes:
-            key_rows[key_index] = row_index
-        key_indexes_flat.extend(key_indexes)
-    assert len(raw_codes) == len(key_indexes_flat)
-    for raw_code, key_index in zip(raw_codes, key_indexes_flat):
-        # we keep track of the row mostly for layout purposes
-        yield raw_code, key_index, key_rows[key_index]
-
-
-LAYER_CHANGE_RE = re.compile(r"""
-    (DF|TG|MO)\(\d+\)
-""", re.VERBOSE)
-
-
-MACRO_RE = re.compile(r"""
-    M\(\w+\)
-""", re.VERBOSE)
-
-
-UNICODE_RE = re.compile(r"""
-    U[0-9A-F]{4}
-""", re.VERBOSE)
-
-
-NON_CODE = re.compile(r"""
-    ^[^A-Z0-9_]$
-""", re.VERBOSE)
-
-
-def parse_uni_code(raw_code):
-    macro_id = "UC_" + (
-        unicodedata.name(raw_code)
-        .replace(" ", "_")
-        .replace("-", "_")
-    )
-    code = "M({})".format(macro_id)
-    uc_hex = "{:04X}".format(ord(raw_code))
-    return code, macro_id, uc_hex
-
-
-def parse_key_code(raw_code, key_prefixes, valid_keycodes):
-    if raw_code in valid_keycodes:
-        return raw_code
-
-    for prefix in key_prefixes:
-        code = prefix + raw_code
-        if code in valid_keycodes:
-            return code
-
-
-def parse_code(raw_code, key_prefixes, valid_keycodes):
-    if not raw_code:
-        return 'KC_TRNS', None, None
-
-    if LAYER_CHANGE_RE.match(raw_code):
-        return raw_code, None, None
-
-    if MACRO_RE.match(raw_code):
-        macro_id = raw_code[2:-1]
-        return raw_code, macro_id, None
-
-    if UNICODE_RE.match(raw_code):
-        hex_code = raw_code[1:]
-        return parse_uni_code(chr(int(hex_code, 16)))
-
-    if NON_CODE.match(raw_code):
-        return parse_uni_code(raw_code)
-
-    code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
-    return code, None, None
-
-
-def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
-    keymap = {}
-    raw_codes = list(iter_raw_codes(
-        layer_lines, config['filler'], config['separator']
-    ))
-    indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
-    key_prefixes = config['key_prefixes']
-    for raw_code, key_index, row_index in indexed_codes:
-        code, macro_id, uc_hex = parse_code(
-            raw_code, key_prefixes, valid_keycodes
-        )
-        # TODO: line numbers for invalid codes
-        err_msg = "Could not parse key '{}' on row {}".format(
-            raw_code, row_index
-        )
-        assert code is not None, err_msg
-        # print(repr(raw_code), repr(code), macro_id, uc_hex)
-        if macro_id:
-            config['macro_ids'].add(macro_id)
-        if uc_hex:
-            config['unicode_macros'][macro_id] = uc_hex
-        keymap[key_index] = (code, row_index)
-    return keymap
-
-
-def parse_keymaps(config, valid_keycodes):
-    keymaps = collections.OrderedDict()
-    key_indexes = config.get(
-        'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
-    )
-    # TODO: maybe validate key_indexes
-
-    for layer_name, layer_lines, in config['layer_lines'].items():
-        keymaps[layer_name] = parse_keymap(
-            config, key_indexes, layer_lines, valid_keycodes
-        )
-    return keymaps
-
-#       keymap.c output
-
-USERCODE = """
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case L1:
-            ergodox_right_led_1_on();
-            break;
-        case L2:
-            ergodox_right_led_2_on();
-            break;
-        case L3:
-            ergodox_right_led_3_on();
-            break;
-        case L4:
-            ergodox_right_led_1_on();
-            ergodox_right_led_2_on();
-            break;
-        case L5:
-            ergodox_right_led_1_on();
-            ergodox_right_led_3_on();
-            break;
-        // case L6:
-        //     ergodox_right_led_2_on();
-        //     ergodox_right_led_3_on();
-        //     break;
-        // case L7:
-        //     ergodox_right_led_1_on();
-        //     ergodox_right_led_2_on();
-        //     ergodox_right_led_3_on();
-        //     break;
-        default:
-            ergodox_board_led_off();
-            break;
-    }
-};
-"""
-
-MACROCODE = """
-#define UC_MODE_WIN 0
-#define UC_MODE_LINUX 1
-#define UC_MODE_OSX 2
-
-// TODO: allow default mode to be configured
-static uint16_t unicode_mode = UC_MODE_WIN;
-
-uint16_t hextokeycode(uint8_t hex) {{
-    if (hex == 0x0) {{
-        return KC_P0;
-    }}
-    if (hex < 0xA) {{
-        return KC_P1 + (hex - 0x1);
-    }}
-    return KC_A + (hex - 0xA);
-}}
-
-void unicode_action_function(uint16_t hi, uint16_t lo) {{
-    switch (unicode_mode) {{
-    case UC_MODE_WIN:
-        register_code(KC_LALT);
-
-        register_code(KC_PPLS);
-        unregister_code(KC_PPLS);
-
-        register_code(hextokeycode((hi & 0xF0) >> 4));
-        unregister_code(hextokeycode((hi & 0xF0) >> 4));
-        register_code(hextokeycode((hi & 0x0F)));
-        unregister_code(hextokeycode((hi & 0x0F)));
-        register_code(hextokeycode((lo & 0xF0) >> 4));
-        unregister_code(hextokeycode((lo & 0xF0) >> 4));
-        register_code(hextokeycode((lo & 0x0F)));
-        unregister_code(hextokeycode((lo & 0x0F)));
-
-        unregister_code(KC_LALT);
-        break;
-    case UC_MODE_LINUX:
-        register_code(KC_LCTL);
-        register_code(KC_LSFT);
-
-        register_code(KC_U);
-        unregister_code(KC_U);
-
-        register_code(hextokeycode((hi & 0xF0) >> 4));
-        unregister_code(hextokeycode((hi & 0xF0) >> 4));
-        register_code(hextokeycode((hi & 0x0F)));
-        unregister_code(hextokeycode((hi & 0x0F)));
-        register_code(hextokeycode((lo & 0xF0) >> 4));
-        unregister_code(hextokeycode((lo & 0xF0) >> 4));
-        register_code(hextokeycode((lo & 0x0F)));
-        unregister_code(hextokeycode((lo & 0x0F)));
-
-        unregister_code(KC_LCTL);
-        unregister_code(KC_LSFT);
-        break;
-    case UC_MODE_OSX:
-        break;
-    }}
-}}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
-    if (!record->event.pressed) {{
-        return MACRO_NONE;
-    }}
-    // MACRODOWN only works in this function
-    switch(id) {{
-        case UM:
-            unicode_mode = (unicode_mode + 1) % 2;
-            break;
-{macro_cases}
-{unicode_macro_cases}
-        default:
-            break;
-    }}
-    return MACRO_NONE;
-}};
-"""
-
-
-UNICODE_MACRO_TEMPLATE = """
-case {macro_id}:
-    unicode_action_function(0x{hi:02x}, 0x{lo:02x});
-    break;
-""".strip()
-
-
-def unicode_macro_cases(config):
-    for macro_id, uc_hex in config['unicode_macros'].items():
-        hi = int(uc_hex, 16) >> 8
-        lo = int(uc_hex, 16) & 0xFF
-        unimacro_keys = ", ".join(
-            "T({})".format(
-                "KP_" + digit if digit.isdigit() else digit
-            ) for digit in uc_hex
-        )
-        yield UNICODE_MACRO_TEMPLATE.format(
-            macro_id=macro_id, hi=hi, lo=lo
-        )
-
-
-def iter_keymap_lines(keymap, row_indents=None):
-    col_widths = {}
-    col = 0
-    # first pass, figure out the column widths
-    prev_row_index = None
-    for code, row_index in keymap.values():
-        if row_index != prev_row_index:
-            col = 0
-            if row_indents:
-                col = row_indents[row_index]
-        col_widths[col] = max(len(code), col_widths.get(col, 0))
-        prev_row_index = row_index
-        col += 1
-
-    # second pass, yield the cell values
-    col = 0
-    prev_row_index = None
-    for key_index in sorted(keymap):
-        code, row_index = keymap[key_index]
-        if row_index != prev_row_index:
-            col = 0
-            yield "\n"
-            if row_indents:
-                for indent_col in range(row_indents[row_index]):
-                    pad = " " * (col_widths[indent_col] - 4)
-                    yield (" /*-*/" + pad)
-                col = row_indents[row_index]
-        else:
-            yield pad
-        yield " {}".format(code)
-        if key_index < len(keymap) - 1:
-            yield ","
-            # This will be yielded on the next iteration when
-            # we know that we're not at the end of a line.
-            pad = " " * (col_widths[col] - len(code))
-        prev_row_index = row_index
-        col += 1
-
-
-def iter_keymap_parts(config, keymaps):
-    # includes
-    for include_path in config['keymaps_includes']:
-        yield '#include "{}"\n'.format(include_path)
-
-    yield "\n"
-
-    # definitions
-    for i, macro_id in enumerate(sorted(config['macro_ids'])):
-        yield "#define {} {}\n".format(macro_id, i)
-
-    yield "\n"
-
-    for i, layer_name in enumerate(config['layer_lines']):
-        yield '#define L{0:<3} {0:<5}  // {1}\n'.format(i, layer_name)
-
-    yield "\n"
-
-    # keymaps
-    yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
-
-    for i, layer_name in enumerate(config['layer_lines']):
-        # comment
-        layer_lines = config['layer_lines'][layer_name]
-        prefixed_lines = " * " + " * ".join(layer_lines)
-        yield "/*\n{} */\n".format(prefixed_lines)
-
-        # keymap codes
-        keymap = keymaps[layer_name]
-        row_indents = ROW_INDENTS.get(config['layout'])
-        keymap_lines = "".join(iter_keymap_lines(keymap, row_indents))
-        yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
-
-    yield "};\n\n"
-
-    # no idea what this is for
-    yield "const uint16_t PROGMEM fn_actions[] = {};\n"
-
-    # macros
-    yield MACROCODE.format(
-        macro_cases="",
-        unicode_macro_cases="\n".join(unicode_macro_cases(config)),
-    )
-
-    # TODO: dynamically create blinking lights
-    yield USERCODE
-
-
-def main(argv=sys.argv[1:]):
-    if not argv or '-h' in argv or '--help' in argv:
-        print(__doc__)
-        return 0
-
-    in_path = os.path.abspath(argv[0])
-    if not os.path.exists(in_path):
-        print("No such file '{}'".format(in_path))
-        return 1
-
-    if len(argv) > 1:
-        out_path = os.path.abspath(argv[1])
-    else:
-        dirname = os.path.dirname(in_path)
-        out_path = os.path.join(dirname, "keymap.c")
-
-    config = parse_config(in_path)
-    valid_keys = parse_valid_keys(config, out_path)
-    keymaps = parse_keymaps(config, valid_keys)
-
-    with io.open(out_path, mode="w", encoding="utf-8") as fh:
-        for part in iter_keymap_parts(config, keymaps):
-            fh.write(part)
-
-
-if __name__ == '__main__':
-    sys.exit(main())
diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c
deleted file mode 100644 (file)
index 5fcc14d..0000000
+++ /dev/null
@@ -1,783 +0,0 @@
-#include "ergodox_ez.h"
-#include "action_layer.h"
-#include "keymap.h"
-#include "keymap_german.h"
-
-#define UC_ASYMPTOTICALLY_EQUAL_TO 0
-#define UC_DIVISION_SIGN 1
-#define UC_DOWNWARDS_ARROW 2
-#define UC_ELEMENT_OF 3
-#define UC_EMPTY_SET 4
-#define UC_FOR_ALL 5
-#define UC_GREEK_CAPITAL_LETTER_ALPHA 6
-#define UC_GREEK_CAPITAL_LETTER_BETA 7
-#define UC_GREEK_CAPITAL_LETTER_CHI 8
-#define UC_GREEK_CAPITAL_LETTER_DELTA 9
-#define UC_GREEK_CAPITAL_LETTER_EPSILON 10
-#define UC_GREEK_CAPITAL_LETTER_ETA 11
-#define UC_GREEK_CAPITAL_LETTER_GAMMA 12
-#define UC_GREEK_CAPITAL_LETTER_IOTA 13
-#define UC_GREEK_CAPITAL_LETTER_KAPPA 14
-#define UC_GREEK_CAPITAL_LETTER_LAMDA 15
-#define UC_GREEK_CAPITAL_LETTER_MU 16
-#define UC_GREEK_CAPITAL_LETTER_NU 17
-#define UC_GREEK_CAPITAL_LETTER_OMEGA 18
-#define UC_GREEK_CAPITAL_LETTER_OMICRON 19
-#define UC_GREEK_CAPITAL_LETTER_PHI 20
-#define UC_GREEK_CAPITAL_LETTER_PI 21
-#define UC_GREEK_CAPITAL_LETTER_PSI 22
-#define UC_GREEK_CAPITAL_LETTER_RHO 23
-#define UC_GREEK_CAPITAL_LETTER_SIGMA 24
-#define UC_GREEK_CAPITAL_LETTER_TAU 25
-#define UC_GREEK_CAPITAL_LETTER_THETA 26
-#define UC_GREEK_CAPITAL_LETTER_UPSILON 27
-#define UC_GREEK_CAPITAL_LETTER_XI 28
-#define UC_GREEK_CAPITAL_LETTER_ZETA 29
-#define UC_GREEK_SMALL_LETTER_ALPHA 30
-#define UC_GREEK_SMALL_LETTER_BETA 31
-#define UC_GREEK_SMALL_LETTER_CHI 32
-#define UC_GREEK_SMALL_LETTER_DELTA 33
-#define UC_GREEK_SMALL_LETTER_EPSILON 34
-#define UC_GREEK_SMALL_LETTER_ETA 35
-#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36
-#define UC_GREEK_SMALL_LETTER_GAMMA 37
-#define UC_GREEK_SMALL_LETTER_IOTA 38
-#define UC_GREEK_SMALL_LETTER_KAPPA 39
-#define UC_GREEK_SMALL_LETTER_LAMDA 40
-#define UC_GREEK_SMALL_LETTER_MU 41
-#define UC_GREEK_SMALL_LETTER_NU 42
-#define UC_GREEK_SMALL_LETTER_OMEGA 43
-#define UC_GREEK_SMALL_LETTER_OMICRON 44
-#define UC_GREEK_SMALL_LETTER_PHI 45
-#define UC_GREEK_SMALL_LETTER_PI 46
-#define UC_GREEK_SMALL_LETTER_PSI 47
-#define UC_GREEK_SMALL_LETTER_RHO 48
-#define UC_GREEK_SMALL_LETTER_SIGMA 49
-#define UC_GREEK_SMALL_LETTER_TAU 50
-#define UC_GREEK_SMALL_LETTER_THETA 51
-#define UC_GREEK_SMALL_LETTER_UPSILON 52
-#define UC_GREEK_SMALL_LETTER_XI 53
-#define UC_GREEK_SMALL_LETTER_ZETA 54
-#define UC_INFINITY 55
-#define UC_LEFTWARDS_ARROW 56
-#define UC_MULTIPLICATION_SIGN 57
-#define UC_NOT_AN_ELEMENT_OF 58
-#define UC_NOT_EQUAL_TO 59
-#define UC_PLUS_MINUS_SIGN 60
-#define UC_RIGHTWARDS_ARROW 61
-#define UC_SUBSCRIPT_EIGHT 62
-#define UC_SUBSCRIPT_FIVE 63
-#define UC_SUBSCRIPT_FOUR 64
-#define UC_SUBSCRIPT_NINE 65
-#define UC_SUBSCRIPT_ONE 66
-#define UC_SUBSCRIPT_SEVEN 67
-#define UC_SUBSCRIPT_SIX 68
-#define UC_SUBSCRIPT_THREE 69
-#define UC_SUBSCRIPT_TWO 70
-#define UC_SUBSCRIPT_ZERO 71
-#define UC_SUPERSCRIPT_EIGHT 72
-#define UC_SUPERSCRIPT_FIVE 73
-#define UC_SUPERSCRIPT_FOUR 74
-#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75
-#define UC_SUPERSCRIPT_NINE 76
-#define UC_SUPERSCRIPT_ONE 77
-#define UC_SUPERSCRIPT_SEVEN 78
-#define UC_SUPERSCRIPT_SIX 79
-#define UC_SUPERSCRIPT_THREE 80
-#define UC_SUPERSCRIPT_TWO 81
-#define UC_SUPERSCRIPT_ZERO 82
-#define UC_THERE_DOES_NOT_EXIST 83
-#define UC_THERE_EXISTS 84
-#define UC_UPWARDS_ARROW 85
-#define UC_VULGAR_FRACTION_ONE_EIGHTH 86
-#define UC_VULGAR_FRACTION_ONE_FIFTH 87
-#define UC_VULGAR_FRACTION_ONE_HALF 88
-#define UC_VULGAR_FRACTION_ONE_QUARTER 89
-#define UC_VULGAR_FRACTION_ONE_SIXTH 90
-#define UC_VULGAR_FRACTION_ONE_THIRD 91
-#define UC_VULGAR_FRACTION_THREE_QUARTERS 92
-#define UC_VULGAR_FRACTION_TWO_THIRDS 93
-#define UM 94
-
-#define L0   0      // layer_0
-#define L1   1      // layer_1
-#define L2   2      // layer_2
-#define L3   3      // layer_3
-#define L4   4      // layer_4
-#define L5   5      // layer_5
-#define L6   6      // layer_6
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/*
- * .------------------------------------.------------------------------------.
- * |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT|
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |INS  |TG(2)| !M(UM)|DELT |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     | APP | ! PGUP|     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
- *                   '-----------------' '-----------------'
- */
-[L0] = KEYMAP(
- MO(5),   DE_1,     DE_2,     DE_3,    DE_4,    DE_5,    DE_ACUT,
- MO(4),   DE_X,     DE_P,     DE_F,    DE_W,    DE_G,    KC_HOME,
- MO(1),   DE_U,     DE_I,     DE_A,    DE_E,    DE_O,
- MO(3),   DE_UE,    DE_OE,    DE_AE,   DE_C,    DE_V,    KC_END,
- KC_TRNS, KC_TRNS,  KC_LGUI,  KC_LALT, KC_LCTL,
- /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    KC_INS,  TG(2),
- /*-*/    /*-*/     /*-*/     /*-*/    /*-*/    /*-*/    KC_APP,
- /*-*/    /*-*/     /*-*/     /*-*/    KC_BSPC, KC_LSFT, KC_ESC,
- DE_GRV,  DE_6,     DE_7,     DE_8,    DE_9,    DE_0,    DE_CIRC,
- TG(2),   DE_H,     DE_J,     DE_K,    DE_L,    DE_Q,    DE_Z,
- /*-*/    DE_S,     DE_N,     DE_R,    DE_T,    DE_D,    DE_SS,
- KC_TAB,  DE_B,     DE_M,     DE_COMM, DE_DOT,  KC_UP,   DE_Y,
- /*-*/    /*-*/     KC_RCTL,  KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT,
- M(UM),   KC_DELT,
- KC_PGUP,
- KC_PGDN, KC_ENTER, KC_SPACE
-),
-/*
- * .------------------------------------.------------------------------------.
- * |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |    |    |    |                     !    |    | ←  | ↓  | →  |
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |     |     | !     |     |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     |     | !     |     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |     |     |     | !     |     |     |
- *                   '-----------------' '-----------------'
- */
-[L1] = KEYMAP(
- KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS,               KC_TRNS,               KC_TRNS,
- KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR,               DE_RCBR,               KC_TRNS,
- KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC,               DE_RBRC,
- KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL,  KC_TRNS,               KC_TRNS,               KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  KC_TRNS,               KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    /*-*/                  /*-*/                  KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,               KC_TRNS,               KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,               DE_RING,               KC_TRNS,
- KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS,               DE_DQOT,               KC_TRNS,
- /*-*/    DE_DLR,  DE_LPRN, DE_RPRN, DE_TILD,               DE_QUOT,               DE_QST,
- KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN,               M(UC_UPWARDS_ARROW),   KC_TRNS,
- /*-*/    /*-*/    KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW),
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
-),
-/*
- * .------------------------------------.------------------------------------.
- * |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT|
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |     |     | !     |     |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     |     | !     |     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |     |     |     | !     |     |     |
- *                   '-----------------' '-----------------'
- */
-[L2] = KEYMAP(
- KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
- KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PEQL,
- KC_TRNS, KC_TRNS, KC_P7,   KC_P8,   KC_P9,   KC_PAST, KC_PSLS,
- /*-*/    KC_TRNS, KC_P4,   KC_P5,   KC_P6,   KC_PMNS, KC_PMNS,
- KC_NLCK, KC_TRNS, KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PPLS,
- /*-*/    /*-*/    KC_P0,   KC_PCMM, KC_PDOT, KC_PENT, KC_PENT,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
-),
-/*
- * .------------------------------------.------------------------------------.
- * |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |    |    |    |                     !    |    |    |    |    |
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |     |     | !     |     |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     |     | !     |     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |     |     |     | !     |     |     |
- *                   '-----------------' '-----------------'
- */
-[L3] = KEYMAP(
- KC_TRNS, M(UC_SUPERSCRIPT_ONE),           M(UC_SUPERSCRIPT_TWO),                  M(UC_SUPERSCRIPT_THREE),          M(UC_SUPERSCRIPT_FOUR),               M(UC_SUPERSCRIPT_FIVE),          M(UC_FOR_ALL),
- KC_TRNS, M(UC_MULTIPLICATION_SIGN),       M(UC_VULGAR_FRACTION_ONE_HALF),         M(UC_DIVISION_SIGN),              M(UC_VULGAR_FRACTION_ONE_QUARTER),    M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS,
- KC_TRNS, KC_TRNS,                         M(UC_PLUS_MINUS_SIGN),                  DE_AT,                            DE_EURO,                              M(UC_EMPTY_SET),
- KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO),                     M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO),   KC_TRNS,
- KC_TRNS, KC_TRNS,                         KC_TRNS,                                KC_TRNS,                          KC_TRNS,
- /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 KC_TRNS,                         KC_TRNS,
- /*-*/    /*-*/                            /*-*/                                   /*-*/                             /*-*/                                 /*-*/                            KC_TRNS,
- /*-*/    /*-*/                            /*-*/                                   /*-*/                             KC_TRNS,                              KC_TRNS,                         KC_TRNS,
- KC_TRNS, M(UC_SUPERSCRIPT_SIX),           M(UC_SUPERSCRIPT_SEVEN),                M(UC_SUPERSCRIPT_EIGHT),          M(UC_SUPERSCRIPT_NINE),               M(UC_SUPERSCRIPT_ZERO),          KC_TRNS,
- KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS,                                M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS,                              KC_TRNS,                         KC_TRNS,
- /*-*/    M(UC_INFINITY),                  M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS),               M(UC_ELEMENT_OF),                     KC_TRNS,                         KC_TRNS,
- KC_TRNS, DE_EXLM,                         KC_TRNS,                                M(UC_THERE_DOES_NOT_EXIST),       M(UC_NOT_AN_ELEMENT_OF),              KC_TRNS,                         KC_TRNS,
- /*-*/    /*-*/                            KC_TRNS,                                KC_TRNS,                          KC_TRNS,                              KC_TRNS,                         KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS,                         KC_TRNS
-),
-/*
- * .------------------------------------.------------------------------------.
- * |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |    |    |    |                     !    |    |    |    |    |
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |     |     | !     |     |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     |     | !     |     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |     |     |     | !     |     |     |
- *                   '-----------------' '-----------------'
- */
-[L4] = KEYMAP(
- KC_TRNS, M(UC_SUBSCRIPT_ONE),              M(UC_SUBSCRIPT_TWO),            M(UC_SUBSCRIPT_THREE),          M(UC_SUBSCRIPT_FOUR),             M(UC_SUBSCRIPT_FIVE),             KC_TRNS,
- KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI),     M(UC_GREEK_SMALL_LETTER_PI),    M(UC_GREEK_SMALL_LETTER_PHI),   M(UC_GREEK_SMALL_LETTER_OMEGA),   M(UC_GREEK_SMALL_LETTER_GAMMA),   KC_TRNS,
- KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA),  M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON),
- KC_TRNS, KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS,
- KC_TRNS, KC_TRNS,                          KC_TRNS,                        KC_TRNS,                        KC_TRNS,
- /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             KC_TRNS,                          KC_TRNS,
- /*-*/    /*-*/                             /*-*/                           /*-*/                           /*-*/                             /*-*/                             KC_TRNS,
- /*-*/    /*-*/                             /*-*/                           /*-*/                           KC_TRNS,                          KC_TRNS,                          KC_TRNS,
- KC_TRNS, M(UC_SUBSCRIPT_SIX),              M(UC_SUBSCRIPT_SEVEN),          M(UC_SUBSCRIPT_EIGHT),          M(UC_SUBSCRIPT_NINE),             M(UC_SUBSCRIPT_ZERO),             KC_TRNS,
- KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA),     M(UC_GREEK_SMALL_LETTER_XI),    M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA),   KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_ZETA),
- /*-*/    M(UC_GREEK_SMALL_LETTER_SIGMA),   M(UC_GREEK_SMALL_LETTER_NU),    M(UC_GREEK_SMALL_LETTER_RHO),   M(UC_GREEK_SMALL_LETTER_TAU),     M(UC_GREEK_SMALL_LETTER_DELTA),   M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA),
- KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA),    M(UC_GREEK_SMALL_LETTER_MU),    KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          M(UC_GREEK_SMALL_LETTER_PSI),
- /*-*/    /*-*/                             KC_TRNS,                        KC_TRNS,                        KC_TRNS,                          KC_TRNS,                          KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS,                          KC_TRNS
-),
-/*
- * .------------------------------------.------------------------------------.
- * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |    |    |    |                     !    |    |    |    |    |
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |     |     | !     |     |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     |     | !     |     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |     |     |     | !     |     |     |
- *                   '-----------------' '-----------------'
- */
-[L5] = KEYMAP(
- KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
- KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI),     M(UC_GREEK_CAPITAL_LETTER_PI),    M(UC_GREEK_CAPITAL_LETTER_PHI),   M(UC_GREEK_CAPITAL_LETTER_OMEGA),   M(UC_GREEK_CAPITAL_LETTER_GAMMA),   KC_TRNS,
- KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA),  M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON),
- KC_TRNS, KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
- KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,
- /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               KC_TRNS,                            KC_TRNS,
- /*-*/    /*-*/                               /*-*/                             /*-*/                             /*-*/                               /*-*/                               KC_TRNS,
- /*-*/    /*-*/                               /*-*/                             /*-*/                             KC_TRNS,                            KC_TRNS,                            KC_TRNS,
- KC_TRNS, KC_TRNS,                            KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
- KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA),     M(UC_GREEK_CAPITAL_LETTER_XI),    M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA),   KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_ZETA),
- /*-*/    M(UC_GREEK_CAPITAL_LETTER_SIGMA),   M(UC_GREEK_CAPITAL_LETTER_NU),    M(UC_GREEK_CAPITAL_LETTER_RHO),   M(UC_GREEK_CAPITAL_LETTER_TAU),     M(UC_GREEK_CAPITAL_LETTER_DELTA),   KC_TRNS,
- KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA),    M(UC_GREEK_CAPITAL_LETTER_MU),    KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            M(UC_GREEK_CAPITAL_LETTER_PSI),
- /*-*/    /*-*/                               KC_TRNS,                          KC_TRNS,                          KC_TRNS,                            KC_TRNS,                            KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS,                            KC_TRNS
-),
-/*
- * .------------------------------------.------------------------------------.
- * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
- * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
- * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
- * !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
- * |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
- * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- *  |    |    |    |    |    |                     !    |    |    |    |    |
- *  '------------------------'                     '------------------------'
- *                         .-----------. .-----------.
- *                         |     |     | !     |     |
- *                   .-----+-----+-----! !-----+-----+-----.
- *                   !     !     |     | !     |     !     !
- *                   !     !     !-----! !-----!     !     !
- *                   |     |     |     | !     |     |     |
- *                   '-----------------' '-----------------'
- */
-[L6] = KEYMAP(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
- /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {};
-
-#define UC_MODE_WIN 0
-#define UC_MODE_LINUX 1
-#define UC_MODE_OSX 2
-
-// TODO: allow default mode to be configured
-static uint16_t unicode_mode = UC_MODE_WIN;
-
-uint16_t hextokeycode(uint8_t hex) {
-    if (hex == 0x0) {
-        return KC_P0;
-    }
-    if (hex < 0xA) {
-        return KC_P1 + (hex - 0x1);
-    }
-    return KC_A + (hex - 0xA);
-}
-
-void unicode_action_function(uint16_t hi, uint16_t lo) {
-    switch (unicode_mode) {
-    case UC_MODE_WIN:
-        register_code(KC_LALT);
-
-        register_code(KC_PPLS);
-        unregister_code(KC_PPLS);
-
-        register_code(hextokeycode((hi & 0xF0) >> 4));
-        unregister_code(hextokeycode((hi & 0xF0) >> 4));
-        register_code(hextokeycode((hi & 0x0F)));
-        unregister_code(hextokeycode((hi & 0x0F)));
-        register_code(hextokeycode((lo & 0xF0) >> 4));
-        unregister_code(hextokeycode((lo & 0xF0) >> 4));
-        register_code(hextokeycode((lo & 0x0F)));
-        unregister_code(hextokeycode((lo & 0x0F)));
-
-        unregister_code(KC_LALT);
-        break;
-    case UC_MODE_LINUX:
-        register_code(KC_LCTL);
-        register_code(KC_LSFT);
-
-        register_code(KC_U);
-        unregister_code(KC_U);
-
-        register_code(hextokeycode((hi & 0xF0) >> 4));
-        unregister_code(hextokeycode((hi & 0xF0) >> 4));
-        register_code(hextokeycode((hi & 0x0F)));
-        unregister_code(hextokeycode((hi & 0x0F)));
-        register_code(hextokeycode((lo & 0xF0) >> 4));
-        unregister_code(hextokeycode((lo & 0xF0) >> 4));
-        register_code(hextokeycode((lo & 0x0F)));
-        unregister_code(hextokeycode((lo & 0x0F)));
-
-        unregister_code(KC_LCTL);
-        unregister_code(KC_LSFT);
-        break;
-    case UC_MODE_OSX:
-        break;
-    }
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-    if (!record->event.pressed) {
-        return MACRO_NONE;
-    }
-    // MACRODOWN only works in this function
-    switch(id) {
-        case UM:
-            unicode_mode = (unicode_mode + 1) % 2;
-            break;
-
-case UC_GREEK_SMALL_LETTER_OMICRON:
-    unicode_action_function(0x03, 0xbf);
-    break;
-case UC_LEFTWARDS_ARROW:
-    unicode_action_function(0x21, 0x90);
-    break;
-case UC_GREEK_CAPITAL_LETTER_RHO:
-    unicode_action_function(0x03, 0xa1);
-    break;
-case UC_SUBSCRIPT_THREE:
-    unicode_action_function(0x20, 0x83);
-    break;
-case UC_VULGAR_FRACTION_ONE_EIGHTH:
-    unicode_action_function(0x21, 0x5b);
-    break;
-case UC_GREEK_SMALL_LETTER_LAMDA:
-    unicode_action_function(0x03, 0xbb);
-    break;
-case UC_VULGAR_FRACTION_ONE_THIRD:
-    unicode_action_function(0x21, 0x53);
-    break;
-case UC_GREEK_SMALL_LETTER_XI:
-    unicode_action_function(0x03, 0xbe);
-    break;
-case UC_THERE_DOES_NOT_EXIST:
-    unicode_action_function(0x22, 0x04);
-    break;
-case UC_SUPERSCRIPT_ONE:
-    unicode_action_function(0x00, 0xb9);
-    break;
-case UC_GREEK_SMALL_LETTER_BETA:
-    unicode_action_function(0x03, 0xb2);
-    break;
-case UC_SUBSCRIPT_FIVE:
-    unicode_action_function(0x20, 0x85);
-    break;
-case UC_GREEK_CAPITAL_LETTER_IOTA:
-    unicode_action_function(0x03, 0x99);
-    break;
-case UC_VULGAR_FRACTION_ONE_FIFTH:
-    unicode_action_function(0x21, 0x55);
-    break;
-case UC_GREEK_SMALL_LETTER_PSI:
-    unicode_action_function(0x03, 0xc8);
-    break;
-case UC_SUBSCRIPT_NINE:
-    unicode_action_function(0x20, 0x89);
-    break;
-case UC_SUPERSCRIPT_FOUR:
-    unicode_action_function(0x20, 0x74);
-    break;
-case UC_RIGHTWARDS_ARROW:
-    unicode_action_function(0x21, 0x92);
-    break;
-case UC_SUPERSCRIPT_SIX:
-    unicode_action_function(0x20, 0x76);
-    break;
-case UC_DOWNWARDS_ARROW:
-    unicode_action_function(0x21, 0x93);
-    break;
-case UC_GREEK_SMALL_LETTER_PI:
-    unicode_action_function(0x03, 0xc0);
-    break;
-case UC_SUPERSCRIPT_TWO:
-    unicode_action_function(0x00, 0xb2);
-    break;
-case UC_GREEK_CAPITAL_LETTER_OMEGA:
-    unicode_action_function(0x03, 0xa9);
-    break;
-case UC_GREEK_CAPITAL_LETTER_PSI:
-    unicode_action_function(0x03, 0xa8);
-    break;
-case UC_SUBSCRIPT_FOUR:
-    unicode_action_function(0x20, 0x84);
-    break;
-case UC_GREEK_CAPITAL_LETTER_NU:
-    unicode_action_function(0x03, 0x9d);
-    break;
-case UC_DIVISION_SIGN:
-    unicode_action_function(0x00, 0xf7);
-    break;
-case UC_GREEK_SMALL_LETTER_SIGMA:
-    unicode_action_function(0x03, 0xc3);
-    break;
-case UC_GREEK_SMALL_LETTER_RHO:
-    unicode_action_function(0x03, 0xc1);
-    break;
-case UC_VULGAR_FRACTION_ONE_SIXTH:
-    unicode_action_function(0x21, 0x59);
-    break;
-case UC_GREEK_SMALL_LETTER_GAMMA:
-    unicode_action_function(0x03, 0xb3);
-    break;
-case UC_VULGAR_FRACTION_TWO_THIRDS:
-    unicode_action_function(0x21, 0x54);
-    break;
-case UC_GREEK_SMALL_LETTER_NU:
-    unicode_action_function(0x03, 0xbd);
-    break;
-case UC_GREEK_SMALL_LETTER_ZETA:
-    unicode_action_function(0x03, 0xb6);
-    break;
-case UC_GREEK_SMALL_LETTER_EPSILON:
-    unicode_action_function(0x03, 0xb5);
-    break;
-case UC_GREEK_SMALL_LETTER_KAPPA:
-    unicode_action_function(0x03, 0xba);
-    break;
-case UC_SUPERSCRIPT_SEVEN:
-    unicode_action_function(0x20, 0x77);
-    break;
-case UC_GREEK_CAPITAL_LETTER_PI:
-    unicode_action_function(0x03, 0xa0);
-    break;
-case UC_GREEK_SMALL_LETTER_FINAL_SIGMA:
-    unicode_action_function(0x03, 0xc2);
-    break;
-case UC_GREEK_CAPITAL_LETTER_XI:
-    unicode_action_function(0x03, 0x9e);
-    break;
-case UC_GREEK_SMALL_LETTER_THETA:
-    unicode_action_function(0x03, 0xb8);
-    break;
-case UC_GREEK_SMALL_LETTER_ETA:
-    unicode_action_function(0x03, 0xb7);
-    break;
-case UC_SUBSCRIPT_TWO:
-    unicode_action_function(0x20, 0x82);
-    break;
-case UC_ASYMPTOTICALLY_EQUAL_TO:
-    unicode_action_function(0x22, 0x43);
-    break;
-case UC_GREEK_SMALL_LETTER_ALPHA:
-    unicode_action_function(0x03, 0xb1);
-    break;
-case UC_GREEK_CAPITAL_LETTER_PHI:
-    unicode_action_function(0x03, 0xa6);
-    break;
-case UC_GREEK_SMALL_LETTER_PHI:
-    unicode_action_function(0x03, 0xc6);
-    break;
-case UC_INFINITY:
-    unicode_action_function(0x22, 0x1e);
-    break;
-case UC_GREEK_CAPITAL_LETTER_OMICRON:
-    unicode_action_function(0x03, 0x9f);
-    break;
-case UC_ELEMENT_OF:
-    unicode_action_function(0x22, 0x08);
-    break;
-case UC_MULTIPLICATION_SIGN:
-    unicode_action_function(0x00, 0xd7);
-    break;
-case UC_SUBSCRIPT_ZERO:
-    unicode_action_function(0x20, 0x80);
-    break;
-case UC_GREEK_CAPITAL_LETTER_SIGMA:
-    unicode_action_function(0x03, 0xa3);
-    break;
-case UC_GREEK_SMALL_LETTER_OMEGA:
-    unicode_action_function(0x03, 0xc9);
-    break;
-case UC_SUBSCRIPT_ONE:
-    unicode_action_function(0x20, 0x81);
-    break;
-case UC_GREEK_CAPITAL_LETTER_ZETA:
-    unicode_action_function(0x03, 0x96);
-    break;
-case UC_GREEK_SMALL_LETTER_TAU:
-    unicode_action_function(0x03, 0xc4);
-    break;
-case UC_SUPERSCRIPT_FIVE:
-    unicode_action_function(0x20, 0x75);
-    break;
-case UC_THERE_EXISTS:
-    unicode_action_function(0x22, 0x03);
-    break;
-case UC_PLUS_MINUS_SIGN:
-    unicode_action_function(0x00, 0xb1);
-    break;
-case UC_VULGAR_FRACTION_THREE_QUARTERS:
-    unicode_action_function(0x00, 0xbe);
-    break;
-case UC_SUPERSCRIPT_THREE:
-    unicode_action_function(0x00, 0xb3);
-    break;
-case UC_EMPTY_SET:
-    unicode_action_function(0x22, 0x05);
-    break;
-case UC_UPWARDS_ARROW:
-    unicode_action_function(0x21, 0x91);
-    break;
-case UC_SUPERSCRIPT_NINE:
-    unicode_action_function(0x20, 0x79);
-    break;
-case UC_GREEK_SMALL_LETTER_DELTA:
-    unicode_action_function(0x03, 0xb4);
-    break;
-case UC_GREEK_SMALL_LETTER_MU:
-    unicode_action_function(0x03, 0xbc);
-    break;
-case UC_GREEK_CAPITAL_LETTER_KAPPA:
-    unicode_action_function(0x03, 0x9a);
-    break;
-case UC_SUBSCRIPT_EIGHT:
-    unicode_action_function(0x20, 0x88);
-    break;
-case UC_GREEK_CAPITAL_LETTER_ALPHA:
-    unicode_action_function(0x03, 0x91);
-    break;
-case UC_SUBSCRIPT_SEVEN:
-    unicode_action_function(0x20, 0x87);
-    break;
-case UC_GREEK_CAPITAL_LETTER_BETA:
-    unicode_action_function(0x03, 0x92);
-    break;
-case UC_GREEK_CAPITAL_LETTER_ETA:
-    unicode_action_function(0x03, 0x97);
-    break;
-case UC_SUPERSCRIPT_EIGHT:
-    unicode_action_function(0x20, 0x78);
-    break;
-case UC_SUPERSCRIPT_ZERO:
-    unicode_action_function(0x20, 0x70);
-    break;
-case UC_NOT_AN_ELEMENT_OF:
-    unicode_action_function(0x22, 0x09);
-    break;
-case UC_GREEK_SMALL_LETTER_UPSILON:
-    unicode_action_function(0x03, 0xc5);
-    break;
-case UC_NOT_EQUAL_TO:
-    unicode_action_function(0x22, 0x60);
-    break;
-case UC_GREEK_CAPITAL_LETTER_CHI:
-    unicode_action_function(0x03, 0xa7);
-    break;
-case UC_FOR_ALL:
-    unicode_action_function(0x22, 0x00);
-    break;
-case UC_GREEK_CAPITAL_LETTER_TAU:
-    unicode_action_function(0x03, 0xa4);
-    break;
-case UC_VULGAR_FRACTION_ONE_QUARTER:
-    unicode_action_function(0x00, 0xbc);
-    break;
-case UC_GREEK_SMALL_LETTER_CHI:
-    unicode_action_function(0x03, 0xc7);
-    break;
-case UC_GREEK_CAPITAL_LETTER_THETA:
-    unicode_action_function(0x03, 0x98);
-    break;
-case UC_GREEK_SMALL_LETTER_IOTA:
-    unicode_action_function(0x03, 0xb9);
-    break;
-case UC_GREEK_CAPITAL_LETTER_LAMDA:
-    unicode_action_function(0x03, 0x9b);
-    break;
-case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N:
-    unicode_action_function(0x20, 0x7f);
-    break;
-case UC_GREEK_CAPITAL_LETTER_UPSILON:
-    unicode_action_function(0x03, 0xa5);
-    break;
-case UC_GREEK_CAPITAL_LETTER_MU:
-    unicode_action_function(0x03, 0x9c);
-    break;
-case UC_GREEK_CAPITAL_LETTER_EPSILON:
-    unicode_action_function(0x03, 0x95);
-    break;
-case UC_GREEK_CAPITAL_LETTER_GAMMA:
-    unicode_action_function(0x03, 0x93);
-    break;
-case UC_SUBSCRIPT_SIX:
-    unicode_action_function(0x20, 0x86);
-    break;
-case UC_GREEK_CAPITAL_LETTER_DELTA:
-    unicode_action_function(0x03, 0x94);
-    break;
-case UC_VULGAR_FRACTION_ONE_HALF:
-    unicode_action_function(0x00, 0xbd);
-    break;
-        default:
-            break;
-    }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case L1:
-            ergodox_right_led_1_on();
-            break;
-        case L2:
-            ergodox_right_led_2_on();
-            break;
-        case L3:
-            ergodox_right_led_3_on();
-            break;
-        case L4:
-            ergodox_right_led_1_on();
-            ergodox_right_led_2_on();
-            break;
-        case L5:
-            ergodox_right_led_1_on();
-            ergodox_right_led_3_on();
-            break;
-        // case L6:
-        //     ergodox_right_led_2_on();
-        //     ergodox_right_led_3_on();
-        //     break;
-        // case L7:
-        //     ergodox_right_led_1_on();
-        //     ergodox_right_led_2_on();
-        //     ergodox_right_led_3_on();
-        //     break;
-        default:
-            ergodox_board_led_off();
-            break;
-    }
-};
diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md b/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md
deleted file mode 100644 (file)
index 2c9e0a8..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-# ManuNeo Ergodox Keyboard Layout
-
-Compile this file to a `keymap.c` file using `compile_keymap.py`
-
-    python compile_keymap.py keymaps/german-manuneo/keymap.md
-
-Tested with python 2.7 and python 3.4
-
-
-# Layout Config
-
-    {
-        "layout": "ergodox_ez",
-        "keymaps_includes": [
-            "ergodox_ez.h",
-            "action_layer.h",
-            "keymap_common.h",
-            "keymap_extras/keymap_german.h",
-        ],
-        "key_prefixes": ["DE_", "KC_"],
-        "macros": {
-            // TODO: implement macros
-            // "MUC": "",
-        },
-        // TODO: implement default unicode mode
-    }
-
-
-# Layers
-
-
-## Layer 0
-
-    .------------------------------------.------------------------------------.
-    |MO(5)| 1  | 2  | 3  | 4  | 5  |ACUT | GRV | 6  | 7  | 8  | 9  | 0  |CIRC |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |MO(4)| X  | P  | F  | W  | G  |HOME |TG(2)| H  | J  | K  | L  | Q  |  Z  |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |MO(1)| U  | I  | A  | E  | O  |-----!-----! S  | N  | R  | T  | D  | SS  |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |MO(3)| UE | OE | AE | C  | V  |END  | TAB | B  | M  |COMM| DOT| UP |  Y  |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |LGUI|LALT|LCTL|                     !RCTL|RALT|LEFT|DOWN|RGHT|
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |INS  |TG(2)| !M(UM)|DELT |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     | APP | ! PGUP|     !     !
-                      !     !     !-----! !-----!     !     !
-                      |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
-                      '-----------------' '-----------------'
-
-
-## Layer 1
-
-    .------------------------------------.------------------------------------.
-    |     |EXLM|DQOT|PARA|    |    |     |     |    |    |    |    |RING|     |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |     |ASTR|PIPE|SLSH|LCBR|RCBR|     |     |HASH|LESS|MORE|    |DQOT|     |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    |PLUS|EQL |    |    |     |     |BSLS|PERC|SCLN|COLN| ↑  |     |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |    |    |    |                     !    |    | ←  | ↓  | →  |
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |     |     | !     |     |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     |     | !     |     !     !
-                      !     !     !-----! !-----!     !     !
-                      |     |     |     | !     |     |     |
-                      '-----------------' '-----------------'
-
-
-## Layer 2
-
-    .------------------------------------.------------------------------------.
-    |     | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |     |    |    |    |    |    |     |     |    | P7 | P8 | P9 |PAST|PSLS |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    |    |    |    |    |-----!-----!    | P4 | P5 | P6 |PMNS|PMNS |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    |    |    |    |    |     | NLCK|    | P1 | P2 | P3 |PPLS|PPLS |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |    |    |    |                     ! P0 |PCMM|PDOT|PENT|PENT|
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |     |     | !     |     |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     |     | !     |     !     !
-                      !     !     !-----! !-----!     !     !
-                      |     |     |     | !     |     |     |
-                      '-----------------' '-----------------'
-
-
-
-## Layer 3
-
-http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html
-
-    .------------------------------------.------------------------------------.
-    |     | ¹  | ²  | ³  | ⁴  | ⁵  |  ∀  |     | ⁶  | ⁷  | ⁸  | ⁹  |  ⁰ |     |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |     | ×  | ½  | ÷  | ¼  |  ⅕ |     |     | ⅙  |    | ⅛  |    |    |     |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    | ±  | AT |EURO| ∅  |-----!-----! ∞  | ⁿ  | ∃  | ∈  |    |     |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     | ⅓  | ≠  | ⅔  | ¾  | ≃  |     |     |EXLM|    | ∄  | ∉  |    |     |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |    |    |    |                     !    |    |    |    |    |
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |     |     | !     |     |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     |     | !     |     !     !
-                      !     !     !-----! !-----!     !     !
-                      |     |     |     | !     |     |     |
-                      '-----------------' '-----------------'
-
-
-## Layer 4
-
-
-    .------------------------------------.------------------------------------.
-    |     | ₁  | ₂  | ₃  | ₄  | ₅  |     |     | ₆  | ₇  | ₈  | ₉  | ₀  |     |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |     | χ  | π  | φ  | ω  | γ  |     |     | η  | ξ  | κ  | λ  |    |  ζ  |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     | υ  | ι  | α  | ε  | ο  |-----!-----! σ  | ν  | ρ  | τ  | δ  |  ς  |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    | θ  |    |    |    |     |     | β  | μ  |    |    |    |  ψ  |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |    |    |    |                     !    |    |    |    |    |
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |     |     | !     |     |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     |     | !     |     !     !
-                      !     !     !-----! !-----!     !     !
-                      |     |     |     | !     |     |     |
-                      '-----------------' '-----------------'
-
-
-## Layer 5
-
-    .------------------------------------.------------------------------------.
-    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |     | Χ  | Π  | Φ  | Ω  | Γ  |     |     | Η  | Ξ  | Κ  | Λ  |    |  Ζ  |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     | Υ  | Ι  | Α  | Ε  | Ο  |-----!-----! Σ  | Ν  | Ρ  | Τ  | Δ  |     |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    | Θ  |    |    |    |     |     | Β  | Μ  |    |    |    |  Ψ  |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |    |    |    |                     !    |    |    |    |    |
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |     |     | !     |     |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     |     | !     |     !     !
-                      !     !     !-----! !-----!     !     !
-                      |     |     |     | !     |     |     |
-                      '-----------------' '-----------------'
-
-
-## Layer 6
-
-    .------------------------------------.------------------------------------.
-    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-    !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
-    !-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-    |     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-    '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
-     |    |    |    |    |    |                     !    |    |    |    |    |
-     '------------------------'                     '------------------------'
-                            .-----------. .-----------.
-                            |     |     | !     |     |
-                      .-----+-----+-----! !-----+-----+-----.
-                      !     !     |     | !     |     !     !
-                      !     !     !-----! !-----!     !     !
-                      |     |     |     | !     |     |     |
-                      '-----------------' '-----------------'
-
diff --git a/keyboards/ergodox_ez/keymaps/german/keymap.c b/keyboards/ergodox_ez/keymaps/german/keymap.c
deleted file mode 100644 (file)
index 3eab51f..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_german.h"
-
-// Layer names
-#define BASE 0 // default layer
-#define SYMB 1 // symbol layer
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   ^    |   1  |   2  |   3  |   4  |   5  | Play |           | Next |   6  |   7  |   8  |   9  |   0  |   ß    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |  Del   |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L2  |   Z  |   U  |   I  |   O  |   P  |   Ü    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Caps  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   Ö  |  Ä/L2  |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |   Y  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |-/Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | </L1 |#/Ctrl|   ´  |   -  |   +  |                                       | Right| Down |  Up  | Left | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------+------+------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_CIRC,         KC_1,           KC_2,     KC_3,     KC_4,     KC_5,   KC_MPLY,
-        KC_DELT,         KC_Q,           KC_W,     KC_E,     KC_R,     KC_T,   TG(1),
-        KC_CAPS,         KC_A,           KC_S,     KC_D,     KC_F,     KC_G,
-        KC_LSFT,         DE_Y,           KC_X,     KC_C,     KC_V,     KC_B,   ALL_T(KC_NO),
-        LT(SYMB,DE_LESS),CTL_T(DE_HASH), DE_ACUT,  DE_MINS,  DE_PLUS,
-                                               ALT_T(KC_APP), KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-        KC_MNXT,     KC_6,   KC_7,    KC_8,    KC_9,   KC_0,             KC_MINS,
-        TG(2),       DE_Z,   KC_U,    KC_I,    KC_O,   KC_P,             DE_UE,
-                     KC_H,   KC_J,    KC_K,    KC_L,   DE_OE,            LT(MDIA,DE_AE),
-        MEH_T(KC_NO),KC_N,   KC_M,    KC_COMM, KC_DOT, CTL_T(DE_MINS),   KC_RSFT,
-                             KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT,          KC_FN1,
-        KC_LALT,CTL_T(KC_ESC),
-        KC_PGUP,
-        KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,DE_EXLM,DE_AT,  DE_LCBR,DE_RCBR,DE_PIPE,KC_TRNS,
-       KC_TRNS,DE_HASH,DE_DLR, DE_LPRN,DE_RPRN,DE_GRV,
-       KC_TRNS,DE_PERC,DE_CIRC,DE_LBRC,DE_RBRC,DE_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    DE_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    DE_PLUS, KC_TRNS,
-       KC_TRNS, DE_AMPR, KC_1,   KC_2,    KC_3,    DE_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    DE_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      | Lclk | MsUp | Rclk |      |      |           |      |      |VolDwn| Mute |VolUp |      |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------|           |------|      | Prev | Stop | Play | Next |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |WhRght|WhDown| WhUp |WhLeft|WhClk |      |           |      |BwSrch|BwBack|BwHome|BwRefr|BwFwd |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |MsAcl0|MsAcl1|MsAcl2|                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |Brwser|Brwser|
- *                                 | Lclk | Rclk |------|       |------|Back  |Forwd |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
-       KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_BTN1, KC_BTN2, KC_TRNS,
-    // right hand
-       KC_TRNS, KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11,
-       KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
-                KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
-       KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_WBAK, KC_WFWD
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case SYMB:
-            ergodox_right_led_1_on();
-            break;
-        case MDIA:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            ergodox_board_led_off();
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/j3rn/keymap.c b/keyboards/ergodox_ez/keymaps/j3rn/keymap.c
deleted file mode 100644 (file)
index 6e27132..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | Grv    |   1  |   2  |   3  |   4  |   5  |  [   |           |  ]   |   6  |   7  |   8  |   9  |   0  |  BkSp  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  -   |           |  =   |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Ctrl/Esc|A / L2|   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | ~L1  | ~L2  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | Home |       | PgUp |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 |Space | LGui |------|       |------|  Tab   |Enter |
- *                                 |      |      |Shift |       | Alt  |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LBRC,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_MINS,
-        CTL_T(KC_ESC),  LT(MDIA, KC_A),KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        KC_FN1,         KC_FN2,       LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-
-                                              ALT_T(KC_APP),  KC_HOME,
-                                                              KC_END,
-                                       KC_SPC,   KC_LGUI,     KC_LSHIFT,
-        // right hand
-             KC_RBRC,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSPC,
-             KC_EQL,      KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          KC_QUOT,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-
-             KC_PGUP, CTL_T(KC_ESC),
-             KC_PGDN,
-             KC_LALT,    KC_TAB,     KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Lclk | Rclk |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS,
-                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),               // FN1 - Momentary Layer 1 (Symbols)
-    [2] = ACTION_LAYER_TAP_TOGGLE(MDIA)                // FN2 - Momentary Layer 2 (Media)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/j3rn/readme.md b/keyboards/ergodox_ez/keymaps/j3rn/readme.md
deleted file mode 100644 (file)
index fc4b640..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# J3RN's Mac-centric ErgoDox EZ keymap
-
-## Motivation
-
-Essentially, I wanted to switch to a layout that was less jarring than the default ErgoDox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key).
-
-## How is it different from the default ErgoDox EZ layout?
-
-This layout more closely resembles that of the Mac keyboard, and has some other goodness baked in. Here is a rundown of what that means:
-
-### Mac-like changes
-
-- **The key to the left of "1" is "~" instead of "=".**
-- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately.
-- **The key to the left of "Q" is Tab instead of Delete.**
-- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.**
-
-### Other changes
-
-- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a  CAPS LOCK key. This is the Ctrl key I find myself using most.
-- **Mouse uses Vim-style navigation**. To activate "Media mode," hold the 'a' key. This allows you to move the mouse around with hjkl just like in Vim. Additionally, right and left click are the conveniently placed 'i' and 'o' keys.
-- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach.
-- **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better.
-- **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold."
-- **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful.
-- **The Page Up and Page Down buttons have been shifted up on the right thumb, and Alt was moved from above them to below them.** I use Alt more than Page Up or Page Down (mostly in terminal applications), and thought that it deserved a more accessible location.
-
-
-**I'm always open to feedback and/or suggestions!**
diff --git a/keyboards/ergodox_ez/keymaps/jack/keymap.c b/keyboards/ergodox_ez/keymaps/jack/keymap.c
deleted file mode 100644 (file)
index 80bf9d5..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-// TODO: Define layer names that make sense for the ErgoDox EZ.
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_NO,          KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_NO,
-        KC_ESC,         KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_NO,
-        KC_NO,          KC_LCTL,      KC_LALT,KC_LGUI, MO(2),
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_SPC,KC_END,
-        // right hand
-             KC_NO,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_NO,
-             KC_NO,     KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSPC,
-                        KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          KC_QUOT,
-             KC_NO,     KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_ENT,
-                                  MO(1), KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,  
-             KC_NO,        KC_NO,
-             KC_PGUP,
-             KC_PGDN, KC_SPC,KC_SPC
-    ),
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,  KC_TRNS,
-       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5, 
-       KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
-                KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
-       KC_TRNS, KC_F12,  KC_NO,   KC_NO, KC_NO, RESET,   KC_TRNS,
-                         KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, 
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS,
-       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  
-       KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
-                 KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
-       KC_TRNS,  KC_F12,  KC_NO,   KC_NO, KC_NO, RESET,   KC_TRNS,
-                          KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, 
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png b/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png
deleted file mode 100644 (file)
index 06f63c4..0000000
Binary files a/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png b/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png
deleted file mode 100644 (file)
index 4dd7182..0000000
Binary files a/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png b/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png
deleted file mode 100644 (file)
index ee224cf..0000000
Binary files a/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/keymap.c b/keyboards/ergodox_ez/keymaps/jacobono/keymap.c
deleted file mode 100644 (file)
index 6b19800..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define COLEMAK 0 // new colemak layout
-#define QWERTY 1 // default layer
-#define SYMB 2 // symbols
-#define NUMPAD 3 // number pad
-#define MDIA 4 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-       /* Keymap 0: Basic COLEMAK layer
-        *
-        * ,--------------------------------------------------.           ,--------------------------------------------------.
-        * |        |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |        |
-        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-        * | Tab    |   Q  |   W  |   F  |   P  |   G  |      |           |      |   J  |   L  |   U  |   Y  |   ;  |  TAB   |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * | BkSp   |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |   O  |  DEL   |
-        * |--------+------+------+------+------+------|      |          LGUI(TAB)------+------+------+------+------+--------|
-        * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
-        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-        *   |  L1  |      |      | UP   |MO(L2)|                                       |MO(L2)| Down |      |  ALT | RGUI   |
-        *   `----------------------------------'                                       `------------------------------------'
-        *                                        ,-------------.       ,---------------.
-        *                                        | LGUI | App  |       |Ctrl/Esc|  Alt |
-        *                                 ,------|------|------|       |--------+--------+------.
-        *                                 |      |      |QUKSL |       |  QUKSL |        |      |
-   *                                 |Space |ENTER |------|       |--------| ENTER  |Space |
-        *                                 |      |      |MO(L3)|       | MO(L3) |        |      |
-        *                                 `--------------------'       `------------------------'
-        */
-
-       // If it accepts an argument (i.e, is a function), it doesn't need KC_.
-       // Otherwise, it needs KC_*
-       [COLEMAK] = KEYMAP(  // layer 0 : Colemak layout default layer
-           // left hand
-            KC_TRNS,        KC_1,         KC_2,   KC_3,   KC_4,    KC_5,   KC_LEFT,
-            KC_TAB,         KC_Q,         KC_W,   KC_F,   KC_P,    KC_G,   KC_TRNS,
-            KC_BSPC,        KC_A,         KC_R,   KC_S,   KC_T,    KC_D,
-            KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,    KC_B,   KC_TRNS,
-            TG(QWERTY),     KC_TRNS,      KC_TRNS,KC_UP,  MO(SYMB),
-            KC_LGUI,        KC_APP,
-            LGUI(S(KC_SPC)),
-            KC_SPC,KC_ENT,MO(NUMPAD),
-           // right hand
-            KC_RGHT,      KC_6,    KC_7,    KC_8,    KC_9,   KC_0,              KC_DELT,
-            KC_TRNS,      KC_J,    KC_L,    KC_U,    KC_Y,   KC_SCLN,           KC_TAB,
-            KC_H,         KC_N,    KC_E,    KC_I,    KC_O,   KC_DEL,
-            LGUI(KC_TAB), KC_K,    KC_M,    KC_COMM, KC_DOT, CTL_T(KC_SLSH),    KC_RSFT,
-            MO(SYMB),     KC_DOWN, KC_TRNS, KC_RALT, KC_RGUI,
-            CTL_T(KC_ESC), KC_LALT,
-            LGUI(S(KC_SPC)),
-            MO(NUMPAD), KC_ENT, KC_SPC),
-
-       /* Keymap 1: Basic QWERTY layer
-        *
-        * ,--------------------------------------------------.           ,--------------------------------------------------.
-        * | BkSp   |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   DEL  |
-        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-        * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L0  |           |  L0  |   Y  |   U  |   I  |   O  |   P  |   \    |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-   * | Ctrl   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L4|  CTRL  |
-   * |--------+------+------+------+------+------| Alt  |           | Alt  |------+------+------+------+------+--------|
-   * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
-   * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-   *   |Grv/L3|  '"  |AltShf| Left |MO(L2)|                                       |MO(L2)| Down |   [  |   ]  | ~L3  |
-   *   `----------------------------------'                                       `----------------------------------'
-   *                                        ,-------------.       ,---------------.
-   *                                        | Tab  | BkSp |       | Alt  |Ctrl/Esc|
-   *                                 ,------|------|------|       |------+--------+------.
-   *                                 |      |      | Home |       | PgUp |        |      |
-   *                                 | Space| LGUI |------|       |------|  RGUI  |Enter |
-   *                                 |      |      | End  |       | PgDn |        |      |
-   *                                `--------------------'       `----------------------'
-   */
-       // If it accepts an argument (i.e, is a function), it doesn't need KC_.
-       // Otherwise, it needs KC_*
-       [QWERTY] = KEYMAP(  // layer 1
-           // left hand
-           KC_BSPC,           KC_1,         KC_2,   KC_3,   KC_4,    KC_5,   KC_LEFT,
-           KC_TAB,            KC_Q,         KC_W,   KC_E,   KC_R,    KC_T,   KC_TRNS,
-           KC_LCTRL,          KC_A,         KC_S,   KC_D,   KC_F,    KC_G,
-           KC_LSFT,           CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,    KC_B,   KC_LALT,
-           KC_TRNS, KC_QUOT,  LALT(KC_LSFT),  KC_LEFT, MO(SYMB),
-           KC_TAB,  KC_DELT,
-           KC_HOME,
-           KC_SPC, KC_LGUI, KC_END,
-           // right hand
-           KC_RGHT,      KC_6,    KC_7,    KC_8,    KC_9,              KC_0,           KC_DELT,
-           KC_TRNS,      KC_Y,    KC_U,    KC_I,    KC_O,              KC_P,           KC_BSLS,
-           KC_H,         KC_J,    KC_K,    KC_L,    LT(MDIA, KC_SCLN), KC_RCTRL,
-           KC_RALT,      KC_N,    KC_M,    KC_COMM, KC_DOT,            CTL_T(KC_SLSH), KC_RSFT,
-           MO(SYMB),     KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
-           KC_LALT, CTL_T(KC_ESC),
-           KC_PGUP,
-           KC_PGDN, KC_RGUI, KC_ENT),
-
-
-       /* Keymap 2: Symbol Layer
-        *
-        * ,--------------------------------------------------.           ,--------------------------------------------------.
-        * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
-        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-        * |        |      |   @  |   *  |   =  |   _  |      |           |      |   ~  |   {  |   }  |   #  |   :  |   F12  |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * |        |   |  |   !  |   +  |   -  |   "  |------|           |------|   "  |   (  |   )  |   '  |   `  |        |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * |        |      |   %  |   ^  |   $  |   &  |      |           |      |   ;  |   [  |   ]  |   \  |   /  |        |
-        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-        *   |      |      |      |      |      |                                       |      |      |      |      |      |
-        *   `----------------------------------'                                       `----------------------------------'
-        *                                        ,-------------.       ,-------------.
-        *                                        |      |      |       |      |      |
-        *                                 ,------|------|------|       |------+------+------.
-        *                                 |      |      |      |       |      |      |      |
-        *                                 |      |      |------|       |------|      |      |
-        *                                 |      |      |      |       |      |      |      |
-        *                                 `--------------------'       `--------------------'
-        */
-       // SYMBOL
-       [SYMB] = KEYMAP(
-           // left hand
-           KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_AT,   KC_ASTR, KC_EQL,  KC_UNDS, KC_TRNS,
-           KC_TRNS, KC_PIPE, KC_EXLM, KC_PLUS, KC_MINS, S(KC_QUOTE),
-           KC_TRNS, KC_TRNS, KC_PERC, KC_CIRC, KC_DLR,  KC_AMPR, KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS,
-           KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS,
-
-           // right hand
-           KC_TRNS, KC_F6,      KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
-           KC_TRNS, KC_TILD,    KC_LCBR, KC_RCBR, KC_HASH, S(KC_SCLN), KC_F12,
-           S(KC_QUOTE),KC_LPRN, KC_RPRN, KC_QUOTE, KC_GRV, KC_TRNS,
-           KC_TRNS, KC_SCLN,    KC_LBRC, KC_RBRC, KC_BSLS, KC_SLSH, KC_TRNS,
-           KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS,
-           KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS),
-
-       /* Keymap 3: Numpad Layer
-        *
-        * ,--------------------------------------------------.           ,--------------------------------------------------.
-        * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
-        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-        * |        |      |      |  UP  |      |      |      |           |      |   $  |   7  |   8  |   9  |   +  |        |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * |        |      | LEFT | DOWN | RIGHT|      |------|           |------|   =  |   4  |   5  |   6  |   -  |        |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * |        |      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |   *  |        |
-        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-        *   |      |      |      |      |      |                                       |   ,  |   0  |   .  |   /  |      |
-        *   `----------------------------------'                                       `----------------------------------'
-        *                                        ,-------------.       ,-------------.
-        *                                        |      |      |       |      |      |
-        *                                 ,------|------|------|       |------+------+------.
-        *                                 |      |      |      |       |      |      |      |
-        *                                 |      |      |------|       |------|      |      |
-        *                                 |      |      |      |       |      |      |      |
-        *                                 `--------------------'       `--------------------'
-        */
-       // Numpad
-       [NUMPAD] = KEYMAP(
-           // left hand
-           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-           KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,
-           KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RIGHT,KC_TRNS,
-           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-           KC_TRNS,KC_TRNS,
-           KC_TRNS,
-           KC_TRNS,KC_TRNS,KC_TRNS,
-           // right hand
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,
-           KC_TRNS, KC_DLR,  KC_7,    KC_8,    KC_9,    KC_PLUS,  KC_TRNS,
-                    KC_EQL,  KC_4,    KC_5,    KC_6,    KC_MINS,  KC_TRNS,
-           KC_TRNS, KC_AMPR, KC_1,    KC_2,    KC_3,    KC_ASTR,  KC_TRNS,
-                             KC_COMMA,KC_0,    KC_DOT,  KC_SLSH,  KC_TRNS,
-           KC_TRNS, KC_TRNS,
-           KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS),
-
-       /* Keymap 4: Media and mouse keys
-        *
-        * ,--------------------------------------------------.           ,--------------------------------------------------.
-        * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
-        * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-        * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
-        * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-        * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
-        * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-        *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
-        *   `----------------------------------'                                       `----------------------------------'
-        *                                        ,-------------.       ,-------------.
-        *                                        |      |      |       |      |      |
-        *                                 ,------|------|------|       |------+------+------.
-        *                                 |      |      |      |       |      |      |Brwser|
-        *                                 |      |      |------|       |------|      |Back  |
-        *                                 |      |      |      |       |      |      |      |
-        *                                 `--------------------'       `--------------------'
-        */
-       // MEDIA AND MOUSE
-       KEYMAP(
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-           KC_TRNS, KC_TRNS,
-           KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS,
-           // right hand
-           KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-           KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-           KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-           KC_TRNS, KC_TRNS,
-           KC_TRNS,
-           KC_TRNS, KC_TRNS, KC_WBAK),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-       [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-       // MACRODOWN only works in this function
-       switch(id) {
-               case 0:
-                       if (record->event.pressed) {
-                               register_code(KC_RSFT);
-                       } else {
-                               unregister_code(KC_RSFT);
-                       }
-                       break;
-       }
-       return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-       uint8_t layer = biton32(layer_state);
-
-       ergodox_board_led_off();
-       ergodox_right_led_1_off();
-       ergodox_right_led_2_off();
-       ergodox_right_led_3_off();
-       switch (layer) {
-               // TODO: Make this relevant to the ErgoDox EZ.
-               case 1:
-                       ergodox_right_led_1_on();
-                       break;
-               case 2:
-                       ergodox_right_led_2_on();
-                       break;
-               default:
-                       // none
-                       break;
-       }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/readme.md b/keyboards/ergodox_ez/keymaps/jacobono/readme.md
deleted file mode 100644 (file)
index 48de050..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Default Layer #
-
-I'm using the colemak layer -- customized a bit to work a bit better when using spacemacs as my editor.
-
-![default-layer](img/colemak-default-layer.png)
-
-## Special Keys ##
-
-`SC1` => `LGUI + TAB`
-
-`SC2` => `LGUI + SPACE + TAB`
-
-`L1` => Switch to QWERTY Layout
-
-`T(L2)` => Toggle Symbol Layer
-
-`T(L3)` =>  Toggle Number and D-Pad Layer
-
-# QWERTY #
-
-Nothing special here -- just need this layer tucked away for the `WASD`.  Which is literally the only reason I use it.
-Just have the same button to toggle back to colemak.
-
-# Symbol Layer #
-
-![symbol-layer](img/symbol-layer.png)
-
-This is just putting matching closing symbols next to each other -- useful when editing lisp.
-
-# Number and D-Pad Layer #
-
-Just a basic number layer with a D-PAD on the other side.
-
-![number-dpad-layer](img/number-dpad-layer.png)
diff --git a/keyboards/ergodox_ez/keymaps/jgarr/keymap.c b/keyboards/ergodox_ez/keymaps/jgarr/keymap.c
deleted file mode 100644 (file)
index a3ad204..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,-----------------------------------------------------.
- * |   Grv  |   1  |   2  |   3  |   4  |   5  | Del  |           |Backspace|   6  |   7  |   8  |   9  |   0  |   \    |
- * |--------+------+------+------+------+-------------|           |---------+------+------+------+------+------+--------|
- * |   Tab  |   '  |   ,  |   .  |   P  |   Y  |  L1  |           |  L1     |   F  |   G  |   C  |   R  |   L  |   /    |
- * |--------+------+------+------+------+------|      |           |         |------+------+------+------+------+--------|
- * |Ctrl/Esc|   A  |   O  |   E  |   U  |   I  |------|           |---------|   D  |   H  |   T  |   N  |S / L2|   -    |
- * |--------+------+------+------+------+------| Hyper|           | Meh     |------+------+------+------+------+--------|
- * | LShift |:/Ctrl|   Q  |   J  |   K  |   X  |      |           |         |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `----------------+------+------+------+------+--------'
- *   | Ctrl | LGui |  Alt | Left | Right|                                          |  Up  | Down |   [  |   ]  |  =   |
- *   `----------------------------------'                                          `----------------------------------'
- *                                        ,--------------.       ,-------------.
- *                                        | AltShf| LGui |       | Alt  | ~L1  |
- *                                 ,------|-------|------|       |------+--------+------.
- *                                 |      |       | Home |       | PgUp |        |      |
- *                                 | Space|Backsp |------|       |------|  Enter |Space |
- *                                 |      |ace    | End  |       | PgDn |        |      |
- *                                 `---------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,         KC_1,           KC_2,    KC_3,   KC_4,   KC_5,   KC_DELT,
-        KC_TAB,         KC_QUOT,        KC_COMM, KC_DOT, KC_P,   KC_Y,   TG(1),
-        CTL_T(KC_ESC),  KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
-        KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   ALL_T(KC_NO),
-        KC_LCTL,  KC_LGUI,  KC_LALT,  KC_LEFT, KC_RGHT,
-                                              LALT(KC_LSFT),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_BSPC,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_BSLS,
-             TG(1),       KC_F,   KC_G,   KC_C,   KC_R,   KC_L,             KC_SLSH,
-                          KC_D,   KC_H,   KC_T,   KC_N,   LT(MDIA, KC_S),   KC_MINS,
-             MEH_T(KC_NO),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_EQL,
-             KC_LALT,        KC_FN1,
-             KC_PGUP,
-             KC_PGDN,KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/josh/keymap.c b/keyboards/ergodox_ez/keymaps/josh/keymap.c
deleted file mode 100644 (file)
index de5664a..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-//macros
-#define CTL_SFT_T 100
-#define CTL_SFT_G 101
-#define CTL_ALT_H 102
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |           | M 100|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |TAB /Alt|   Q  |   W  |   E  |   R  |   T  | Meh  |           | Meh  |   Y  |   U  |   I  |   O  |   P  |\ / ALT |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | LCTL   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / CTL |
- * |--------+------+------+------+------+------| ~L1  |           | ~L1  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | WIN  |  `   | M 102| M 101|AltShf|                                       |AltShf| Left | Down |  Up  | Right  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LALT |       | Alt  |  CAPS  |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------| Delete |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_ESC,
-        ALT_T(KC_TAB),  KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   ALL_T(KC_NO),
-        KC_LCTL,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   MO(SYMB),
-        KC_LGUI,        KC_GRV, M(CTL_ALT_H),M(CTL_SFT_G),LALT(KC_LSFT),
-                                              CTL_T(KC_APP),  KC_LALT,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             M(CTL_SFT_T),KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             MEH_T(KC_NO),KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),CTL_T(KC_QUOT),
-             MO(SYMB),      KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
-                            LALT(KC_LSFT),KC_LEFT,KC_DOWN,KC_UP,            KC_RIGHT,
-             KC_LALT,        KC_CAPS,
-             KC_PGUP,
-             KC_PGDN,KC_DEL, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |Version |  F1  |  F2  |  F3  |  F4  |  F5  | F11  |           | F12  |  F6  |  F7  |  F8  |  F9  |  F10 |  CALC  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Left | Down |  Up  | Right|      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       M(0),   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F11,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_F12,  KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_CALC,
-       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                KC_LEFT, KC_DOWN,KC_UP,   KC_RIGHT,KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                         KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-    switch(id) {
-        case 0:
-            if (record->event.pressed) {
-                SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
-            }
-            break;
-        case CTL_SFT_T:
-            if (record->event.pressed) {
-                return MACRO(D(LCTL), D(LSFT), T(T), END);
-            }
-            return MACRO(U(LCTL), U(LSFT), END);
-            break;
-        case CTL_SFT_G:
-            if (record->event.pressed) {
-                return MACRO(D(LCTL), D(LSFT), T(G), END);
-            }
-            return MACRO(U(LCTL), U(LSFT), END);
-            break;
-        case CTL_ALT_H:
-            if (record->event.pressed) {
-                return MACRO(D(LCTL), D(LALT), T(H), END);
-            }
-            return MACRO(U(LCTL), U(LALT), END);
-            break;
-    }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/josh/readme.md b/keyboards/ergodox_ez/keymaps/josh/readme.md
deleted file mode 100644 (file)
index cee19d4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Layout is based on the default layout that comes on the ergodox infinity. Focused mostly on making ctl and alt easy to reach. I spend most my day working in Eclipse which has just so many 3 key shortcuts.
-
-* Removed numpad keys from symbol layer (I don't use them)
-* Added arrow keys under h, j, k, l on symbol layer. vi movement keys!
-* Added a few macros for eclipse hotkeys that I used all the time
-* Added calc button on symbol layer
-* tap vs hold on tab and \. Gives alt, ctl and shift on both sides of the keyboard
-
diff --git a/keyboards/ergodox_ez/keymaps/kastyle/keymap.c b/keyboards/ergodox_ez/keymaps/kastyle/keymap.c
deleted file mode 100644 (file)
index 3982e0a..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LGUI |           | App  |   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | LCtrl  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                      ,---------------.       ,---------------.
- *                                      |Ctrl/Esc| Alt  |       | Alt  |Ctrl/Esc|
- *                               ,------|--------|------|       |------+--------+------.
- *                               |      |        | Home |       | PgUp |        |      |
- *                               |Backsp|   Del  |------|       |------| Enter  | Space|
- *                               |      |        | End  |       | PgDn |        |      |
- *                               `----------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LGUI,
-        KC_TAB,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
-        KC_LCTL,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              CTL_T(KC_ESC),  ALT_T(KC_APP),
-                                                              KC_HOME,
-                                               KC_BSPC,KC_DEL,KC_END,
-        // right hand
-             KC_APP,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(1),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOT,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c b/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c
deleted file mode 100644 (file)
index 5063c99..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Caps   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | Esc  | Grv  |Insert| Left | Right|                                       |  Up  | Down |   [  |   ]  |  L2  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | Ctrl | Alt  |       | LGui | Ctrl |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | Home |       | PgUp |      |      |
- *                                 |Backsp| Del  |------|       |------| Enter| Space|
- *                                 |ace   |      | End  |       | PgDn |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,   KC_1,    KC_2,    KC_3,     KC_4,     KC_5,  KC_LEFT,
-        KC_TAB,   KC_Q,    KC_W,    KC_E,     KC_R,     KC_T,  TG(SYMB),
-        KC_CAPS,  KC_A,    KC_S,    KC_D,     KC_F,     KC_G,
-        KC_LSFT,  KC_Z,    KC_X,    KC_C,     KC_V,     KC_B,  ALL_T(KC_NO),
-        KC_ESC,   KC_GRV,  KC_INS,  KC_LEFT,  KC_RGHT,
-                                               KC_LCTL,KC_LALT,
-                                                       KC_HOME,
-                                         KC_BSPC,KC_DEL,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_MINS,
-             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,     KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,  KC_QUOT,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,  KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,  KC_FN2,
-             KC_LGUI, KC_RCTL,
-             KC_PGUP,
-             KC_PGDN, KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | PrScr  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | ScrLk  |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Pause  |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_PSCR,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_SLCK,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_PAUS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/kines-ish/readme.md b/keyboards/ergodox_ez/keymaps/kines-ish/readme.md
deleted file mode 100644 (file)
index 5d39a05..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-This keymap attempts to match the Kinesis Contoured (aka Advantage) default
-layout as closely as possible. See
-http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf
-
-Apart from the obvious mappings, this keymap also:
-
-* removes the dual-purpose momentary layer/normal keys: Z, /, and Grv;
-  because the author--coming from a Kinesis keyboard--finds the delays and
-  accidental modifiers to be more disconcerting than helpful.
-
-* puts Esc in the bottom left since there's no place for it in the top
-  left to match the Kinesis.
-
-* changes the bottom-right key into an L2 toggle since there's otherwise no
-  way to get to L2.
-
-* adds PrScr, ScrLk and Pause to the L1 keymap, down the left side, since
-  they're present on the Kinesis but not available in the default
-  ergodox_ez keymap.
diff --git a/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c b/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c
deleted file mode 100644 (file)
index 5bfef59..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_colemak.h"
-
-enum {
-    BASE = 0,
-    BASE_CM,
-    SYMB,
-    MACR
-};
-
-enum {
-    LWIN = 1,
-    PC1,
-    PC2,
-    PC3,
-    PC4,
-    DL_BASE,
-    DL_BASE_CM,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0a: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
- * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | LAlt | LGui |       | LAlt | RAlt |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |Backsp| Home |       | PgUp |        |      |
- *                                 | Space|ace/  |------|       |------|  Tab/  |Enter/|
- *                                 | /Shft|Ctrl  |  1)  |       |  2)  |  Ctrl  |Shift |
- *                                 `--------------------'       `----------------------'
- *
- * 1) End/L1
- * 2) PgDown/L2
- */
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,     KC_W,   KC_F,   KC_P,          KC_G,   TG(SYMB),
-        KC_ESC,         KC_A,     KC_R,   KC_S,   KC_T,          KC_D,
-        KC_LSFT,        KC_Z,     KC_X,   KC_C,   KC_V,          KC_B,   KC_EQL,
-        LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
-                                                             KC_LALT,       F(LWIN),
-                                                                            KC_HOME,
-                                               SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, KC_END),
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(SYMB),    KC_J,   KC_L,   KC_U,   KC_Y,   KC_SCLN,          KC_BSLS,
-                          KC_H,   KC_N,   KC_E,   KC_I,   KC_O,             KC_QUOT,
-             KC_MINS,     KC_K,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
-             KC_LALT,         KC_RALT,
-             KC_PGUP,
-             LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(KC_ENT)
-    ),
-/* Keymap 0b: Basic layer (Colemak keycodes or QWERTY)
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   F  |   P  |   G  |  L1  |           |  L1  |   J  |   L  |   U  |   Y  |   ;  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Esc    |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |  O   |   '    |
- * |--------+------+------+------+------+------|   =  |           |   -  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | LAlt | LGui |       | LAlt | RAlt |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |Backsp| Home |       | PgUp |        |      |
- *                                 | Space|ace/  |------|       |------|  Tab/  |Enter/|
- *                                 | /Shft|Ctrl  |  1)  |       |  2)  |  Ctrl  |Shift |
- *                                 `--------------------'       `----------------------'
- *
- * 1) End/L1
- * 2) PgDown/L2
- */
-[BASE_CM] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,     KC_2,   KC_3,   KC_4,          KC_5,   KC_LEFT,
-        KC_DELT,        CM_Q,     CM_W,   CM_F,   CM_P,          CM_G,   TG(SYMB),
-        KC_ESC,         CM_A,     CM_R,   CM_S,   CM_T,          CM_D,
-        KC_LSFT,        CM_Z,     CM_X,   CM_C,   CM_V,          CM_B,   KC_EQL,
-        LT(SYMB,KC_GRV),KC_QUOT,  LALT(KC_LSFT),  KC_LEFT,       KC_RGHT,
-                                                             KC_LALT,       F(LWIN),
-                                                                            KC_HOME,
-                                               SFT_T(KC_SPC),CTL_T(KC_BSPC),LT(SYMB, KC_END),
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(SYMB),    CM_J,   CM_L,   CM_U,   CM_Y,   KC_P, /*CM_SCLN*/ KC_BSLS,
-                          CM_H,   CM_N,   CM_E,   CM_I,   CM_O,             KC_QUOT,
-             KC_MINS,     CM_K,   CM_M,   CM_COMM,CM_DOT, CTL_T(CM_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          LT(SYMB,KC_NO),
-             KC_LALT,         KC_RALT,
-             KC_PGUP,
-             LT(MACR,KC_PGDN),CTL_T(KC_TAB), SFT_T(KC_ENT)
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Macros
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        | DLa  | DLb  |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | PC1  | PC2  | PC3  | PC4  |      |------|           |------|      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MACROS
-[MACR] = KEYMAP(
-       KC_NO,   KC_NO,     KC_NO,        KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_NO,   F(DL_BASE),F(DL_BASE_CM),KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_NO,   F(PC1),    F(PC2),       F(PC3),  F(PC4),  KC_NO,
-       KC_NO,   KC_NO,     KC_NO,        KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_NO,   KC_NO,     KC_NO,        KC_NO,   KC_NO,
-                                           KC_TRNS,KC_TRNS,
-                                                   KC_TRNS,
-                                   KC_TRNS,KC_TRNS,KC_TRNS,
-    // right hand
-       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-                 KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,
-       KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-                          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [LWIN] = ACTION_MACRO(LWIN),
-    [PC1] = ACTION_MACRO(PC1),
-    [PC2] = ACTION_MACRO(PC2),
-    [PC3] = ACTION_MACRO(PC3),
-    [PC4] = ACTION_MACRO(PC4),
-    [DL_BASE] = ACTION_DEFAULT_LAYER_SET(BASE),
-    [DL_BASE_CM] = ACTION_DEFAULT_LAYER_SET(BASE_CM)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    switch(id) {
-    case 0:
-        if (record->event.pressed) {
-            register_code(KC_RSFT);
-        } else {
-            unregister_code(KC_RSFT);
-        }
-        break;
-    case LWIN:
-        if (record->event.pressed) {
-             register_code(KC_RSFT);
-             unregister_code(KC_RSFT);
-             register_code(KC_LGUI);
-        } else {
-             unregister_code(KC_LGUI);
-        }
-        break;
-    case PC1:
-        if (!record->event.pressed) {
-             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END);
-        }
-        break;
-    case PC2:
-        if (!record->event.pressed) {
-             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END);
-        }
-        break;
-    case PC3:
-        if (!record->event.pressed) {
-             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END);
-        }
-        break;
-    case PC4:
-        if (!record->event.pressed) {
-             return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), END);
-        }
-        break;
-    }
-    return MACRO_NONE;
-}
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case SYMB:
-            ergodox_right_led_1_on();
-            break;
-        case MACR:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-};
diff --git a/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md b/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md
deleted file mode 100644 (file)
index 785400d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# ErgoDox EZ mpiechotka Configuration
-
-Modification of ErgoDox EZ Colemak layout with additional QWERTY/software Colemak layer and change of the special keys.
-
-
-
diff --git a/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png b/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png
deleted file mode 100644 (file)
index 7b5efaa..0000000
Binary files a/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png b/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png
deleted file mode 100644 (file)
index 65f92dd..0000000
Binary files a/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png b/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png
deleted file mode 100644 (file)
index a69799b..0000000
Binary files a/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/msc/keymap.c b/keyboards/ergodox_ez/keymaps/msc/keymap.c
deleted file mode 100644 (file)
index e567e51..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |' / Cmd |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | Cmd  | Alt  |AltShf| Left | Right|                                       | Left | Down |  Up  |Right | L2  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
-        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        KC_LGUI,KC_LALT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,GUI_T(KC_QUOT),
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_LEFT,  KC_DOWN, KC_UP, KC_RIGHT,       TG(MDIA),
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      | Mute |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       | Prev |VolDn |VolUp | Next |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 | Lclk | Rclk |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_BTN1, KC_BTN2, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/msc/readme.md b/keyboards/ergodox_ez/keymaps/msc/readme.md
deleted file mode 100644 (file)
index 0d14fcb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# MSC Configuration
-
-### Based mostly on the ErgoDox EZ default layout with optimizations for coding on osx.
-
-#### Expecting the user to rely on Coder Layer this keymap removes some of the duplicate symbol keys in the lower portions of the board and replaces them with arrow keys and modifiers. The Media Layer is also updated to match the change in the arrow keys and the left and right click buttons are moved under the thumb position. The Media layer is now reached with toggle button in the lower right.
-
-### Main Layer
-
-![Main Layer](img/main_layer.png)
-
-### Code Layer
-
-![Code Layer](img/code_layer.png)
-
-### Media Layer
-
-![Media Layer](img/media_layer.png)
-
-## Changelog
-
-Version 1.0
-
-- Changed the temp code layer key in the bottom right to toggle media layer
-- Changed the temp media key to only be ";"
-- Changed right hand bottom row to match vim home row nav directions
-- Changed media keys to match arrow key changes
-- Changed media left and right click to spacebar and backspace locations
-- Changed bottom left to Cmd
-- Changed single quote on left bottom row to alt
-
-#### Coming Soon:
-- A new layer for Blender editing with a focus on left hand shortcut and a righthand num pad to control the view in Blender.
diff --git a/keyboards/ergodox_ez/keymaps/naps62/keymap.c b/keyboards/ergodox_ez/keymaps/naps62/keymap.c
deleted file mode 100644 (file)
index d8c2842..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |  Esc   | 1  ! | 2  @ | 3  # | 4  $ | 5  % | Lang |           | Esc  | 6  ^ | 7  & | 8  * | 9  ( | 0  ) | Bckspc |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |  Tab   |   Q  |   W  |   E  |   R  |   T  |  L2  |           |  L2  |   Y  |   U  |   I  |   O  |   P  | \   |  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Ctrl  |   A  |   S  |  D   |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  | ;  : |  ' "   |
- * |--------+------+------+------+------+------|  L1  |           |  L1  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  | ,  < | . >  | /  ? |  - _   |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |  L1  | `  ~ | ' "  | \  | |  L2  |                                       |  {   |  }   | [  { | ]  } |  L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,--------------.       ,---------------.
- *                                        | Home  | End  |       | PgUp  |Insert |
- *                                 ,------|-------|------|       |-------+-------+------.
- *                                 |      |       | LGui |       | Del   |       |      |
- *                                 | Space|  Alt  |------|       |-------| Enter |Space |
- *                                 |      |       | LGui |       | Bcsp  |       |      |
- *                                 `---------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-  // left hand
-  KC_ESC,     KC_1,    KC_2,     KC_3,     KC_4,               KC_5,  LGUI(KC_SPC),
-  KC_TAB,     KC_Q,    KC_W,     KC_E,     KC_R,               KC_T,  MO(2),
-  KC_LCTL,    KC_A,    KC_S,     KC_D,     KC_F,               KC_G,
-  KC_LSFT,    KC_Z,    KC_X,     KC_C,     KC_V,               KC_B,  MO(1),
-  MO(1),      KC_GRV,  KC_QUOT,  KC_BSLS,  MO(2),
-
-                                               KC_HOME,   KC_END,
-                                                          KC_LGUI,
-                                      KC_SPC,  KC_LALT,   KC_LGUI,
-
-  // right hand
-  KC_ESC,  KC_6,     KC_7,     KC_8,     KC_9,     KC_0,      KC_BSPC,
-  MO(2),   KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,      KC_BSLS,
-           KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,   KC_QUOT,
-  MO(1),   KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,   KC_MINS,
-                     KC_LCBR,  KC_RCBR,  KC_LBRC,  KC_RBRC,   MO(1),
-
-  KC_PGUP,  KC_INS,
-  KC_DEL,
-  KC_BSPC,  KC_ENT,    KC_SPC
-),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |   =  |    . |   0  |   -  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_EQL,KC_DOT,  KC_0,    KC_MINS,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |GuiUp | Expl |      | Term |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |GuiLft|GuiDwn|GuiRgt|      |      |------|           |------| Left | Down |  Up  |Right |      |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |Browsr|      |           |      |      |VolDwn|VolUp | Mute |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       | Play | Prev | Next |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |Brwser|Brwser|
- *                                 | Lclk | Rclk |------|       |------|Fwd   |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-         RESET, KC_TRNS,        KC_TRNS,     KC_TRNS,        KC_TRNS, KC_TRNS,    KC_TRNS,
-       KC_TRNS, KC_TRNS,        LGUI(KC_W),  LGUI(KC_E),     KC_BTN1, LGUI(KC_T), KC_TRNS,
-       KC_TRNS, LGUI(KC_A),     LGUI(KC_S),  LGUI(KC_D),     KC_MS_D, KC_MS_R,
-       KC_TRNS, KC_TRNS,        KC_TRNS,     KC_TRNS,        KC_TRNS, KC_TRNS,    KC_TRNS,
-       KC_TRNS, KC_TRNS,        KC_TRNS,     KC_TRNS,        KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_BTN1, KC_BTN2, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
-                 KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE,  KC_TRNS, KC_TRNS,
-                          KC_MPLY, KC_MPRV, KC_MNXT,  KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS,
-       KC_TRNS,
-       KC_TRNS,  KC_WBAK, KC_WFWD
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/naps62/readme.md b/keyboards/ergodox_ez/keymaps/naps62/readme.md
deleted file mode 100644 (file)
index 14728e4..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# ErgoDox EZ naps62 Configuration
-
-## Motivation
-
-I wanted a layout that suited my Linux & Vim usage. I also didn't like the lack of efficient access to some of the more common special characters used in programming.
-
-## Key features / changes
-
-### Base Layer (L1)
-
-* **No `MT(mod, kc)` keys (modifier when pressed, key when tapped).** Those keys work with a global timeout. When a key press is shorter than the timeout, it's considered a tap, otherwise it's a hold. I couldn't find any particular timeout that would work for me. I need to use mods extremely fast, but also want the confort of using them more slowly in other occasions. So I gave up on this feature altogether.
-* **Direct access to `{}[]`.** When programming, these are used extremely often. I was still getting used to the coder layer, and I prefer the arrows on the home row, so I used the bottom-right keys for this.
-* **Layer keys everywhere.** I either use my little finger or my index finger to go to L1, whichever is more confortable in any given situation. L2 is not used while coding/writing, so I don't need an extremely-optimized access to it.
-* **Lang key.** This is nothing more than `Super-Space` combo, which in my systems (both Linux & Windows) is the shortcut to change the keyboard language. I'm Portuguese, so I often cycle between US layout for coding, and PT layout for writing.
-* **Special chars on the right-most column.** I only use Ctrl & Shift keys on the left side, so I used the right keys to include some of the more useful special characters as well.
-
-### Coder Layer (L2)
-
-* The `=` and `-` signs where nowhere to be found. `-` was already on the base layer, but it's still useful to have a fully-featured NumPad on the coder layer.
-
-### Media Layer (L3)
-
-* **Better media keys**. Why was Play/Pause so far away? And where was Mute? I put all my media keys close to each other, including the missing ones
-* **Arrow keys on home row.** I use vim, so I'm always on my home row. I use this sometimes to get around, but not as often as to need them on the base row. I'm fine with them here
-* I don't use mouse keys. They're still set up, and I made some changes as an experiment, but I mostly forgot they exist by now.
-
-## Author
-
-[Miguel Palhas](https://github.com/naps62)
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/keymap.c b/keyboards/ergodox_ez/keymaps/ordinary/keymap.c
deleted file mode 100644 (file)
index 778cbc6..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-#include "ergodox_ez.h"
-#include "led.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "action_util.h"
-#include "mousekey.h"
-
-#define BASE   0 // default layer
-#define SYMB   1 // symbols layer
-#define MDIA   2 // media layer
-#define SPEC   3 // special layer
-
-#define LCaps 10 // left caps-shift key
-#define LSymb 11 // left symbol-shift key
-#define LMdia 12 // left media-shift key
-#define LSpec 13 // left special-shift key
-#define RCaps 14 // right caps-shift key
-#define RSymb 15 // right symbol-shift key
-#define RMdia 16 // right media-shift key
-#define RSpec 17 // right special-shift key
-
-#define MUL   20 // mouse up left
-#define MUR   21 // mouse up right
-#define MDL   22 // mouse down left
-#define MDR   23 // mouse down right
-
-/*
- * The Ordinary Layout for the Ergodox EZ keyboard, v4
- * 
- * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
- *
- * No rights reserved. This software is in the public domain.
- * Credit me if you are friendly but if you're a jerk don't bother.
- * 
- * Details: readme.md
- *          https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/******* Base Layer ********************************************************************************************************
- *
- * ,------------------------------------------------------.           ,------------------------------------------------------.
- * | Special `~ |   1  |   2  |   3  |   4  |   5  | ESC  |           |  -   |   6  |   7  |   8  |   9  |   0  | =+ Special |
- * |------------+------+------+------+------+-------------|           |------+------+------+------+------+------+------------|
- * | Media  Tab |   Q  |   W  |   E  |   R  |   T  |   [  |           |  ]   |   Y  |   U  |   I  |   O  |   P  | \|   Media |
- * |------------+------+------+------+------+------|      |           |      |------+------+------+------+------+------------|
- * | Symbol     |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;   | '"  Symbol |
- * |------------+------+------+------+------+------|Shift |           | Tab  |------+------+------+------+------+------------|
- * | Capitals   |   Z  |   X  |   C  |   V  |   B  | -Tab |           |      |   N  |   M  |   ,  |   .  |  /   |   Capitals |
- * `------------+------+------+------+------+-------------'           `-------------+------+------+------+------+------------'
- *      | LCtrl | Meh  |Hyper | LAlt | LGui |                                       | RGui | RAlt | Hyper|  Meh | RCtrl |
- *      `-----------------------------------'                                       `-----------------------------------'
- *                                          ,-------------.           ,-------------.
- *                                          | Home | End  |           | Left | Right|
- *                                   ,------|------|------|           |------+------+------.
- *                                   |      |      | PgUp |           |  Up  |      |      |
- *                                   |Backsp| Del  |------|           |------| Enter| Space|
- *                                   |      |      | PgDn |           | Down |      |      |
- *                                   `--------------------'           `--------------------'
- */
-[BASE] = KEYMAP(
-// left hand
- F(LSpec),KC_1,KC_2,KC_3   ,KC_4  ,KC_5  ,KC_ESC
-,F(LMdia)  ,KC_Q   ,KC_W   ,KC_E   ,KC_R  ,KC_T  ,KC_LBRC
-,M(LSymb)  ,KC_A   ,KC_S   ,KC_D   ,KC_F  ,KC_G
-,M(LCaps)  ,KC_Z   ,KC_X   ,KC_C   ,KC_V  ,KC_B  ,LSFT(KC_TAB)
-,KC_LCTL   ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
-                                         ,KC_HOME,KC_END
-                                                 ,KC_PGUP
-                                 ,KC_BSPC,KC_DEL ,KC_PGDN
-                                                                      // right hand
-                                                                     ,KC_MINS ,KC_6   ,KC_7   ,KC_8   ,KC_9    ,KC_0     ,F(RSpec)
-                                                                     ,KC_RBRC ,KC_Y   ,KC_U   ,KC_I   ,KC_O    ,KC_P     ,F(RMdia)
-                                                                              ,KC_H   ,KC_J   ,KC_K   ,KC_L    ,KC_SCLN  ,F(RSymb)
-                                                                     ,KC_TAB  ,KC_N   ,KC_M   ,KC_COMM,KC_DOT  ,KC_SLSH  ,M(RCaps)
-                                                                                      ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH   ,KC_RCTL
-                                                                     ,KC_LEFT ,KC_RGHT
-                                                                     ,KC_UP
-                                                                     ,KC_DOWN ,KC_ENT ,KC_SPC
-    ),
-
-/******* Symbols Layer *****************************************************************************************************
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |  F1  |  F2  |  F3  |  F4  |  F5  | Esc  |           |  -   |  F6  |  F7  |  F8  |  F9  |  F10 |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * |           |   !  |   @  |   {  |   }  |   &  |  <   |           |  >   |   |  |   7  |   8  |   9  |   /  |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |   #  |   $  |   (  |   )  |   `  |------|           |------|   /  |   4  |   5  |   6  |   *  |           |
- * |-----------+------+------+------+------+------| Tab  |           | Shift|------+------+------+------+------+-----------|
- * |           |   %  |   ^  |   [  |   ]  |   ~  |      |           |  -Tab|   \  |   1  |   2  |   3  |   -  |           |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *     | LCtrl | Meh  |Hyper | LAlt | LGui |                                       |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent|
- *     `-----------------------------------'                                       `-------------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         | Left | Right|           | Home | End  |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |  Up  |           | PgUp |      |      |
- *                                  |Space |Enter |------|           |------|BackSp| Del  |
- *                                  |      |      | Down |           | PgDn |      |      |
- *                                  `--------------------'           `--------------------'
- */
-[SYMB] = KEYMAP(
-// left hand
- KC_TRNS ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,KC_ESC
-,KC_TRNS ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
-,KC_TRNS ,KC_HASH ,KC_DLR  ,KC_LPRN ,KC_RPRN ,KC_GRV 
-,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
-,KC_LCTL   ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI
-                                             ,KC_LEFT ,KC_RGHT
-                                                      ,KC_UP
-                                    ,KC_SPC  ,KC_ENT  ,KC_DOWN
-                                                                     // right hand
-                                                                     ,KC_MINS     ,KC_F6   ,KC_F7 ,KC_F8  ,KC_F9 ,KC_F10  ,KC_TRNS
-                                                                     ,LSFT(KC_DOT),KC_PIPE ,KC_7  ,KC_8   ,KC_9  ,KC_SLSH ,KC_TRNS
-                                                                                  ,KC_SLSH ,KC_4  ,KC_5   ,KC_6  ,KC_ASTR ,KC_TRNS
-                                                                     ,LSFT(KC_TAB),KC_BSLS ,KC_1  ,KC_2   ,KC_3  ,KC_MINS ,KC_TRNS
-                                                                                           ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT)
-                                                                     ,KC_HOME     ,KC_END
-                                                                     ,KC_PGUP
-                                                                     ,KC_PGDN     ,KC_BSPC ,KC_DEL
-),
-
-/******* Media Layer *******************************************************************************************************
- *
- * ,---------------------------------------------------------------.           ,---------------------------------------------------------------.
- * |      |   F11   |   F12   |   F13   |   F14   |   F15   | Esc  |           |      |   F16   |   F17   |   F18   |   F19   |   F20   |      |
- * |------+---------+---------+---------+---------+----------------|           |------+---------+---------+---------+---------+---------+------|
- * |      |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll|           |Scroll|PrintScrn|   Home  |    Up   |   PgUp  |   Mail  |      |
- * |------+---------+---------+---------+---------+---------|  Up  |           |  Up  |---------+---------+---------+---------+---------+------|
- * |      |  Sleep  |MouseLeft|MouseDown|MouseRght|Volume Dn|------|           |------| Num Lock|   Left  |   Down  |   Right | MyComp  |      |
- * |------+---------+---------+---------+---------+---------|Scroll|           |Scroll|---------+---------+---------+---------+---------+------|
- * |      |         |MouseDnLf|MouseDown|MouseDnRg|  Mute   | Down |           | Down |         |   End   |   Down  |   PgDn  |         |      |
- * `------+---------+---------+---------+---------+----------------'           `----------------+---------+---------+---------+---------+------'
- *  |LCtrl|   Meh   |  MClick | LClick  |  R Click|                                             |Cmd/Insrt|Optn/Del | Hyper   |  Meh    |RCtrl|
- *  `---------------------------------------------'                                             `---------------------------------------------'
- *                                                   ,-------------.           ,-------------.
- *                                                   | Stop |Refrsh|           | Prev | Next |
- *                                            ,------|------|------|           |------+------+------.
- *                                            |Brwser|Brwser|Search|           |VolUp |      |      |
- *                                            |Back  | Fwd  |------|           |------| Stop | Play-|
- *                                            |      |      | Home |           |VolDn |      | Pause|
- *                                            `--------------------'           `--------------------'
- */
-[MDIA] = KEYMAP(
-// left hand
- KC_TRNS ,KC_F11   ,KC_F12  ,KC_F13   ,KC_F14  ,KC_F15  ,KC_ESC
-,KC_TRNS ,KC_POWER ,M(MUL)  ,KC_MS_U  ,M(MUR)  ,KC_VOLU ,KC_WH_U
-,KC_TRNS ,KC_SLEP  ,KC_MS_L ,KC_MS_D  ,KC_MS_R ,KC_VOLD
-,KC_TRNS ,KC_NO    ,M(MDL)  ,KC_MS_D  ,M(MDR)  ,KC_MUTE ,KC_WH_D
-,KC_LCTL ,KC_MEH   ,KC_BTN3 ,KC_BTN1  ,KC_BTN2
-                                               ,KC_WSTP ,KC_WREF
-                                                        ,KC_WSCH
-                                      ,KC_WBAK ,KC_NO   ,KC_WHOM
-                                                                     // right hand
-                                                                     ,KC_NO    ,KC_F16  ,KC_F17       ,KC_F18       ,KC_F19  ,KC_F20  ,KC_TRNS
-                                                                     ,KC_WH_U  ,KC_PSCR ,KC_HOME      ,KC_UP        ,KC_PGUP ,KC_MAIL ,KC_TRNS
-                                                                               ,KC_NLCK ,KC_LEFT      ,KC_DOWN      ,KC_RIGHT,KC_MYCM ,KC_TRNS
-                                                                     ,KC_WH_D  ,KC_NO   ,KC_END       ,KC_DOWN      ,KC_PGDN ,KC_NO   ,KC_TRNS
-                                                                                        ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH  ,KC_RCTL
-                                                                     ,KC_MPRV  ,KC_MNXT
-                                                                     ,KC_VOLU
-                                                                     ,KC_VOLD  ,KC_MSTP ,KC_MPLY
-),
-
-/******* Special Layer *****************************************************************************************************
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |  Esc |      |      |      |      |      |           |      |      |      |      |      | Bspc |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |------|           |------|      |      |      |      |      |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * |           |      |      |      |      |      |      |           |      |      |      |      |      |      | RShift    |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *      |      |      |      |      |      |                                       |      |      |      |      |      |
- *      `----------------------------------'                                       `----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         |      |      |           |      |      |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |      |           |      |      |      |
- *                                  |      |      |------|           |------|      |      |
- *                                  |      |      |      |           |      |      |      |
- *                                  `--------------------'           `--------------------'
- */
-[SPEC] = KEYMAP(
-// left hand
- KC_TRNS ,KC_ESC  ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
-                                             ,KC_TRNS ,KC_TRNS
-                                                      ,KC_TRNS
-                                     ,KC_TRNS,KC_TRNS ,KC_TRNS
-                                                                     // right hand
-                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS
-                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                                              ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT
-                                                                                       ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-
-                                                                     ,KC_TRNS ,KC_TRNS
-                                                                     ,KC_TRNS
-                                                                     ,KC_TRNS ,KC_TRNS ,KC_TRNS
-    )
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-     // the faux shift keys are implemented as macro taps
-     [LCaps] = ACTION_MACRO_TAP(LCaps)
-    ,[LSymb] = ACTION_MACRO_TAP(LSymb)
-    ,[LMdia] = ACTION_MACRO_TAP(LMdia)
-    ,[LSpec] = ACTION_MACRO_TAP(LSpec)
-    ,[RCaps] = ACTION_MACRO_TAP(RCaps)
-    ,[RSymb] = ACTION_MACRO_TAP(RSymb)
-    ,[RMdia] = ACTION_MACRO_TAP(RMdia)
-    ,[RSpec] = ACTION_MACRO_TAP(RSpec)
-};
-
-uint16_t caps_shift = 0;
-uint16_t symb_shift = 0;
-uint16_t mdia_shift = 0;
-
-bool symb_lock = false;
-bool mdia_lock = false;
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    switch(id) {
-        // There are two shift keys for each layer so we increment a layer_shift var when one
-        // is pressed and decrement when one is released. If both are pressed at the same time
-        // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
-        // only because sometimes rapid pressing led to irregular events; this way the states
-        // are self healing during use.
-
-        case LCaps: // both caps-shift keys trigger Left Shift
-        case RCaps: // so they don't interfere with the magic combo
-        if (record->event.pressed && !record->tap.count) {
-            if(++caps_shift > 2) caps_shift = 2;
-            if(caps_shift == 2)  {
-                register_code(KC_CAPS);
-                unregister_code(KC_CAPS);
-            } else if(caps_shift == 1) {
-                register_code(KC_LSFT);
-            }
-        } else {
-            if(--caps_shift < 0) caps_shift = 0;
-            if(caps_shift == 0) unregister_code(KC_LSFT);
-        }
-        break;
-
-        case LSymb:
-        if (record->event.pressed) {
-            if(++symb_shift > 2) symb_shift = 2;
-            if(symb_shift == 2)  {
-                symb_lock = !symb_lock;
-            } else if(symb_shift == 1) {
-                layer_on(SYMB);
-            }
-        } else {
-            if(--symb_shift < 0) symb_shift = 0;
-            if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB);
-        }
-        break;
-
-        case LMdia:
-        if (record->event.pressed) {
-            if (record->tap.count && (!mdia_shift) && (!mdia_lock)) {
-                register_code(KC_TAB);
-            } else {
-                if(++mdia_shift > 2) mdia_shift = 2;
-                if(mdia_shift == 2)  {
-                    mdia_lock = !mdia_lock;
-                } else if(mdia_shift == 1) {
-                    layer_on(MDIA);
-                }
-            }
-        } else {
-            if(record->tap.count && (!mdia_shift) && (!mdia_lock)) {
-                unregister_code(KC_TAB);
-            } else {
-                if(--mdia_shift < 0) mdia_shift = 0;
-                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
-            }
-        }
-        break;
-
-        case LSpec:
-        if (record->event.pressed) {
-            if (record->tap.count && !record->tap.interrupted) {
-                register_code(KC_GRV);
-            } else {
-                layer_on(SPEC);
-            }
-        } else {
-            if(record->tap.count && !record->tap.interrupted) {
-                unregister_code(KC_GRV);
-            } else {
-                layer_off(SPEC);
-            }
-        }
-        break;
-
-        case RSymb:
-        if (record->event.pressed) {
-            if (record->tap.count && (!symb_shift) && (!symb_lock)) {
-                register_code(KC_QUOT);
-            } else {
-                if(++symb_shift > 2) symb_shift = 2;
-                if(symb_shift == 2)  {
-                    symb_lock = !symb_lock;
-                } else if(symb_shift == 1) {
-                    layer_on(SYMB);
-                }
-            }
-        } else {
-            if(record->tap.count && symb_shift == 0) {
-                unregister_code(KC_QUOT);
-            } else {
-                if(--symb_shift < 0) symb_shift = 0;
-                if((!symb_shift) && (!symb_lock)) layer_off(SYMB);
-            }
-        }
-        break;
-
-        case RMdia:
-        if (record->event.pressed) {
-            if (record->tap.count && (!mdia_shift) && (!mdia_lock)) {
-                register_code(KC_BSLS);
-            } else {
-                if(++mdia_shift > 2) mdia_shift = 2;
-                if(mdia_shift == 2)  {
-                    mdia_lock = !mdia_lock;
-                } else if(mdia_shift == 1) {
-                    layer_on(MDIA);
-                }
-            }
-        } else {
-            if(record->tap.count && (!mdia_shift) && (!mdia_lock)) {
-                unregister_code(KC_BSLS);
-            } else {
-                if(--mdia_shift < 0) mdia_shift = 0;
-                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
-            }
-        }
-        break;
-
-        case RSpec:
-        if (record->event.pressed) {
-            if (record->tap.count && !record->tap.interrupted) {
-                register_code(KC_EQL);
-            } else {
-                layer_on(SPEC);
-            }
-        } else {
-            if(record->tap.count && !record->tap.interrupted) {
-                unregister_code(KC_EQL);
-            } else {
-                layer_off(SPEC);
-            }
-        }
-        break;
-
-        // mouse diagonals
-
-        case MUL: // mouse up left
-        if (record->event.pressed) {
-            mousekey_on(KC_MS_UP);
-            mousekey_on(KC_MS_LEFT);
-            mousekey_send();
-        } else {
-            mousekey_off(KC_MS_UP);
-            mousekey_off(KC_MS_LEFT);
-            mousekey_send();
-        }
-        break;
-
-        case MUR: // mouse up right
-        if (record->event.pressed) {
-            mousekey_on(KC_MS_UP);
-            mousekey_on(KC_MS_RIGHT);
-            mousekey_send();
-        } else {
-            mousekey_off(KC_MS_UP);
-            mousekey_off(KC_MS_RIGHT);
-            mousekey_send();
-        }
-        break;
-
-        case MDL: // mouse down left
-        if (record->event.pressed) {
-            mousekey_on(KC_MS_DOWN);
-            mousekey_on(KC_MS_LEFT);
-            mousekey_send();
-        } else {
-            mousekey_off(KC_MS_DOWN);
-            mousekey_off(KC_MS_LEFT);
-            mousekey_send();
-        }
-        break;
-
-        case MDR: // mouse down right
-        if (record->event.pressed) {
-            mousekey_on(KC_MS_DOWN);
-            mousekey_on(KC_MS_RIGHT);
-            mousekey_send();
-        } else {
-            mousekey_off(KC_MS_DOWN);
-            mousekey_off(KC_MS_RIGHT);
-            mousekey_send();
-        }
-        break;
-
-        default:
-            // none
-            break;
-    }
-    
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-    // shift or caps lock turns on red light
-    if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
-        ergodox_right_led_1_on();
-    } else {
-        ergodox_right_led_1_off();
-    }
-
-    // Symbol layer turns on green light
-    if(layer_state & (1UL<<SYMB)) {
-        ergodox_right_led_2_on();
-    } else {
-        ergodox_right_led_2_off();
-    }
-
-    // Media layer turns on blue light
-    if(layer_state & (1UL<<MDIA)) {
-        ergodox_right_led_3_on();
-    } else {
-        ergodox_right_led_3_off();
-    }
-};
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png
deleted file mode 100644 (file)
index 9c561a1..0000000
Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt
deleted file mode 100644 (file)
index 25731ea..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-[{x:3.5},"#\n3",{x:10.5},"*\n8"],
-[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
-[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"],
-[{y:-0.375,x:3.5,c:"#cccccc"},"E",{x:10.5},"I"],
-[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
-[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#cccccc"},"D",{x:10.5},"K"],
-[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
-[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
-[{y:-0.625,x:6.5,c:"#54d6de",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
-[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
-[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
-[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
-[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
-[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"],
-[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"],
-[{x:2},"Page\n\n\n\n\n\nDown"],
-[{r:-30,rx:13,y:-1,x:-3},"Left","Right"],
-[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"],
-[{x:-3},"Down"]
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png
deleted file mode 100644 (file)
index 99e5ed8..0000000
Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt
deleted file mode 100644 (file)
index 4eccc9f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"],
-[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"],
-[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
-[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
-[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
-[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
-[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
-[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
-[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""],
-[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"],
-[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"],
-[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
-[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
-[{x:2},"Home\n\n\nBrowser"],
-[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
-[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
-[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"]
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png
deleted file mode 100644 (file)
index 6eecf44..0000000
Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt
deleted file mode 100644 (file)
index a08827c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-[{x:3.5,a:7},"",{x:10.5},""],
-[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
-[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
-[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
-[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
-[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
-[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
-[{y:-0.375,x:3.5},"",{x:10.5},""],
-[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
-[{y:-0.875,x:5.5},"",{x:6.5},""],
-[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
-[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""],
-[{y:-0.75,x:3.5},"",{x:10.5},""],
-[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
-[{y:-0.875,x:5.5},"",{x:6.5},""],
-[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"],
-[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""],
-[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
-[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""],
-[{h:2},"",{h:2},"",""],
-[{x:2},""],
-[{r:-30,rx:13,y:-1,x:-3},"",""],
-[{x:-3},"",{h:2},"",{h:2},""],
-[{x:-3},""]
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
deleted file mode 100644 (file)
index e4de64a..0000000
Binary files a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
deleted file mode 100644 (file)
index e199f5c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
-[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
-[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
-[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
-[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"],
-[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
-[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
-[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
-[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
-[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
-[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
-[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"],
-[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"],
-[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"],
-[{h:2},"Space",{h:2},"Enter","Up"],
-[{x:2},"Down"],
-[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
-[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
-[{x:-3},"Page\n\n\n\n\n\nDown"]
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/readme.md b/keyboards/ergodox_ez/keymaps/ordinary/readme.md
deleted file mode 100644 (file)
index 6465cd7..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-# The Ordinary Layout, a familiar and powerful layout #
-
-The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
-
-The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards.
-
-Nicholas Keene
-ordinarylayout@nicholaskeene.com
-no rights reserved, use for any purposes, credit me if you are a nice person
-
-## The Base Layout ##
-
-* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh
-* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key
-* Several dark blue keys double for entry of characters which would typically be in those locations
-* The turquoise keys are text navigation and manipulation
-* The red keys is Escape and it is always found in that location no matter what
-
-![Ordinary base layout](ordinary-base.png)
-
-This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer.
-
-Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence.
-
-The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
-
-The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
-
-## The Symbols Layer ##
-
-* The light green keys are the eponymous symbols
-* The bright green keys are F-Keys
-* The dark green keys constitute a number pad
-* The turquoise keys are the *reverse* of the turquoise keys on the base layer
-
-![Ordinary symbol layout](ordinary-symbol.png)
-
-The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout.
-
-The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements:
-
-* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers.
-* The slash, backslash, and pipe characters are grouped together as a memory aid.
-* The & and | symbols are juxtaposed as a memory aid
-
-The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons.
-
-Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
-
-## The Media Layer ##
-
-* The dark orange keys on the left move the mouse cursor
-* The dark orange keys on the right move the text cursor
-* The light orange keys are for scrolling and paging
-* The bright green keys are more F-keys
-* The dark yellow keys signal Web and Audio applications
-* The light yellow keys signal the operating system
-* The dark gray keys do nothing in case you bump them by accident
-
-![Ordinary media layout](ordinary-media.png)
-
-This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents.
-
-Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
-
-Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much.
-
-## Switching Between Layers ##
-
-In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active.
-
-Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way.
-
-Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols.
-
-## Special Sequences ##
-
-![Ordinary special layout](ordinary-special.png)
-
-### Escape ###
-
-The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
-
-The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
-
-### Backspace ###
-
-At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
-
-### RShift ###
-
-The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard.
-
-****
-
-The Ordinary Layout for the Ergodox EZ keyboard, v4
-
-Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
-
-No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
-
-Details: readme.md
-         https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
diff --git a/keyboards/ergodox_ez/keymaps/osx_de/keymap.c b/keyboards/ergodox_ez/keymaps/osx_de/keymap.c
deleted file mode 100644 (file)
index 554813d..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_german_osx.h"
-
-#define BASE 0
-#define SYMB 1
-#define MDIA 2
-#define SMLY 3
-#define NUMB 4
-#define EGOS 5
-
-#define M_CTRL_CMDV 0
-#define M_CTRL_CMDC 1
-#define M_MEH_SH_ACUT 2
-#define M_LGUI_SHFT 3
-#define M_CTL_SFT_HASH 4
-#define M_DE_OSX_CIRC_CTRLCMD 5
-#define M_DE_OSX_PLUS_CTRLALT 6
-#define SM_SMILE 7
-#define SM_SMIRK 8
-#define SM_CRY 9
-#define SM_SAD 10
-#define SM_HEART 11
-#define SM_LAUGH 12
-#define SM_KISS 13
-#define SM_FROWN 14
-#define M_TOGGLE_5 15
-
-//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[BASE]=KEYMAP(
-//left half
-    KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH), 
-    KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, 
-    KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, 
-    KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, 
-                  LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN, 
-                                              M(M_MEH_SH_ACUT), TG(MDIA), 
-                                                     KC_HOME, 
-                                       KC_BSPC, KC_DEL, LT(SMLY,KC_END), 
-    //right half
-    M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, 
-    KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, 
-           DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), 
-    KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, 
-                         KC_LEFT, KC_RIGHT, LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), 
-    TG(NUMB), ALL_T(DE_OSX_ACUT), 
-    KC_PGUP, 
-    KC_PGDN, KC_ENT, KC_SPC),
-[SYMB]=KEYMAP(
-//left half
-    KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 
-    KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, 
-    KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, 
-    KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_DEL, KC_TRNS, 
-    //right half
-    M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
-    KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, 
-           DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH, 
-    KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4), 
-                         DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, 
-    KC_F13, KC_F12, 
-    KC_F14, 
-    KC_F15, KC_TRNS, KC_TRNS),
-[MDIA]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, 
-    KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-           KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_VOLD, KC_TRNS, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, 
-                         KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_WBAK),
-[SMLY]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, 
-           M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-[NUMB]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
-    KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, 
-           KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS, 
-    KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, 
-                         KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-[EGOS]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_F1, KC_F2, 
-                                                     KC_F3, 
-                                       KC_SPC, KC_LCTL, KC_F4, 
-    //right half
-    M(M_TOGGLE_5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-static uint16_t start;
-switch(id) {
-case M_TOGGLE_5:
-//Macro: M_TOGGLE_5//-----------------------
- if (record->event.pressed){
-           layer_state ^= (1<<5);
-           layer_state &= (1<<5);
-        }
-
-break;
-case M_CTRL_CMDC:
-//Macro: M_CTRL_CMDC//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(D(LCTRL),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),END);
-                       } else {
-                               return MACRO(U(LCTRL),D(LGUI),T(C),U(LGUI),END);
-                       }
-               }
-
-break;
-case M_DE_OSX_PLUS_CTRLALT:
-//Macro: M_DE_OSX_PLUS_CTRLALT//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(D(LCTRL),D(LALT),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LALT),END);
-                       } else {
-                               return MACRO(U(LCTRL),U(LALT),T(RBRC),END);
-                       }
-               }
-
-break;
-case SM_KISS:
-//Macro: SM_KISS//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(RBRC),U(LSFT),END);
-               }
-
-break;
-case SM_FROWN:
-//Macro: SM_FROWN//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LALT),T(8),U(LALT),END);
-               }
-
-break;
-case SM_CRY:
-//Macro: SM_CRY//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
-               }
-
-break;
-case SM_SMILE:
-//Macro: SM_SMILE//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
-               }
-
-break;
-case SM_SMIRK:
-//Macro: SM_SMIRK//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(COMM),U(LSFT),T(SLSH),D(LSFT),T(9),U(LSFT),END);
-               }
-
-break;
-case M_LGUI_SHFT:
-//Macro: M_LGUI_SHFT//-----------------------
-if (record->event.pressed){
-                       return MACRO(D(LGUI),D(LSFT),END);
-               }else{
-                       return MACRO(U(LGUI),U(LSFT),END);
-               }
-
-break;
-case SM_HEART:
-//Macro: SM_HEART//-----------------------
-if (record->event.pressed) {
-                       return MACRO(T(GRV),T(3),END);
-               }
-
-break;
-case SM_LAUGH:
-//Macro: SM_LAUGH//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(D),U(LSFT),END);
-               }
-
-break;
-case M_CTL_SFT_HASH:
-//Macro: M_CTL_SFT_HASH//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(D(LCTRL),D(LSFT),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LSFT),END);
-                       } else {
-                               return MACRO(U(LCTRL),U(LSFT),T(BSLS),END);
-                       }
-               }
-
-break;
-case SM_SAD:
-//Macro: SM_SAD//-----------------------
-if (record->event.pressed) {
-                       return MACRO(D(LSFT),T(DOT),U(LSFT),T(SLSH),D(LSFT),T(8),U(LSFT),END);
-               }
-
-break;
-case M_DE_OSX_CIRC_CTRLCMD:
-//Macro: M_DE_OSX_CIRC_CTRLCMD//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(D(LCTRL),D(LGUI),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LGUI),END);
-                       } else {
-                               return MACRO(U(LCTRL),U(LGUI),T(NUBS),END);
-                       }
-               }
-
-break;
-case M_CTRL_CMDV:
-//Macro: M_CTRL_CMDV//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(D(LCTRL),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),END);
-                       } else {
-                               return MACRO(U(LCTRL),D(LGUI),T(V),U(LGUI),END);
-                       }
-               }
-
-break;
-case M_MEH_SH_ACUT:
-//Macro: M_MEH_SH_ACUT//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(D(LCTRL),D(LSFT),D(LALT),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
-                       } else {
-                               return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END);
-                       }
-               }
-
-break;
-}
-return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-uint8_t layer = biton32(layer_state);
-
-ergodox_board_led_off();
-ergodox_right_led_1_off();
-ergodox_right_led_2_off();
-ergodox_right_led_3_off();
-switch (layer) {
-
-    case SYMB:
-        ergodox_right_led_1_on();
-        
-        
-        break;
-    case MDIA:
-        
-        ergodox_right_led_2_on();
-        
-        break;
-    case SMLY:
-        
-        
-        ergodox_right_led_3_on();
-        break;
-    case NUMB:
-        ergodox_right_led_1_on();
-        
-        ergodox_right_led_3_on();
-        break;
-    case EGOS:
-        ergodox_right_led_1_on();
-        ergodox_right_led_2_on();
-        ergodox_right_led_3_on();
-        break;
-default:
-// none
-break;
-}
-
-};
-
diff --git a/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png b/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png
deleted file mode 100644 (file)
index d442a99..0000000
Binary files a/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/osx_de/readme.md b/keyboards/ergodox_ez/keymaps/osx_de/readme.md
deleted file mode 100644 (file)
index 5011a9d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#Ergodox EZ für OSX 
-
-Dies ist nur ein kleiner Tweak der bestehenden firmware für das ErgoDox-EZ-Keyboard. Leider passte das layout nicht wirklich für OSX, deswegen habe ich einige Anpassungen gemacht. Dabei wurden folgende features umgesetzt:
-
-- Die Umlaute sollten an einigermassen sinnvollen Plätzen liegen
-- der Umstieg sollte dadurch erleichtert werden, dass einige Tasten an ihren "normalen" Platz zurückgewandert sind. Z.B. ESC, Tab,...
-- die Leertaste ist jetzt auf der rechten seite, neben Enter. Dafür hat der linke Daumen nun Backspace und Delete. 
-- die CMD- und Alt-Tasten sind in der Mitte einfach erreichbar.
-- es gibt eine neue Layer die für Spiele genutzt werden kann (egosooter wie Counter Strike). Dort liegen die wichtigsten Tasten auf der linken Seite, im Daumenblock z.B. space und ctrl sowie die F-Tasten 1-4. Diese Layer ist über die Symbollayer erreichbar.
-- Die Symbollayer wurde dahingehend angepasst, dass die klammern, etc nun auf beiden hälften der Tastatur zu finden sind
-- der Zehnerblock wurde in eine eigene Layer umgezogen
-- die Meh und Hyper-Tasten wurden in die Daumenblöcke umgezogen
-
-# Erstellt Mit Dem ErgodoxLayoutGenerator
-
-Der ErgodoxLayoutGenerator ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein.
-Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar).
-
-
-
-------------------------------   
-
-# ErgoDox EZ for OSX
-
-This is  only a little tweak of the existing default layout for the ErgoDox keyboard. Unfortunately the default layout did not work well with german OSX, so I created som adjustments. These were the features added and changed:
-
-- the umlaut-keys should be at their useful place more or less
-- the switching should be made more easy so some other keys (like tab, esc) were moved to their default place
-- the space key can now be used with both hands
-- the CMD- and ALT-Keys moved to the middle, can be reached more easily.
-- there is a new layer for using the cursor-keys, placed like on the default keyboard. This makes them useable for games also
-- the symbollayer now has only symbols
-- the number block was moved to a special layer
-- meh and hyper went down to the thumb block
-
-# Created Using the ErgodoxLayoutGenerator
-
-The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded  [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed.
-
-The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/).
-
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c b/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c
deleted file mode 100644 (file)
index 687a5cb..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#include "keymap_neo2.h"
-#include "keymap_uk.h"
-#include "keymap_colemak.h"
-#include "keymap_french_osx.h"
-#include "keymap_nordic.h"
-#include "keymap_dvorak.h"
-#include "keymap_german.h"
-#include "keymap_norwegian.h"
-#include "keymap_fr_ch.h"
-#include "keymap_german_osx.h"
-#include "keymap_spanish.h"
-#include "keymap_bepo.h"
-
-#define BASE 0
-#define SYMB 1
-#define MDIA 2
-#define QWERTZ 3
-#define NUMB 4
-
-#define UNUSED 0
-
-//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[BASE]=KEYMAP(
-//left half
-    KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCTL, 
-    KC_TAB, KC_K, KC_DOT, KC_O, KC_COMM, KC_Z, KC_LGUI, 
-    TG(QWERTZ), KC_H, KC_A, KC_E, KC_I, KC_U, 
-    KC_LSFT, CTL_T(KC_X), KC_Q, DE_AE, DE_UE, DE_OE, KC_LALT, 
-                  LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, 
-                                              TG(MDIA), MEH_T(LSFT(DE_ACUT)), 
-                                                     KC_HOME, 
-                                       KC_BSPC, KC_DEL, KC_END, 
-    //right half
-    KC_RCTL, KC_6, KC_7, KC_8, KC_9, KC_0, DE_OSX_MINS, 
-    KC_RGUI, KC_V, KC_G, KC_C, KC_L, KC_MINS, KC_Y, 
-           KC_D, KC_T, KC_R, KC_N, KC_S, LT(MDIA,KC_F), 
-    KC_RALT, KC_B, KC_P, KC_W, KC_M, CTL_T(KC_J), KC_RSFT, 
-                         KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS), 
-    ALL_T(DE_ACUT), TG(NUMB), 
-    KC_PGUP, 
-    KC_PGDN, KC_ENT, KC_SPC),
-[SYMB]=KEYMAP(
-//left half
-    KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 
-    KC_TRNS, KC_GRV, LSFT(KC_GRV), DE_EXLM, DE_QST, KC_TRNS, KC_TRNS, 
-    KC_TRNS, DE_HASH, DE_DLR, LALT(LSFT(KC_7)), DE_SLSH, KC_DOT, 
-    KC_TRNS, KC_TRNS, DE_LESS, DE_PERC, LALT(KC_7), LALT(KC_N), KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_DEL, KC_TRNS, 
-    //right half
-    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
-    KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12, 
-           DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS, 
-    KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST, 
-                         KC_TRNS, KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-[MDIA]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, 
-    KC_TRNS, KC_WH_L, KC_WH_U, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_MUTE, KC_MPRV, KC_MNXT, KC_UP, KC_TRNS, 
-                         KC_VOLU, KC_VOLD, KC_LEFT, KC_DOWN, KC_RIGHT, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_WBAK),
-[QWERTZ]=KEYMAP(
-//left half
-    KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_V), 
-    KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI, 
-    KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, 
-    KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LALT, 
-                  LT(SYMB,KC_GRV), DE_LESS, LALT(KC_LSFT), KC_LEFT, KC_RGHT, 
-                                              KC_TRNS, MEH_T(LSFT(DE_ACUT)), 
-                                                     KC_HOME, 
-                                       KC_BSPC, KC_DEL, KC_END, 
-    //right half
-    LGUI(KC_C), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 
-    KC_RGUI, KC_Y, KC_U, KC_I, KC_O, KC_P, DE_UE, 
-           KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(MDIA,DE_AE), 
-    KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT, 
-                         KC_UP, KC_DOWN, LGUI(KC_LSFT), KC_RBRC, LT(SYMB,KC_BSLS), 
-    ALL_T(DE_ACUT), KC_TRNS, 
-    KC_PGUP, 
-    KC_PGDN, KC_ENT, KC_SPC),
-[NUMB]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
-    KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, 
-           KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, KC_TRNS, 
-    KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, 
-                         KC_0, KC_DOT, KC_0, KC_EQL, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-switch(id) {
-case UNUSED:
-//Macro: UNUSED//-----------------------
-
-
-
-
-
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        
-
-
-break;
-}
-return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-uint8_t layer = biton32(layer_state);
-
-ergodox_board_led_off();
-ergodox_right_led_1_off();
-ergodox_right_led_2_off();
-ergodox_right_led_3_off();
-switch (layer) {
-
-default:
-// none
-break;
-}
-
-};
-
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png b/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png
deleted file mode 100644 (file)
index 193aa33..0000000
Binary files a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c b/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c
deleted file mode 100644 (file)
index 21d6958..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_neo2.h"
-#include "keymap_uk.h"
-#include "keymap_colemak.h"
-#include "keymap_nordic.h"
-#include "keymap_dvorak.h"
-#include "keymap_german.h"
-#include "keymap_norwegian.h"
-#include "keymap_fr_ch.h"
-#include "keymap_german_osx.h"
-#include "keymap_spanish.h"
-#include "keymap_bepo.h"
-
-
-/**
-* This layout was generated using the ErgodoxLayoutGenerator (ELG). You can download it from https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases
-* documentation about it can be found here https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/
-* Thanks to the team of Erez Zukerman for building the great Ergodox-EZ!
-*
-* use at own risk!
-**/
-
-#define BASE 0
-#define SYMB 1
-#define MDIA 2
-#define SMLY 3
-#define NUMB 4
-#define EGOS 5
-
-#define SMLY_TOG_QUOT 0
-
-#define M_TOGGLE_5 1
-
-#define TGH_NUM 2
-
-#define M_DE_OSX_PLUS_CTRLALT 3
-
-#define SM_KISS 4
-
-#define SM_FROWN 5
-
-#define SM_CRY 6
-
-#define SM_SMILE 7
-
-#define SM_SMIRK 8
-
-#define M_LGUI_SHFT 9
-
-#define SM_HEART 10
-
-#define TOG_HLD_MDIA 11
-
-#define SM_LAUGH 12
-
-#define SM_SAD 13
-
-#define M_DE_OSX_CIRC_CTRLCMD 14
-
-#define M_MEH_SH_ACUT 15
-
-
-//Layout keymap.c generated with ErgodoxLayoutGenerator V1.0BETA1
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/**
-* Layer: BASE
-* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
-* | ESC                | 1                  | 2                  | 3                  | 4                  | 5                  | Hold or toggle     |                       | Hold or toggle     | 6                  | 7                  | 8                  | 9                  | 0                  | ß                  |                      
-* |                    |                    |                    |                    |                    |                    | Layer NUMB         |                       | Layer MDIA         |                    |                    |                    |                    |                    |                    |                      
-* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
-* | TAB                | Q                  | W                  | E                  | R                  | T                  | Cmd                |                       | Cmd                | Z                  | U                  | I                  | O                  | P                  | Ü                  |                      
-* |                    |                    |                    |                    |                    |                    |                    |                       |                    |                    |                    |                    |                    |                    |                    |                      
-* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/\-------------------\                        \-------------------\/-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
-* | Alt                | A                  | S                  | D                  | F                  | G                  |                                                                 | H                  | J                  | K                  | L                  | Ö                  | Ä                  |                      
-* |                    |                    |                    |                    |                    |                    |                                                                 |                    |                    |                    |                    |                    | ALT                |                      
-* /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                        /-------------------//-------------------//-------------------//-------------------//-------------------//-------------------//-------------------/                       
-* | Shift              | Y                  | X                  | C                  | V                  | B                  | Alt                |                       | Alt                | N                  | M                  | ,                  | .                  | -                  | Shift              |                      
-* |                    | Ctrl               |                    |                    |                    |                    |                    |                       |                    |                    |                    |                    |                    | Ctrl               |                    |                      
-* \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\                        \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\\-------------------\                       
-*                                                                                                                                                                                                                                                                                                                                                      
-*                                                                                                                                                                                                                                                                                                                                                      
-*                                           /-------------------//-------------------//-------------------//-------------------//-------------------/                                                                                       /-------------------//-------------------//-------------------//-------------------//-------------------/  
-*                                           | <                  | LongPress / Type   | LongPress / Type   | Shift+Ctrl         | Type               |                                                                                      | #                  | ACUT               | CMD+Shift          | ALT+Shift          | +                  | 
-*                                           | SYMB               | DE_OSX_CIRC_CTRLCMD| DE_OSX_PLUS_CTRAlt |                    | Toggle SMLY        |                                                                                      | Meh                | Hyper              |                    |                    | SYMB               | 
-*                                           \-------------------\\-------------------\\-------------------\\-------------------\/-------------------//-------------------/   /-------------------//-------------------/                     \-------------------\\-------------------\\-------------------\\-------------------\\-------------------\  
-*                                                                                                                               | HOME               | END                |  | LEFT               | RIGHT              |                                                                                                                               
-*                                                                                                                               |                    |                    |  |                    |                    |                                                                                                                               
-*                                                                                                                               \-------------------\/-------------------/   /-------------------/\-------------------\                                                                                                                                
-*                                                                                                                                                    | PGUP               |  | UP                 |                                                                                                                                                    
-*                                                                                                                                                    |                    |  |                    |                                                                                                                                                    
-*                                                                                                          /-------------------//-------------------//-------------------/   /-------------------//-------------------//-------------------/                                                                                                           
-*                                                                                                          | BSPC               | DEL                | PGDN               |  | DOWN               | ENT                | SPC                |                                                                                                          
-*                                                                                                          |                    |                    |                    |  |                    |                    |                    |                                                                                                          
-*                                                                                                          \-------------------\\-------------------\\-------------------\   \-------------------\\-------------------\\-------------------\                                                                                                           
-*                                                                                                                                                                                                                                                                                                                                                      
-* 
-**/
-[BASE]=KEYMAP(
-//left half
-    KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(TGH_NUM), 
-    KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI, 
-    KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G, 
-    KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT, 
-                  LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), LSFT(KC_LCTRL), M(SMLY_TOG_QUOT), 
-                                              KC_HOME, KC_END, 
-                                                     KC_PGUP, 
-                                       KC_BSPC, KC_DEL, KC_PGDN, 
-    //right half
-    M(TOG_HLD_MDIA), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS, 
-    KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE, 
-           DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE), 
-    KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM, DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT, 
-                         MEH_T(DE_OSX_HASH), ALL_T(DE_OSX_ACUT), LGUI(KC_LSFT), LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS), 
-    KC_LEFT, KC_RIGHT, 
-    KC_UP, 
-    KC_DOWN, KC_ENT, KC_SPC),
-/**
-* Layer: SYMB
-* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
-* | APPLICATION| F1         | F2         | F3         | F4         | F5         | F5         |               | F6         | F6         | F7         | F8         | F9         | F10        | F11        |              
-* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
-* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
-* |            | <          | >          | !          | ?          |            |            |               |            | \          | [          | ]          | <          | >          | !          |              
-* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
-* /-----------//-----------//-----------//-----------//-----------//-----------/\-----------\                \-----------\/-----------//-----------//-----------//-----------//-----------//-----------/               
-* |            | #          | $          | \          | /          | .          |                                         | /          | (          | )          | {          | }          | #          |              
-* |            |            |            |            |            |            |                                         |            |            |            |            |            |            |              
-* /-----------//-----------//-----------//-----------//-----------//-----------//-----------/                /-----------//-----------//-----------//-----------//-----------//-----------//-----------/               
-* |            |            | <          | %          | |          | ~          |            |               |            | |          | ~          |            |            |            |            |              
-* |            |            |            |            |            |            |            |               |            |            |            |            |            |            |            |              
-* \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\                \-----------\\-----------\\-----------\\-----------\\-----------\\-----------\\-----------\               
-*                                                                                                                                                                                                                      
-*                                                                                                                                                                                                                      
-*                           /-----------//-----------//-----------//-----------//-----------/                                                       /-----------//-----------//-----------//-----------//-----------/  
-*                           |            |            |            |            |            |                                                      | '          | DQOT       |            | Toggle 5   |            | 
-*                           |            |            |            |            |            |                                                      |            |            |            |            |            | 
-*                           \-----------\\-----------\\-----------\\-----------\/-----------//-----------/   /-----------//-----------/             \-----------\\-----------\\-----------\\-----------\\-----------\  
-*                                                                               |            |            |  | F13        | F12        |                                                                               
-*                                                                               |            |            |  |            |            |                                                                               
-*                                                                               \-----------\/-----------/   /-----------/\-----------\                                                                                
-*                                                                                            |            |  | F14        |                                                                                            
-*                                                                                            |            |  |            |                                                                                            
-*                                                                  /-----------//-----------//-----------/   /-----------//-----------//-----------/                                                                   
-*                                                                  |            | DEL        |            |  | F15        |            |            |                                                                  
-*                                                                  |            |            |            |  |            |            |            |                                                                  
-*                                                                  \-----------\\-----------\\-----------\   \-----------\\-----------\\-----------\                                                                   
-*                                                                                                                                                                                                                      
-* 
-**/
-[SYMB]=KEYMAP(
-//left half
-    KC_APPLICATION, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F5, 
-    KC_TRNS, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, DE_OSX_QST, KC_TRNS, KC_TRNS, 
-    KC_TRNS, DE_OSX_HASH, DE_OSX_DLR, DE_OSX_BSLS, DE_OSX_SLSH, KC_DOT, 
-    KC_TRNS, KC_TRNS, DE_OSX_LESS, DE_OSX_PERC, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_DEL, KC_TRNS, 
-    //right half
-    KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
-    KC_TRNS, DE_OSX_BSLS, DE_OSX_LBRC, DE_OSX_RBRC, DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM, 
-           DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, DE_OSX_LCBR, DE_OSX_RCBR, DE_OSX_HASH, 
-    KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                         DE_OSX_QUOT, DE_OSX_DQOT, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, 
-    KC_F13, KC_F12, 
-    KC_F14, 
-    KC_F15, KC_TRNS, KC_TRNS),
-/**
-* Layer: MDIA
-* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
-* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
-* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
-* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
-* |      |      | BTN1 | U    | BTN2 | U    |      |         |      |      |      |      |      |      |      |        
-* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
-* /-----//-----//-----//-----//-----//-----/\-----\          \-----\/-----//-----//-----//-----//-----//-----/         
-* |      |      | L    | D    | R    | D    |                       |      |      |      |      |      |      |        
-* |      |      |      |      |      |      |                       |      |      |      |      |      |      |        
-* /-----//-----//-----//-----//-----//-----//-----/          /-----//-----//-----//-----//-----//-----//-----/         
-* |      |      | L    | D    | R    | BTN3 |      |         |      |      |      |      |      | UP   |      |        
-* |      |      |      |      |      |      |      |         |      |      |      |      |      |      |      |        
-* \-----\\-----\\-----\\-----\\-----\\-----\\-----\          \-----\\-----\\-----\\-----\\-----\\-----\\-----\         
-*                                                                                                                      
-*                                                                                                                      
-*               /-----//-----//-----//-----//-----/                               /-----//-----//-----//-----//-----/  
-*               |      |      |      |      |      |                              |      |      | LEFT | DOWN | RIGHT| 
-*               |      |      |      |      |      |                              |      |      |      |      |      | 
-*               \-----\\-----\\-----\\-----\/-----//-----/   /-----//-----/       \-----\\-----\\-----\\-----\\-----\  
-*                                           |      |      |  | MPRV | MNXT |                                           
-*                                           |      |      |  |      |      |                                           
-*                                           \-----\/-----/   /-----/\-----\                                            
-*                                                  |      |  | VOLU |                                                  
-*                                                  |      |  |      |                                                  
-*                                    /-----//-----//-----/   /-----//-----//-----/                                     
-*                                    |      |      |      |  | VOLD | MUTE | MPLY |                                    
-*                                    |      |      |      |  |      |      |      |                                    
-*                                    \-----\\-----\\-----\   \-----\\-----\\-----\                                     
-*                                                                                                                      
-* 
-**/
-[MDIA]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, 
-    KC_TRNS, KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, 
-                         KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, 
-    KC_MPRV, KC_MNXT, 
-    KC_VOLU, 
-    KC_VOLD, KC_MUTE, KC_MPLY),
-/**
-* Layer: SMLY
-* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |         |            | Typing  | Typing  | Typing  |         |         |         |         |           
-* |         |         |         |         |         |         |         |            | SM_SMILE| SM_SMIRK| SM_LAUGH|         |         |         |         |           
-* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |         |            |         | Typing  | Typing  | Typing  |         |         |         |           
-* |         |         |         |         |         |         |         |            |         | SM_FROWN| SM_SAD  | SM_CRY  |         |         |         |           
-* /--------//--------//--------//--------//--------//--------/\--------\             \--------\/--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |                                | Typing  | Typing  |         |         |         |         |           
-* |         |         |         |         |         |         |                                | SM_HEART| SM_KISS |         |         |         |         |           
-* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* \--------\\--------\\--------\\--------\\--------\\--------\\--------\             \--------\\--------\\--------\\--------\\--------\\--------\\--------\            
-*                                                                                                                                                                      
-*                                                                                                                                                                      
-*                     /--------//--------//--------//--------//--------/                                           /--------//--------//--------//--------//--------/  
-*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
-*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
-*                     \--------\\--------\\--------\\--------\/--------//--------/   /--------//--------/          \--------\\--------\\--------\\--------\\--------\  
-*                                                             |         |         |  |         |         |                                                             
-*                                                             |         |         |  |         |         |                                                             
-*                                                             \--------\/--------/   /--------/\--------\                                                              
-*                                                                       |         |  |         |                                                                       
-*                                                                       |         |  |         |                                                                       
-*                                                   /--------//--------//--------/   /--------//--------//--------/                                                    
-*                                                   |         |         |         |  |         |         |         |                                                   
-*                                                   |         |         |         |  |         |         |         |                                                   
-*                                                   \--------\\--------\\--------\   \--------\\--------\\--------\                                                    
-*                                                                                                                                                                      
-* 
-**/
-[SMLY]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    M(SM_SMILE), M(SM_SMIRK), M(SM_LAUGH), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, M(SM_FROWN), M(SM_SAD), M(SM_CRY), KC_TRNS, KC_TRNS, KC_TRNS, 
-           M(SM_HEART), M(SM_KISS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-/**
-* Layer: NUMB
-* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
-* |     |     |     |     |     |     |     |        |     | F6  | F7  | F8  | F9  | F10 | F11 |       
-* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
-* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
-* |     |     |     | UP  |     |     |     |        |     | /   | 7   | 8   | 9   | *   | F12 |       
-* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
-* /----//----//----//----//----//----/\----\         \----\/----//----//----//----//----//----/        
-* |     |     | LEFT| DOWN| RGHT|     |                    | /   | 4   | 5   | 6   | +   | -   |       
-* |     |     |     |     |     |     |                    |     |     |     |     |     |     |       
-* /----//----//----//----//----//----//----/         /----//----//----//----//----//----//----/        
-* |     |     |     |     |     |     |     |        |     | %   | 1   | 2   | 3   |     |     |       
-* |     |     |     |     |     |     |     |        |     |     |     |     |     |     |     |       
-* \----\\----\\----\\----\\----\\----\\----\         \----\\----\\----\\----\\----\\----\\----\        
-*                                                                                                      
-*                                                                                                      
-*             /----//----//----//----//----/                           /----//----//----//----//----/  
-*             |     |     |     |     |     |                          | 0   | .   | ,   | =   |     | 
-*             |     |     |     |     |     |                          |     |     |     |     |     | 
-*             \----\\----\\----\\----\/----//----/   /----//----/      \----\\----\\----\\----\\----\  
-*                                     |     |     |  |     |     |                                     
-*                                     |     |     |  |     |     |                                     
-*                                     \----\/----/   /----/\----\                                      
-*                                           |     |  |     |                                           
-*                                           |     |  |     |                                           
-*                               /----//----//----/   /----//----//----/                                
-*                               |     |     |     |  |     |     |     |                               
-*                               |     |     |     |  |     |     |     |                               
-*                               \----\\----\\----\   \----\\----\\----\                                
-*                                                                                                      
-* 
-**/
-[NUMB]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_TRNS, KC_TRNS, 
-                                                     KC_TRNS, 
-                                       KC_TRNS, KC_TRNS, KC_TRNS, 
-    //right half
-    KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 
-    KC_TRNS, DE_OSX_SLSH, KC_7, KC_8, KC_9, DE_OSX_ASTR, KC_F12, 
-           DE_OSX_SLSH, KC_4, KC_5, KC_6, DE_OSX_PLUS, DE_OSX_MINS, 
-    KC_TRNS, DE_OSX_PERC, KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS, 
-                         KC_0, KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-/**
-* Layer: EGOS
-* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* /--------//--------//--------//--------//--------//--------/\--------\             \--------\/--------//--------//--------//--------//--------//--------/            
-* | Shift   |         |         |         |         |         |                                |         |         |         |         |         |         |           
-* |         |         |         |         |         |         |                                |         |         |         |         |         |         |           
-* /--------//--------//--------//--------//--------//--------//--------/             /--------//--------//--------//--------//--------//--------//--------/            
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* |         |         |         |         |         |         |         |            |         |         |         |         |         |         |         |           
-* \--------\\--------\\--------\\--------\\--------\\--------\\--------\             \--------\\--------\\--------\\--------\\--------\\--------\\--------\            
-*                                                                                                                                                                      
-*                                                                                                                                                                      
-*                     /--------//--------//--------//--------//--------/                                           /--------//--------//--------//--------//--------/  
-*                     | Ctrl    |         |         |         |         |                                          |         |         |         | Toggle 5|         | 
-*                     |         |         |         |         |         |                                          |         |         |         |         |         | 
-*                     \--------\\--------\\--------\\--------\/--------//--------/   /--------//--------/          \--------\\--------\\--------\\--------\\--------\  
-*                                                             | F1      | F2      |  |         |         |                                                             
-*                                                             |         |         |  |         |         |                                                             
-*                                                             \--------\/--------/   /--------/\--------\                                                              
-*                                                                       | F3      |  |         |                                                                       
-*                                                                       |         |  |         |                                                                       
-*                                                   /--------//--------//--------/   /--------//--------//--------/                                                    
-*                                                   | SPC     | Ctrl    | F4      |  |         |         |         |                                                   
-*                                                   |         |         |         |  |         |         |         |                                                   
-*                                                   \--------\\--------\\--------\   \--------\\--------\\--------\                                                    
-*                                                                                                                                                                      
-* 
-**/
-[EGOS]=KEYMAP(
-//left half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                  KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                                              KC_F1, KC_F2, 
-                                                     KC_F3, 
-                                       KC_SPC, KC_LCTL, KC_F4, 
-    //right half
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 
-                         KC_TRNS, KC_TRNS, KC_TRNS, M(M_TOGGLE_5), KC_TRNS, 
-    KC_TRNS, KC_TRNS, 
-    KC_TRNS, 
-    KC_TRNS, KC_TRNS, KC_TRNS),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-static uint16_t start;
-switch(id) {
-case SMLY_TOG_QUOT:
-//Macro: SMLY_TOG_QUOT//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-           layer_state ^= (1<<SMLY);
-           layer_state &= (1<<SMLY);
-                       return MACRO_NONE;              } else {
-           layer_state ^= (1<<SMLY);
-           layer_state &= (1<<SMLY);
-                       if (timer_elapsed(start) >150) {
-                               return MACRO_NONE;
-                       } else {
-                               return MACRO(DOWN(KC_LSFT),TYPE(DE_OSX_HASH),UP(KC_LSFT),END);
-                       }
-               }
-
-break;
-case M_TOGGLE_5:
-//Macro: M_TOGGLE_5//-----------------------
- if (record->event.pressed){
-           layer_state ^= (1<<5);
-           layer_state &= (1<<5);
-        }
-
-break;
-case TGH_NUM:
-//Macro: TGH_NUM//-----------------------
-if (record->event.pressed){
-         start = timer_read();
-         layer_state ^=(1<<NUMB);
-         layer_state &=(1<<NUMB);
- } else {
-         if (timer_elapsed(start) > 150) {
-                 layer_state^=(1<<NUMB);
-                 layer_state&=(1<<NUMB);
-         }
- }
-return MACRO_NONE;
-
-break;
-case M_DE_OSX_PLUS_CTRLALT:
-//Macro: M_DE_OSX_PLUS_CTRLALT//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(DOWN(KC_LCTRL),DOWN(KC_LALT),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LALT),END);
-                       } else {
-                               return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(KC_RBRC),END);
-                       }
-               }
-
-break;
-case SM_KISS:
-//Macro: SM_KISS//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_RBRC),UP(KC_LSFT),END);
-               }
-
-break;
-case SM_FROWN:
-//Macro: SM_FROWN//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LALT),TYPE(KC_8),UP(KC_LALT),END);
-               }
-
-break;
-case SM_CRY:
-//Macro: SM_CRY//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
-               }
-
-break;
-case SM_SMILE:
-//Macro: SM_SMILE//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
-               }
-
-break;
-case SM_SMIRK:
-//Macro: SM_SMIRK//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_COMM),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_9),UP(KC_LSFT),END);
-               }
-
-break;
-case M_LGUI_SHFT:
-//Macro: M_LGUI_SHFT//-----------------------
-if (record->event.pressed){
-                       return MACRO(DOWN(KC_LGUI),DOWN(KC_LSFT),END);
-               }else{
-                       return MACRO(UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),UP(KC_LGUI),UP(KC_LSFT),U(LGUI),U(LSFT),END);
-               }
-
-break;
-case SM_HEART:
-//Macro: SM_HEART//-----------------------
-if (record->event.pressed) {
-                       return MACRO(TYPE(KC_GRV),TYPE(KC_3),END);
-               }
-
-break;
-case TOG_HLD_MDIA:
-//Macro: TOG_HLD_MDIA//-----------------------
-if (record->event.pressed){
-         start = timer_read();
-         layer_state ^=(1<<MDIA);
-         layer_state &=(1<<MDIA);
- } else {
-         if (timer_elapsed(start) > 150) {
-                 layer_state^=(1<<MDIA);
-                 layer_state&=(1<<MDIA);
-         }
- }
-return MACRO_NONE;
-
-break;
-case SM_LAUGH:
-//Macro: SM_LAUGH//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_D),UP(KC_LSFT),END);
-               }
-
-break;
-case SM_SAD:
-//Macro: SM_SAD//-----------------------
-if (record->event.pressed) {
-                       return MACRO(DOWN(KC_LSFT),TYPE(KC_DOT),UP(KC_LSFT),TYPE(KC_SLSH),DOWN(KC_LSFT),TYPE(KC_8),UP(KC_LSFT),END);
-               }
-
-break;
-case M_DE_OSX_CIRC_CTRLCMD:
-//Macro: M_DE_OSX_CIRC_CTRLCMD//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(DOWN(KC_LCTRL),DOWN(KC_LGUI),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LGUI),END);
-                       } else {
-                               return MACRO(UP(KC_LCTRL),UP(KC_LGUI),TYPE(KC_NUBS),END);
-                       }
-               }
-
-break;
-case M_MEH_SH_ACUT:
-//Macro: M_MEH_SH_ACUT//-----------------------
-if (record->event.pressed) {
-                       start = timer_read();
-                       return MACRO(DOWN(KC_LCTRL),DOWN(KC_LSFT),DOWN(KC_LALT),END);
-               } else {
-                       if (timer_elapsed(start) >150) {
-                               return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
-                       } else {
-                               return MACRO(UP(KC_LCTRL),UP(KC_LALT),TYPE(DE_OSX_ACUT),UP(KC_LSFT),END);
-                       }
-               }
-
-break;
-}
-return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-uint8_t layer = biton32(layer_state);
-
-ergodox_board_led_off();
-ergodox_right_led_1_off();
-ergodox_right_led_2_off();
-ergodox_right_led_3_off();
-switch (layer) {
-
-    case SYMB:
-        ergodox_right_led_1_on();
-        
-        
-    break;
-    case MDIA:
-        
-        ergodox_right_led_2_on();
-        
-    break;
-    case NUMB:
-        
-        
-        ergodox_right_led_3_on();
-    break;
-    case EGOS:
-        ergodox_right_led_1_on();
-        ergodox_right_led_2_on();
-        ergodox_right_led_3_on();
-    break;
-default:
-// none
-break;
-}
-
-};
-
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png
deleted file mode 100644 (file)
index 031d874..0000000
Binary files a/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md b/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md
deleted file mode 100644 (file)
index e6a1018..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-
-# Ergodox und Ergodox-EZ experimentelles Layout
-
-dieses layout ist experimentell und wird im Lufe der Zeit viele Änderungen und Verbesserungen durchlaufen. Falls diese sich als vorteilhaft erweisen, werden sie evtl. auch in das `osx_de` layout übernommen.
-
-
-
-# Erstellt Mit Dem ErgodoxLayoutGenerator
-
-Der ErgodoxLayoutGenerator (ELG) ist ein kleines Werkzeug, welches die Erstellung und Pflege der eigenen Keymaps erleichtern soll. Es ist in java geschrieben und kann [hier](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases) heruntergeladen werden. Damit das Tool funktioniert sollte das offizielle Oracle JDK in aktueller Version installiert sein.
-Die Dokumentation für den ELG kann man [hier](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/) nachlesen (momentan leider nur in Englisch verfügbar).
----------------------------------------------------------------------------------------------------------------------
-
-# Ergodox and Ergodox-EZ experimental layout
-
-This is an experimental layout which will undergo heavy changes over time. If changes prove to be good, they might also move into the `osx_de` layout.
-
-Created Using the ErgodoxLayoutGenerator
-
-The ErgodoxLayoutGenerator (ELG) is a little tool, which makes the creation and maintenance of keycaps a lot easier. It was written in Java and can be downloaded  [here](https://github.com/sboesebeck/ErgodoxLayoutGenerator/releases). To use the tool, you need to have a current version of Oracles JDK installed.
-
-The documentation of the ELG can be viewed [here](https://boesebeck.name/2016/04/16/ergodoxlayoutgenerator-documentation/).
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c b/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c
deleted file mode 100644 (file)
index de95166..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// French AZERTY version of the default_osx file
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_french_osx.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   -    |   &  |   é  |   "  |   '  |   (  | LEFT |           | RIGHT|   §  |   è  |   !  |   ç  |   à  |   )    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   A  |   Z  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   `    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   Q  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   M  |  LGui  |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |W/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   ,  |; / L2|   :  |=/Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | ù /L1|  <   |AltShf| Left | Right|                                       |  Up  | Down |   ^  |   $  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,---------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        FR_MINS,          FR_AMP,      FR_EACU,       FR_QUOT, FR_APOS, FR_LPRN, KC_LEFT,
-        KC_DELT,          FR_A,        FR_Z,          KC_E,    KC_R,    KC_T,    TG(1),
-        KC_BSPC,          FR_Q,        KC_S,          KC_D,    KC_F,    KC_G,
-        KC_LSFT,          CTL_T(FR_W), KC_X,          KC_C,    KC_V,    KC_B,    ALL_T(KC_NO),
-        LT(SYMB,FR_UGRV), FR_LESS,     LALT(KC_LSFT), KC_LEFT, KC_RGHT,
-            ALT_T(KC_APP), KC_LGUI,
-            KC_HOME,
-            KC_SPC, KC_BSPC, KC_END,
-            
-        // right hand
-        KC_RGHT,      FR_SECT, FR_EGRV, FR_EXLM,           FR_CCED, FR_AGRV,         FR_RPRN,
-        TG(1),        KC_Y,    KC_U,    KC_I,              KC_O,    KC_P,            FR_GRV,
-        KC_H,         KC_J,    KC_K,    KC_L,              FR_M,    KC_LGUI,
-        MEH_T(KC_NO), KC_N,    FR_COMM, LT(MDIA, FR_SCLN), FR_COLN, CTL_T(FR_EQL),   KC_RSFT,
-        KC_UP,        KC_DOWN, KC_LBRC, KC_RBRC,           KC_FN1,
-            KC_LALT, CTL_T(KC_ESC),
-            KC_PGUP,
-            KC_PGDN, KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    , |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,FR_EXLM,FR_AT,  FR_LCBR,FR_RCBR,FR_PIPE,KC_TRNS,
-       KC_TRNS,FR_HASH,FR_DLR, FR_LPRN,FR_RPRN,FR_GRV,
-       KC_TRNS,FR_PERC,FR_CIRC,FR_LBRC,FR_RBRC,FR_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   FR_7,   FR_8,    FR_9,    FR_ASTR, KC_F12,
-                KC_DOWN, FR_4,   FR_5,    FR_6,    FR_PLUS, KC_TRNS,
-       KC_TRNS, FR_AMP,  FR_1,   FR_2,    FR_3,    FR_BSLS, KC_TRNS,
-                         KC_TRNS,FR_COMM, FR_0,    FR_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c b/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c
deleted file mode 100644 (file)
index 1032be5..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-// Netable differences vs. the default firmware for the ErgoDox EZ:
-// 1. The Cmd key is now on the right side, making Cmd+Space easier.
-// 2. The media keys work on OSX (But not on Windows).
-// Wanted to map default layer of my EZ to my existing Kinesis Mapping.
-// Only default layer was remapped all others layers are standard Ergodox EZ
-// Very personal mapping of-course, but who knows a starting point for others.
-
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | CapsL  |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | TAB    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | ESC    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '"   |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |AltShf|Grv/L1|  '"  | Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | LGui | App  |       | Ctrl/Esc | RGui |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       |   =  |        |      |
- *                                 | Backs|Delete|------|       |------|  Enter |Space |
- *                                 | pace |      | End  |       | TAB  |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_CAPSLOCK,    KC_1,           KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_TAB,         KC_Q,           KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
-        KC_ESC,         KC_A,           KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),    KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LALT(KC_LSFT),  LT(SYMB,KC_GRV),KC_QUOT,KC_LEFT,KC_RGHT,
-                                              KC_LGUI,  ALT_T(KC_APP),
-                                                              KC_HOME,
-                                               KC_BSPC,KC_DELT,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(1),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOTE,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             CTL_T(KC_ESC),        KC_LGUI,
-             KC_EQL,
-             KC_TAB, KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/plover/keymap.c b/keyboards/ergodox_ez/keymaps/plover/keymap.c
deleted file mode 100644 (file)
index a991e60..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-#define PLVR 3 // Plover layer
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LGui |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |Plover|   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Esc    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | Home |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | End  |       | PgUp |        |      |
- *                                 |Backsp|Delete|------|       |------| Enter  |Space |
- *                                 | ace  |      | LAlt |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LGUI,
-        KC_TAB,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
-        KC_ESC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_HOME,
-                                                               KC_END,
-                                               KC_BSPC,KC_DELT,KC_LALT,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(3),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOT,
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |Brwser|Brwser|
- *                                 | Lclk | Rclk |------|       |------|Fwd   |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_BTN1, KC_BTN2, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_WBAK, KC_WFWD
-),
-
-/* Keymap 4: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   1  |   2  |   3  |   4  |   5  |      |           |      |  6   |  7   |   8  |   9  |  0   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   q  |   w  |   e  |   r  |   t  |------|           |------|  y   |  u   |   i  |   o  |  p   |   [    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   a  |   s  |   d  |   f  |   g  |      |           |      |  h   |  j   |   k  |   l  |  ;   |   '    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |   c  |   v  |------|       |------|  n   |  m   |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-
-[PLVR] = KEYMAP(  // layout: layer 4: Steno for Plover
-        // left hand
-        KC_NO, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
-        KC_NO,  KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
-        KC_NO,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,
-        KC_NO,  KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_NO,
-        KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
-                                      KC_FN4, KC_NO,
-                                           KC_NO,
-                                 KC_C,   KC_V,   KC_NO,
-        // right hand
-             KC_TRNS,  KC_NO,   KC_NO,   KC_NO,  KC_NO,   KC_NO,   KC_TRNS,
-               KC_NO,   KC_6,    KC_7,    KC_8,   KC_9,    KC_0,   KC_TRNS,
-                        KC_Y,   KC_U,    KC_I,    KC_O,   KC_P,    KC_LBRC,
-               KC_NO,   KC_H,    KC_J,    KC_K,   KC_L, KC_SCLN,   KC_QUOT,
-                              KC_TRNS, KC_TRNS,  KC_NO,   KC_NO,     KC_NO,
-        KC_TRNS, KC_TRNS,
-        KC_TRNS,
-        KC_NO,  KC_N,   KC_M
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/plums/keymap.c b/keyboards/ergodox_ez/keymaps/plums/keymap.c
deleted file mode 100644 (file)
index 46eb2e4..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  |  F5  |           |Hypr+M|   6  |   7  |   8  |   9  |   0  | Mute   |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  [   |           |   ]  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | LGui   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
- * |--------+------+------+------+------+------| SYMB |           | MDIA |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Ca/Ctl|   {  |   (  |   |  |   :  |                                       |   -  |   =  |   )  |   }  |C`/Ctl|
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | LGA  | LAlt |       | RAlt | Play |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | Home |       | PgUp |      |      |
- *                                 |Backsp| Esc  |------|       |------|Enter |Space |
- *                                 |ace   |      | End  |       | PgDn |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,           KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_F5,
-        KC_TAB,           KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_LBRC,
-        KC_LGUI,          KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,          KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   TG(SYMB),
-        F(0),             KC_LCBR,      KC_LPRN,KC_PIPE,KC_COLN,
-                                               LGUI(KC_LALT), KC_LALT,
-                                                              KC_HOME,
-                                     KC_BSPC,         KC_ESC,  KC_END,
-        // right hand
-             HYPR(KC_M),     KC_6,   KC_7,    KC_8,     KC_9,      KC_0,      KC_MUTE,
-             KC_RBRC,    KC_Y,   KC_U,    KC_I,     KC_O,      KC_P,      KC_BSLS,
-                         KC_H,   KC_J,    KC_K,     KC_L,      KC_SCLN,   KC_QUOT,
-             TG(MDIA),   KC_N,   KC_M,    KC_COMM,  KC_DOT,    KC_SLSH,   KC_RSFT,
-                                 KC_MINS, KC_EQL,   KC_RPRN,   KC_RCBR,   F(1),
-             KC_RALT, KC_MPLY,
-             KC_PGUP,
-             KC_PGDN, KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |      |      |      |      |      |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Left | Down |  Up  | Right|      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,    KC_F8,   KC_F9,    KC_F10,  KC_F11,
-       KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS, KC_F12,
-                KC_LEFT, KC_DOWN,  KC_UP,   KC_RIGHT, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
-                         KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------|MsLeft|MsDown| MsUp |MsRght|      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |VolUp |VolDn | Prev | Next |      |                                       | LClk | RClk |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-  [0] = ACTION_MACRO_TAP(0),                // FN0 - Ctrl + a (For screen/tmux)
-  [1] = ACTION_MACRO_TAP(1)                 // FN1 - Ctrl + ` (For quake style console)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
-{
-  switch(id) {
-    case 0:
-      if (record->event.pressed) {
-        if (record->tap.count) {
-          if (record->tap.interrupted) {
-            record->tap.count = 0;
-            // hold press action
-            register_code(KC_LCTL);
-          } else {
-            // tap press action
-            return MACRO( D(LCTL), T(A), U(LCTL), END  );
-          }
-        } else {
-          // hold press action
-          register_code(KC_LCTL);
-        }
-      } else {
-        if (record->tap.count) {
-          // tap release action
-        } else {
-          // hold release action
-          unregister_code(KC_LCTL);
-        }
-        record->tap.count = 0;
-      }
-      break;
-    case 1:
-      if (record->event.pressed) {
-        if (record->tap.count) {
-          if (record->tap.interrupted) {
-            record->tap.count = 0;
-            // hold press action
-            register_code(KC_RCTL);
-          } else {
-            // tap press action
-            return MACRO( DOWN(KC_RCTL), TYPE(KC_GRV), UP(KC_RCTL), END  );
-          }
-        } else {
-          // hold press action
-          register_code(KC_RCTL);
-        }
-      } else {
-        if (record->tap.count) {
-          // tap release action
-        } else {
-          // hold release action
-          unregister_code(KC_RCTL);
-        }
-        record->tap.count = 0;
-      }
-      break;
-  }
-  return MACRO_NONE;
-};
-
-
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/plums/plums.png b/keyboards/ergodox_ez/keymaps/plums/plums.png
deleted file mode 100644 (file)
index 2f127c4..0000000
Binary files a/keyboards/ergodox_ez/keymaps/plums/plums.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/plums/readme.md b/keyboards/ergodox_ez/keymaps/plums/readme.md
deleted file mode 100644 (file)
index b72329e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# ErgoDox EZ Plums Configuration
-
-## Changelog
-
-* Apr 23, 2016 (v0.1.0): 
-  * Shortcut for iTerm2 quake style dropdown (Ctrl+`)
-  * Shortcut for screen/tmux (Ctrl+a)
-  * Shortcut for shush (Hyper+m)
-  * Combo modifier for LGUI + LALT
-
-![Plums](plums.png)
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c
deleted file mode 100644 (file)
index a66971b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [BASE] = KEYMAP(
-    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F5,
-    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    KC_BSLS,
-    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
-    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
-    KC_F1,         KC_F2,   KC_F3,   KC_F4,   KC_LGUI, 
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_LALT,
-    //
-    /*-*/          KC_F6,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
-    /*-*/          KC_NO,   KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
-    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
-    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
-    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,         KC_RGHT, 
-    KC_MPLY,       KC_MNXT,
-    KC_MPRV,
-    KC_RALT,       KC_QUOT, KC_SPC
-    )
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-  ergodox_board_led_off();
-  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) {
-};
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md
deleted file mode 100644 (file)
index 80475ab..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# Roman's Layout
-
-There is only one layer based on [Norman layout](https://normanlayout.info/).
-
-Looking for multiple-layer layouts?
-
-- [Symbols, arrows, plover, HJKL arrows](../romanzolotarev-norman-plover-osx-hjkl/)
-- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/)
-
-[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195)
-
-## Functional Keys
-
-- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
-- Tap `F2` to copy screenshot to the clipboard.
-- Hold `SHIFT` and tap `F2` to save screenshot as a file.
-- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
-
-## CTRL/ESC
-
-CTRL and ESC are frequently used in Vim.
-
-- Tap `CTRL/ESC` to send `ESC`.
-- Hold `CTRL/ESC` to use as `CTRL`.
-
-## Activate N-rollover
-
-- Hold left `SHIFT` and right `SHIRT` and then tap `N`.
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png
deleted file mode 100644 (file)
index 4b9433b..0000000
Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c
deleted file mode 100644 (file)
index 7c9f673..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0
-#define SYMB 1
-#define PLVR 2
-#define ARRW 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [BASE] = KEYMAP(
-    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F14,
-    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    TG(PLVR),
-    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
-    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
-    KC_F1,         KC_F2,   KC_F3,   KC_LALT, KC_LGUI,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_FN1,
-    //
-    /*-*/          KC_F15,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
-    /*-*/          KC_BSLS, KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
-    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
-    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
-    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_RALT, KC_F4,   KC_F5,         KC_F6,
-    KC_MPLY,       KC_MNXT,
-    KC_MPRV,
-    KC_FN3,        KC_QUOT, KC_SPC
-  ),
-  [SYMB] = KEYMAP(
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
-    KC_TRNS,       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
-    //
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_TRNS,
-    /*-*/          /*-*/    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    KC_TRNS,       KC_TRNS,
-    KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS
-  ),
-  [PLVR] = KEYMAP(
-    KC_NO,         KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS,
-    KC_NO,         KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
-    KC_NO,         KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
-    KC_NO,         KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    KC_C,    KC_V,    KC_NO,
-    //
-    /*-*/          KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
-    /*-*/          KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_NO,
-    /*-*/          /*-*/    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_LBRC,
-    /*-*/          KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,       KC_QUOT,
-    /*-*/          /*-*/    /*-*/    KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
-    KC_TRNS,       KC_TRNS,
-    KC_TRNS,
-    KC_NO,         KC_N,    KC_M
-  ),
-  [ARRW] = KEYMAP(
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
-    //
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          /*-*/    KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_TRNS,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS,
-    KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS
-  ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-  [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
-  [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
-  [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-  switch(id) {
-    case 0:
-      if (record->event.pressed) {
-        register_code(KC_RSFT);
-      } else {
-        unregister_code(KC_RSFT);
-      }
-      break;
-  }
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-  uint8_t layer = biton32(layer_state);
-  ergodox_board_led_off();
-  ergodox_right_led_1_off();
-  ergodox_right_led_2_off();
-  ergodox_right_led_3_off();
-  switch (layer) {
-    case SYMB:
-      ergodox_right_led_1_on();
-      break;
-    case PLVR:
-      ergodox_right_led_2_on();
-      break;
-    case ARRW:
-      ergodox_right_led_3_on();
-      break;
-    default:
-      break;
-  }
-};
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
deleted file mode 100644 (file)
index 4188d2b..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Roman's Layout
-
-There are four layers:
-
-- **BASE** is [Norman layout](https://normanlayout.info/).
-- **SYMB** for numbers and symbols.
-- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
-- **ARRW** for navigation (same fingers for arrows as HJKL on QWERTY).
-
-Looking for IJKL arrows? [Here we
-go](../romanzolotarev-norman-plover-osx/).
-
-[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](rttp://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
-
-## Switching
-
-- Tap `SYMB` to toggle **SYMB**.
-- Tap `ARRW` to toggle **ARRW**.
-- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
-- Tap `PLVR` to toggle **PLVR**.
-
-## LEDs
-
-- Red: SYMB is on.
-- Green: PLVR is on.
-- Blue: ARRW is on.
-
-## Functional Keys
-
-- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
-- Tap `F2` to copy screenshot to the clipboard.
-- Hold `SHIFT` and tap `F2` to save screenshot as a file.
-- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
-- Tap `F14`, `F15` to adjust display brightness.
-
-**IMPORTANT**: If you have another keyboard connected via Bluetooth, then
-`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug
-you ErgoDox. Enjoy!
-
-## CTRL/ESC
-
-Both of those keys are frequently used in Vim.
-
-- Tap `CTRL/ESC` to send `ESC`.
-- Hold `CTRL/ESC` to use as `CTRL`.
-
-## Activate N-rollover
-
-- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
-- Then you can activate **PLVR** and use ErgoDox EZ for steno.
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png
deleted file mode 100644 (file)
index cdc535f..0000000
Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c
deleted file mode 100644 (file)
index 9971b83..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0
-#define SYMB 1
-#define PLVR 2
-#define ARRW 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [BASE] = KEYMAP(
-    KC_GRV,        KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_F14,
-    KC_TAB,        KC_Q,    KC_W,    KC_D,    KC_F,    KC_K,    TG(PLVR),
-    CTL_T(KC_ESC), KC_A,    KC_S,    KC_E,    KC_T,    KC_G,
-    KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LBRC,
-    KC_F1,         KC_F2,   KC_F3,   KC_LALT, KC_LGUI,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLD, KC_MUTE,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_VOLU,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_FN1,
-    //
-    /*-*/          KC_F15,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
-    /*-*/          KC_BSLS, KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
-    /*-*/          /*-*/    KC_Y,    KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
-    /*-*/          KC_RBRC, KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
-    /*-*/          /*-*/    /*-*/    KC_RGUI, KC_RALT, KC_F4,   KC_F5,         KC_F6,
-    KC_MPLY,       KC_MNXT,
-    KC_MPRV,
-    KC_FN3,        KC_QUOT, KC_SPC
-  ),
-  [SYMB] = KEYMAP(
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
-    KC_TRNS,       KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
-    //
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_TRNS,
-    /*-*/          /*-*/    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    KC_TRNS,       KC_TRNS,
-    KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS
-  ),
-  [PLVR] = KEYMAP(
-    KC_NO,         KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS,
-    KC_NO,         KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_TRNS,
-    KC_NO,         KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,
-    KC_NO,         KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_NO,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_NO,   KC_NO,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    KC_C,    KC_V,    KC_NO,
-    //
-    /*-*/          KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
-    /*-*/          KC_NO,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,          KC_NO,
-    /*-*/          /*-*/    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,          KC_LBRC,
-    /*-*/          KC_NO,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN,       KC_QUOT,
-    /*-*/          /*-*/    /*-*/    KC_NO,   KC_NO,   KC_NO,   KC_NO,         KC_NO,
-    KC_TRNS,       KC_TRNS,
-    KC_TRNS,
-    KC_NO,         KC_N,    KC_M
-  ),
-  [ARRW] = KEYMAP(
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/          /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
-    //
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          /*-*/    KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,       KC_TRNS,
-    /*-*/          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,
-    /*-*/          /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS,       KC_TRNS,
-    KC_TRNS,
-    KC_TRNS,       KC_TRNS, KC_TRNS
-  ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-  [SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
-  [PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
-  [ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-  switch(id) {
-    case 0:
-      if (record->event.pressed) {
-        register_code(KC_RSFT);
-      } else {
-        unregister_code(KC_RSFT);
-      }
-      break;
-  }
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-  uint8_t layer = biton32(layer_state);
-  ergodox_board_led_off();
-  ergodox_right_led_1_off();
-  ergodox_right_led_2_off();
-  ergodox_right_led_3_off();
-  switch (layer) {
-    case SYMB:
-      ergodox_right_led_1_on();
-      break;
-    case PLVR:
-      ergodox_right_led_2_on();
-      break;
-    case ARRW:
-      ergodox_right_led_3_on();
-      break;
-    default:
-      break;
-  }
-};
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md
deleted file mode 100644 (file)
index 804c52a..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Roman's Layout
-
-There are four layers:
-
-- **BASE** is [Norman layout](https://normanlayout.info/).
-- **SYMB** for numbers and symbols.
-- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
-- **ARRW** for navigation (same fingers for arrows as IJKL on QWERTY).
-
-Looking for HJKL arrows? [Here we
-go](../romanzolotarev-norman-plover-osx-hjkl/).
-
-[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417)
-
-## Switching
-
-- Tap `SYMB` to toggle **SYMB**.
-- Tap `ARRW` to toggle **ARRW**.
-- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
-- Tap `PLVR` to toggle **PLVR**.
-
-## LEDs
-
-- Red: SYMB is on.
-- Green: PLVR is on.
-- Blue: ARRW is on.
-
-## Functional Keys
-
-- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
-- Tap `F2` to copy screenshot to the clipboard.
-- Hold `SHIFT` and tap `F2` to save screenshot as a file.
-- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
-- Tap `F14`, `F15` to adjust display brightness.
-
-**IMPORTANT**: If you have another keyboard connected via Bluetooth, then
-`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug
-you ErgoDox. Enjoy!
-
-## CTRL/ESC
-
-Both of those keys are frequently used in Vim.
-
-- Tap `CTRL/ESC` to send `ESC`.
-- Hold `CTRL/ESC` to use as `CTRL`.
-
-## Activate N-rollover
-
-- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
-- Then you can activate **PLVR** and use ErgoDox EZ for steno.
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png
deleted file mode 100644 (file)
index 10b0752..0000000
Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c
deleted file mode 100644 (file)
index dedac69..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0
-#define QWRT 1
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [BASE] = KEYMAP(
-    KC_GRV,  KC_1,     KC_2,  KC_3,    KC_4,    KC_5,    KC_F5,
-    KC_TAB,  KC_Q,     KC_W,  KC_D,    KC_F,    KC_K,    KC_BSLS,
-    KC_LCTL, KC_A,     KC_S,  KC_E,    KC_T,    KC_G,
-    KC_LSFT, KC_Z,     KC_X,  KC_C,    KC_V,    KC_B,    KC_LBRC,
-    KC_F1,   KC_F2,    KC_F3, KC_F4,   KC_LGUI,
-    /*-*/    /*-*/     /*-*/  /*-*/    /*-*/    KC_VOLD, KC_MUTE,
-    /*-*/    /*-*/     /*-*/  /*-*/    /*-*/    /*-*/    KC_VOLU,
-    /*-*/    /*-*/     /*-*/  /*-*/    /*-*/    KC_BSPC, CTL_T(KC_ESC), KC_LALT,
-    //
-    /*-*/    KC_F6,    KC_6,  KC_7,    KC_8,    KC_9,    KC_0,          KC_EQL,
-    /*-*/    TG(QWRT), KC_J,  KC_U,    KC_R,    KC_L,    KC_SCLN,       KC_MINS,
-    /*-*/    /*-*/     KC_Y,  KC_N,    KC_I,    KC_O,    KC_H,          KC_ENT,
-    /*-*/    KC_RBRC,  KC_P,  KC_M,    KC_COMM, KC_DOT,  KC_SLSH,       KC_RSFT,
-    /*-*/    /*-*/     /*-*/  KC_RGUI, KC_LEFT, KC_DOWN, KC_UP,         KC_RGHT,
-    KC_MPLY, KC_MNXT,
-    KC_MPRV,
-    KC_RALT, KC_QUOT,  KC_SPC
-  ),
-  [QWRT] = KEYMAP(
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_E,    KC_R,    KC_T,    KC_TRNS,
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_D,    KC_F,    KC_TRNS,
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS,
-    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS,
-    /*-*/    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS,
-    //
-    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/    KC_TRNS, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_TRNS,
-    /*-*/    /*-*/    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_TRNS,
-    /*-*/    KC_TRNS, KC_N,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    /*-*/    /*-*/    /*-*/    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-    KC_TRNS, KC_TRNS,
-    KC_TRNS,
-    KC_TRNS, KC_TRNS, KC_TRNS
-  ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-  uint8_t layer = biton32(layer_state);
-  ergodox_board_led_off();
-  ergodox_right_led_1_off();
-  ergodox_right_led_2_off();
-  ergodox_right_led_3_off();
-  switch (layer) {
-    case QWRT:
-      ergodox_right_led_1_on();
-      break;
-    default:
-      break;
-  }
-};
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md
deleted file mode 100644 (file)
index 0e78c13..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Roman's Layout
-
-There are two layers:
-
-- **BASE** is [Norman layout](https://normanlayout.info/).
-- **QWRT** is QWERTY.
-
-[![keyboard-layout](romanzolotarev-norman-qwerty-osx.png)](http://www.keyboard-layout-editor.com/#/gists/3b236f450da474dc506a5a80390c3cc7)
-
-## Switching
-
-- Tap `QWRT` to toggle **QWRT**.
-
-## LEDs
-
-- Red: QWRT is on.
-
-## Functional Keys
-
-- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
-- Tap `F2` to copy screenshot to the clipboard.
-- Hold `SHIFT` and tap `F2` to save screenshot as a file.
-- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
-
-## CTRL/ESC
-
-Both CTRL and ESC are frequently used in Vim.
-
-- Tap `CTRL/ESC` to send `ESC`.
-- Hold `CTRL/ESC` to use as `CTRL`.
-
-## Activate N-rollover
-
-- Hold left `SHIFT` and right `SHIRT` and then tap `N`.
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png
deleted file mode 100644 (file)
index 34762ec..0000000
Binary files a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/sneako/keymap.c b/keyboards/ergodox_ez/keymaps/sneako/keymap.c
deleted file mode 100644 (file)
index 0c68631..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// Based on `default_osx`
-// Replace left Bksp with Ctrl/Esc
-// Remove the Ctrl from Z and /
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  LGui  |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(1),
-        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(1),       KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
-             MEH_T(KC_NO),KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_LALT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/sneako/readme.md b/keyboards/ergodox_ez/keymaps/sneako/readme.md
deleted file mode 100644 (file)
index 8dd110e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# ergodox_keymap
-
-Based on the default Ergodox EZ firmware
-
-Replaced the left side Bksp with a Crtl/Esc, this really helps in vim.
-Removed the Ctrls from the Z and / keys.
diff --git a/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c b/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c
deleted file mode 100644 (file)
index 2eaba0d..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_neo2.h"
-
-// Layer names
-#define BASE 0 // default layer
-#define MDIA 1 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   ^    |   1  |   2  |   3  |   4  |   5  | Play |           | Next |   6  |   7  |   8  |   9  |   0  |BackSpce|
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |  Del   |   X  |   V  |   L  |   C  |   W  |  L1  |           |  L1  |   K  |   H  |   G  |   F  |   Q  |   ß    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |  Caps  |   U  |   I  |   A  |   E  |   O  |------|           |------|   S  |   N  |   R  |   T  |   D  |   Y    |
- * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
- * | LShift |Ü/Ctrl| Ö/C-S| Ä/Alt|   P  |   Z  |      |           |      |   B  |   M  |   ,  |   .  |   J  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |  L1  | Home | PgDn | PgUp | End  |                                       | Right| Down |  Up  | Left |  Esc  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
- *                                 ,------+------+------|       |------+--------+------.
- *                                 |      |      |NeoL2 |       |NeoL2 |        |      |
- *                                 | Tab  |Backsp|------|       |------|  Space |Enter |
- *                                 |      |ace   |NeoL1 |       |NeoL1 |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_CIRC,         KC_1,          KC_2,          KC_3,          KC_4,    KC_5,    KC_MPLY,
-        KC_DELT,         NEO_X,         NEO_V,         NEO_L,         NEO_C,   NEO_W,   TG(1),
-        KC_CAPS,         NEO_U,         NEO_I,         NEO_A,         NEO_E,   NEO_O,
-        KC_LSFT,         CTL_T(NEO_UE), C_S_T(NEO_OE), ALT_T(NEO_AE), NEO_P,   NEO_Z,   ALL_T(KC_NO),
-        DE_LESS,         KC_HOME,       KC_PGDN,        KC_PGUP,        KC_END,
-                                                ALT_T(KC_APP),KC_LGUI,
-                                                              NEO_L2_L,
-                                               KC_TAB,KC_BSPC,NEO_L1_L,
-        // right hand
-        KC_MNXT,     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
-        TG(1),       NEO_K,   NEO_H,   NEO_G,   NEO_F,   NEO_Q,   NEO_SS,
-                     NEO_S,   NEO_N,   NEO_R,   NEO_T,   NEO_D,   NEO_Y,
-        MEH_T(KC_NO),NEO_B,   NEO_M,   KC_COMM, KC_DOT,  NEO_J,   KC_RSFT,
-                              KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_ESC,
-        KC_LALT,CTL_T(KC_ESC),
-        NEO_L2_R,
-        NEO_L1_R,KC_SPC, KC_ENT
-    ),
-/* Keymap 1: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      | Lclk | MsUp | Rclk |      |      |           |      |      |VolDwn| Mute |VolUp |      |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        | Btn4 |MsLeft|MsDown|MsRght| Btn5 |------|           |------|      | Prev | Stop | Play | Next |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |WhRght|WhDown| WhUp |WhLeft|WhClk |      |           |      |BwSrch|BwBack|BwHome|BwRefr|BwFwd |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |MsAcl0|MsAcl1|MsAcl2|                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |Brwser|Brwser|
- *                                 | Lclk | Rclk |------|       |------|Back  |Forwd |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_BTN4, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5,
-       KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_BTN3, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_ACL0, KC_ACL1, KC_ACL2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_BTN1, KC_BTN2, KC_TRNS,
-    // right hand
-       KC_TRNS, KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11,
-       KC_TRNS, KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_F12,
-                KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,
-       KC_TRNS, KC_WSCH, KC_WBAK, KC_WHOM, KC_WREF, KC_WFWD, KC_TRNS,
-                         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_WBAK, KC_WFWD
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    /* [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols) */
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case MDIA:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            ergodox_board_led_off();
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/config_user.h b/keyboards/ergodox_ez/keymaps/supercoder/config_user.h
deleted file mode 100644 (file)
index 8da1383..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H 1
-
-#include "config.h"
-
-#undef LOCKING_SUPPORT_ENABLE
-#undef LOCKING_RESYNC_ENABLE
-
-#endif
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png b/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png
deleted file mode 100644 (file)
index c72958c..0000000
Binary files a/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg b/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg
deleted file mode 100644 (file)
index d690eaf..0000000
Binary files a/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/keymap.c b/keyboards/ergodox_ez/keymaps/supercoder/keymap.c
deleted file mode 100644 (file)
index ca21d30..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * SuperCoder 2000 layout
- */
-
-#include "ergodox_ez.h"
-
-/* Layers */
-
-#define SC2K    0 // default layer
-
-/* The Keymap */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-  /* Keymap 0: Base Layer
-   *
-   * ,-----------------------------------------------------.           ,-----------------------------------------------------.
-   * |         0 |   0  |   0  |   0  |   0  |   0  |   0  |           |  1   |   1  |   1  |   1  |   1  |  1   | 1         |
-   * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
-   * |         0 |   0  |   0  |   0  |   0  |   0  |   0  |           |  1   |   1  |   1  |   1  |   1  |  1   | 1         |
-   * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
-   * |         0 |   0  |   0  |   0  |   0  |   0  |------|           |------|   1  |   1  |   1  |   1  |  1   | 1         |
-   * |-----------+------+------+------+------+------|   0  |           |  1   |------+------+------+------+------+-----------|
-   * |         0 |   0  |   0  |   0  |   0  |   0  |      |           |      |   1  |   1  |   1  |   1  |  1   | 1         |
-   * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
-   *     |     0 |   0  |   0  |   0  |   0  |                                       |   1  |   1  |   1  |  1   | 1     |
-   *     `-----------------------------------'                                       `-----------------------------------'
-   *                                         ,-------------.           ,-------------.
-   *                                         | DONE | DONE |           | DONE | DONE |
-   *                                  ,------|------|------|           |------+------+------.
-   *                                  |      |      | DONE |           | DONE |      |      |
-   *                                  | DONE | DONE |------|           |------| DONE | DONE |
-   *                                  |      |      | DONE |           | DONE |      |      |
-   *                                  `--------------------'           `--------------------'
-   */
-[SC2K] = KEYMAP(
- // left hand
- KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
-,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
-,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
-,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
-,KC_0    ,KC_0    ,KC_0    ,KC_0    ,KC_0
-
-                                             ,KC_ENT  ,KC_ENT
-                                                      ,KC_ENT
-                                    ,KC_ENT  ,KC_ENT  ,KC_ENT
-
-                                                                // right hand
-                                                               ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
-                                                               ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
-                                                                        ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
-                                                               ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
-                                                                                 ,KC_1    ,KC_1    ,KC_1    ,KC_1    ,KC_1
-
-                                                               ,KC_ENT  ,KC_ENT
-                                                               ,KC_ENT
-                                                               ,KC_ENT  ,KC_ENT   ,KC_ENT
-                  ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-}
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk b/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk
deleted file mode 100644 (file)
index 41a195d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-BOOTMAGIC_ENABLE=no
-COMMAND_ENABLE=no
-SLEEP_LED_ENABLE=no
-UNICODE_ENABLE=no
-MOUSEKEY_ENABLE=no
-EXTRAKEY_ENABLE=no
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/readme.md b/keyboards/ergodox_ez/keymaps/supercoder/readme.md
deleted file mode 100644 (file)
index 97bf7f5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-SuperCoder 2000 layout for the ErgoDox
-==================================================
-
-![SuperCoder 2000](images/supercoder_2000.jpg)
-
-Ever found yourself in need of entering binary codes rapidly? Ever wanted to use
-all ten fingers to do so? Ever felt your SuperCoder 2000 too limiting, by only
-having three buttons? We heard you! With this layout for the ErgoDox EZ, you
-will be able to tap in binary at an unparalleled speed and accuracy! Efficiency
-never seen before!
-
-Behold the Ultimate SuperCoder 2000 layout!
-
-![SuperCoder layout](images/layout.png)
-
-### To use it...
-
-To use this piece of top quality engineering, you can either
-[download the hex file][hex] we have prepared for you, or you can compile it on
-your own:
-
- [hex]: https://raw.githubusercontent.com/algernon/ergodox-supercoder/master/supercoder.hex
-
-```
-$ git clone https://github.com/jackhumbert/qmk_firmware.git
-$ cd qmk_firmware/keyboards/ergodox_ez
-$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder
-$ make KEYMAP=supercoder
-```
diff --git a/keyboards/ergodox_ez/keymaps/techtomas/keymap.c b/keyboards/ergodox_ez/keymaps/techtomas/keymap.c
deleted file mode 100644 (file)
index 1ff6618..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define APP 2 // app layer
-#define CNTL 3 // control layer
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |  L2/`  |   1  |   2  |   3  |   4  |   5  |CmdSpc|           | -    |   6  |   7  |   8  |   9  |   0  |   =    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | MEH/Tab|   Q  |   W  |   E  |   R  |   T  | [    |           | ]    |  Y   |   U  |   I  |   O  |   P  | MEH/\  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Hyp/Esc |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  | L2/; | Hyp/'  |
- * |--------+------+------+------+------+------| Tab  |           | STab |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | L2// | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |L1/Lft|L3/Rht| LCtl | LAlt | LGui |                                       | Rgui |  Up  |  Dn  |  L3  |  L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                         ,-------------.       ,-------------.
- *                                         | LCtl | LGui |       |AltGui|ShfGui|
- *                                 ,-------|------|------|       |------+--------+------.
- *                                 |       |      |L1/Hom|       |L2/PUp|       |       |
- *                                 | Backsp|Delete|------|       |------| Enter | Space |
- *                                 |       |      |L3/End|       |L1/PDn|       |       |
- *                                 `--------------------'       `-----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        LT(APP,KC_GRV),   KC_1,                KC_2,    KC_3,    KC_4,    KC_5,   LGUI(KC_SPC),
-        MEH_T(KC_TAB),    KC_Q,                KC_W,    KC_E,    KC_R,    KC_T,   KC_LBRC,
-        ALL_T(KC_ESC),    KC_A,                KC_S,    KC_D,    KC_F,    KC_G,
-        KC_LSFT,          KC_Z,                KC_X,    KC_C,    KC_V,    KC_B,   KC_TAB,
-        LT(SYMB,KC_LEFT), LT(CNTL,KC_RIGHT),   KC_LCTL, KC_LALT, KC_LGUI,
-                                                                    KC_LCTL,   KC_LGUI,
-                                                                               LT(SYMB,KC_HOME),
-                                                           KC_BSPC, KC_DELETE, LT(CNTL,KC_END),
-        // right hand
-       KC_MINS,          KC_6,    KC_7,    KC_8,     KC_9,      KC_0,             KC_EQL,
-       KC_RBRC,          KC_Y,    KC_U,    KC_I,     KC_O,      KC_P,             MEH_T(KC_BSLS),
-                         KC_H,    KC_J,    KC_K,     KC_L,      LT(APP,KC_SCLN),  ALL_T(KC_QUOT),
-       S(KC_TAB),        KC_N,    KC_M,    KC_COMM,  KC_DOT,    LT(APP,KC_SLSH),  KC_RSFT,
-                                  KC_RGUI, KC_UP,    KC_DOWN,   KC_FN3,           KC_FN1,
-       LALT(KC_LGUI),    S(KC_LGUI),
-       LT(APP,KC_PGUP),
-       LT(SYMB,KC_PGDN), KC_ENT, KC_SPC
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           | Tab  |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |  <   |           |  >   |   :  |   7  |   8  |   9  |   /  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------|   ;  |   4  |   5  |   6  |   *  |        |
- * |--------+------+------+------+------+------|  F14 |           | F15  |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   -  |  Entr  |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |   0   |   . |  =   |   +  |       |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,S(KC_COMM),
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_F14,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TAB,    KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       S(KC_DOT), KC_COLN, KC_7,   KC_8,    KC_9,    KC_BSLS, KC_F12,
-                  KC_SCLN, KC_4,   KC_5,    KC_6,    KC_ASTR, KC_TRNS,
-       KC_F15,    KC_AMPR, KC_1,   KC_2,    KC_3,    KC_MINS, KC_ENT,
-                           KC_0,   KC_DOT,  KC_EQL,  KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: App Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        | CmdQ | CmdW |      |      |      | Stab |           | Play | Prev | Next |      |      |PrtSc |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------| VolDn|VolUp |      |      |      |        |
- * |--------+------+------+------+------+------|      |           | Mute |------+------+------+------+------+--------|
- * |        | CmdZ | CmdX | CmdC | CmdY | CtrlC|      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// Control
-[APP] = KEYMAP(
-       KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
-       KC_TRNS, LGUI(KC_Q), LGUI(KC_W), KC_TRNS,    KC_TRNS,    KC_TRNS,    S(KC_TAB),
-       KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
-       KC_TRNS, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LCTL(KC_C), KC_TRNS,
-       KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,
-                                              KC_TRNS,  KC_TRNS,
-                                                        KC_TRNS,
-                                      KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_MPLY,  KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS,
-                 KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_MUTE,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 3: Control Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |  Pwr   |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght| Lclk |------|           |------|  Lft | Down | Up   | Right|      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      | Rclk |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | Shift|      |       | Home | End  |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | LAtl |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// Control
-[CNTL] = KEYMAP(
-       KC_PWR,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_LSFT, KC_TRNS,
-                                                    KC_LALT,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_HOME, KC_END,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),
-    [2] = ACTION_LAYER_TAP_TOGGLE(APP),
-    [3] = ACTION_LAYER_TAP_TOGGLE(CNTL)             // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        case 3:
-          ergodox_right_led_3_on();
-          break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/techtomas/readme.md b/keyboards/ergodox_ez/keymaps/techtomas/readme.md
deleted file mode 100644 (file)
index 36e0591..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# Techtomas Configuration
-
-## Base Layer
-
-The base layer is a merge of what I liked with the default layout and the ordinary layout. The thumb cluster is more like the Kinesis advantage and the top row of the cluster is convient for use on the mac.
-
-* The Caps Lock postion handles [Hyper/Esc](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
-* The Tab key toggles MEH.
-* The top vertical mods on the left and right are [ and ].
-* The bottom vertical mods on the left and right are tab and shift+tab
-* The HYPER and MEH key are made in the same location on the right side of the board as well. Using Keyboard Maestro for OS X makes one-handed shortcuts very easy.
-* Layer switching is focused around the thumb clusters plus some additional locations for convience.
-
-## Symbol Layer
-The symbol layer can be tap/toggled with the bottom right key and also toggled on the thumb clusters.
-
-The bottom two vertical mods are set to F14 and F15 which is the default for changing screen brightness on the mac
-
-## App Layer
-The app layer is used to control media playback and also some application shortcuts (OS X Focused).
-It can be toggled on the left board in the top left corner (tilde/grave) or using your pinky on the right side of the board using either ; or /.
-There is one additional toggle on the right thumb cluster for quick access to play and mute key combos.
-
-### Current App shortcuts defined
-* Q = CMD+Q
-* W = CMD+W
-* Z = CMD+Z
-* X = CMD+X
-* C = CMD+C
-* V = CMD+V
-* B = CTRL+C
-* P = Print Screen
-
-## Control Layer
-The control layer is meant to help easily navigate and select text. It can also be stacked ontop of the Symbol layer when needed.
-
-The right arrow key and End key toggle the control layer on the left board. There is also a tap toggle for the layer in the same position on the right side of the board.
-
-On the left board you have mouse control with left & right click in the location of the G and B keys.
-On the right board you have vim-style arrow keys using hjkl
-
-The left thumb cluster moves shift and alt within easy reach while holding the toggle (end). So far I've found this convient to navigate and  skip around text when using the hjkl arrow keys. I found that it was easy to get the alt key stuck on depending on what key you released first so I added the PREVENT_STUCK_MODIFIERS to the config.h to help with that.
-
-## Changelog
-
-* May 4th, 2016 (v1.2):
-  * Moved layer toggles around to match my habbits of typing
-  * Enabled Prevent Stuck Modifers in my config.h (L3 + Alt on cluster would get stuck)
-  * Changed media layer to be more like an app layer with some quick shortcuts (mac centric)
-  * Moved around the base layer arrow keys so mod keys were more accesible
-
-* Apr 29, 2016 (V1.1):
-  * Added F14 and F15 to symbol layer
-  * Added control layer toggle to A key.
-
-* Apr 28, 2016 (V1.0):
-  * Modified config based on the default layout plus inspiration from the ordinary layout
diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md b/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md
deleted file mode 100644 (file)
index ab02fac..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Based on Default OSX
-I'm a vim and OSX user
-
-- Moved Hyper and Meh up, replaced with CMD
-  - Because I'm used to having symmetrical CMD keys on both hands
-- Changed left delete to Tab to match OSX
-- Changed left Backspace to CTRL/ESC for vim
-- Changed top left and top right arrow to `CMD+{` and `CMD+}`
-  - Useful for switching tabs in Safari, Xcode, etc.
-- Remove the Ctrl from Z and /
-- Remove CMD from right quote
-- Changed right Alt to Delete
-
diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex b/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex
deleted file mode 100644 (file)
index a8cf452..0000000
+++ /dev/null
@@ -1,1137 +0,0 @@
-:100000000C947B020C94C2020C94C2020C94C202A7\r
-:100010000C94C2020C94C2020C94C2020C94C20250\r
-:100020000C94C2020C94C2020C94F70D0C94C90EED\r
-:100030000C94C2020C94C2020C94C2020C94C20230\r
-:100040000C94C2020C9486210C94C2020C94C2023D\r
-:100050000C94C2020C94681C0C94C2020C94C20250\r
-:100060000C94C2020C94C2020C94C2020C94C20200\r
-:100070000C94C2020C94C2020C94C2020C94C202F0\r
-:100080000C94C2020C94C2020C94C2020C94C202E0\r
-:100090000C94C2020C94C2020C94C2020C94C202D0\r
-:1000A0000C94C2020C94C2020C94C202360F580F78\r
-:1000B0004610580F46109D0FC00F461015102810FF\r
-:1000C000F712F712261326135C137C13AD14AD142C\r
-:1000D0008713AD14371437149E14AD14AD14A71440\r
-:1000E0004414441444144414441444144414441450\r
-:1000F0004414441444144414441444144414441440\r
-:10010000561463146A1471147B140000F0A12E00BD\r
-:100110002B002961E100354100001E00140004009D\r
-:100120001D0034004D001F001A0016001B00E104E2\r
-:100130002A00200008000700060050002C002100C3\r
-:100140001500090019004F004A00220017000A009C\r
-:100150000500000065642F0A006F0000E300000046\r
-:10016000E300300A00670000E30000004C002300B9\r
-:100170001C000B00110000002961240018000D0074\r
-:10018000100052004B0025000C000E0036005100FC\r
-:100190002800260012000F0037002F002B00270038\r
-:1001A00013003342380030004E002D00310034007F\r
-:1001B000E500C10000000100010001000100010094\r
-:1001C00000003A001E0220022202010001003B0052\r
-:1001D0001F0221022302010001003C002F0226021F\r
-:1001E0002F00010001003D00300227023000010015\r
-:1001F00001003E003102350035020000010001001F\r
-:1002000001000000010000000100010001000000E9\r
-:100210000100000001003F005200510024020000D4\r
-:1002200001004000240021001E00010001004100E7\r
-:10023000250022001F003700010042002600230095\r
-:10024000200027000100430025022E0231002E006D\r
-:100250000100440045000100010001000000010010\r
-:100260000100010001000100000001000100010087\r
-:1002700001000100010001000100F2000100010085\r
-:1002800001000100F000F1000100F4000100010094\r
-:100290000100F3000100F500010001000100010070\r
-:1002A0000100000001000100010000000100000049\r
-:1002B0000100010001000000010000000100010038\r
-:1002C0000100010001000000010001000100010027\r
-:1002D0000100A9000100010001000100AC00AA001A\r
-:1002E000B600010001000100AB00A8000100010000\r
-:1002F0000100010001000100010001000100AE0049\r
-:1003000001000100000016034500720067006F0045\r
-:1003100044006F007800200045005A0000001603DA\r
-:100320004500720067006F0044006F0078002000F5\r
-:1003300045005A0000000403090409026D0004018D\r
-:1003400000A0FA09040000010301010009211101C4\r
-:1003500000012240000705810308000A090401008A\r
-:100360000103010200092111010001224D000705CE\r
-:10037000820308000A0904020001030000000921A9\r
-:10038000110100012236000705830308000A090451\r
-:1003900003000103000000092111010001223900BE\r
-:1003A000070584031000011201100100000008ED90\r
-:1003B000FE071301000102000105010906A1010564\r
-:1003C0000719E029E7150025019508750181020547\r
-:1003D000081901290595057501910295017503918B\r
-:1003E0000105071900297715002501957875018108\r
-:1003F00002C005010980A101850216010026B7008F\r
-:100400001A01002AB700751095018100C0050C097A\r
-:1004100001A1018503160100269C021A01002A9CF5\r
-:1004200002751095018100C005010902A1010901B1\r
-:10043000A10005091901290515002501950575017A\r
-:10044000810295017503810105010930093115818A\r
-:10045000257F95027508810609381581257F95014C\r
-:1004600075088106050C0A38021581257F950175EE\r
-:10047000088106C0C005010906A101050719E02988\r
-:10048000E715002501950875018102950175088120\r
-:100490000105081901290595057501910295017558\r
-:1004A0000391010507190029FF150026FF00950695\r
-:1004B00075088100C000000000000000000000007E\r
-:1004C000010204060A0F17202C3A4A5D71879DB37A\r
-:1004D000C7DAE9F5FCFFFCF5E9DAC7B39D87715D82\r
-:1004E0004A3A2C20170F0A060402010000000000FF\r
-:1004F00000000000000011241FBECFEFDAE0DEBFD5\r
-:10050000CDBF04B603FE27C0809101029091020284\r
-:10051000A0910302B09104028730904BA740B04BEA\r
-:10052000D1F4109201021092020210920302109272\r
-:10053000040214BE84B7877F84BF0FB6F894A895D1\r
-:1005400080916000886180936000109260000FBE0F\r
-:10055000E0E0FFE3099511E0A0E0B1E0E6EBF6E4AE\r
-:1005600002C005900D92A433B107D9F712E0A4E3BD\r
-:10057000B1E001C01D92A130B107E1F70E943C0B30\r
-:100580000C9459230C9400001092B9008AE08093D7\r
-:10059000B800089594EA9093BC009091BC0097FF36\r
-:1005A000FCCF9091B900987F983021F0903111F0F4\r
-:1005B00081E008958093BB0084E88093BC00809123\r
-:1005C000BC0087FFFCCF8091B900887F883111F093\r
-:1005D000803471F780E0089584E98093BC008091B5\r
-:1005E000BC0084FDFCCF08958093BB0084E8809319\r
-:1005F000BC008091BC0087FFFCCF9091B900987F30\r
-:1006000081E0983209F480E0089584E88093BC008A\r
-:100610008091BC0087FFFCCF8091BB00089580B320\r
-:100620008C7080BB81B3836F81BB08958091010181\r
-:10063000811115C080E40E94CA02809301018111DA\r
-:100640000CC082E10E94F40280930101811105C077\r
-:100650008FEF0E94F402809301010E94EC0284B1AA\r
-:10066000807F84B985B1807F85B98AB1837F8AB95B\r
-:100670008BB1837F8BB93E98469808950E94E00421\r
-:10068000809301010E9416030E940F03A5E3B1E0CD\r
-:10069000E3E4F1E08EE08E0F11921D928E13FCCFF9\r
-:1006A0000C94CA040E94E004809301010E94160386\r
-:1006B0000E940F03A5E3B1E0E3E4F1E08EE08E0FCA\r
-:1006C00011921D928E13FCCF0895BF92CF92DF92AC\r
-:1006D000EF92FF920F931F93CF93DF9380910101CD\r
-:1006E000882379F0809134018F5F809334018111E8\r
-:1006F00008C00E94E00480930101811102C00E94A1\r
-:10070000720405E311E0C0E0D0E0DD24D39482E080\r
-:10071000C82EEE24E394F12CC730D10500F580916A\r
-:100720000101811164C080E40E94CA02809301012A\r
-:10073000811112C082E10E94F402809301018111B3\r
-:100740000BC0C7010C2E01C0880F0A94EAF78095F0\r
-:100750000E94F402809301010E94EC0248C0CA305A\r
-:10076000A1F028F4C83059F0C93061F005C0CC3090\r
-:1007700089F070F0CD3089F0209A289810C0219A25\r
-:1007800029980DC0229A2A980AC0239A2B9807C04C\r
-:10079000529A01C0539A5B9802C03E9A469890EADA\r
-:1007A0009A95F1F79FB1799902C082E001C080E08B\r
-:1007B00091709D25982B7C9902C084E001C080E057\r
-:1007C000892B7D9902C038E001C030E0832B7E99EF\r
-:1007D00002C020E101C020E0822B9FB19095991FBB\r
-:1007E0009927991F9295990F907E892B0FC0809120\r
-:1007F0000101811149C080E40E94CA028093010175\r
-:10080000882379F1B12C0E94EC028B2DF8019081A4\r
-:10081000981719F08083C09200010E941603219658\r
-:100820000F5F1F4FCE30D10509F076CF80910001C8\r
-:10083000882361F1815080930001882339F08FE98A\r
-:100840009FE00197F1F700C0000020C0A3E4B1E0F1\r
-:10085000E5E3F1E0CF01825F91919D938E13FCCF90\r
-:1008600015C083E10E94F402809301018111CACF77\r
-:1008700081E40E94CA02809301018111C3CF0E94CA\r
-:100880000503B82EB094BFCF80E0C0CF0E947004A3\r
-:1008900081E0DF91CF911F910F91FF90EF90DF905A\r
-:1008A000CF90BF900895E82FF0E0ED5BFE4F808180\r
-:1008B000089508950F931F93CF93DF93C3E4D1E07E\r
-:1008C00010E00C2F025F899190E00E948C1B180FA2\r
-:1008D0000C13F9CF812FDF91CF911F910F910895C4\r
-:1008E0000C94400556985E9825982D9826982E9839\r
-:1008F00027982F988FEF90E090938900809388003D\r
-:1009000090938B0080938A0090938D0080938C004D\r
-:10091000259A2D9A2FEF80E792E021508040904059\r
-:10092000E1F700C00000269A2E9A2FEF80E792E0B0\r
-:10093000215080409040E1F700C00000279A2F9A94\r
-:100940002FEF80E792E0215080409040E1F700C017\r
-:10095000000025982D982FEF80E792E021508040ED\r
-:100960009040E1F700C0000026982E982FEF80E716\r
-:1009700092E0215080409040E1F700C000002798AD\r
-:100980002F9856985E9825982D9826982E982798F7\r
-:100990002F98089589EA8093800089E080938100F0\r
-:1009A00024982C983F988AB18F748AB96E98479A88\r
-:1009B0008BB1806B8BB9769A0E9472040C943F05C0\r
-:1009C00080E2809301018091510181110EC00E944B\r
-:1009D000C40281E0809351012FEF83ED90E3215019\r
-:1009E00080409040E1F700C0000080E40E94CA020D\r
-:1009F0008093010181112EC00E94F40280930101B5\r
-:100A0000811128C00E94F40280930101811122C04B\r
-:100A10008FE30E94F4028093010181111BC00E94A8\r
-:100A2000EC0280E40E94CA0280930101811112C08D\r
-:100A30008CE00E94F4028093010181110BC00E949E\r
-:100A4000F40280930101811105C08FE30E94F4023A\r
-:100A5000809301010E94EC028091010108956111CF\r
-:100A60000BC0FC018281882321F085EE0E949B113E\r
-:100A700003C085EE0E94631280E090E0089508951F\r
-:100A80006091C2017091C3018091C4019091C50130\r
-:100A90000E94981B56985E9825982D9826982E9817\r
-:100AA00027982F98813019F0823021F00895259AE7\r
-:100AB0002D9A0895269A2E9A089581E0089581E04E\r
-:100AC00008950C945F050895282F882339F090E04D\r
-:100AD0002A3010F44D9608950697089587E290E025\r
-:100AE0000895AF92BF92DF92EF92FF920F931F9300\r
-:100AF000CF93DF938C01FC01C081D181CE010E9494\r
-:100B0000111ABE010E94E908EC01B8010E946105BA\r
-:100B1000882309F4D1C1F8018281882309F4C6C071\r
-:100B200080916201811127C0C431F0E7DF0709F02D\r
-:100B3000BDC10E94630581E0809362010E94321C66\r
-:100B400090936101809360011092550110925701BA\r
-:100B500010925601109259011092580110925B01A7\r
-:100B600010925A0110925D0110925C0110925F0187\r
-:100B700010925E01A1C180916001909161010E947B\r
-:100B80003E1C883C910570F480915501E82FF0E0FF\r
-:100B9000EE0FFF1FEA5AFE4FD183C0838F5F809311\r
-:100BA00055018AC1C13020E8D20708F451C0F801CC\r
-:100BB0008281882309F47EC05E01E894B7F88091B1\r
-:100BC0005401813079F050F08230C1F482EE0E94FD\r
-:100BD0009B1187E50E949B1187E50EC082EE0E9463\r
-:100BE0009B110CC080EE0E949B1181EE0E949B1114\r
-:100BF00088E10E949B1188E10E9463128CE0E82E3C\r
-:100C0000F12CC5010E2C02C0969587950A94E2F747\r
-:100C10008F700E946405D82E0E949B118D2D0E941A\r
-:100C20006312F4E0EF1AF1082CEFE2162FEFF20650\r
-:100C300041F780915401813029F010F0823041F465\r
-:100C400082EE04C080EE0E94631281EE0E94631265\r
-:100C5000C43180E7D80768F4C23090E7D90708F0BC\r
-:100C600046C0C115E0E7DE0771F0C130D047A1F101\r
-:100C70000CC1C33320E7D20709F4D8C0C433D0472E\r
-:100C800009F4EBC002C1F8018281882309F402C192\r
-:100C90000E941815FFEF24E38CE0F15020408040C3\r
-:100CA000E1F700C000000E948D1C06C1C13080E841\r
-:100CB000D80770F2C43120E7D20708F0B3C0C230C1\r
-:100CC00080E7D807A0F4C11590E7D90709F4E2C07E\r
-:100CD000C130D04709F0D9C0F8018281882309F4D6\r
-:100CE000D9C08091DF0181608093DF01E5C0F80108\r
-:100CF0008281882309F4CEC00E94E71C811102C0C2\r
-:100D00000E94CD1C0E94FA1C90E09093F301809306\r
-:100D1000F201C230F0E7DF0721F48091F201816037\r
-:100D20007AC0C33020E7D20721F48091F2018260BB\r
-:100D300072C0C43080E7D80721F48091F20184604A\r
-:100D40006AC0C53090E7D90719F48091F20127C035\r
-:100D5000C630E0E7DE0721F48091F20180615BC0DC\r
-:100D6000C730F0E7DF0721F48091F201806253C0C1\r
-:100D7000C83020E7D20721F48091F20180644BC093\r
-:100D8000C93080E7D80721F48091F201806843C020\r
-:100D9000CA3090E7D90729F48091F2018460886015\r
-:100DA0003AC0CB30E0E7DE0721F48091F2018E7F7C\r
-:100DB00032C0CC30F0E7DF0721F48091F2018D7F63\r
-:100DC0002AC0CD3020E7D20721F48091F2018B7F39\r
-:100DD00022C0CE3080E7D80719F48091F2011AC002\r
-:100DE0008091F201CF3090E7D90711F48F7E13C0C4\r
-:100DF000C031E0E7DE0711F48F7D0DC0C131F0E7AF\r
-:100E0000DF0711F48F7B07C0C231D04711F48F7711\r
-:100E100002C08B7F877F8093F2018091F2010E9454\r
-:100E2000FE1C4AC0C333F0E7DF07A1F4F80182815A\r
-:100E3000882321F01092520182E016C08091520165\r
-:100E4000811106C086E20E949B1186E20E94631215\r
-:100E500082E018C0C433D047C1F4F80182818823EE\r
-:100E600031F01092530180E20E94B21225C08091AD\r
-:100E70005301811106C087E20E949B1187E20E9404\r
-:100E8000631280E20E94B91217C081E08093520180\r
-:100E900080935301C801DF91CF911F910F91FF9073\r
-:100EA000EF90DF90BF90AF900C945D05C130F0E8FB\r
-:100EB000DF0708F081CECCCE80E0DF91CF911F918B\r
-:100EC0000F91FF90EF90DF90BF90AF90089526E0D4\r
-:100ED000729FF001112444E5849FE00DF11D11245F\r
-:100EE000E60FF11DEE0FFF1FE25FFE4F859194911B\r
-:100EF0000E94FB08811560E49607B0F5811570E348\r
-:100F0000970708F0DEC0803E9105D8F4803C91053B\r
-:100F100008F06CC0883A910578F4853A910508F09C\r
-:100F20006BC08130910509F452C108F40FC18430BF\r
-:100F3000910508F04CC10AC18B3B910508F467C0CC\r
-:100F400005C18F3F910509F048F4803F910508F0F5\r
-:100F5000ADC0883E910508F43AC1F8C0811520E281\r
-:100F6000920708F0A5C00895811543E5940790F411\r
-:100F7000811562E5960708F0C8C0811571E59707ED\r
-:100F800008F0BEC0811520E5920708F09DC09F7053\r
-:100F9000906A0895811545E59407D8F4811564E5B4\r
-:100FA000960708F0C8C0482F4695469570E2479FBF\r
-:100FB000A00111248370992721E030E0B90102C01B\r
-:100FC000660F771F8A95E2F7CB01842B952B9A68E1\r
-:100FD0000895811576E5970708F4B2C09C01305654\r
-:100FE0002115304108F0B2C09F70AEC0FC01EE0F79\r
-:100FF000FF1FE657F04062C0853A910509F4A9C089\r
-:10100000863A910509F0A8C082E890E40895883AEC\r
-:10101000910509F4A4C0893A910509F4A3C08A3A5C\r
-:10102000910509F4A2C08B3A910509F4A1C08C3A4C\r
-:10103000910509F4A0C08D3A910509F49FC0803B49\r
-:10104000910509F49EC08E3A910509F49DC08F3A2E\r
-:10105000910509F49CC0813B910509F49BC0823B3A\r
-:10106000910509F49AC0833B910509F499C0843B2A\r
-:10107000910509F498C0853B910509F497C0863B1A\r
-:10108000910509F496C0873B910509F495C0883B0A\r
-:10109000910509F494C0893B910509F493C08A3BFA\r
-:1010A000910509F492C080E094E408959065089554\r
-:1010B000FC01FF70EE0FFF1FE65FFE4F85919491DC\r
-:1010C00008959927906C0895482F437021E030E0EF\r
-:1010D00002C0220F331F4A95E2F73C68AC0164E07E\r
-:1010E000569547956A95E1F74370342B8F70869536\r
-:1010F000869560E2869FC0011124822B932B089570\r
-:10110000982F8827816F906A0895482F46954695B5\r
-:1011100070E2479FA00111248370992721E030E0FD\r
-:10112000B90102C0660F771F8A95E2F7CB01842BC5\r
-:10113000952B9C680895982F8827846F906A08954E\r
-:101140008F719927982F88279062089580E090E00A\r
-:10115000089581E890E4089583E890E4089582EE8C\r
-:1011600094E4089589EE94E408958AEE94E4089551\r
-:1011700085EB94E4089586EB94E4089587EB94E47A\r
-:1011800008958CEC94E408958DEC94E4089583E83C\r
-:1011900095E408958AE895E4089582E995E4089530\r
-:1011A00084E995E4089581E296E4089583E296E463\r
-:1011B000089584E296E4089585E296E4089586E22F\r
-:1011C00096E4089587E296E408958AE296E4089505\r
-:1011D000089596E0799FF001112494E5899FE00D30\r
-:1011E000F11D1124E60FF11DEE0FFF1FE25FFE4F10\r
-:1011F0008591949108958238910549F1B0F4813335\r
-:10120000910509F458C048F48932910509F44EC09B\r
-:101210008A32910509F454C008958533910509F483\r
-:1012200040C08933910599F00895833E910529F1D5\r
-:1012300038F4803E910591F0823E9105A1F0089529\r
-:10124000863E9105F9F0873E910531F10895209190\r
-:10125000F20120FD3AC021FD38C008958091F201CD\r
-:1012600080FD35C032C08091F20182FF32C0809192\r
-:10127000F20184FD30C083EE39C08091F20182FD1D\r
-:1012800028C0F5CF8091F20183FF27C08091F20141\r
-:1012900084FD21C087EE2AC08091F20183FD1DC02C\r
-:1012A000F5CF8091F20185FD1AC01BC08091F2013B\r
-:1012B00085FD17C014C08091F20186FD14C015C0D1\r
-:1012C0008091F20186FD11C00EC080EE0FC089E34F\r
-:1012D0000DC082EE0BC080E009C086EE07C089E237\r
-:1012E00005C085E303C08AE201C081E390E0089570\r
-:1012F00008950C947809809173010895CF93DF933A\r
-:1013000000D01F92CDB7DEB79C018091F8018430E8\r
-:1013100019F593E099833B832A839093E9008FEF3B\r
-:101320009091E800815095FD06C095ED9A95F1F7F2\r
-:1013300000008111F5CF8091E80085FF0DC040E0ED\r
-:1013400050E063E070E0CE0101960E94E70B8091CF\r
-:10135000E8008E778093E8000F900F900F90DF9158\r
-:10136000CF910895CF93DF9300D01F92CDB7DEB712\r
-:101370002091F801243021F522E029839B838A8380\r
-:1013800083E08093E9008FEF9091E800815095FD14\r
-:1013900006C095ED9A95F1F700008111F5CF809187\r
-:1013A000E80085FF0DC040E050E063E070E0CE0152\r
-:1013B00001960E94E70B8091E8008E778093E80009\r
-:1013C0000F900F900F90DF91CF9108952091F80129\r
-:1013D0002430F1F422E02093E9002FEF3091E8006F\r
-:1013E000215035FD06C035ED3A95F1F70000211189\r
-:1013F000F5CF2091E80025FF0BC040E050E065E00C\r
-:1014000070E00E94E70B8091E8008E778093E800FF\r
-:101410000895CF93DF93EC019091F801943009F097\r
-:1014200046C080910C018823D9F080910D0188235A\r
-:10143000B9F09093E9008FEF9091E800815095FD0D\r
-:1014400006C095E19A95F1F700008111F5CF8091E2\r
-:10145000E80085FF2CC040E050E060E170E017C07C\r
-:1014600081E08093E9008FEF9091E800815095FD35\r
-:1014700006C095ED9A95F1F700008111F5CF8091A6\r
-:10148000E80085FF14C040E050E068E070E0CE0165\r
-:101490000E94E70B8091E8008E778093E80080E15E\r
-:1014A000FE01A3E6B1E001900D928A95E1F7DF918C\r
-:1014B000CF9108958091F701811109C00E947C0DA0\r
-:1014C0000E94D90D8091E20084608093E20008952B\r
-:1014D0001092F701089508950C9473210E94231C23\r
-:1014E0000E9479210E947F100C94790942E061ECFE\r
-:1014F00081E00E94F60C42E061EC82E00E94F60C72\r
-:1015000042E061EC83E00E94F60C42E161EC84E091\r
-:101510000C94F60C8091FA01833009F455C030F434\r
-:10152000813071F0823009F48EC008958A3009F458\r
-:101530007AC08B3009F460C0893009F09CC020C0AB\r
-:101540008091F901813A09F096C08091E800877F87\r
-:101550008093E8008091FD019091FE01892B21F498\r
-:1015600060E183E691E003C060E080E090E070E03D\r
-:101570000E94320C8091E8008B778093E8000895F8\r
-:101580008091F901813209F076C08091FD0190913E\r
-:10159000FE01009719F0039709F06DC08091E800F3\r
-:1015A000877F8093E8008091E80082FD05C08091EC\r
-:1015B000F8018111F8CF5FC08091F1008093730131\r
-:1015C0008091E8008B7753C08091F901813A09F04E\r
-:1015D00052C08091FD019091FE01892B09F04BC012\r
-:1015E0008091E800877F8093E8008091E80080FF89\r
-:1015F000FCCF80910C0136C08091F9018132D9F580\r
-:101600008091FD019091FE01892BA9F58091E80060\r
-:10161000877F8093E8000E942B0D8091FB018093CF\r
-:101620000C010C9418158091F901813221F58091FB\r
-:10163000E800877F8093E8000E942B0D8091FC01D9\r
-:101640008093740108958091F901813AA1F4809109\r
-:10165000E800877F8093E8008091E80080FFFCCF5E\r
-:10166000809174018093F1008091E8008E778093DF\r
-:10167000E8000C942B0D089584B7877F84BF0FB6C4\r
-:10168000F894A89580916000886180936000109222\r
-:1016900060000FBE80E880936100109261000E949C\r
-:1016A000CE100E947C0D0E94D90D8091E2008460D2\r
-:1016B0008093E20078940E945F100E94D01082E034\r
-:1016C00091E00E947A100E9461218091F80185309A\r
-:1016D00069F40E94E81B8091F6018823B1F30E940F\r
-:1016E000151C882391F30E94D10BEFCF0E94D610D6\r
-:1016F000ECCF292F332723303105C9F064F4213092\r
-:10170000310581F02230310509F043C08DE690E0CB\r
-:101710002AE333E042C021323105F1F022323105B3\r
-:1017200041F137C082E190E027EA33E036C09927E3\r
-:101730008130910541F08230910541F0892B49F5C6\r
-:10174000E6E3F3E005C0EEE1F3E002C0E6E0F3E03B\r
-:10175000849190E09F0121C06430D8F4E62FF0E03E\r
-:10176000EE0FFF1FEE5DFE4F2081318189E090E09A\r
-:1017700014C0643070F470E0FB01EE0FFF1FE65EF2\r
-:10178000FE4F20813181FB01EA5EFE4F808190E0B7\r
-:1017900004C080E090E020E030E0FA013183208353\r
-:1017A000089580E189BD82E189BD09B400FEFDCFC5\r
-:1017B0008091D8008F7D8093D8008091E000826076\r
-:1017C0008093E0008091E00081FDFCCF0895CF92EE\r
-:1017D000DF92EF92FF920F931F93CF93DF93EC0171\r
-:1017E0008B016A010E944A0D811133C0C114D104DA\r
-:1017F00039F0F60180819181081B190BC80FD91FA0\r
-:10180000E12CF12C0115110519F18091E80085FDFD\r
-:1018100016C08091E8008E778093E800C114D1044F\r
-:1018200049F0F60180819181E80EF91EF182E08293\r
-:1018300085E00FC00E944A0D882321F30AC08991D8\r
-:101840008093F10001501109FFEFEF1AFF0ADACF80\r
-:1018500080E0DF91CF911F910F91FF90EF90DF908B\r
-:10186000CF9008952091FF0130910002261737078D\r
-:1018700048F06115710539F42091E8002E77209326\r
-:10188000E80001C0B90140E061157105A9F120919E\r
-:10189000F801222309F443C0253009F442C0209105\r
-:1018A000E80023FD40C02091E80022FD32C02091D5\r
-:1018B000E80020FFE9CF4091F3002091F20030E0F2\r
-:1018C000342BFC01CF016115710559F02830310529\r
-:1018D00040F481918093F100615071092F5F3F4F77\r
-:1018E000F1CF41E02830310509F040E02091E800D7\r
-:1018F0002E772093E800C8CF4111C9CF0AC080914C\r
-:10190000F801882361F0853061F08091E80083FD63\r
-:101910000AC08091E80082FFF2CF80E0089582E063\r
-:10192000089583E0089581E008952091FF013091AA\r
-:1019300000022617370748F06115710539F4209128\r
-:10194000E8002E772093E80001C0B901FC0120E0F7\r
-:101950006115710591F18091F801882309F440C067\r
-:10196000853009F43FC08091E80083FD3DC080913F\r
-:10197000E80082FD2FC08091E80080FFE9CF209130\r
-:10198000F3008091F20090E0922B6115710559F0FF\r
-:101990008830910540F424912093F10031966150F4\r
-:1019A00071090196F2CF21E0089709F020E08091BB\r
-:1019B000E8008E778093E800CBCF2111CCCF0AC00E\r
-:1019C0008091F801882361F0853061F08091E80012\r
-:1019D00083FD0AC08091E80082FFF2CF80E0089585\r
-:1019E00082E0089583E0089581E00895982F97306C\r
-:1019F00058F59093E900981739F07091EC00209118\r
-:101A0000ED005091F00003C0242F762F50E021FF0D\r
-:101A100019C03091EB003E7F3093EB003091ED0028\r
-:101A20003D7F3093ED003091EB0031603093EB005F\r
-:101A30007093EC002093ED005093F0002091EE00A5\r
-:101A400027FF07C09F5FD3CF8F708093E90081E0AD\r
-:101A5000089580E008958091F90187FF11C0809179\r
-:101A6000E80082FD05C08091F8018111F8CF11C016\r
-:101A70008091E8008B770BC08091F801882349F0B2\r
-:101A80008091E80080FFF8CF8091E8008E77809306\r
-:101A9000E80008952091E4003091E50095E640913A\r
-:101AA000EC00842F817040FF22C08091E80080FD0F\r
-:101AB0001CC08091F801882391F0853091F08091CD\r
-:101AC000EB0085FD10C04091E4005091E500421705\r
-:101AD000530729F39A01915011F784E0089582E0A9\r
-:101AE000089583E0089581E0089580E0089540918D\r
-:101AF000E80042FFDECF08950E94EA0D0E94F20D39\r
-:101B0000E0EEF0E0808181608083E8EDF0E08081AC\r
-:101B10008F77808319BCA7EDB0E08C918E7F8C937A\r
-:101B200080818F7E80831092F70108950F931F9319\r
-:101B3000CF93DF930E94EA0D0E94F20DC8EDD0E032\r
-:101B400088818F77888388818068888388818F7D6A\r
-:101B5000888319BC1092F8011092F4011092F601DA\r
-:101B60001092F50100EE10E0F80180818B7F8083F8\r
-:101B700088818160888342E060E080E00E94F60C0A\r
-:101B8000E1EEF0E080818E7F8083E2EEF0E0808104\r
-:101B900081608083808188608083F80180818E7F6E\r
-:101BA0008083888180618883DF91CF911F910F911D\r
-:101BB0000895E8EDF0E080818F7E8083E7EDF0E02E\r
-:101BC00080818160808384E082BF81E08093F7011F\r
-:101BD0000C94960DE8EDF0E080818E7F808310926A\r
-:101BE000E20008951092DA001092E10008951F9229\r
-:101BF0000F920FB60F9211242F933F934F935F9341\r
-:101C00006F937F938F939F93AF93BF93EF93FF93C4\r
-:101C10008091E10082FF0BC08091E20082FF07C04B\r
-:101C20008091E1008B7F8093E1000E945E108091A3\r
-:101C3000DA0080FF1FC08091D80080FF1BC0809118\r
-:101C4000DA008E7F8093DA008091D90080FF0DC08A\r
-:101C500080E189BD82E189BD09B400FEFDCF81E04C\r
-:101C60008093F8010E945A0A05C019BC1092F8012D\r
-:101C70000E94680A8091E10080FF19C08091E20013\r
-:101C800080FF15C08091E2008E7F8093E2008091FA\r
-:101C9000E20080618093E2008091D80080628093AE\r
-:101CA000D80019BC85E08093F8010E946C0A8091ED\r
-:101CB000E10084FF30C08091E20084FF2CC080E10D\r
-:101CC00089BD82E189BD09B400FEFDCF8091D800B5\r
-:101CD0008F7D8093D8008091E1008F7E8093E1001A\r
-:101CE0008091E2008F7E8093E2008091E20081602B\r
-:101CF0008093E2008091F401882311F084E007C012\r
-:101D00008091E30087FD02C081E001C083E0809301\r
-:101D1000F8010E946E0A8091E10083FF29C0809142\r
-:101D2000E20083FF25C08091E100877F8093E1007E\r
-:101D300082E08093F8011092F4018091E1008E7F9F\r
-:101D40008093E1008091E2008E7F8093E200809199\r
-:101D5000E20080618093E20042E060E080E00E9467\r
-:101D6000F60C8091F00088608093F0000E946B0A6E\r
-:101D7000FF91EF91BF91AF919F918F917F916F9163\r
-:101D80005F914F913F912F910F900FBE0F901F9039\r
-:101D900018951F920F920FB60F9211242F933F9315\r
-:101DA0004F935F936F937F938F939F93AF93BF9363\r
-:101DB000CF93DF93EF93FF93C091E900CF708091B1\r
-:101DC000EC00D82FD17080FDD0E81092E90080910E\r
-:101DD000F000877F8093F00078940E940D0F10929E\r
-:101DE000E9008091F00088608093F000CD2BCF70E7\r
-:101DF000C093E900FF91EF91DF91CF91BF91AF9137\r
-:101E00009F918F917F916F915F914F913F912F9112\r
-:101E10000F900FBE0F901F9018951F93CF93DF93D5\r
-:101E2000CDB7DEB7AA970FB6F894DEBF0FBECDBF11\r
-:101E3000E9EFF1E088E08E0F9091F10091938E131D\r
-:101E4000FBCF0E948A0A8091E80083FF1FC1809126\r
-:101E5000F9019091FA01492F50E04A30510508F0FC\r
-:101E600015C1FA01EA5AFF4F0C940A23803881F019\r
-:101E7000823809F00BC18091FD018F708093E900D9\r
-:101E80008091EB0085FB882780F91092E90006C05D\r
-:101E90008091F5019091F601911182609091E80096\r
-:101EA000977F9093E8008093F1001092F100C8C0F2\r
-:101EB000282F2D7F09F0EAC0882319F0823061F0C5\r
-:101EC000E5C08091FB01813009F0E0C0933009F05A\r
-:101ED00080E08093F6012BC08091FB01811127C027\r
-:101EE0008091FD018F7009F4D1C08093E9002091A9\r
-:101EF000EB0020FF1CC0933021F48091EB00806246\r
-:101F000014C09091EB0090619093EB0021E030E0E1\r
-:101F1000A90102C0440F551F8A95E2F74093EA00D9\r
-:101F20001092EA008091EB0088608093EB001092A1\r
-:101F3000E9008091E800877F86C08111A7C01091D9\r
-:101F4000FB011F778091E3008078812B8093E30071\r
-:101F50008091E800877F8093E8000E942B0D80919C\r
-:101F6000E80080FFFCCF8091E30080688093E3006D\r
-:101F7000111102C082E001C083E08093F80186C0A5\r
-:101F80008058823008F082C08091FB019091FC0162\r
-:101F90008C3D53E0950779F583E08A838AE2898353\r
-:101FA0004FB7F894DE01139620E03EE051E2E32FB4\r
-:101FB000F0E050935700E49120FF03C0E295EF70EA\r
-:101FC0003F5FEF708E2F90E0EA3010F0C79601C0AF\r
-:101FD000C0968D939D932F5F243149F74FBF809119\r
-:101FE000E800877F8093E8006AE270E0CE01019606\r
-:101FF0000E94320C14C0AE014F5F5F4F6091FD0133\r
-:102000000E94790BBC01892B09F440C09091E80033\r
-:10201000977F9093E80089819A810E94950C809126\r
-:10202000E8008B778093E80031C0803879F58091A3\r
-:10203000E800877F8093E8008091F4018093F100AD\r
-:102040008091E8008E778093E8000E942B0D1EC0DF\r
-:1020500081111CC09091FB019230C0F48091E80086\r
-:10206000877F8093E8009093F4010E942B0D80916C\r
-:10207000F401811106C08091E30087FD02C081E078\r
-:1020800001C084E08093F8010E94760A8091E80004\r
-:1020900083FF0AC08091E800877F8093E8008091E9\r
-:1020A000EB0080628093EB00AA960FB6F894DEBF37\r
-:1020B0000FBECDBFDF91CF911F9108950895CF93AB\r
-:1020C0008091F8018823A1F0C091E900CF70909130\r
-:1020D000EC00892F817090FD80E8C82B1092E900F8\r
-:1020E0008091E80083FD0E940D0FCF70C093E9003E\r
-:1020F000CF91089590937A01809379010895E091AA\r
-:102100007901F0917A01309721F00190F081E02D72\r
-:10211000099480E00895E0917901F0917A01309777\r
-:1021200021F00280F381E02D09940895E091790176\r
-:10213000F0917A01309721F00480F581E02D099427\r
-:10214000089520917701309178018217930771F0FB\r
-:102150009093780180937701E0917901F0917A0171\r
-:10216000309721F00680F781E02D099408952091A1\r
-:102170007501309176018217930771F09093760183\r
-:1021800080937501E0917901F0917A01309721F007\r
-:102190000084F185E02D0994089508950C94CD10E4\r
-:1021A0000E94291C0E943E030C94AF1C9F92AF9288\r
-:1021B000BF92CF92DF92EF92FF920F931F93CF9334\r
-:1021C000DF9300D000D000D0CDB7DEB70E9465030A\r
-:1021D0000DE010E0AA24A394B12C902E802F0E9431\r
-:1021E0005304980124583E4F6901F901F080F82604\r
-:1021F000A1F40150110988F78FEF89838A831B822C\r
-:102200000E94321C8160782F9D838C8349815A8182\r
-:102210006B818D810E946D112FC09091DF0191FF24\r
-:1022200004C08E830E9459048E8125E030E0A50110\r
-:10223000022E01C0440F0A94EAF7E42E4F21C1F0A8\r
-:1022400029839A828E2191E009F490E09B830E9479\r
-:10225000321C8160782F9D838C8349815A816B81E8\r
-:102260008D810E946D11F6018081E826E08204C014\r
-:1022700021503109E0F6BDCF0E947D1E10917B01F7\r
-:102280000E947F101817B9F00E947F1080937B0185\r
-:1022900026960FB6F894DEBF0FBECDBFDF91CF916B\r
-:1022A0001F910F91FF90EF90DF90CF90BF90AF9074\r
-:1022B0009F900C94790926960FB6F894DEBF0FBE56\r
-:1022C000CDBFDF91CF911F910F91FF90EF90DF90E5\r
-:1022D000CF90BF90AF909F900895CF93DF93CDB7ED\r
-:1022E000DEB72B970FB6F894DEBF0FBECDBF4F837E\r
-:1022F000588769877A878B87DE01119686E0FD0112\r
-:1023000011928A95E9F785E0FE01379601900D92CA\r
-:102310008A95E1F749815A816B817C818D819E810B\r
-:102320000E94B6172B960FB6F894DEBF0FBECDBF36\r
-:10233000DF91CF910895CF93882309F4C2C0C82FAD\r
-:10234000823859F40E947F1081FDBBC089E30E944E\r
-:10235000901A0E945D1B89E30CC0833879F40E94B7\r
-:102360007F1080FDAEC083E50E94901A0E945D1B25\r
-:1023700083E50E94D21ACF910C945D1B843859F4E6\r
-:102380000E947F1082FD9DC087E40E94901A0E94E7\r
-:102390005D1B87E4EECF8CEF8C0F813A48F48C2FD5\r
-:1023A0000E94C72081118DC08C2F0E94901AE3CF0C\r
-:1023B00080E28C0F883048F4C77081E001C0880F3C\r
-:1023C000CA95EAF70E94161BD6CF8BE58C0F833097\r
-:1023D00078F4C53A29F0C63A31F083E890E005C0B8\r
-:1023E00081E890E002C082E890E0CF910C94A110C7\r
-:1023F00088E58C0F833108F064C0C83A39F1C93AD6\r
-:1024000041F1CA3A49F1CB3A51F1CC3A59F1CD3ABE\r
-:1024100061F1C03B69F1CE3A71F1CF3A79F1C13B3C\r
-:1024200081F1C23B89F1C33B91F1C43B99F1C53BBA\r
-:10243000A1F1C63BA9F1C73BB1F1C83BB9F1C93B1A\r
-:10244000C1F1CA3BC9F180E090E038C082EE90E073\r
-:1024500035C089EE90E032C08AEE90E02FC085EB67\r
-:1024600090E02CC086EB90E029C087EB90E026C07E\r
-:102470008CEC90E023C08DEC90E020C083E891E0EC\r
-:102480001DC08AE891E01AC082E991E017C084E992\r
-:1024900091E014C081E292E011C083E292E00EC0AC\r
-:1024A00084E292E00BC085E292E008C086E292E00E\r
-:1024B00005C087E292E002C08AE292E0CF910C94DC\r
-:1024C000B710CF910895882309F44BC0823859F48E\r
-:1024D0000E947F1081FF45C089E30E94901A0E94EC\r
-:1024E0005D1B89E30CC0833871F40E947F1080FF6C\r
-:1024F00038C083E50E94901A0E945D1B83E50E940C\r
-:10250000D21A0C945D1B843859F40E947F1082FF0C\r
-:1025100028C087E40E94901A0E945D1B87E4EFCFD9\r
-:102520009CEF980F913A58F390E2980F983050F43E\r
-:10253000877091E001C0990F8A95EAF7892F0E9470\r
-:102540001C1BDFCF9BE5980F933020F480E090E0D8\r
-:102550000C94A110885A833120F480E090E00C9410\r
-:10256000B7100895882321F00E94161B0C945D1B60\r
-:102570000895882321F00E941C1B0C945D1B089574\r
-:102580007F928F929F92AF92BF92CF92DF92EF9203\r
-:10259000FF920F931F93CF93DF931F92CDB7DEB7B8\r
-:1025A0007C01C62E772EFC01058102950F701281E9\r
-:1025B00011110E94331B0E94891A882379F011237C\r
-:1025C00069F080E28C0D883048F082E00E94721A37\r
-:1025D0000E94891A91E0D82ED92601C0D12CE72D6E\r
-:1025E000E295EF70F0E0E05AFF4F0C940A23872D3C\r
-:1025F000807F072D0F70882311F00295007F112333\r
-:1026000089F0002309F490C180E28C0D883020F419\r
-:10261000802F0E94161B03C0802F0E94261B0E9441\r
-:102620005D1B82C18C2D0E946312002309F495C1A9\r
-:1026300080E28C0D883020F4802F0E941C1B03C088\r
-:10264000802F0E942C1B0E945D1B87C1972D907FBD\r
-:10265000872D8F70903211F08295807FCC2021F0F1\r
-:10266000F1E0CF16B1F01EC0112349F0002309F4A8\r
-:1026700014C1013009F011C10E94461B6EC1002334\r
-:1026800019F0013009F469C189830E94491B8981CD\r
-:102690000AC1112321F0023008F05FC1FEC0011110\r
-:1026A0005CC101C1112321F0002309F4F6C03CC133\r
-:1026B000002309F4F8C03EC1872D86958695837066\r
-:1026C00090E0009719F0019761F047C1112321F0C4\r
-:1026D0008C2D972D937002C080E090E00E94A11095\r
-:1026E0003CC1112321F08C2D972D937002C080E006\r
-:1026F00090E00E94B71031C18C2D112319F00E9477\r
-:10270000851D02C00E94ED1D0E94721E26C1872DEC\r
-:10271000837009F052C0111120C18C2D82958695CD\r
-:102720008770880F880F9C2D9F70892E912CA12C6B\r
-:10273000B12C082E04C0880C991CAA1CBB1C0A943E\r
-:10274000D2F7C4FE14C00FE010E020E030E0B90181\r
-:10275000A80104C0440F551F661F771F8A95D2F742\r
-:10276000CB01BA01609570958095909503C060E0AB\r
-:1027700070E0CB01272D26952695237030E022307E\r
-:10278000310569F02330310589F0682979298A29D2\r
-:102790009B292130310571F00E94FE18DEC06829A6\r
-:1027A00079298A299B290E941A19D7C00E94FE18EC\r
-:1027B000C501B4010E94E218D0C0112319F0872D81\r
-:1027C000817001C08695882309F4C7C08C2D82953D\r
-:1027D00086958770880F880F9C2D9F70892E912C6D\r
-:1027E000A12CB12C082E04C0880C991CAA1CBB1C5F\r
-:1027F0000A94D2F7C4FE14C00FE010E020E030E0ED\r
-:10280000B901A80104C0440F551F661F771F8A95A0\r
-:10281000D2F7CB01BA01609570958095909503C071\r
-:1028200060E070E0CB01272D269526952370422F7E\r
-:1028300050E04230510569F04330510589F0682974\r
-:1028400079298A299B294130510571F00E94D819B4\r
-:1028500084C0682979298A299B290E94F4197DC09E\r
-:102860000E94D819C501B4010E94BC1976C08C2DF4\r
-:1028700090E0FC01E05EF109E531F10508F050C09F\r
-:10288000E059FF4F0C940A230C2D0F70872D8F7188\r
-:10289000112331F00E945519802F0E94B2125DC0A1\r
-:1028A0000E947619802F0E94B91257C0112339F067\r
-:1028B000011153C0872D8F710E949B194EC00230A9\r
-:1028C00008F04BC0F7CF112339F0872D8F710E948C\r
-:1028D000551943C01123C9F3872D8F710E947619B2\r
-:1028E0003CC0112329F0872D8F710E94401935C0FB\r
-:1028F0000E94361932C0112351F0172D1F71812FFC\r
-:102900000E94551963E0812F0E94691A26C081E058\r
-:102910000E94721A023008F182E00E94721A1DC0F1\r
-:10292000112331F0002389F28C2D0E949B1115C0D8\r
-:10293000002391F28C2D0E9463120FC0472D4F701F\r
-:102940006C2DC7010E942F050E945A1806C0472D02\r
-:102950004F706C2DC7010E94E808DD20F9F00E943D\r
-:10296000651A80FD1BC0F70112820E945F1A0E9447\r
-:102970005519C7010E94DD140E945F1A0F90DF9164\r
-:10298000CF911F910F91FF90EF90DF90CF90BF906C\r
-:10299000AF909F908F907F900C9476190F90DF915D\r
-:1029A000CF911F910F91FF90EF90DF90CF90BF904C\r
-:1029B000AF909F908F907F9008950F931F93CF9328\r
-:1029C000DF93EC01888199812B813C81232BB9F025\r
-:1029D0009F3F11F48F3F99F0CE010E94710588232B\r
-:1029E00071F0688179818A810E945B1A8C010E9452\r
-:1029F000101A0E94D718B801CE010E94C012DF91B0\r
-:102A0000CF911F910F9108950E94331B0E94431B89\r
-:102A10000E94081B0E945D1B0E94231F0E94721EC1\r
-:102A200080E090E00E94A11080E090E00C94B7104C\r
-:102A30000E94231B0C9404150E94501A292F2295E2\r
-:102A40002F7030E02C3031054CF42A3031056CF415\r
-:102A50002250310922303105A8F407C02C3031054D\r
-:102A600069F02F30310551F00DC0803F69F018F446\r
-:102A7000803E40F409C0843F29F406C093FB8827B8\r
-:102A800080F9089580E0089581E00895CF93DF9361\r
-:102A900000D000D01F92CDB7DEB70F900F900F90EF\r
-:102AA0000F900F90DF91CF910895CF93DF9300D0D7\r
-:102AB00000D000D0CDB7DEB726960FB6F894DEBFB3\r
-:102AC0000FBECDBFDF91CF9108951F93CF93DF93BA\r
-:102AD000C0918A0116E080918B01C81799F0D0E06F\r
-:102AE0001C9FF0011D9FF00D1124E457FE4F408103\r
-:102AF000518162817381848195810E94551521964F\r
-:102B0000C770E9CFDF91CF911F9108954091BC012B\r
-:102B10005091BD016091BE017091BF018091C001D3\r
-:102B20009091C1010C9455158091C10182958F70CF\r
-:102B300009F054C08091BE01882309F44FC08091F0\r
-:102B40008A01A0918B016091BC017091BD014091FF\r
-:102B5000BF015091C001B6E08A1709F43FC090E070\r
-:102B600041155105C1F17F3F11F46F3FA1F1B89FAD\r
-:102B7000F001B99FF00D1124E457FE4F218172132B\r
-:102B80002AC02081621327C02281211124C0238101\r
-:102B900034812417350710F421503109241B350BDB\r
-:102BA000283C3105C0F42091C1012F702061209391\r
-:102BB000C10126E0289FF001299FF00D1124EF5656\r
-:102BC000FE4F80818F70806180838CEB91E00E944A\r
-:102BD000DD140C94651501968770BECF0895CF92D1\r
-:102BE000DF92EF92FF920F931F93CF93DF93CDB7B6\r
-:102BF000DEB762970FB6F894DEBF0FBECDBF8C0173\r
-:102C000085E0F801DE011D9601900D928A95E1F7AD\r
-:102C1000D8014C9111965C91119712966C91129774\r
-:102C20001396CD90DC9014973091BC017091BD014A\r
-:102C30008091BF019091C001009709F46BC17F3F63\r
-:102C400019F43F3F09F466C1E090BE01EE2009F49B\r
-:102C5000C0C02091C101C816D90628F0F601E81BB2\r
-:102C6000F90BCF0104C0809590958C0D9D1DFF241C\r
-:102C7000F394883C910578F0F12C207F09F0C6C0D0\r
-:102C80007C2DD98AC88A89890E9446158CEB91E0EF\r
-:102C90000E94DD14B1C0822F807F09F046C07513F9\r
-:102CA00014C0341312C0611110C02F702061209322\r
-:102CB000C1010E9486158CEB91E00E94DD14809189\r
-:102CC000C101D80115968C932EC0CD2819F15F3F14\r
-:102CD00011F44F3FF9F0F62E61111CC080918A016A\r
-:102CE00020918B0136E0821709F45AC090E0389F9A\r
-:102CF000F001399FF00D1124E457FE4F71815713F5\r
-:102D000006C07081471303C07281711103C0019620\r
-:102D10008770E9CFF62E662309F418C18091C101AE\r
-:102D200081608093C101F12C11C1751308C0341367\r
-:102D300006C0611104C08091C101D801C3C04D8794\r
-:102D40005E878D859E856A8B0E941C156A89882303\r
-:102D5000E1F16623D1F12091C101822F82958F701C\r
-:102D600090E0029774F08091BC019091BD0198872A\r
-:102D70008F831986DB86CA862C87CE0107960E9430\r
-:102D8000DD1486E0F801ACEBB1E001900D928A957C\r
-:102D9000E1F70E9494150E948615FF24F394D6C093\r
-:102DA0004D875E878D859E850E94501A292F22951A\r
-:102DB0002F7030E0223031050CF0BCC09F7009F05C\r
-:102DC000B6C0805E883008F4C1C0C8010E94DD141E\r
-:102DD000E4CFC816D90608F453C0F601E81BF90B76\r
-:102DE000CF01883C910508F450C0F12C7C2DD98A84\r
-:102DF000C88A89890E944615ECEBF1E086E0DF0184\r
-:102E00001D928A95E9F70E948615A0C0751314C01B\r
-:102E1000341312C0611110C08091C101F801858383\r
-:102E2000C8010E94DD1486E0ECEBF1E0DF011D92A9\r
-:102E30008A95E9F7FE2C8AC04D875E878D859E8531\r
-:102E40006A8B0E941C156A89882309F4BECF662309\r
-:102E500009F4BBCF2091C101822F82958F7090E041\r
-:102E600002970CF48ECF8091BC019091BD019A83A2\r
-:102E700089831B82DD82CC822E83CE0101967FCF97\r
-:102E8000809590958C0D9D1DACCFF62E662309F490\r
-:102E90009CCF75132EC034132CC02091C10120FD8E\r
-:102EA0001FC0822F82958F70D9F0D80115962C9370\r
-:102EB00015978F3049F08F5F982F9295907F822FD2\r
-:102EC0008F70892B15968C93C8010E94DD1486E0C3\r
-:102ED000F801ACEBB1E001900D928A95E1F793CF48\r
-:102EE00086E0F801ACEBB1E001900D928A95E1F734\r
-:102EF0002DC04D875E878D859E850E941C15811192\r
-:102F000040CF8091C10181608093C101C8010E94BE\r
-:102F1000DD141CC0662309F458CF4D875E878D856C\r
-:102F20009E850E941C15882309F44FCF2ACF81115A\r
-:102F300048CF0CC0243031050CF047CF9F7009F406\r
-:102F400040CFF8019581907F09F03BCF8F2D62969D\r
-:102F50000FB6F894DEBF0FBECDBFDF91CF911F91AA\r
-:102F60000F91FF90EF90DF90CF9008951F93CF9334\r
-:102F7000DF93CDB7DEB72C970FB6F894DEBF0FBE48\r
-:102F8000CDBF4F83588769877A878B879C87CE010F\r
-:102F900007960E94EF15882369F08F8198852A850E\r
-:102FA0003B85232BF1F19F3F09F063C08F3F09F070\r
-:102FB00060C037C086E0FE013796DE0111960190B1\r
-:102FC0000D928A95E1F76F817885EA85FB853097C8\r
-:102FD00041F17F3F11F46F3F21F120918B0130E0EF\r
-:102FE000C90101968770992740918A0150E08417A2\r
-:102FF000950709F447C069837A83FD83EC8396E0E3\r
-:10300000929FD001939FB00D1124A457BE4FFE0193\r
-:10301000319601900D929A95E1F780938B010E9471\r
-:10302000651516E080918A0190918B018917C1F195\r
-:10303000189FC001112484579E4F0E94EF158823CA\r
-:1030400079F1E0918A011E9FF0011124E457FE4FAF\r
-:103050004081518162817381848195810E945515DF\r
-:1030600080918A0190E001968770992780938A0168\r
-:10307000D9CF4F81588569857A858B859C850E943B\r
-:103080005515CFCF0E94181510928B0110928A010E\r
-:10309000ECEBF1E086E0DF011D928A95E9F7C1CF04\r
-:1030A0002C960FB6F894DEBF0FBECDBFDF91CF9147\r
-:1030B0001F910895EF92FF920F931F93CF93DF9389\r
-:1030C0008C01892B09F46CC0F12CEE24E394E80107\r
-:1030D0002196F8018491843740F4843008F051C07F\r
-:1030E000813081F0823019F15BC0853709F444C02A\r
-:1030F000A8F19CE7980F903708F052C08F770E9494\r
-:10310000631241C00E5F1F4FFE01C49180E28C0F1D\r
-:10311000883048F4C7708E2D01C0880FCA95EAF731\r
-:103120000E94361B14C08C2F0E949B112DC00E5F75\r
-:103130001F4FFE01C49180E28C0F883058F4C77095\r
-:103140008E2D01C0880FCA95EAF70E943C1B0E9491\r
-:103150005D1B1AC08C2F0E94631216C00E5F1F4F9A\r
-:10316000FE01C491CC2381F08FE99FE00197F1F734\r
-:1031700000C00000C150F6CF0E5F1F4FFE01F4905B\r
-:1031800003C00E949B118E018F2D882309F49FCFCD\r
-:10319000EFE9FFE03197F1F700C000008150F5CF73\r
-:1031A000DF91CF911F910F91FF90EF9008950895B7\r
-:1031B0006093C6017093C7018093C8019093C901C1\r
-:1031C0000C9404150F931F930091C6011091C70131\r
-:1031D0002091C8013091C901DC01CB01802B912BDA\r
-:1031E000A22BB32B8093C6019093C701A093C80173\r
-:1031F000B093C9011F910F910C9404150F931F9365\r
-:103200000091C6011091C7012091C8013091C901F8\r
-:10321000DC01CB0180239123A223B3238093C60139\r
-:103220009093C701A093C801B093C9011F910F915A\r
-:103230000C9404150F931F930091C6011091C701C0\r
-:103240002091C8013091C901DC01CB018027912771\r
-:10325000A227B3278093C6019093C701A093C8010A\r
-:10326000B093C9011F910F910C9404151092C201E3\r
-:103270001092C3011092C4011092C5010C94041560\r
-:1032800041E050E060E070E004C0440F551F661F4D\r
-:10329000771F8A95D2F74093C2015093C301609380\r
-:1032A000C4017093C5010C94041541E050E060E046\r
-:1032B00070E004C0440F551F661F771F8A95D2F730\r
-:1032C0008091C2019091C301A091C401B091C50148\r
-:1032D000482B592B6A2B7B2B4093C2015093C3017F\r
-:1032E0006093C4017093C5010C94041541E050E053\r
-:1032F00060E070E004C0440F551F661F771F8A9579\r
-:10330000D2F740955095609570958091C20190914B\r
-:10331000C301A091C401B091C501482359236A2378\r
-:103320007B234093C2015093C3016093C401709307\r
-:10333000C5010C94041541E050E060E070E004C069\r
-:10334000440F551F661F771F8A95D2F78091C201DF\r
-:103350009091C301A091C401B091C501482759279C\r
-:103360006A277B274093C2015093C3016093C40135\r
-:103370007093C5010C9404150F931F930091C20123\r
-:103380001091C3012091C4013091C501DC01CB0132\r
-:10339000802B912BA22BB32B8093C2019093C3015E\r
-:1033A000A093C401B093C5011F910F910C94041513\r
-:1033B0000F931F930091C2011091C3012091C4018A\r
-:1033C0003091C501DC01CB0180239123A223B323DB\r
-:1033D0008093C2019093C301A093C401B093C5012F\r
-:1033E0001F910F910C9404150F931F930091C2012C\r
-:1033F0001091C3012091C4013091C501DC01CB01C2\r
-:1034000080279127A227B3278093C2019093C301FD\r
-:10341000A093C401B093C5011F910F910C940415A2\r
-:103420000895CF92DF92EF92FF920F931F93CF9365\r
-:10343000DF938C01C090C601D090C701E090C80115\r
-:10344000F090C9018091C2019091C301A091C40183\r
-:10345000B091C501C82AD92AEA2AFB2ACFE1D0E0D7\r
-:10346000D701C6010C2E04C0B695A79597958795F0\r
-:103470000A94D2F780FF06C0B8018C2F0E9467071C\r
-:10348000019721F4219760F780E001C08C2FDF9134\r
-:10349000CF911F910F91FF90EF90DF90CF90089503\r
-:1034A000CF93DF93EC010E94111ABE010E946707BF\r
-:1034B000DF91CF910895CB010E94501A0895809119\r
-:1034C000CA0185958595859508958091CA01877073\r
-:1034D000089598E0899F90011124262B2093CA011A\r
-:1034E0000C9455192091CA01809582238093CA01BA\r
-:1034F000982F977069F430E0482F552747FD509575\r
-:103500002417350729F08595859585950C947619AE\r
-:1035100008959091CA01977081E009F480E00895C0\r
-:1035200090910C01992321F090910D01911109C006\r
-:1035300020910E0130910F01F90132969FEF40E08A\r
-:103540001FC0982F9695969596959F3050F5E091CF\r
-:103550000E01F0910F01E90FF11D877021E030E0BD\r
-:10356000A90102C0440F551F8A95E2F7CA01918153\r
-:10357000892B818308959F3F39F04F5F4E3041F092\r
-:1035800051915813F8CF0DC05111F7CF942FF5CFAB\r
-:103590009F3F39F0F901E90FF11D97FDFA958283FC\r
-:1035A0000895089590910C01992321F090910D01B7\r
-:1035B000911109C020910E0130910F01F90132964D\r
-:1035C000205F3F4F1FC0982F9695969596959F30F8\r
-:1035D000F0F4E0910E01F0910F01E90FF11D8770F9\r
-:1035E00021E030E0A90102C0440F551F8A95E2F79F\r
-:1035F000CA01809591818923818308953196E217CC\r
-:10360000F30729F090819813F9CF1082F7CF08952E\r
-:1036100081E090E0E0910E01F0910F01E80FF91FB9\r
-:103620001082019680319105A9F708959091DE01ED\r
-:10363000892B8093DE01089580959091DE01892386\r
-:103640008093DE0108951092DE0108959091DD01CE\r
-:10365000892B8093DD01089580959091DD01892368\r
-:103660008093DD0108951092DD0108959091DC01B1\r
-:10367000892B8093DC01089580959091DC0189234A\r
-:103680008093DC0108951092DC0108958093CB01B2\r
-:1036900008951092CB01089580910E0190910F0131\r
-:1036A000FC0131969C01205F3F4F80E09191911188\r
-:1036B0008F5FE217F307D1F70895E0910E01F091C3\r
-:1036C0000F018091DE018083E0910E01F0910F01E6\r
-:1036D00090818091DD01892B8083E0910E01F09132\r
-:1036E0000F0190818091DC01892B80838091CB0137\r
-:1036F000882361F0E0910E01F0910F019081892BF8\r
-:1037000080830E944C1B81111092CB0180910E018D\r
-:1037100090910F010C948B1020E0009739F0AC01D0\r
-:1037200041505109842395232F5FF7CF822F0895AD\r
-:10373000CF92DF92EF92FF926C01EE24FF24C1142E\r
-:10374000D104E104F10421F0C701B60120E101C078\r
-:1037500020E0C72ED82EE92EFF24C114D104E104A5\r
-:10376000F10419F0285FC701B6016B017C0154E038\r
-:10377000F694E794D794C7945A95D1F7C114D1041D\r
-:10378000E104F10419F02C5FC701B6016B017C0163\r
-:1037900042E0F694E794D794C7944A95D1F7C114C0\r
-:1037A000D104E104F10419F02E5FC701B601DC0178\r
-:1037B000CB01B695A79597958795892B8A2B8B2B4F\r
-:1037C00009F02F5F822FFF90EF90DF90CF90089548\r
-:1037D0008091F801843039F11092E00120E488E111\r
-:1037E00090E00FB6F894A895809360000FBE2093E8\r
-:1037F000600080E00E94790983B7817F846083BF85\r
-:1038000083B7816083BF7894889583B78E7F83BFA9\r
-:103810000FB6F894A895809160008861809360004D\r
-:10382000109260000FBE089508950E9452030E94F6\r
-:1038300065030E94141C0E945A0491E0811101C08A\r
-:1038400090E0892F08950E9418150E947F100C9413\r
-:10385000790982E084BD93E095BD9AEF97BD80938E\r
-:103860006E0008952FB7F8948091E1019091E201E4\r
-:10387000A091E301B091E4012FBF0895CF92DF92B0\r
-:10388000EF92FF920F931F932FB7F8944091E101AD\r
-:103890005091E2016091E3017091E4012FBF6A0150\r
-:1038A0007B01EE24FF248C0120E030E0C016D1061D\r
-:1038B000E206F30610F4415051099A01281B390B16\r
-:1038C000C9011F910F91FF90EF90DF90CF90089565\r
-:1038D0001F920F920FB60F9211248F939F93AF9365\r
-:1038E000BF938091E1019091E201A091E301B09139\r
-:1038F000E4010196A11DB11D8093E1019093E201C5\r
-:10390000A093E301B093E401BF91AF919F918F9198\r
-:103910000F900FBE0F901F9018950E947C0DF89489\r
-:103920002FEF87EA91E6215080409040E1F700C0F8\r
-:10393000000087E090EBDC0180930102909302028B\r
-:10394000A0930302B09304029CE088E10FB6F894C0\r
-:10395000A895809360000FBE90936000FFCF0E94F7\r
-:10396000E71C811102C00E94CD1C0E94F21C8093B2\r
-:10397000DF010E94FA1C90E09093F3018093F20122\r
-:1039800087FB882780F980930D010E94F61C682F21\r
-:1039900070E080E090E00C94D8186DEE7EEF80E04F\r
-:1039A00090E00E94432360E082E090E00E94322396\r
-:1039B00060E083E090E00E94322360E084E090E0E9\r
-:1039C0000E94322360E085E090E00C94322380E096\r
-:1039D00090E00E942C2321E08D3E9E4F09F020E0D4\r
-:1039E000822F089582E090E00C94242383E090E0FD\r
-:1039F0000C94242384E090E00C942423682F84E02A\r
-:103A000090E00C9432238091E70180FF0BC060911D\r
-:103A1000130185E0689FB001112475956795759530\r
-:103A200067952BC081FF09C06091130185E0689FF5\r
-:103A3000B00111247595679520C082FF07C0609181\r
-:103A4000130185E0689FB001112417C09091E8012F\r
-:103A50009923D1F060911201961788F720911301F4\r
-:103A600085E0289F90011124929FA001939F500D03\r
-:103A7000112470E0CA010E94F6226038710540F4FA\r
-:103A80006115710539F002C065E070E0862F089578\r
-:103A90008FE7089581E008958091E70180FF08C0D5\r
-:103AA0006091110170E0759567957595679521C0D6\r
-:103AB00081FF06C06091110170E07595679519C08E\r
-:103AC00082FF04C06091110170E010C09091E80184\r
-:103AD0009923C1F0609110019617A0F78091110110\r
-:103AE000899FC001112470E00E94F62260387105A0\r
-:103AF00028F46115710521F0862F08958FE7089548\r
-:103B000081E0089561E070E0F4CF803F21F40E94ED\r
-:103B1000031D819504C0813F29F40E94031D8093F9\r
-:103B2000EB010895823F21F40E94031D819504C09A\r
-:103B3000833F29F40E94031D8093EA010895893F81\r
-:103B400019F40E944C1D05C08A3F31F40E944C1D9F\r
-:103B500081958093EC0108958B3F21F40E944C1DC8\r
-:103B6000819504C08C3F29F40E944C1D8093ED0187\r
-:103B70000895843F21F48091E901816017C0853F59\r
-:103B800021F48091E901826011C0863F21F4809187\r
-:103B9000E90184600BC0873F21F48091E9018860CE\r
-:103BA00005C0883F31F48091E90180618093E9018B\r
-:103BB00008958D3F21F48091E70181600BC08E3F15\r
-:103BC00021F48091E701826005C08F3F29F4809144\r
-:103BD000E70184608093E7010895803F39F4809184\r
-:103BE000EB0187FF6CC01092EB0169C0813F29F4A3\r
-:103BF0008091EB011816BCF362C09091EA01823FFC\r
-:103C000029F497FF5CC01092EA0159C0833F19F470\r
-:103C10001916CCF354C0893F41F48091EC01181679\r
-:103C20000CF04DC01092EC014AC08A3F29F48091FB\r
-:103C3000EC0187FF44C0F6CF8B3F39F48091ED0152\r
-:103C400087FF3DC01092ED013AC08C3F29F480916E\r
-:103C5000ED011816BCF333C0843F21F48091E901D3\r
-:103C60008E7F17C0853F21F48091E9018D7F11C0BF\r
-:103C7000863F21F48091E9018B7F0BC0873F21F4BF\r
-:103C80008091E901877F05C0883F31F48091E90187\r
-:103C90008F7E8093E90113C08D3F21F48091E7016D\r
-:103CA0008E7F0BC08E3F21F48091E7018D7F05C090\r
-:103CB0008F3F29F48091E7018B7F8093E70180910A\r
-:103CC000EA0181110EC08091EB0181110AC080913F\r
-:103CD000EC01811106C08091ED01811102C01092AA\r
-:103CE000E801089589EE91E00E9496100E94321C2E\r
-:103CF0009093E6018093E50108951F93CF93DF939E\r
-:103D00008091E5019091E6010E943E1CAC019091EA\r
-:103D1000E801992321F02091140130E006C02091A0\r
-:103D200015018AE0289F900111244217530708F4D7\r
-:103D300086C08091EA01C091EB01D091EC01109115\r
-:103D4000ED01811107C0C11176C0D11174C01111EC\r
-:103D500072C075C09F3F19F09F5F9093E8011816DD\r
-:103D600024F40E94031D8093EA018091EA0187FFF9\r
-:103D700005C00E94031D81958093EA011C1624F45E\r
-:103D80000E94031D8093EB018091EB0187FF05C02A\r
-:103D90000E94031D81958093EB016091EA016623E7\r
-:103DA00039F1C091EB01CC2319F1772767FD7095AC\r
-:103DB000872F972F0E94FD2123E333E343E35FE343\r
-:103DC0000E9461220E94C5216093EA016C2F77272F\r
-:103DD00067FD7095872F972F0E94FD2123E333E322\r
-:103DE00043E35FE30E9461220E94C5216093EB01DF\r
-:103DF0001D1624F40E944C1D8093EC018091EC016F\r
-:103E000087FF05C00E944C1D81958093EC0111161F\r
-:103E100024F40E944C1D8093ED018091ED0187FFF9\r
-:103E200005C00E944C1D81958093ED01DF91CF91DB\r
-:103E30001F910C94721E9F3F09F08ECF96CFDF9199\r
-:103E4000CF911F910895E9EEF1E085E0DF011D9229\r
-:103E50008A95E9F71092E8011092E70108958330FE\r
-:103E600081F128F4813059F08230D1F00895853005\r
-:103E700009F449C0B8F1863009F456C0089580911C\r
-:103E80001501262F30E0280F311D2F3F310524F476\r
-:103E9000680F6093150108958FEF809315010895C1\r
-:103EA00080911401262F30E0280F311D2F3F31055E\r
-:103EB00024F4680F6093140108958FEF8093140128\r
-:103EC000089580911301262F30E0280F311D2F3FD8\r
-:103ED000310524F4680F6093130108958FEF8093E8\r
-:103EE0001301089580911201262F30E0280F311D13\r
-:103EF0002F3F310524F4680F6093120108958FEF6E\r
-:103F000080931201089580911101262F30E0280F2F\r
-:103F1000311D2F3F310524F4680F6093110108957E\r
-:103F20008FEF80931101089580911001262F30E0CA\r
-:103F3000280F311D2F3F310524F4680F60931001C5\r
-:103F400008958FEF809310010895833011F128F4C4\r
-:103F5000813049F0823091F00895853081F120F16F\r
-:103F60008630C1F1089580911501681720F4861BF1\r
-:103F70008093150108951092150108958091140100\r
-:103F8000681720F4861B8093140108951092140181\r
-:103F9000089580911301681720F4861B8093130104\r
-:103FA000089510921301089580911201681720F46A\r
-:103FB000861B80931201089510921201089580913A\r
-:103FC0001101681720F4861B809311010895109247\r
-:103FD0001101089580911001681720F4861B8093C9\r
-:103FE000100108951092100108950F931F938D31C1\r
-:103FF00009F471C008F045C0803109F485C008F5A6\r
-:10400000873009F46FC068F4863009F0ADC0809144\r
-:10401000DF01817F8E7F8093DF0181E08093EF015C\r
-:10402000A4C08B3009F49EC08E3009F09DC08091F1\r
-:10403000DF0182FB222720F991E0922790FB82F991\r
-:104040006CC0863109F48EC060F4813109F08CC0F7\r
-:104050000E94181590910D0181E0892780930D0130\r
-:1040600081C0893109F47EC08B3109F07DC0809117\r
-:10407000DF0181FB222720F991E0922790FB81F953\r
-:104080004CC0853309F466C048F4873209F462C035\r
-:1040900008F44FC0893209F45DC066C0833438F437\r
-:1040A0008A3308F044C0883309F45CC05DC08334AF\r
-:1040B00009F450C0883409F057C00E9418150FEF5A\r
-:1040C00013ED20E3015010402040E1F700C0000054\r
-:1040D0000E948D1C47C00E947F210E947F100E9479\r
-:1040E000790940C09091DF01892F8095817080FB14\r
-:1040F00090F929F0966098609093DF0136C0997F1F\r
-:10410000977F9093DF012EC08091DF0183FB2227F0\r
-:1041100020F991E0922790FB83F98093DF019923A6\r
-:1041200009F18091DF0181608093DF011BC0895319\r
-:1041300001C08D5141E050E060E070E08A019B01D8\r
-:1041400004C0000F111F221F331F8A95D2F7C90127\r
-:10415000B80104C061E070E080E090E00E94D818EF\r
-:104160000E94181581E001C080E01F910F91089511\r
-:1041700080E0089580E008958E518A3030F4E82F71\r
-:10418000F0E0E65DFE4F8081089580E00895CF93D2\r
-:10419000C82F8091EF01813079F018F08230E9F179\r
-:1041A00086C0E0910E01F0910F018081813169F0AC\r
-:1041B000823209F07EC009C0E0910E01F0910F013A\r
-:1041C0008081813111F0823261F48C2F0E94B820FD\r
-:1041D000811104C08C2F0E94F51F1DC081E090E06A\r
-:1041E0001AC08C2F0E94BA20811114C0C43179F0FA\r
-:1041F00048F4CB3079F0C03109F05FC082E08093A1\r
-:10420000EF0108C0C93219F0C83321F056C010922E\r
-:10421000EF0153C081E0817052C0C93281F110F5C5\r
-:10422000C43169F1A8F4C73009F045C08AE0809331\r
-:10423000150194E19093140193E0909313018093FE\r
-:10424000120188E08093110188E28093100133C04D\r
-:1042500082EE8C0F863078F58C2F0E94BC208093E4\r
-:10426000EE0129C0CE34E9F020F4CB3421F56AE028\r
-:1042700013C0C13579F0C235F1F461E00DC0809111\r
-:10428000EE01882319F01092EE0115C081E08093B1\r
-:10429000EF0115C061E006C08091EE010E942F1F62\r
-:1042A0000AC06AE08091EE010E94A51F04C010922E\r
-:1042B000EF0180E004C081E002C080E0ACCFCF918C\r
-:1042C0000895E1E8F0E080818860808380818160EA\r
-:1042D00080838FB7F89493E09093890090ED90934A\r
-:1042E00088008FBF0895EFE6F0E0808182608083D0\r
-:1042F0000895EFE6F0E080818D7F80830895EFE6FA\r
-:10430000F0E0908182E08927808308951F920F92C8\r
-:104310000FB60F9211242F933F934F935F936F9398\r
-:104320007F938F939F93AF93BF93EF93FF9380916E\r
-:10433000F0019091F10101969093F1018093F001C9\r
-:10434000811103C082E00E947909E091F101E695B4\r
-:10435000E695F0E0EB54FB4FE4918091F0018E1371\r
-:1043600003C080E00E947909FF91EF91BF91AF9166\r
-:104370009F918F917F916F915F914F913F912F917D\r
-:104380000F900FBE0F901F9018950E94CC2168943B\r
-:10439000B1110C945B2208950E94402288F09F572F\r
-:1043A00098F0B92F9927B751B0F0E1F0660F771F59\r
-:1043B000881F991F1AF0BA95C9F714C0B13091F04F\r
-:1043C0000E945A22B1E008950C945A22672F782F48\r
-:1043D0008827B85F39F0B93FCCF386957795679514\r
-:1043E000B395D9F73EF490958095709561957F4F80\r
-:1043F0008F4F9F4F0895E89409C097FB3EF4909526\r
-:104400008095709561957F4F8F4F9F4F9923A9F0AD\r
-:10441000F92F96E9BB279395F6958795779567953C\r
-:10442000B795F111F8CFFAF4BB0F11F460FF1BC080\r
-:104430006F5F7F4F8F4F9F4F16C0882311F096E913\r
-:1044400011C0772321F09EE8872F762F05C06623C1\r
-:1044500071F096E8862F70E060E02AF09A95660F7A\r
-:10446000771F881FDAF7880F9695879597F9089533\r
-:1044700057FD9058440F551F59F05F3F71F0479515\r
-:10448000880F97FB991F61F09F3F79F087950895FA\r
-:10449000121613061406551FF2CF4695F1DF08C019\r
-:1044A000161617061806991FF1CF86957105610536\r
-:1044B00008940895E894BB2766277727CB0197F9DE\r
-:1044C00008950E9474220C94E5220E94D72238F0AD\r
-:1044D0000E94DE2220F0952311F00C94CE220C9441\r
-:1044E000D42211240C945B220E94382270F3959FF1\r
-:1044F000C1F3950F50E0551F629FF001729FBB27DB\r
-:10450000F00DB11D639FAA27F00DB11DAA1F649F76\r
-:104510006627B00DA11D661F829F2227B00DA11D29\r
-:10452000621F739FB00DA11D621F839FA00D611DAF\r
-:10453000221F749F3327A00D611D231F849F600DD0\r
-:10454000211D822F762F6A2F11249F5750409AF0F9\r
-:10455000F1F088234AF0EE0FFF1FBB1F661F771F85\r
-:10456000881F91505040A9F79E3F510580F00C9450\r
-:10457000CE220C945B225F3FE4F3983ED4F3869501\r
-:1045800077956795B795F795E7959F5FC1F7FE2BF0\r
-:10459000880F911D9695879597F9089597F99F67CC\r
-:1045A00080E870E060E008959FEF80EC08950024BB\r
-:1045B0000A941616170618060906089500240A9488\r
-:1045C00012161306140605060895092E0394000C0E\r
-:1045D00011F4882352F0BB0F40F4BF2B11F460FF9D\r
-:1045E00004C06F5F7F4F8F4F9F4F089597FB072E3B\r
-:1045F00016F4009407D077FD09D00E94102307FC21\r
-:1046000005D03EF4909581959F4F089570956195E2\r
-:104610007F4F0895EE0FFF1F0590F491E02D099450\r
-:10462000AA1BBB1B51E107C0AA1FBB1FA617B707D8\r
-:1046300010F0A61BB70B881F991F5A95A9F78095F4\r
-:104640009095BC01CD010895F999FECF92BD81BD31\r
-:10465000F89A992780B50895A8E1B0E042E050E0CB\r
-:104660000C944B23262FF999FECF92BD81BDF89A69\r
-:10467000019700B4021631F020BD0FB6F894FA9AF3\r
-:10468000F99A0FBE08950196272F0E9433230C94A8\r
-:104690003223DC01CB01FC01F999FECF06C0F2BD4B\r
-:1046A000E1BDF89A319600B40D9241505040B8F7F0\r
-:0646B0000895F894FFCF0D\r
-:1046B60002207B09090AE609B2097E090101CC013B\r
-:1046C60028080A03140A404D363975042804F203F3\r
-:1046D600B9034C0365037E03970301020304050631\r
-:0446E60007080900B8\r
-:00000001FF\r
diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c b/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c
deleted file mode 100644 (file)
index 87b77e4..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  |CMD+{ |           | CMD+}|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  | Hyper|           |  Meh |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |Ctrl/Esc|   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|  LGui  |
- * |--------+------+------+------+------+------| LGui |           | LGui |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Del  |Ctrl/Esc|
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   LGUI(LSFT(KC_LBRC)),
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   ALL_T(KC_NO),
-        CTL_T(KC_ESC),  KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
-        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
-                                              ALT_T(KC_APP),  KC_LGUI,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             LGUI(LSFT(KC_RBRC)),   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             MEH_T(KC_NO),          KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                                    KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_QUOT,
-             KC_LGUI,               KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
-                                            KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
-             KC_DELT,        CTL_T(KC_ESC),
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/tm2030/keymap.c b/keyboards/ergodox_ez/keymaps/tm2030/keymap.c
deleted file mode 100644 (file)
index ca80752..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/* TypeMatrix-2030-like keymap  */
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "led.h"
-
-#define BASE 0 // default layer
-#define DVRK 1 // Dvorak layer
-#define NUMR 8 // numeric layer
-#define FNLR 9 // fn layer
-
-#define MDBL0 1
-#define MFNLR 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   ]    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |Backsp|           |Backsp|   Y  |   U  |   I  |   O  |   P  |   [    |
- * |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
- * | LShift |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | '/Shift|
- * |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | \/Shift|
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   -  | Home |   =  |End/Ctl|
- *   `-----------------------------------'                                      `-----------------------------------'
- *                                       ,--------------.       ,-------------.
- *                                       |Esc/Alt| num  |       | Left |Right |
- *                                ,------+-------+------|       |------+------+------.
- *                                |      |       | PgUp |       |  Up  |      |      |
- *                                |Space |LShift |------|       |------|RShift|Space |
- *                                |      |       | PgDn |       | Down |      |      |
- *                                `---------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_DELT,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_BSPC,
-        KC_LSFT,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_ENT,
-        KC_LCTL,        M(MFNLR),     KC_LGUI,KC_MPLY,ALT_T(KC_APP),
-
-                                              ALT_T(KC_ESC),  TG(NUMR),
-                                                              KC_PGUP,
-                                            KC_SPC, KC_LSFT,  KC_PGDN,
-
-        // right hand
-             KC_DELT,     KC_6,   KC_7,    KC_8,    KC_9,    KC_0,     KC_RBRC,
-             KC_BSPC,     KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,     KC_LBRC,
-                          KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN,  SFT_T(KC_QUOT),
-             KC_ENT,      KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH,  SFT_T(KC_BSLS),
-                                  KC_RALT, KC_MINS, KC_HOME, KC_EQL,   CTL_T(KC_END),
-
-             KC_LEFT, KC_RGHT,
-             KC_UP,
-             KC_DOWN, KC_RSFT,  KC_SPC
-    ),
-/* Dvorak layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   =    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   '  |   ,  |   .  |   P  |   Y  |Backsp|           |Backsp|   F  |   G  |   C  |   R  |   L  |   /    |
- * |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
- * | LShift |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  | -/Shift|
- * |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
- * | LShift |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | \/Shift|
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   [  | Home |   ]  |End/Ctl|
- *   `-----------------------------------'                                      `-----------------------------------'
- *                                       ,--------------.       ,-------------.
- *                                       |Esc/Alt| num  |       | Left |Right |
- *                                ,------+-------+------|       |------+------+------.
- *                                |      |       | PgUp |       |  Up  |      |      |
- *                                |Space |LShift |------|       |------|RShift|Space |
- *                                |      |       | PgDn |       | Down |      |      |
- *                                `---------------------'       `--------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[DVRK] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,   KC_1,      KC_2,    KC_3,    KC_4,   KC_5,   KC_DELT,
-        KC_TAB,   KC_QUOT,   KC_COMM, KC_DOT,  KC_P,   KC_Y,   KC_BSPC,
-        KC_LSFT,  KC_A,      KC_O,    KC_E,    KC_U,   KC_I,
-        KC_LSFT,  KC_SCLN,   KC_Q,    KC_J,    KC_K,   KC_X,   KC_ENT,
-        KC_LCTL,  M(MFNLR),  KC_LGUI, KC_MPLY, ALT_T(KC_APP),
-
-                                              ALT_T(KC_ESC),  TG(NUMR),
-                                                              KC_PGUP,
-                                            KC_SPC, KC_LSFT,  KC_PGDN,
-
-        // right hand
-             KC_DELT,     KC_6,   KC_7,    KC_8,    KC_9,    KC_0,     KC_EQL,
-             KC_BSPC,     KC_F,   KC_G,    KC_C,    KC_R,    KC_L,     KC_SLSH,
-                          KC_D,   KC_H,    KC_T,    KC_N,    KC_S,     SFT_T(KC_MINS),
-             KC_ENT,      KC_B,   KC_M,    KC_W,    KC_V,    KC_Z,     SFT_T(KC_BSLS),
-                                  KC_RALT, KC_LBRC, KC_HOME, KC_RBRC,  CTL_T(KC_END),
-
-             KC_LEFT, KC_RGHT,
-             KC_UP,
-             KC_DOWN, KC_RSFT,  KC_SPC
-    ),
-/* Numeric Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
- *   `----------------------------------'                                       `-----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |n.lock|c.lock|
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[NUMR] = KEYMAP(
-       // left hand
-       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_TRNS,
-       KC_TRNS, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_TRNS,
-       KC_TRNS, KC_F11,  KC_F12,  KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                                               KC_TRNS, KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,   KC_TAB,  KC_PSLS, KC_PAST, KC_PMNS,
-       KC_TRNS, KC_TRNS, KC_HOME, KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
-                KC_UP,   KC_END,  KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
-       KC_LEFT, KC_DOWN, KC_RGHT, KC_P1,   KC_P2,   KC_P3,   KC_PENT,
-                         KC_TRNS, KC_P0,   M(MDBL0),KC_PDOT, CTL_T(KC_PENT),
-
-       KC_NLCK, KC_CAPS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* fn layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       | Next |      |      |
- *                                 | Mute |      |------|       |------|      |      |
- *                                 |      |      |      |       | Prev |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[FNLR] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_INS,
-       KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,      KC_TRNS, KC_VOLU,
-       KC_TRNS, KC_TRNS, KC_TRNS,      KC_CALC,     KC_MAIL,      KC_WHOM,
-       KC_TRNS, KC_TRNS, LSFT(KC_DELT),LCTL(KC_INS),LSFT(KC_INS), KC_MUTE, KC_VOLD,
-       KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,     KC_TRNS,
-
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_MUTE, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_INS,   KC_EJCT, KC_PWR,  KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-
-       KC_TRNS, KC_TRNS,
-       KC_MPRV,
-       KC_MNXT, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-    switch(id) {
-        case MDBL0:
-            if (record->event.pressed) {
-              return MACRO( I(25), T(P0), T(P0), END );
-            }
-        break;
-        case MFNLR:
-            layer_invert(NUMR);
-            layer_invert(FNLR);
-            break;
-    }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    // led 1: numeric layer
-    if (layer_state & (1 << NUMR)) {
-        ergodox_right_led_1_on();
-    }
-    // led 2: Dvorak layer
-    if (default_layer_state == 1 << DVRK) {
-        ergodox_right_led_2_on();
-    }
-    // led 3: caps lock
-    if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
-      ergodox_right_led_3_on();
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/tm2030/readme.md b/keyboards/ergodox_ez/keymaps/tm2030/readme.md
deleted file mode 100644 (file)
index 6cd7947..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-# TypeMatrix™ 2030 inspired layout
-
-This is a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ. The _TypeMatrix_ is a nice small ergonomic keyboard with a matrix layout, and it provides several nice features like `enter`, `backspace` and `delete` at the center, bigger `shift` keys and international `cut`, `copy` and `paste` keys.
-
-The idea in this ErgoDox layout is to make it is as close as possible to the TM2030, such that it would be easy to switch between the TM and the ErgoDox. No _fancy_ features have been implemented, as this is intended to be a base for further customization if desired. Some keys have been duplicated in order to accomodate for most people.
-
-Most of the TM2030 features are supported except
-* automatic window switching (alt-tab key, at the left of the space key)
-* show desktop key (at the right of the space key)
-* 102/106 modes
-
-Dvorak mode is even supported by pressing [`Magic`](/TMK_readme.md#magic-commands)+`1` (`Magic` is by default `LShift`+`RShift`)
-
-Some keys had to be moved around to fit into the ErgoDox, especially the `F1`-`F12` keys and the arrow keys.
-
-## Base Layer
-This is the default layer, close to the TM with the following differences:
-
- - Top row (with the `F`-keys) and rightmost column (with application shortcuts) are removed, the corresponding keys are displaced elsewhere.
- - Bottom-left keys are reorganized on a single row as: `Ctrl`, `fn`, `Gui`, `Play`, `App`/`Alt`.
- - `shuffle` and `desktop` are not supported.
- - `right-shift` is moved on `'`, `\` and on the right thumb (the latter is actually the only _true_ `right-shift`, and must be used in the `Magic` key combination).
- - `right-ctrl` is moved on `End`.
- - `]` is moved in place of the dash (`-`).
- - Dash (`-`) and `=` are moved on bottom right row.
- - Arrows and `PgUp`/`PgDn` are moved on the thumbs.
-
-```
-,--------------------------------------------------.           ,--------------------------------------------------.
-|   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   ]    |
-|--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-| Tab    |   Q  |   W  |   E  |   R  |   T  |Backsp|           |Backsp|   Y  |   U  |   I  |   O  |   P  |   [    |
-|--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
-| LShift |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | '/Shift|
-|--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
-| LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | \/Shift|
-`--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-  |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   -  | Home |   =  |End/Ctl|
-  `-----------------------------------'                                      `-----------------------------------'
-                                      ,--------------.       ,-------------.
-                                      |Esc/Alt| num  |       | Left |Right |
-                               ,------+-------+------|       |------+------+------.
-                               |      |       | PgUp |       |  Up  |      |      |
-                               |Space |LShift |------|       |------|RShift|Space |
-                               |      |       | PgDn |       | Down |      |      |
-                               `---------------------'       `--------------------'
-```
-
-### Layer Switching
-- Use `num` to toggle the Numeric Layer.
-- Hold `fn` to temporarily activate the Numeric & Fn Layers.
-
-As on the original TM 2030, when `num` layer is activated, holding `fn` disables it but enables the other `fn` keys.
-
-## Dvorak Layer
-Same as Layer 0 but with _Dvorak_ layout, to use with QWERTY OS layout.
-
-Enable Dvorak layout with [`Magic`](/TMK_readme.md#magic-commands)+`1` (`LShift`+`RShift`+`1`), disable with `Magic`-`0`.
-
-The middle (green) led indicates when the Dvorak layer is activated.
-
-    ,--------------------------------------------------.           ,--------------------------------------------------.
-    |   `    |   1  |   2  |   3  |   4  |   5  | Del  |           | Del  |   6  |   7  |   8  |   9  |   0  |   =    |
-    |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-    | Tab    |   '  |   ,  |   .  |   P  |   Y  |Backsp|           |Backsp|   F  |   G  |   C  |   R  |   L  |   /    |
-    |--------+------+------+------+------+------|ace   |           |ace   |------+------+------+------+------+--------|
-    | LShift |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  | -/Shift|
-    |--------+------+------+------+------+------|Enter |           |Enter |------+------+------+------+------+--------|
-    | LShift |   ;  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | \/Shift|
-    `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-      |LCtrl |  fn  | LGui | Play |App/Alt|                                      | RAlt |   [  | Home |   ]  |End/Ctl|
-      `-----------------------------------'                                      `-----------------------------------'
-                                          ,--------------.       ,-------------.
-                                          |Esc/Alt| num  |       | Left |Right |
-                                   ,------+-------+------|       |------+------+------.
-                                   |      |       | PgUp |       |  Up  |      |      |
-                                   |Space |LShift |------|       |------|RShift|Space |
-                                   |      |       | PgDn |       | Down |      |      |
-                                   `---------------------'       `--------------------'
-
-## Numeric Layer
-Numeric layer close to the TM when toggling `num`, with the following differences:
-
-- Numpad is displaced by 1 to the top left.
-- Arrows are displaced by 1 to the left.
-- Provides access to `F1`-`F12`, `caps-lock` and `num-lock`.
-
-The numeric layer is indicated with the left (red) led. Caps-lock is indicated with the right (blue) led.
-
-    ,--------------------------------------------------.           ,--------------------------------------------------.
-    |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |      |      |  Tab |   /  |   *  |   -    |
-    |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-    |        |  F6  |  F7  |  F8  |  F9  |  F10 |      |           |      |      | Home |   7  |   8  |   9  |   +    |
-    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-    |        |  F11 |  F12 |      |      |      |------|           |------|  Up  | End  |   4  |   5  |   6  |   +    |
-    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-    |        |      |      |      |      |      |      |           | Left | Down | Right|   1  |   2  |   3  |KpEnter |
-    `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-      |      |      |      |      |      |                                       |      |   0  |  00  |   .  |Etr/Ctl|
-      `----------------------------------'                                       `-----------------------------------'
-                                           ,-------------.       ,-------------.
-                                           |      |      |       |n.lock|c.lock|
-                                    ,------|------|------|       |------+------+------.
-                                    |      |      |      |       |      |      |      |
-                                    |      |      |------|       |------|      |      |
-                                    |      |      |      |       |      |      |      |
-                                    `--------------------'       `--------------------'
-
-## Fn Layer
-Activated simultaneously with the Numeric layer when holding the `fn` key. As on the TM, it provides access to the following features:
-- `cut`, `copy` and `paste`
-- `volume up`, `volume down` and `mute` — as opposed to the TM, these are only on left hand
-- `previous track` and `next track`
-- `calculator`, `mail` and `browser home`
-- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` and `pause`
-
-Note: the `eject` key does not work due to jackhumbert/qmk_firmware#82
-
-    ,--------------------------------------------------.           ,--------------------------------------------------.
-    |        |      |      |      |      |      |Insert|           |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
-    |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
-    |        |      |      |      |      |      |VolUp |           |      |      |      |      |      |      | Pause  |
-    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-    |        |      |      | Calc | Mail |Browsr|------|           |------|      |      |      |      |      |        |
-    |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
-    |        |      | cut  | copy |paste | Mute |VolDn |           |      |      |      |      |      |      |        |
-    `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
-      |      |      |      |      |      |                                       |      |      |      |      |      |
-      `----------------------------------'                                       `----------------------------------'
-                                           ,-------------.       ,-------------.
-                                           |      |      |       |      |      |
-                                    ,------|------|------|       |------+------+------.
-                                    |      |      |      |       | Next |      |      |
-                                    | Mute |      |------|       |------|      |      |
-                                    |      |      |      |       | Prev |      |      |
-                                    `--------------------'       `--------------------'
diff --git a/keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c b/keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c
deleted file mode 100644 (file)
index 87b9fb6..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | Esc    |   1  |   2  |   3  |   4  |   5  |   =  |           |   -  |   6  |   7  |   8  |   9  |   0  |  Enter |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '"   |
- * |--------+------+------+------+------+------| LGui |           | LGui |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |  L1  |   `  |  {   |   }  |  '"  |                                       | Left |  Up  | Down | Right|  L2  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |  Del | Alt  |       | Alt  | Ctrl |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
- *                                 |      |ace   | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
-        KC_TAB,         KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
-        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
-        TG(SYMB),       KC_GRV,       KC_LBRC,        KC_RBRC,KC_QUOT,
-                                                      KC_DELT,KC_LALT,
-                                                              KC_HOME,
-                                               KC_SPC,KC_BSPC,KC_END,
-        // right hand
-             KC_MINS,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_ENT,
-             TG(SYMB),    KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                          KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,          KC_QUOT,
-             KC_LGUI,     KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_RSFT,
-                                  KC_LEFT,KC_UP,  KC_DOWN,KC_RIGHT,          TG(MDIA),
-             KC_RALT,     KC_RCTL,
-             KC_PGUP,
-             KC_PGDN,KC_TAB, KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        if (record->event.pressed) {
-          register_code(KC_RSFT);
-        } else {
-          unregister_code(KC_RSFT);
-        }
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md b/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md
deleted file mode 100644 (file)
index f9d76ef..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# ErgoDox EZ OS X Simplified Configuration
-
-This keyboard configuration replaces the hyper and meh keys with the command key. It also removes all of the meta keys that require a "hold" because I found that I hesitate when I type, which can accidentally fire those combinations. On the upper left of the left hand, I mimicked the Mac placement of tab and escape, and on the upper right of the right hand, I placed an additional enter key for convenience when breezing through prompts.
-
-This is my standard working configuration for now, but I can see myself tweaking it as I use it more. I highly recommend you do the same.
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/config.h b/keyboards/ergodox_ez/keymaps/townk_osx/config.h
deleted file mode 100644 (file)
index 58ba690..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x1307
-#define DEVICE_VER      0x0001
-#define MANUFACTURER    ErgoDox EZ
-#define PRODUCT         ErgoDox EZ
-#define DESCRIPTION     t.m.k. keyboard firmware for Ergodox
-
-/* key matrix size */
-#define MATRIX_ROWS 14
-#define MATRIX_COLS 6
-
-#define MOUSEKEY_DELAY          100
-#define MOUSEKEY_INTERVAL       20
-#define MOUSEKEY_MAX_SPEED      3
-#define MOUSEKEY_TIME_TO_MAX    10
-
-#define TAPPING_TOGGLE  1
-
-#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
-#define ROWS (int []){ D0, D5, B5, B6 }
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE    2
-#define TAPPING_TERM    200
-#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
-    keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
-    keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
-)
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-//#define DEBUG_MATRIX_SCAN_RATE
-#define ONESHOT_TAP_TOGGLE 2
-#define ONESHOT_TIMEOUT 3000
-
-#endif
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c b/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c
deleted file mode 100644 (file)
index 07e58a4..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "action_util.h"
-#include "led.h"
-#include "keymap.h"
-#include "timer.h"
-
-/*
-
-# Why this Layout
-
-This layout was based on Kinesis layout and other ErgoDox user layouts
-available. It's target to be used on a MacOS but I'm pretty sure it can be
-addapted to Windows and/or Linux easily.
-
-## Function Key
-
-The `fn` key work almost like it would in any other keyboard with the exception
-it has a semi-sticky behavior. What does that mean?
-
-Well, if you press the `fn` and release it, the keyboard will be put on the
-_function layout_ and the next key stroke will be processed as if the `fn` key
-was pressed. Aftwards, the leyout get back to _normal_. If you hold `fn` and
-press any other key, when you release them, the keyboard leyout is back to
-_normal_.
-
-While pressing the `fn` with the left hand and strikeing the other keys on the
-right hand is farly easy, the same cannot being said for the other keys on the
-left side. So, instead of trying to do contorcionism with my left hand, I
-decided to do a semi-sticky version of `fn`. This way, I can press the  `fn`
-key with my pinky, release it and press the `1` key to issue an `F1` to the
-operating system.
-
-## Key-Pad Key
-
-The `key pad` key is a layout switch key. If pressed, it will put the keyboard
-on the _key pad layout_ and stay there until key is pressed again.
-
-This is used to make the keyboard behave mostly like a **num pad keyboard**.
-
-## Notes
-- Regardless in which layout you are, keys from other layouts are not
-  accessible. This means that if you are on the _key pad layout_, the left hand
-  will be pretty much unusable.
-  Of course that like anything else, there are exceptions to this rule.
-  Modifiers should remain accessible throughout the layers.
-- The _shift key_ is, like the _function key_, also configured to have a sticky
-  behavior.
-- All sticky keys have a timeout of 3 seconds.
-
-*/
-#define BASE   0
-#define KEYPAD 1
-#define FN     2
-
-#define MACRO_TMUX_ESC        10
-#define MACRO_TMUX_PASTE      11
-#define MACRO_OSX_COPY        12
-#define MACRO_OSX_PASTE       13
-
-#define M_TESC   M(MACRO_TMUX_ESC)
-#define M_TPASTE M(MACRO_TMUX_PASTE)
-#define M_OSXCPY M(MACRO_OSX_COPY)
-#define M_OSXPST M(MACRO_OSX_PASTE)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Base Layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |        `~ |   1  |   2  |   3  |   4  |   5  | ESC  |           | Pwr  |   6  |   7  |   8  |   9  |   0  | - _       |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * | Tab       |   Q  |   W  |   E  |   R  |   T  | F16  |           | F17  |   Y  |   U  |   I  |   O  |   P  | = +       |
- * |-----------+------+------+------+------+------| Meh  |           | Meh  |------+------+------+------+------+-----------|
- * | \ (Ctrl)  |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  | ' " (Ctrl)|
- * |-----------+------+------+------+------+------| F18  |           | F19  |------+------+------+------+------+-----------|
- * |  LShift   |   Z  |   X  |   C  |   V  |   B  | Hyper|           | Hyper|   N  |   M  |   ,  |   .  |   /  |   RShift  |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *     | FN    | KPAD |LCtrl | LAlt | LGui |                                       | RGui | RAlt | RCtrl| KPAD |    FN |
- *     `-----------------------------------'                                       `-----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         | M(0) | M(1) |           | M(2) | M(3) |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      | Home |           | PgUp |      |      |
- *                                  |Backsp| Del  |------|           |------| Enter| Space|
- *                                  |      |      | End  |           | PgDn |      |      |
- *                                  `--------------------'           `--------------------'
- *
- * M(0) = Ctrk+A Esc
- *        (this is used to issue the Esc key to the Tmux application)
- * M(1) = Ctrk+A P
- *        (this is used to issue the Paste key to the Tmux application)
- * M(2) = Cmd+C
- * M(3) = Cmd+V
- */
-[BASE]=KEYMAP(//left half
-              KC_GRV,         KC_1,       KC_2,     KC_3,           KC_4,       KC_5,     KC_ESC,
-              KC_TAB,         KC_Q,       KC_W,     KC_E,           KC_R,       KC_T,     MEH_T(KC_F16),
-              CTL_T(KC_BSLS), KC_A,       KC_S,     KC_D,           KC_F,       KC_G,
-              KC_FN2,         KC_Z,       KC_X,     KC_C,           KC_V,       KC_B,     ALL_T(KC_F18),
-              KC_FN1,         TG(KEYPAD), KC_LCTRL, KC_LALT,        KC_LGUI,
-                                                                                M_TESC,   M_TPASTE,
-                                                                                          KC_HOME,
-                                                                    KC_BSPC,    KC_DELT,  KC_END,
-              //right half
-              KC_POWER,       KC_6,       KC_7,     KC_8,           KC_9,       KC_0,     KC_MINS,
-              MEH_T(KC_F17),  KC_Y,       KC_U,     KC_I,           KC_O,       KC_P,     KC_EQL,
-                              KC_H,       KC_J,     KC_K,           KC_L,       KC_SCLN,  CTL_T(KC_QUOT),
-              ALL_T(KC_F19),  KC_N,       KC_M,     KC_COMM,        KC_DOT,     KC_SLSH,  KC_FN2,
-                              KC_RGUI,    KC_RALT,  CTL_T(KC_LBRC), KC_FN3,     KC_FN1,
-              M_OSXCPY,       M_OSXPST,
-              KC_PGUP,
-              KC_PGDN,        KC_ENT,     KC_SPC),
-
-/* Keymap 1: KeyPad Layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |      | LClk | RClk | MClk |      |      |           | BTab | Clear|   /  |   *  |   ^  |   (  |           |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * | M.Accel 2 |      |ScrlUp|  U   |ScrlDn|      |      |           | Tab  |   7  |   8  |   9  |   +  |   )  |           |
- * |-----------+------+------+------+------+------|      |           |      |------+------+------+------+------+-----------|
- * | M.Accel 1 |      |   L  |  D   |  R   |      |------|           |------|   4  |   5  |   6  |   -  |      |           |
- * |-----------+------+------+------+------+------|      |           |Return|------+------+------+------+------+-----------|
- * | M.Accel 0 |      |ScrlL |      |ScrlR |      |      |           |      |   1  |   2  |   3  |   =  |      |           |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *     |       | XXXX |      |      |      |                                       |   0  |   .  |   ,  | XXXX |       |
- *     `-----------------------------------'                                       `-----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         |      |      |           |      |      |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |      |           |      | XXXX |      |
- *                                  |      |      |------|           |------| XXXX |      |
- *                                  |      |      |      |           |      | XXXX |      |
- *                                  `--------------------'           `--------------------'
- */
-[KEYPAD]=KEYMAP(//left half
-                KC_NO,        KC_NO,    KC_MS_BTN1,    KC_MS_BTN2,     KC_MS_BTN3,     KC_NO,   KC_NO,
-                KC_MS_ACCEL2, KC_NO,    KC_MS_WH_UP,   KC_MS_U,        KC_MS_WH_DOWN,  KC_NO,   KC_NO,
-                KC_MS_ACCEL1, KC_NO,    KC_MS_L,       KC_MS_D,        KC_MS_R,        KC_NO,
-                KC_MS_ACCEL0, KC_NO,    KC_MS_WH_LEFT, KC_NO,          KC_MS_WH_RIGHT, KC_NO,   KC_NO,
-                KC_NO,        KC_TRNS,  KC_NO,         KC_NO,          KC_NO,
-                                                                                       KC_NO,   KC_NO,
-                                                                                                KC_NO,
-                                                                       KC_NO,          KC_NO,   KC_NO,
-                //right half
-                LSFT(KC_TAB), KC_CLEAR, KC_KP_SLASH,   KC_KP_ASTERISK, KC_CIRCUMFLEX,  KC_LPRN, KC_NO,
-                KC_TAB,       KC_KP_7,  KC_KP_8,       KC_KP_9,        KC_KP_PLUS,     KC_RPRN, KC_NO,
-                              KC_KP_4,  KC_KP_5,       KC_KP_6,        KC_KP_MINUS,    KC_NO,   KC_NO,
-                KC_KP_ENTER,  KC_KP_1,  KC_KP_2,       KC_KP_3,        KC_KP_EQUAL,    KC_NO,   KC_NO,
-                                        KC_KP_0,       KC_KP_DOT,      KC_KP_COMMA,    KC_TRNS, KC_NO,
-                KC_NO,        KC_NO,
-                KC_NO,
-                KC_NO,        KC_TRNS,  KC_NO),
-
-/* Keymap 2: Functions Layer
- *
- * ,-----------------------------------------------------.           ,-----------------------------------------------------.
- * |           |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |  Vol. Up  |
- * |-----------+------+------+------+------+-------------|           |------+------+------+------+------+------+-----------|
- * |           | Stop |  Rw  |  Rec |  FF  |      | XXXX |           | XXXX |      |      |      |      |      | Vol. Down |
- * |-----------+------+------+------+------+------| XXXX |           | XXXX |------+------+------+------+------+-----------|
- * |  CapsLock | Eject| Prev | Play | Next |      |------|           |------| Left | Down |  Up  | Right|      |   Mute    |
- * |-----------+------+------+------+------+------| XXXX |           | XXXX |------+------+------+------+------+-----------|
- * |  L Shift  |      |      |      |      |      | XXXX |           | XXXX |      |      |      |      |      |  R Shift  |
- * `-----------+------+------+------+------+-------------'           `-------------+------+------+------+------+-----------'
- *     | XXXXX |      | XXXX | XXXX | XXXX |                                       | XXXX | XXXX | XXXX |      | XXXXX |
- *     `-----------------------------------'                                       `-----------------------------------'
- *                                         ,-------------.           ,-------------.
- *                                         |      |      |           |      |      |
- *                                  ,------|------|------|           |------+------+------.
- *                                  |      |      |      |           |      |      |      |
- *                                  |      |      |------|           |------|      |      |
- *                                  |      |      |      |           |      |      |      |
- *                                  `--------------------'           `--------------------'
- *
- * XXX = These keys are transparent keys that, when pressed, they issue the key from the previous layer.
- */
-[FN]=KEYMAP(//left half
-            KC_NO,   KC_F1,          KC_F2,               KC_F3,               KC_F4,                 KC_F5,  KC_F6,
-            KC_NO,   KC_MEDIA_STOP,  KC_MEDIA_REWIND,     KC_MEDIA_SELECT,     KC_MEDIA_FAST_FORWARD, KC_NO,  KC_TRNS,
-            KC_CAPS, KC_MEDIA_EJECT, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK,   KC_NO,
-            KC_LSFT, KC_NO,          KC_NO,               KC_NO,               KC_NO,                 KC_NO,  KC_TRNS,
-            KC_TRNS, KC_NO,          KC_TRNS,             KC_TRNS,             KC_TRNS,
-                                                                                                      KC_NO,  KC_NO,
-                                                                                                              KC_NO,
-                                                                               KC_NO,                 KC_NO,  KC_NO,
-            //right half
-            KC_F7,   KC_F8,          KC_F9,               KC_F10,              KC_F11,                KC_F12, KC_VOLU,
-            KC_TRNS, KC_NO,          KC_NO,               KC_NO,               KC_NO,                 KC_NO,  KC_VOLD,
-                     KC_LEFT,        KC_DOWN,             KC_UP,               KC_RIGHT,              KC_NO,  KC_MUTE,
-            KC_TRNS, KC_NO,          KC_NO,               KC_NO,               KC_NO,                 KC_NO,  KC_RSFT,
-                                     KC_TRNS,             KC_TRNS,             KC_TRNS,               KC_NO,  KC_TRNS,
-            KC_NO,   KC_NO,
-            KC_NO,
-            KC_NO,   KC_NO,          KC_NO)};
-
-const uint16_t PROGMEM fn_actions[] = {
-  [1] = ACTION_LAYER_ONESHOT(FN),
-  [2] = ACTION_MODS_ONESHOT(MOD_LSFT),  // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
-  [3] = ACTION_LAYER_TAP_KEY(KEYPAD, KC_RBRC),
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  // MACRODOWN only works in this function
-  switch(id) {
-    case MACRO_TMUX_ESC:
-      if (record->event.pressed) {
-        return MACRO(D(LCTRL), T(A), U(LCTRL), D(ESC), END);
-      }
-      return MACRO(U(ESC), END);
-    case MACRO_TMUX_PASTE:
-      if (record->event.pressed) {
-        return MACRO(D(LCTRL), T(A), U(LCTRL), D(P), END);
-      }
-      return MACRO(U(P), END);
-    case MACRO_OSX_COPY:
-      if (record->event.pressed) {
-        return MACRO(D(LGUI), D(C), END);
-      }
-      return MACRO(U(C), U(LGUI), END);
-    case MACRO_OSX_PASTE:
-      if (record->event.pressed) {
-        return MACRO(D(LGUI), D(V), END);
-      }
-      return MACRO(U(V), U(LGUI), END);
-  }
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-};
-
-uint8_t current_layer = BASE;
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-  uint8_t layer = biton32(layer_state);
-
-  ergodox_led_all_off();
-  ergodox_led_all_set(LED_BRIGHTNESS_LO);
-
-  switch (layer) {
-  case BASE:
-    current_layer = BASE;
-    break;
-  case KEYPAD:
-    current_layer = KEYPAD;
-    break;
-  default:
-    // none
-    break;
-  }
-
-  // layer leds
-  if (current_layer == KEYPAD) {
-    ergodox_right_led_3_on();
-  }
-
-  // capslock
-  if (host_keyboard_leds() & (3<<USB_LED_CAPS_LOCK)) {
-    ergodox_right_led_1_on();
-  }
-
-  // Temporary leds
-
-  // The function layer takes over other layers and we need to reflect that on the leds.
-  // If the current layer is the BASE, we simply turn on the FN led, but if the current
-  // layer is the KEYPAD, than we must turn it off before turning on the FN led.
-  if (layer == FN && !has_oneshot_layer_timed_out()) {
-    ergodox_right_led_3_off();
-    ergodox_right_led_2_on();
-  }
-
-  // if the shifted is pressed I show the case led in a brighter color. This is nice to
-  // differenciate the shift from the capslock.
-  // Notice that I make sure that we're not using the shift on a chord shortcut (pressing
-  // shift togather with other modifiers).
-  if((keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) &&                                 // is shift pressed and there is no other
-      !(keyboard_report->mods & (~MOD_BIT(KC_LSFT) & ~MOD_BIT(KC_RSFT)))) ||                           //    modifier being pressed as well
-     (get_oneshot_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && !has_oneshot_mods_timed_out())) {  // or the one shot shift didn't timed out
-    ergodox_right_led_1_set(LED_BRIGHTNESS_HI);
-    ergodox_right_led_1_on();
-  }
-};
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk b/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk
deleted file mode 100644 (file)
index e757557..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# I don't want my keyboard blinking lights when is suppose to be asleep.
-SLEEP_LED_ENABLE = no
-
-CONFIG_H = keymaps/$(KEYMAP)/config.h
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/readme.md b/keyboards/ergodox_ez/keymaps/townk_osx/readme.md
deleted file mode 100644 (file)
index c2853ca..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# Townk's Keymap
-
-Trying to take care of an enjury on my arm I borrow an ergonomic keyboard from
-a frient ([Kinesis Advantage](http://www.kinesis-ergo.com/shop/advantage-pro-for-pc-mac/)).
-
-I really enjoyed my time with it but there were some anoyancies:
-
-* The curvature on the keys bothered me since I'm a Vim user and using the
-  motion keys on my editor was awkard.
-* I had to spend too much time remapping the keyboard to make some symbol keys
-  more accessible to me.
-* The fact that my hands had to stay close to each other was a bit stressfull
-  to my sholders.
-
-After a long research I find out that Ergodox EZ would be perfect for my needs
-and purchase one. Before the keyboard even got in my hands I started to think
-on the layout I would use on it and soon enough I planed couple adjustments
-from the Kinesis I was using so far.
-
-## The layout
-
-Here are the layout mapping in images so you can have a glimpse on it:
-
-![Base Layout](townk_osx_base.png)
-![fn Layout](townk_osx_fn.png)
-![Keypad & Mouse Layout](townk_osx_keypad.png)
-
-Notice that, differently from the default behavior, my layer keys are not transparent
-by default, which means that if you press any non-labeled white key, nothing will be
-handled to the OS.
-
-### One shot keys
-
-It all started with the access to the function keys (F1, F2, F3...), since
-those keys are located on a different layer I needed a way to press them with
-minimal effort without disrupting my flow.
-
-For me, togglihg a layer to press a button and than toggle it back is a waste
-of time (although I admit it's a single tap from what I have), so I decided to
-do it as a one shot key. I could press it and the next pressed key would be
-handled by the target layer which just after it delivers the key to the OS it
-would get back to the previous layer.
-
-After setting up my layout to do just that I realized that occasionally I
-would stop myseld on the middle of the process and the one shot layer would be
-still triggered until I press any other key. So to prevent me from tapping
-keys I don't want I added a timeout of 3 seconds for the one shot actions.
-
-Ultimately I tested the shift key as a one shot one and really like it, so
-here you have it, all the one shot keys on my layout.
-
-## Glossary
-
-If you're not familiar with the Mac symbols used on some keys, here is a
-reference to them:
-
-| Symbol | Description         |
-| :----: | ------------------- |
-|   ⌘    | Command             |
-|   ⇪    | Caps Lock           |
-|   ⇧    | Shift               |
-|   ⌥    | Option (alt)        |
-|   ⎋    | Esc                 |
-|   ⇥    | Tab forward         |
-|   ⇤    | Tab backward        |
-|   ⌃    | Control             |
-|   ␣    | Space               |
-|   ⌫    | Backspace           |
-|   ⌦    | Delete              |
-|   ⏎    | Enter               |
-|   ⌤    | Return              |
-|   ⌽    | Power on/off button |
-|   ↖    | Home                |
-|   ↘    | End                 |
-|   ⇞    | Page up             |
-|   ⇟    | Page down           |
-|   ⌧    | Clear               |
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png b/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png
deleted file mode 100644 (file)
index f9bc8b4..0000000
Binary files a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png b/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png
deleted file mode 100644 (file)
index 983b723..0000000
Binary files a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png b/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png
deleted file mode 100644 (file)
index 8f04b43..0000000
Binary files a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png and /dev/null differ
diff --git a/keyboards/ergodox_ez/keymaps/twey/keymap.c b/keyboards/ergodox_ez/keymaps/twey/keymap.c
deleted file mode 100644 (file)
index 019930f..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-#include "keymap_plover.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define STEN 2 // steno
-#define MDIA 3 // media keys
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,---------------------------------------------------.           ,---------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4   |   5  | STEN |           | NONE  |   6  |   7  |   8  |   9  |   0  |   \    |
- * |--------+------+------+------+-------+-------------|           |-------+------+------+------+------+------+--------|
- * | Del    |   '  |   ,  |   .  |   P   |   Y  |  Esc |           | Caps  |   F  |   G  |   C  |   R  |   L  |   /    |
- * |--------+------+------+------+-------+------|      |           |       |------+------+------+------+------+--------|
- * | BkSp   |   A  |   O  |   E  |   U   |   I  |------|           |-------|   D  |   H  |   T  |   N  |   S  |   -    |
- * |--------+------+------+------+-------+------|  Tab |           | Enter |------+------+------+------+------+--------|
- * | LShift |   ;  |   Q  |   J  |   K   |   X  |      |           |       |   B  |   M  |   W  |   V  |   Z  | RShift |
- * `--------+------+------+------+-------+-------------'           `--------------+------+------+------+------+--------'
- *   |  L1  | NONE |  Grv | Left | Right |                                        |  Up  | Down |   [  |   ]  |  L1  |
- *   `-----------------------------------'                                        `----------------------------------'
- *                                        ,--------------.         ,---------------.
- *                                        |  PgUp | PgDn |         | Home  |  End  |
- *                                 ,------|-------|------|         |-------+-------+------.
- *                                 |      |       | NONE |         | AltGr |       |      |
- *                                 | Alt  | Enter |------|         |-------| Space | Ctrl |
- *                                 |      |       | Supr |         | ~MDIA |       |      |
- *                                 `---------------------'         `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   M(0),
-        KC_DELT,        KC_QUOT,      KC_COMM,KC_DOT, KC_P,   KC_Y,   KC_ESC,
-        KC_BSPC,        KC_A,         KC_O,   KC_E,   KC_U,   KC_I,
-        KC_LSFT,        KC_SCLN,      KC_Q,   KC_J,   KC_K,   KC_X,   KC_TAB,
-        MO(SYMB),       KC_NO,        KC_GRV, KC_LEFT,KC_RGHT,
-                                                      KC_PGUP,KC_PGDN,
-                                                              KC_NO,
-                                              KC_LALT,KC_ENT ,KC_LGUI,
-        // right hand
-             KC_NO,       KC_6,   KC_7,   KC_8,   KC_9,   KC_0,    KC_BSLS,
-             KC_CAPS,     KC_F,   KC_G,   KC_C,   KC_R,   KC_L,    KC_SLSH,
-                          KC_D,   KC_H,   KC_T,   KC_N,   KC_S,    KC_MINS,
-             KC_ENT,      KC_B,   KC_M,   KC_W,   KC_V,   KC_Z   , KC_RSFT,
-                                  KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB),
-             KC_HOME, KC_END,
-             KC_RALT,
-             MO(MDIA),KC_SPC,KC_RCTL
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
-       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
-       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
-                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-
-[STEN] = KEYMAP(  // layout: layer 2: Steno for Plover
-        // left hand
-        KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,  KC_NO,   KC_TRNS,
-        KC_NO,  PV_NUM, PV_NUM, PV_NUM,  PV_NUM, PV_NUM,  PV_STAR,
-        KC_NO,  PV_LS,  PV_LT,  PV_LP,   PV_LH,  PV_STAR,
-        KC_NO,  PV_LS,  PV_LK,  PV_LW,   PV_LR,  PV_STAR, PV_STAR,
-        KC_TRNS,KC_NO,  KC_NO,  KC_TRNS, KC_TRNS,
-                                          KC_NO, KC_NO,
-                                                 KC_NO,
-                                   PV_A,  PV_O,  KC_NO,
-        // right hand
-          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-        PV_STAR,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,  PV_NUM,
-                 PV_STAR,   PV_RF,   PV_RP,   PV_RL,   PV_RT,   PV_RD,
-        PV_STAR, PV_STAR,   PV_RR,   PV_RB,   PV_RG,   PV_RS,   PV_RZ,
-                          KC_TRNS, KC_TRNS,   KC_NO,   KC_NO, KC_TRNS,
-        KC_NO,  KC_NO,
-        KC_NO,
-        KC_TRNS,PV_E,    PV_U
-),
-
-/* Keymap 3: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      | Back |      | Frwd |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      | Prev | Play | Next |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_WBAK, KC_TRNS, KC_WFWD, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(MDIA)                // FN1 - Momentary Layer 3 (Media)
-};
-
-void toggle_steno(int pressed)
-{
-  uint8_t layer = biton32(layer_state);
-  
-  if (pressed) {
-    if (layer != STEN) layer_on(STEN); else layer_off(STEN);
-
-    register_code(PV_LP);
-    register_code(PV_LH);
-    register_code(PV_LR);
-    register_code(PV_O);
-    register_code(PV_RL);
-    register_code(PV_RG);
-  } else {
-    unregister_code(PV_LP);
-    unregister_code(PV_LH);
-    unregister_code(PV_LR);
-    unregister_code(PV_O);
-    unregister_code(PV_RL);
-    unregister_code(PV_RG);
-  }
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-        toggle_steno(record->event.pressed);
-        break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-    uint32_t layer0 = layer_state & (1UL << 0),
-             layer1 = layer_state & (1UL << 1),
-             layer2 = layer_state & (1UL << 2),
-             layer3 = layer_state & (1UL << 3);    
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-
-    if (layer1) ergodox_right_led_1_on();
-    if (layer2) ergodox_right_led_2_on();
-    if (layer3) ergodox_right_led_3_on();
-};
diff --git a/keyboards/ergodox_ez/keymaps/twey/readme.md b/keyboards/ergodox_ez/keymaps/twey/readme.md
deleted file mode 100644 (file)
index 979e426..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# Twey's Home Configuration
-## Layers
-- Layer 0: Non-ANSI Dvorak layout, with modified modifiers — all
-  modifiers on thumb keys, as well as return and space.
-- Layer 1: Default symbol layout.
-- Layer 2: Plover-oriented stenography layer.
-- Layer 3: Extended media/mouse layout.
-
-## Unusual features
-The Plover key (top right key on the left half) also sends my Plover
-‘toggle’ chord (SH-FT) when pressed, as well as toggling the steno
-layer, so you can toggle between steno and typing modes with a single
-keypress.
-
-If you want to use this feature, you'll need to add the
-`commands.json` dictionary to your Plover dictionaries, or define the
-toggle stroke (`PHROLG`) yourself.
diff --git a/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c b/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c
deleted file mode 100644 (file)
index 8effa53..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-// readme
-// This keyboard layout is based on the [Workman Dead layout](https://github.com/ojbucao/Workman/tree/master/mac#workman-dead-for-programmers), which uses the comma as a dead key to trigger a second layer.
-// Since I have more keys at my disposal on the ErgoDox, I moved the dead key to the bottom right. There are still a lot of
-// blanks so still discovering what I like.
-// If you aren't familiar with a dead key, the idea is that you tap the dead key which switches the layout. the next key you hit
-// triggers the key you pressed AND switches the layout back to the original. For now I do this with a super kludgey macro and I
-// look forward to learning about a more elegant way to do the same thing. Until then, this will have to do.
-
-
-// TODO: Define layer names that make sense for the ErgoDox EZ.
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-#define DEAD 3 // dead version of the symbols layer
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   `    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | Tab    |   Q  |   D  |   R  |   W  |   B  |  L1  |           |  L1  |   J  |   F  |   U  |   P  |   ;  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | Hyper  |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |   I  |   '    |
- * |--------+------+------+------+------+------|      |           | Meh  |------+------+------+------+------+--------|
- * | LShift |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  |//Ctrl| RShift |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      | CTRL |  OPT |  CMD |                                       | Left | Down |  Up  | Right|  L3  |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |        |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | Home |       | PgUp |        |      |
- *                                 |Bckspc| Space|------|       |------| Space  |Enter |
- *                                 |      |      | End  |       | PgDn |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_GRV,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
-        KC_TAB,         KC_Q,         KC_D,   KC_R,   KC_W,   KC_B,   TG(1),
-        ALL_T(KC_ESC),  KC_A,         KC_S,   KC_H,   KC_T,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_M,   KC_C,   KC_V,   KC_NO,
-        KC_NO,          KC_NO,        KC_LCTL,KC_LALT,KC_LGUI,
-                                              KC_NO,  KC_NO,
-                                                              KC_HOME,
-                                               KC_BSPC,KC_SPC,KC_END,
-        // right hand
-             KC_RGHT,     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             TG(1),       KC_J,   KC_F,   KC_U,   KC_P,   KC_SCLN,          KC_BSLS,
-                          KC_Y,   KC_N,   KC_E,   KC_O,   KC_I,             KC_QUOT,
-             MEH_T(KC_NO),KC_K,   KC_L,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                  KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,          KC_FN4,
-             KC_NO,        KC_NO,
-             KC_PGUP,
-             KC_PGDN,KC_SPC,KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   %  |   &  |   ?  |   +  |   @  |      |           |      |   $  |   _  |   [  |   ]  |   !  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   /  |   (  |   =  |   0  |   {  |------|           |------|   }  |   1  |   *  |   )  |   -  |   "    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   6  |   7  |   8  |   9  |   |  |      |           |      |   \  |   2  |   3  |   4  |   5  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,   KC_F1,    KC_F2,    KC_F3,          KC_F4,        KC_F5,          KC_TRNS,
-       KC_TRNS,   KC_PERC,  KC_AMPR,  LSFT(KC_SLSH),  LSFT(KC_EQL), KC_AT,          KC_TRNS,
-       KC_TRNS,   KC_SLSH,  KC_LPRN,  KC_EQL,         KC_0,     LSFT(KC_LBRC),
-       KC_TRNS,   KC_6,     KC_7,     KC_8,           KC_9,     KC_PIPE,        KC_TRNS,
-       KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,        KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,          KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,
-       KC_TRNS, KC_DLR,         KC_UNDERSCORE,  KC_LBRC,  KC_RBRC,  KC_EXLM,  KC_F12,
-                KC_RCBR,        KC_1,     KC_ASTR,  KC_RPRN,  KC_MINS,  KC_QUOT,
-       KC_TRNS, KC_SLSH,        KC_2,     KC_3,     KC_4,     KC_5,     KC_TRNS,
-                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media and mouse keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |Brwser|
- *                                 |      |      |------|       |------|      |Back  |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_TRNS,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
-       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
-                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_WBAK
-),
-/* Keymap 4: Dead Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |  %   |   &  |   ?  |   +  |   @  |      |           |      |   $  |   _  |   [  |   ]  |   !  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   /  |   (  |   =  |   0  |   {  |------|           |------|   }  |   1  |   *  |   )  |   -  |   "    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   6  |   7  |   8  |   9  |   |  |      |           |      |   \  |   2  |   3  |   4  |   5  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |      |      |      |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[DEAD] = KEYMAP(
-       // left hand
-       KC_TRNS,   KC_F1,    KC_F2,    KC_F3,      KC_F4,    KC_F5,          KC_TRNS,
-       KC_TRNS,   M(100),   M(101),   M(102),     M(103),   M(104),         KC_TRNS,
-       KC_TRNS,   M(109),  M(110),  M(111),       M(112),   M(113),
-       KC_TRNS,   M(120),     M(121),     M(122),           M(123),     M(124),        KC_TRNS,
-       KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,        KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,
-       KC_TRNS, M(105),   M(106),   M(107),   M(108),   M(130),   KC_F12,
-                M(114),   M(115),   M(116),   M(117),   M(118),   M(119),
-       KC_TRNS, M(125),   M(126),   M(127),   M(128),   M(129),   KC_TRNS,
-                          KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB),                // FN1 - Momentary Layer 1 (Symbols)
-    [2] = ACTION_LAYER_ON(BASE,0),                       // FN2 - Go back to the base layer
-    [3] = ACTION_LAYER_ON(DEAD,0),
-    [4] = ACTION_LAYER_TOGGLE(DEAD),
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-          if (record->event.pressed) {
-            register_code(KC_RSFT);
-          } else {
-            unregister_code(KC_RSFT);
-          }
-          break;
-        case 100:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(5), U(LSFT), T(FN4), END);
-          break;
-        case 101:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(7), U(LSFT), T(FN4), END);
-          break;
-        case 102:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(SLSH), U(LSFT), T(FN4), END);
-          break;
-        case 103:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(EQL), U(LSFT), T(FN4), END);
-          break;
-        case 104:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(2), U(LSFT), T(FN4), END);
-          break;
-        case 105:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(4), U(LSFT), T(FN4), END);
-          break;
-        case 106:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(MINS), U(LSFT), T(FN4), END);
-          break;
-        case 107:
-          layer_clear();
-          return MACRODOWN(T(LBRC), T(FN4), END);
-          break;
-        case 108:
-          layer_clear();
-          return MACRODOWN(T(RBRC), T(FN4), END);
-          break;
-        case 130:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(1), U(LSFT), T(FN4), END);
-          break;
-        case 109:
-          layer_clear();
-          return MACRODOWN(T(SLSH), T(FN4), END);
-          break;
-        case 110:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(9), U(LSFT), T(FN4), END);
-          break;
-        case 111:
-          layer_clear();
-          return MACRODOWN(T(EQL), T(FN4), END);
-          break;
-        case 112:
-          layer_clear();
-          return MACRODOWN(T(0), T(FN4), END);
-          break;
-        case 113:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(LBRC), U(LSFT), T(FN4), END);
-          break;
-        case 114:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(RBRC), U(LSFT), T(FN4), END);
-          break;
-        case 115:
-          layer_clear();
-          return MACRODOWN(T(1), T(FN4), END);
-          break;
-        case 116:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(8), U(LSFT), T(FN4), END);
-          break;
-        case 117:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(0), U(LSFT), T(FN4), END);
-          break;
-        case 118:
-          layer_clear();
-          return MACRODOWN(T(MINS), T(FN4), END);
-          break;
-        case 119:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(QUOT), U(LSFT), T(FN4), END);
-          break;
-        case 120:
-          layer_clear();
-          return MACRODOWN(T(6), T(FN4), END);
-          break;
-        case 121:
-          layer_clear();
-          return MACRODOWN(T(7), T(FN4), END);
-          break;
-        case 122:
-          layer_clear();
-          return MACRODOWN(T(8), T(FN4), END);
-          break;
-        case 123:
-          layer_clear();
-          return MACRODOWN(T(9), T(FN4), END);
-          break;
-        case 124:
-          layer_clear();
-          return MACRODOWN(D(LSFT), T(BSLS), U(LSFT), T(FN4), END);
-          break;
-        case 125:
-          layer_clear();
-          return MACRODOWN(T(BSLS), T(FN4), END);
-          break;
-        case 126:
-          layer_clear();
-          return MACRODOWN(T(2), T(FN4), END);
-          break;
-        case 127:
-          layer_clear();
-          return MACRODOWN(T(3), T(FN4), END);
-          break;
-        case 128:
-          layer_clear();
-          return MACRODOWN(T(4), T(FN4), END);
-          break;
-        case 129:
-          layer_clear();
-          return MACRODOWN(T(5), T(FN4), END);
-          break;
-
-        default:
-        return MACRO_NONE;
-      }
-  return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c
deleted file mode 100644 (file)
index 3444152..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
-
-#define SGWK 0 // "sagewick", ⌘S ⌘⇥
-#define SGWF 1 // "sagewick freshly", ⌘S ⌘⇥ ⌘R
-#define BBED 2 // BBEdit
-#define TMNL 3 // Terminal
-#define SAFA 4 // Safari
-#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Basic layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |   =    |   1  |   2  |   3  |   4  |   5  |  L1  |           |  L1  |   6  |   7  |   8  |   9  |   0  |   -    |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |   ⌦    |   Q  |   W  |   E  |   R  |   T  | ~L1  |           | ~L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |   ⌫    |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2| ' / L⌘ |
- * |--------+------+------+------+------+------|  L⌘  |           |  L⌘  |------+------+------+------+------+--------|
- * |  L⇧    |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | / / ⌃|  R⇧    |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |  L⌃  |  L⌥  |  L⌘  |   ←  |   →  |                                       |   ↑  |   ↓  |   [  |   ]  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,---------------.
- *                                        |  `~  |  '"  |       |   ⎋  |    ⌫   |
- *                                 ,------|------|------|       |------+--------+------.
- *                                 |      |      | PgUp |       | PgDn |        |      |
- *                                 |      |   ⌫  |------|       |------|    ⇥   |Enter |
- *                                 |      |      |  L⌥  |       |  L⌃  |        |      |
- *                                 `--------------------'       `----------------------'
- */
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = KEYMAP(  // layer 0 : default
-        // left hand
-        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   TG(SYMB),
-        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   MO(SYMB),
-        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
-        KC_LSFT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LGUI,
-        KC_LCTL,        KC_LALT,      KC_LGUI,KC_LEFT,KC_RGHT,
-                                              KC_GRV, KC_QUOT,
-                                                              KC_PGUP,
-                                               KC_SPC,KC_BSPC,KC_LALT,
-        // right hand
-             TG(SYMB),  KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_MINS,
-             MO(SYMB),  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_BSLS,
-                        KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
-             KC_LGUI,   KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
-                                KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          KC_SPC ,
-             KC_ESC,            KC_BSPC,
-             KC_PGDN,
-             KC_LCTL,           KC_TAB,      KC_ENT
-    ),
-/* Keymap 1: Symbol Layer
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   [  |   ]  |   {  |   }  |   "  |      |           |      |   /  |   7  |   8  |   9  |   *  |   F12  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   <  |   >  |   (  |   )  |   '  |------|           |------|   -  |   4  |   5  |   6  |   +  |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |   &  |   1  |   2  |   3  |   =  |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |   0  |   .  |   ←  |   →  |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       | Home |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       | End  |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// SYMBOLS
-[SYMB] = KEYMAP(
-       // left hand
-       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
-       KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS,
-       KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-       KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
-                                       KC_TRNS,KC_TRNS,
-                                               KC_TRNS,
-                               KC_TRNS,KC_TRNS,KC_TRNS,
-       // right hand
-       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
-       KC_TRNS, KC_SLSH, KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
-                KC_MINS, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
-       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_EQL,  KC_TRNS,
-                         KC_0,   KC_DOT,  KC_LEFT, KC_RGHT, KC_TRNS,
-       KC_TRNS, KC_TRNS,
-       KC_HOME,
-       KC_END , KC_TRNS, KC_TRNS
-),
-/* Keymap 2: Media keys
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |  F14 |  F15 |      |      |      |      |           |  ⌘Q  |  ⌘W  | ⌘⇧`  |  ⌘`  |      |      |  Power |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      | PgUp |⌘S⌘⇥⌘R| Term |      |           |      |  ⌘]  | ⌥⌘↑  |   ↑  | ⌥⌘↓  |      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |Safari| PgDn |      |      |------|           |------|  ⌘[  |   ←  |   ↓  |   →  |      |    ⏯  |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |BBEdit|      |           |      |L⇧+Spc|  Spc |  ⏮  |   ⏭ |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   |      |      |      |      |      |                                       |VolUp |VolDn | Mute |      |      |
- *   `----------------------------------'                                       `----------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      | Home |       |  End |      |      |
- *                                 |      |      |------|       |------|  ⌘C  |  ⌘V  |
- *                                 |      |      |      |       |  ⌘X  |      |      |
- *                                 `--------------------'       `--------------------'
- */
-// MEDIA AND MOUSE
-[MDIA] = KEYMAP(
-       KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  /* F14 dims screen, F15 brightens */
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS,
-       KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-                                           KC_TRNS, KC_TRNS,
-                                                    KC_HOME,
-                                  KC_TRNS, KC_TRNS, KC_TRNS,
-    // right hand
-       LGUI(KC_Q),  LGUI(KC_W),     LGUI(LSFT(KC_GRV)), LGUI(KC_GRV),   KC_TRNS,                KC_TRNS,        KC_PWR,
-       KC_TRNS,     LGUI(KC_RBRC),  LGUI(LALT(KC_UP)),  KC_UP  ,        LGUI(LALT(KC_DOWN)),    KC_TRNS,        KC_TRNS,
-                    LGUI(KC_LBRC),  KC_LEFT,            KC_DOWN,        KC_RGHT,                KC_TRNS,        KC_MPLY,
-       KC_TRNS,     LSFT(KC_SPC),   KC_SPC ,            KC_MPRV,        KC_MNXT,                KC_TRNS,        KC_TRNS,
-                                    KC_VOLU,            KC_VOLD,        KC_MUTE,                KC_TRNS,        KC_TRNS,
-       KC_TRNS,     KC_TRNS,
-       KC_TRNS,
-       LGUI(KC_X),  LGUI(KC_C),     LGUI(KC_V)
-),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-          case SGWK:
-              if (record->event.pressed) {
-                  return MACRO(
-                               I(10),
-                               D(LGUI), T(S),   U(LGUI),
-                               D(LGUI), T(TAB), U(LGUI),
-                               END);
-              }
-              break;
-          case SGWF:
-              if (record->event.pressed) {
-                  return MACRO(
-                               I(10),
-                               D(LGUI), T(S),   U(LGUI),
-                               D(LGUI), T(TAB), U(LGUI),
-                               D(LGUI), T(R),   U(LGUI),
-                               END);
-              }
-              break;
-          case BBED:
-              if (record->event.pressed) {
-                  return MACRO(
-                               I(10),
-                               D(LALT), T(SPC),   U(LALT), W(ALFRED_LEAD_TIME),
-                               T(B), T(B), T(E), T(D), T(I), T(T),
-                               T(ENT),
-                               END);
-              }
-              break;
-          case TMNL:
-              if (record->event.pressed) {
-                  return MACRO(
-                               I(10),
-                               D(LALT), T(SPC),   U(LALT), W(ALFRED_LEAD_TIME),
-                               T(T), T(E), T(R), T(M), T(I), T(N), T(A), T(L),
-                               T(ENT),
-                               END);
-              }
-              break;
-          case SAFA:
-              if (record->event.pressed) {
-                  return MACRO(
-                               I(10),
-                               D(LALT), T(SPC),   U(LALT), W(ALFRED_LEAD_TIME),
-                               T(S), T(A), T(F), T(A), T(R), T(I),
-                               T(ENT),
-                               END);
-              }
-              break;
-      }
-    return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-      // TODO: Make this relevant to the ErgoDox EZ.
-        case 1:
-            ergodox_right_led_1_on();
-            break;
-        case 2:
-            ergodox_right_led_2_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown
deleted file mode 100644 (file)
index 7bce7c6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# The Zweihander Layout
-
-NB: the backtick (\`) is special in Markdown. If I write ⌘\` in this readme, I mean “command-backtick”, not “command-backslash-backtick”.
-
-This layout is tuned for people who…
-
-
-## use OS X
-
-This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts.
-
-
-## mouse left-handed while doing other things with the right hand
-
-I tend to have my mouse in my left hand, but I like to use my other hand to make things go faster. I’ve added a bunch of buttons to the media layer to speed up browsing in Safari and Finder:
-
-- Close Window (⌘W)
-- Back (⌘[)
-- Forward (⌘])
-- Open and Close Parent Folder (⌥⌘↓)
-- Go Up and Close Just-Left Folder (⌥⌘↑)
-- Cycle through open windows in current application (⌘\` and ⌘⇧\`)
-- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥)
-- Space (page down in browsers; Quick Look in the Finder)
-- Shift-Space (page up in web browsers)
-
-Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word.
-
-
-## use lots of modifier keys in OS X menu-item shortcuts
-
-I wanted to preserve the feel of a number of shortcuts that involve pressing lots of modifier keys at once; this is why the bottom left of the keyboard has shift, control, option, and command in the usual spaces. Further, some common shortcuts I press have a key on the right side of the keyboard. These shortcuts include:
-
-- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫)
-- Shut Down Without Asking for Confirmation (⇧⌥⌘ power)
-
-
-## use Emacs-style shortcuts
-
-I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key.
-
-
-## use spreadsheets
-
-All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer.
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c
deleted file mode 100644 (file)
index dc29cf5..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
-
-Note for ErgoDox EZ customizers: Here be dragons!
-This is not a file you want to be messing with.
-All of the interesting stuff for you is under keymaps/ :)
-Love, Erez
-
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "action_layer.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "ergodox_ez.h"
-#include "i2cmaster.h"
-#ifdef DEBUG_MATRIX_SCAN_RATE
-#include  "timer.h"
-#endif
-
-/*
- * This constant define not debouncing time in msecs, but amount of matrix
- * scan loops which should be made to get stable debounced results.
- *
- * On Ergodox matrix scan rate is relatively low, because of slow I2C.
- * Now it's only 317 scans/second, or about 3.15 msec/scan.
- * According to Cherry specs, debouncing time is 5 msec.
- *
- * And so, there is no sense to have DEBOUNCE higher than 2.
- */
-
-#ifndef DEBOUNCE
-#   define DEBOUNCE    5
-#endif
-static uint8_t debouncing = DEBOUNCE;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t read_cols(uint8_t row);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
-static uint8_t mcp23018_reset_loop;
-
-#ifdef DEBUG_MATRIX_SCAN_RATE
-uint32_t matrix_timer;
-uint32_t matrix_scan_count;
-#endif
-
-
-__attribute__ ((weak))
-void matrix_init_user(void) {}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {}
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
-  matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
-  matrix_scan_user();
-}
-
-inline
-uint8_t matrix_rows(void)
-{
-    return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
-    return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
-    // initialize row and col
-
-    mcp23018_status = init_mcp23018();
-
-
-    unselect_rows();
-    init_cols();
-
-    // initialize matrix state: all keys off
-    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
-        matrix[i] = 0;
-        matrix_debouncing[i] = 0;
-    }
-
-#ifdef DEBUG_MATRIX_SCAN_RATE
-    matrix_timer = timer_read32();
-    matrix_scan_count = 0;
-#endif
-
-    matrix_init_kb();
-
-}
-
-void matrix_power_up(void) {
-    mcp23018_status = init_mcp23018();
-
-    unselect_rows();
-    init_cols();
-
-    // initialize matrix state: all keys off
-    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
-        matrix[i] = 0;
-        matrix_debouncing[i] = 0;
-    }
-
-#ifdef DEBUG_MATRIX_SCAN_RATE
-    matrix_timer = timer_read32();
-    matrix_scan_count = 0;
-#endif
-
-}
-
-uint8_t matrix_scan(void)
-{
-    if (mcp23018_status) { // if there was an error
-        if (++mcp23018_reset_loop == 0) {
-            // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
-            // this will be approx bit more frequent than once per second
-            print("trying to reset mcp23018\n");
-            mcp23018_status = init_mcp23018();
-            if (mcp23018_status) {
-                print("left side not responding\n");
-            } else {
-                print("left side attached\n");
-                ergodox_blink_all_leds();
-            }
-        }
-    }
-
-#ifdef DEBUG_MATRIX_SCAN_RATE
-    matrix_scan_count++;
-
-    uint32_t timer_now = timer_read32();
-    if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
-        print("matrix scan frequency: ");
-        pdec(matrix_scan_count);
-        print("\n");
-
-        matrix_timer = timer_now;
-        matrix_scan_count = 0;
-    }
-#endif
-
-    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-        select_row(i);
-        wait_us(30);  // without this wait read unstable value.
-        matrix_row_t cols = read_cols(i);
-        if (matrix_debouncing[i] != cols) {
-            matrix_debouncing[i] = cols;
-            if (debouncing) {
-                debug("bounce!: "); debug_hex(debouncing); debug("\n");
-            }
-            debouncing = DEBOUNCE;
-        }
-        unselect_rows();
-    }
-
-    if (debouncing) {
-        if (--debouncing) {
-            wait_us(1);
-            // this should be wait_ms(1) but has been left as-is at EZ's request
-        } else {
-            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-                matrix[i] = matrix_debouncing[i];
-            }
-        }
-    }
-
-    matrix_scan_quantum();
-
-    return 1;
-}
-
-bool matrix_is_modified(void)
-{
-    if (debouncing) return false;
-    return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
-    return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
-    return matrix[row];
-}
-
-void matrix_print(void)
-{
-    print("\nr/c 0123456789ABCDEF\n");
-    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        phex(row); print(": ");
-        pbin_reverse16(matrix_get_row(row));
-        print("\n");
-    }
-}
-
-uint8_t matrix_key_count(void)
-{
-    uint8_t count = 0;
-    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-        count += bitpop16(matrix[i]);
-    }
-    return count;
-}
-
-/* Column pin configuration
- *
- * Teensy
- * col: 0   1   2   3   4   5
- * pin: F0  F1  F4  F5  F6  F7
- *
- * MCP23018
- * col: 0   1   2   3   4   5
- * pin: B5  B4  B3  B2  B1  B0
- */
-static void  init_cols(void)
-{
-    // init on mcp23018
-    // not needed, already done as part of init_mcp23018()
-
-    // init on teensy
-    // Input with pull-up(DDR:0, PORT:1)
-    DDRF  &= ~(1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
-    PORTF |=  (1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<1 | 1<<0);
-}
-
-static matrix_row_t read_cols(uint8_t row)
-{
-    if (row < 7) {
-        if (mcp23018_status) { // if there was an error
-            return 0;
-        } else {
-            uint8_t data = 0;
-            mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
-            mcp23018_status = i2c_write(GPIOB);             if (mcp23018_status) goto out;
-            mcp23018_status = i2c_start(I2C_ADDR_READ);     if (mcp23018_status) goto out;
-            data = i2c_readNak();
-            data = ~data;
-        out:
-            i2c_stop();
-            return data;
-        }
-    } else {
-        // read from teensy
-        return
-            (PINF&(1<<0) ? 0 : (1<<0)) |
-            (PINF&(1<<1) ? 0 : (1<<1)) |
-            (PINF&(1<<4) ? 0 : (1<<2)) |
-            (PINF&(1<<5) ? 0 : (1<<3)) |
-            (PINF&(1<<6) ? 0 : (1<<4)) |
-            (PINF&(1<<7) ? 0 : (1<<5)) ;
-    }
-}
-
-/* Row pin configuration
- *
- * Teensy
- * row: 7   8   9   10  11  12  13
- * pin: B0  B1  B2  B3  D2  D3  C6
- *
- * MCP23018
- * row: 0   1   2   3   4   5   6
- * pin: A0  A1  A2  A3  A4  A5  A6
- */
-static void unselect_rows(void)
-{
-    // unselect on mcp23018
-    if (mcp23018_status) { // if there was an error
-        // do nothing
-    } else {
-        // set all rows hi-Z : 1
-        mcp23018_status = i2c_start(I2C_ADDR_WRITE);    if (mcp23018_status) goto out;
-        mcp23018_status = i2c_write(GPIOA);             if (mcp23018_status) goto out;
-        mcp23018_status = i2c_write( 0xFF
-                              & ~(0<<7)
-                          );                            if (mcp23018_status) goto out;
-    out:
-        i2c_stop();
-    }
-
-    // unselect on teensy
-    // Hi-Z(DDR:0, PORT:0) to unselect
-    DDRB  &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
-    PORTB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3);
-    DDRD  &= ~(1<<2 | 1<<3);
-    PORTD &= ~(1<<2 | 1<<3);
-    DDRC  &= ~(1<<6);
-    PORTC &= ~(1<<6);
-}
-
-static void select_row(uint8_t row)
-{
-    if (row < 7) {
-        // select on mcp23018
-        if (mcp23018_status) { // if there was an error
-            // do nothing
-        } else {
-            // set active row low  : 0
-            // set other rows hi-Z : 1
-            mcp23018_status = i2c_start(I2C_ADDR_WRITE);        if (mcp23018_status) goto out;
-            mcp23018_status = i2c_write(GPIOA);                 if (mcp23018_status) goto out;
-            mcp23018_status = i2c_write( 0xFF & ~(1<<row)
-                                  & ~(0<<7)
-                              );                                if (mcp23018_status) goto out;
-        out:
-            i2c_stop();
-        }
-    } else {
-        // select on teensy
-        // Output low(DDR:1, PORT:0) to select
-        switch (row) {
-            case 7:
-                DDRB  |= (1<<0);
-                PORTB &= ~(1<<0);
-                break;
-            case 8:
-                DDRB  |= (1<<1);
-                PORTB &= ~(1<<1);
-                break;
-            case 9:
-                DDRB  |= (1<<2);
-                PORTB &= ~(1<<2);
-                break;
-            case 10:
-                DDRB  |= (1<<3);
-                PORTB &= ~(1<<3);
-                break;
-            case 11:
-                DDRD  |= (1<<2);
-                PORTD &= ~(1<<3);
-                break;
-            case 12:
-                DDRD  |= (1<<3);
-                PORTD &= ~(1<<3);
-                break;
-            case 13:
-                DDRC  |= (1<<6);
-                PORTC &= ~(1<<6);
-                break;
-        }
-    }
-}
-
diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md
deleted file mode 100644 (file)
index 67a5fb0..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Getting started
-
-There are two main ways you could customize the ErgoDox EZ.
-
-## The Easy Way: Use an existing firmware file and just flash it
-
-1. Download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html). Some Linux distributions already provide a binary (may be called `teensy-loader-cli`), so you may prefer to use this.
-2. Find a firmware file you like. You can find a few if these in the keymaps subdirectory right here. The file you need ends with .hex, and you can look at its .c counterpart (or its PNG image) to see what you'll be getting. You can also use the [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) to create a firmware Hex file you like.
-3. Download the firmware file
-4. Connect the keyboard, press its Reset button (gently insert a paperclip into the hole in the top-right corner) and flash it using the Teensy loader you installed on step 1 and the firmware you downloaded.
-
-## More technical: create your own totally custom firmware by editing the source files. 
-
-This requires a little bit of familiarity with coding.
-
-1. Go to https://github.com/jackhumbert/qmk_firmware and read the readme at the base of this repository, top to bottom. Then come back here :)
-2. Clone the repository (download it)
-3. Set up a build environment as per [the build guide](/doc/BUILD_GUIDE.md) 
-    - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
-4. Copy `keyboards/ergodox_ez/keymaps/default/keymap.c` into `keymaps/your_name/keymap.c` (for example, `keymaps/german/keymap.c`)
-5. Edit this file, changing keycodes to your liking (see "Finding the keycodes you need" below). Try to edit the comments as well, so the "text graphics" represent your layout correctly. See below for more tips on sharing your work.
-6. Compile your firmware by running `make keymap=your_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_your_name.hex`, e.g. `ergodox_ez_german.hex`.
-6. Flash this hex file using the [Teensy loader](https://www.pjrc.com/teensy/loader.html) as described in step 4 in the "Easy Way" above. If you prefer you can automatically flash the hex file after successfull build by running `make teensy keymap=your_name`.
-7. Submit your work as a pull request to this repository, so others can also use it. :) See below on specifics.
-
-Good luck! :)
-
-## Contributing your keymap
-
-The ErgoDox EZ firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox EZ. To make it easy for these people to use your layout, I recommend submitting your PR in the following format. 
-
-1. All work goes inside your keymap subdirectory (`keymaps/german` in this example).
-2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did.
-3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :)
-4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout. 
-
-
-## Finding the keycodes you need
-
-Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`.
-
-That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot).
-
-If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out.
diff --git a/keyboards/ergodox_ez/twimaster.c b/keyboards/ergodox_ez/twimaster.c
deleted file mode 100644 (file)
index f91c08e..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/*************************************************************************
-* Title:    I2C master library using hardware TWI interface
-* Author:   Peter Fleury <pfleury@gmx.ch>  http://jump.to/fleury
-* File:     $Id: twimaster.c,v 1.3 2005/07/02 11:14:21 Peter Exp $
-* Software: AVR-GCC 3.4.3 / avr-libc 1.2.3
-* Target:   any AVR device with hardware TWI 
-* Usage:    API compatible with I2C Software Library i2cmaster.h
-**************************************************************************/
-#include <inttypes.h>
-#include <compat/twi.h>
-
-#include <i2cmaster.h>
-
-
-/* define CPU frequency in Mhz here if not defined in Makefile */
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-/* I2C clock in Hz */
-#define SCL_CLOCK  400000L
-
-
-/*************************************************************************
- Initialization of the I2C bus interface. Need to be called only once
-*************************************************************************/
-void i2c_init(void)
-{
-  /* initialize TWI clock
-   * minimal values in Bit Rate Register (TWBR) and minimal Prescaler
-   * bits in the TWI Status Register should give us maximal possible
-   * I2C bus speed - about 444 kHz
-   *
-   * for more details, see 20.5.2 in ATmega16/32 secification
-   */
-  
-  TWSR = 0;     /* no prescaler */
-  TWBR = 10;    /* must be >= 10 for stable operation */
-
-}/* i2c_init */
-
-
-/*************************************************************************     
-  Issues a start condition and sends address and transfer direction.
-  return 0 = device accessible, 1= failed to access device
-*************************************************************************/
-unsigned char i2c_start(unsigned char address)
-{
-    uint8_t   twst;
-
-       // send START condition
-       TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
-
-       // wait until transmission completed
-       while(!(TWCR & (1<<TWINT)));
-
-       // check value of TWI Status Register. Mask prescaler bits.
-       twst = TW_STATUS & 0xF8;
-       if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
-
-       // send device address
-       TWDR = address;
-       TWCR = (1<<TWINT) | (1<<TWEN);
-
-       // wail until transmission completed and ACK/NACK has been received
-       while(!(TWCR & (1<<TWINT)));
-
-       // check value of TWI Status Register. Mask prescaler bits.
-       twst = TW_STATUS & 0xF8;
-       if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
-
-       return 0;
-
-}/* i2c_start */
-
-
-/*************************************************************************
- Issues a start condition and sends address and transfer direction.
- If device is busy, use ack polling to wait until device is ready
- Input:   address and transfer direction of I2C device
-*************************************************************************/
-void i2c_start_wait(unsigned char address)
-{
-    uint8_t   twst;
-
-
-    while ( 1 )
-    {
-           // send START condition
-           TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
-    
-       // wait until transmission completed
-       while(!(TWCR & (1<<TWINT)));
-    
-       // check value of TWI Status Register. Mask prescaler bits.
-       twst = TW_STATUS & 0xF8;
-       if ( (twst != TW_START) && (twst != TW_REP_START)) continue;
-    
-       // send device address
-       TWDR = address;
-       TWCR = (1<<TWINT) | (1<<TWEN);
-    
-       // wail until transmission completed
-       while(!(TWCR & (1<<TWINT)));
-    
-       // check value of TWI Status Register. Mask prescaler bits.
-       twst = TW_STATUS & 0xF8;
-       if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) ) 
-       {           
-           /* device busy, send stop condition to terminate write operation */
-               TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-               
-               // wait until stop condition is executed and bus released
-               while(TWCR & (1<<TWSTO));
-               
-           continue;
-       }
-       //if( twst != TW_MT_SLA_ACK) return 1;
-       break;
-     }
-
-}/* i2c_start_wait */
-
-
-/*************************************************************************
- Issues a repeated start condition and sends address and transfer direction 
-
- Input:   address and transfer direction of I2C device
- Return:  0 device accessible
-          1 failed to access device
-*************************************************************************/
-unsigned char i2c_rep_start(unsigned char address)
-{
-    return i2c_start( address );
-
-}/* i2c_rep_start */
-
-
-/*************************************************************************
- Terminates the data transfer and releases the I2C bus
-*************************************************************************/
-void i2c_stop(void)
-{
-    /* send stop condition */
-       TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-       
-       // wait until stop condition is executed and bus released
-       while(TWCR & (1<<TWSTO));
-
-}/* i2c_stop */
-
-
-/*************************************************************************
-  Send one byte to I2C device
-  
-  Input:    byte to be transfered
-  Return:   0 write successful 
-            1 write failed
-*************************************************************************/
-unsigned char i2c_write( unsigned char data )
-{      
-    uint8_t   twst;
-    
-       // send data to the previously addressed device
-       TWDR = data;
-       TWCR = (1<<TWINT) | (1<<TWEN);
-
-       // wait until transmission completed
-       while(!(TWCR & (1<<TWINT)));
-
-       // check value of TWI Status Register. Mask prescaler bits
-       twst = TW_STATUS & 0xF8;
-       if( twst != TW_MT_DATA_ACK) return 1;
-       return 0;
-
-}/* i2c_write */
-
-
-/*************************************************************************
- Read one byte from the I2C device, request more data from device 
- Return:  byte read from I2C device
-*************************************************************************/
-unsigned char i2c_readAck(void)
-{
-       TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
-       while(!(TWCR & (1<<TWINT)));    
-
-    return TWDR;
-
-}/* i2c_readAck */
-
-
-/*************************************************************************
- Read one byte from the I2C device, read is followed by a stop condition 
- Return:  byte read from I2C device
-*************************************************************************/
-unsigned char i2c_readNak(void)
-{
-       TWCR = (1<<TWINT) | (1<<TWEN);
-       while(!(TWCR & (1<<TWINT)));
-       
-    return TWDR;
-
-}/* i2c_readNak */
diff --git a/keyboards/ergodox_ez/util/compile_keymap.py b/keyboards/ergodox_ez/util/compile_keymap.py
deleted file mode 100644 (file)
index 7076a6e..0000000
+++ /dev/null
@@ -1,710 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""Compiler for keymap.c files
-
-This scrip will generate a keymap.c file from a simple
-markdown file with a specific layout.
-
-Usage:
-    python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
-"""
-from __future__ import division
-from __future__ import print_function
-from __future__ import absolute_import
-from __future__ import unicode_literals
-
-import os
-import io
-import re
-import sys
-import json
-import unicodedata
-import collections
-import itertools as it
-
-PY2 = sys.version_info.major == 2
-
-if PY2:
-    chr = unichr
-
-
-KEYBOARD_LAYOUTS = {
-    # These map positions in the parsed layout to
-    # positions in the KEYMAP MATRIX
-    'ergodox_ez': [
-        [ 0,  1,  2,  3,  4,  5,  6],  [38, 39, 40, 41, 42, 43, 44],
-        [ 7,  8,  9, 10, 11, 12, 13],  [45, 46, 47, 48, 49, 50, 51],
-        [14, 15, 16, 17, 18, 19    ],  [    52, 53, 54, 55, 56, 57],
-        [20, 21, 22, 23, 24, 25, 26],  [58, 59, 60, 61, 62, 63, 64],
-        [27, 28, 29, 30, 31        ],  [        65, 66, 67, 68, 69],
-        [                    32, 33],  [70, 71                    ],
-        [                        34],  [72                        ],
-        [                35, 36, 37],  [73, 74, 75                ],
-    ]
-}
-
-ROW_INDENTS = {
-    'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0]
-}
-
-BLANK_LAYOUTS = [
-# Compact Layout
-"""
-.------------------------------------.------------------------------------.
-|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
-|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-|     |    |    |    |    |    |-----!-----!    |    |    |    |    |     |
-!-----+----+----+----x----x----!     !     !----x----x----+----+----+-----!
-|     |    |    |    |    |    |     |     |    |    |    |    |    |     |
-'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
- |    |    |    |    |    |                     !    |    |    |    |    |
- '------------------------'                     '------------------------'
-                        .-----------. .-----------.
-                        |     |     | !     |     |
-                  .-----+-----+-----! !-----+-----+-----.
-                  !     !     |     | !     |     !     !
-                  !     !     !-----! !-----!     !     !
-                  |     |     |     | !     |     |     |
-                  '-----------------' '-----------------'
-""",
-
-# Wide Layout
-"""
-.---------------------------------------------. .---------------------------------------------.
-|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
-!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
-|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
-!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
-|       |     |     |     |     |     |-------! !-------!     |     |     |     |     |       |
-!-------+-----+-----+-----x-----x-----!       ! !       !-----x-----x-----+-----+-----+-------!
-|       |     |     |     |     |     |       | !       |     |     |     |     |     |       |
-'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- |      |     |     |     |     |                             !     |     |     |     |      |
- '------------------------------'                             '------------------------------'
-                              .---------------. .---------------.
-                              |       |       | !       |       |
-                      .-------+-------+-------! !-------+-------+-------.
-                      !       !       |       | !       |       !       !
-                      !       !       !-------! !-------!       !       !
-                      |       |       |       | !       |       |       |
-                      '-----------------------' '-----------------------'
-""",
-]
-
-
-DEFAULT_CONFIG = {
-    "keymaps_includes": [
-        "keymap_common.h",
-    ],
-    'filler': "-+.'!:x",
-    'separator': "|",
-    'default_key_prefix': ["KC_"],
-}
-
-
-SECTIONS = [
-    'layout_config',
-    'layers',
-]
-
-
-#       Markdown Parsing
-
-ONELINE_COMMENT_RE = re.compile(r"""
-    ^                       # comment must be at the start of the line
-    \s*                     # arbitrary whitespace
-    //                      # start of the comment
-    (.*)                    # the comment
-    $                       # until the end of line
-""", re.MULTILINE | re.VERBOSE
-)
-
-INLINE_COMMENT_RE = re.compile(r"""
-    ([\,\"\[\]\{\}\d])      # anythig that might end a expression
-    \s+                     # comment must be preceded by whitespace
-    //                      # start of the comment
-    \s                      # and succeded by whitespace
-    (?:[^\"\]\}\{\[]*)      # the comment (except things which might be json)
-    $                       # until the end of line
-""", re.MULTILINE | re.VERBOSE)
-
-TRAILING_COMMA_RE = re.compile(r"""
-    ,                       # the comma
-    (?:\s*)                 # arbitrary whitespace
-    $                       # only works if the trailing comma is followed by newline
-    (\s*)                   # arbitrary whitespace
-    ([\]\}])                # end of an array or object
-""", re.MULTILINE | re.VERBOSE)
-
-
-def loads(raw_data):
-    if isinstance(raw_data, bytes):
-        raw_data = raw_data.decode('utf-8')
-
-    raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
-    raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
-    raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
-    return json.loads(raw_data)
-
-
-def parse_config(path):
-    def reset_section():
-        section.update({
-            'name': section.get('name', ""),
-            'sub_name': "",
-            'start_line': -1,
-            'end_line': -1,
-            'code_lines': [],
-        })
-
-    def start_section(line_index, line):
-        end_section()
-        if line.startswith("# "):
-            name = line[2:]
-        elif line.startswith("## "):
-            name = line[3:]
-        else:
-            name = ""
-
-        name = name.strip().replace(" ", "_").lower()
-        if name in SECTIONS:
-            section['name'] = name
-        else:
-            section['sub_name'] = name
-        section['start_line'] = line_index
-
-    def end_section():
-        if section['start_line'] >= 0:
-            if section['name'] == 'layout_config':
-                config.update(loads("\n".join(
-                    section['code_lines']
-                )))
-            elif section['sub_name'].startswith('layer'):
-                layer_name = section['sub_name']
-                config['layer_lines'][layer_name] = section['code_lines']
-
-        reset_section()
-
-    def amend_section(line_index, line):
-        section['end_line'] = line_index
-        section['code_lines'].append(line)
-
-    config = DEFAULT_CONFIG.copy()
-    config.update({
-        'layer_lines': collections.OrderedDict(),
-        'macro_ids': {'UM'},
-        'unicode_macros': {},
-    })
-
-    section = {}
-    reset_section()
-
-    with io.open(path, encoding="utf-8") as fh:
-        for i, line in enumerate(fh):
-            if line.startswith("#"):
-                start_section(i, line)
-            elif line.startswith("    "):
-                amend_section(i, line[4:])
-            else:
-                # TODO: maybe parse description
-                pass
-
-    end_section()
-    assert 'layout' in config
-    return config
-
-#       header file parsing
-
-IF0_RE = re.compile(r"""
-    ^
-    #if 0
-    $.*?
-    #endif
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-COMMENT_RE = re.compile(r"""
-    /\*
-    .*?
-    \*/"
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-def read_header_file(path):
-    with io.open(path, encoding="utf-8") as fh:
-        data = fh.read()
-    data, _ = COMMENT_RE.subn("", data)
-    data, _ = IF0_RE.subn("", data)
-    return data
-
-
-def regex_partial(re_str_fmt, flags):
-    def partial(*args, **kwargs):
-        re_str = re_str_fmt.format(*args, **kwargs)
-        return re.compile(re_str, flags)
-    return partial
-
-
-KEYDEF_REP = regex_partial(r"""
-    #define
-    \s
-    (
-        (?:{})          # the prefixes
-        (?:\w+)         # the key name
-    )                   # capture group end
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-ENUM_RE = re.compile(r"""
-    (
-        enum
-        \s\w+\s
-        \{
-        .*?             # the enum content
-        \}
-        ;
-    )                   # capture group end
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-ENUM_KEY_REP = regex_partial(r"""
-    (
-        {}              # the prefixes
-        \w+             # the key name
-    )                   # capture group end
-""", re.MULTILINE | re.DOTALL | re.VERBOSE)
-
-
-def parse_keydefs(config, data):
-    prefix_options = "|".join(config['key_prefixes'])
-    keydef_re = KEYDEF_REP(prefix_options)
-    enum_key_re = ENUM_KEY_REP(prefix_options)
-    for match in keydef_re.finditer(data):
-        yield match.groups()[0]
-
-    for enum_match in ENUM_RE.finditer(data):
-        enum = enum_match.groups()[0]
-        for key_match in enum_key_re.finditer(enum):
-            yield key_match.groups()[0]
-
-
-def parse_valid_keys(config, out_path):
-    basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
-    dirpaths = []
-    subpaths = []
-    while len(subpaths) < 6:
-        path = os.path.join(basepath, *subpaths)
-        dirpaths.append(path)
-        dirpaths.append(os.path.join(path, "tmk_core", "common"))
-        dirpaths.append(os.path.join(path, "quantum"))
-        subpaths.append('..')
-
-    includes = set(config['keymaps_includes'])
-    includes.add("keycode.h")
-
-    valid_keycodes = set()
-    for dirpath, include in it.product(dirpaths, includes):
-        include_path = os.path.join(dirpath, include)
-        if os.path.exists(include_path):
-            header_data = read_header_file(include_path)
-            valid_keycodes.update(
-                parse_keydefs(config, header_data)
-            )
-    return valid_keycodes
-
-
-#       Keymap Parsing
-
-def iter_raw_codes(layer_lines, filler, separator):
-    filler_re = re.compile("[" + filler + " ]")
-    for line in layer_lines:
-        line, _ = filler_re.subn("", line.strip())
-        if not line:
-            continue
-        codes = line.split(separator)
-        for code in codes[1:-1]:
-            yield code
-
-
-def iter_indexed_codes(raw_codes, key_indexes):
-    key_rows = {}
-    key_indexes_flat = []
-
-    for row_index, key_indexes in enumerate(key_indexes):
-        for key_index in key_indexes:
-            key_rows[key_index] = row_index
-        key_indexes_flat.extend(key_indexes)
-    assert len(raw_codes) == len(key_indexes_flat)
-    for raw_code, key_index in zip(raw_codes, key_indexes_flat):
-        # we keep track of the row mostly for layout purposes
-        yield raw_code, key_index, key_rows[key_index]
-
-
-LAYER_CHANGE_RE = re.compile(r"""
-    (DF|TG|MO)\(\d+\)
-""", re.VERBOSE)
-
-
-MACRO_RE = re.compile(r"""
-    M\(\w+\)
-""", re.VERBOSE)
-
-
-UNICODE_RE = re.compile(r"""
-    U[0-9A-F]{4}
-""", re.VERBOSE)
-
-
-NON_CODE = re.compile(r"""
-    ^[^A-Z0-9_]$
-""", re.VERBOSE)
-
-
-def parse_uni_code(raw_code):
-    macro_id = "UC_" + (
-        unicodedata.name(raw_code)
-        .replace(" ", "_")
-        .replace("-", "_")
-    )
-    code = "M({})".format(macro_id)
-    uc_hex = "{:04X}".format(ord(raw_code))
-    return code, macro_id, uc_hex
-
-
-def parse_key_code(raw_code, key_prefixes, valid_keycodes):
-    if raw_code in valid_keycodes:
-        return raw_code
-
-    for prefix in key_prefixes:
-        code = prefix + raw_code
-        if code in valid_keycodes:
-            return code
-
-
-def parse_code(raw_code, key_prefixes, valid_keycodes):
-    if not raw_code:
-        return 'KC_TRNS', None, None
-
-    if LAYER_CHANGE_RE.match(raw_code):
-        return raw_code, None, None
-
-    if MACRO_RE.match(raw_code):
-        macro_id = raw_code[2:-1]
-        return raw_code, macro_id, None
-
-    if UNICODE_RE.match(raw_code):
-        hex_code = raw_code[1:]
-        return parse_uni_code(chr(int(hex_code, 16)))
-
-    if NON_CODE.match(raw_code):
-        return parse_uni_code(raw_code)
-
-    code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
-    return code, None, None
-
-
-def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
-    keymap = {}
-    raw_codes = list(iter_raw_codes(
-        layer_lines, config['filler'], config['separator']
-    ))
-    indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
-    key_prefixes = config['key_prefixes']
-    for raw_code, key_index, row_index in indexed_codes:
-        code, macro_id, uc_hex = parse_code(
-            raw_code, key_prefixes, valid_keycodes
-        )
-        # TODO: line numbers for invalid codes
-        err_msg = "Could not parse key '{}' on row {}".format(
-            raw_code, row_index
-        )
-        assert code is not None, err_msg
-        # print(repr(raw_code), repr(code), macro_id, uc_hex)
-        if macro_id:
-            config['macro_ids'].add(macro_id)
-        if uc_hex:
-            config['unicode_macros'][macro_id] = uc_hex
-        keymap[key_index] = (code, row_index)
-    return keymap
-
-
-def parse_keymaps(config, valid_keycodes):
-    keymaps = collections.OrderedDict()
-    key_indexes = config.get(
-        'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
-    )
-    # TODO: maybe validate key_indexes
-
-    for layer_name, layer_lines, in config['layer_lines'].items():
-        keymaps[layer_name] = parse_keymap(
-            config, key_indexes, layer_lines, valid_keycodes
-        )
-    return keymaps
-
-#       keymap.c output
-
-USERCODE = """
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case L1:
-            ergodox_right_led_1_on();
-            break;
-        case L2:
-            ergodox_right_led_2_on();
-            break;
-        case L3:
-            ergodox_right_led_3_on();
-            break;
-        case L4:
-            ergodox_right_led_1_on();
-            ergodox_right_led_2_on();
-            break;
-        case L5:
-            ergodox_right_led_1_on();
-            ergodox_right_led_3_on();
-            break;
-        // case L6:
-        //     ergodox_right_led_2_on();
-        //     ergodox_right_led_3_on();
-        //     break;
-        // case L7:
-        //     ergodox_right_led_1_on();
-        //     ergodox_right_led_2_on();
-        //     ergodox_right_led_3_on();
-        //     break;
-        default:
-            ergodox_board_led_off();
-            break;
-    }
-};
-"""
-
-MACROCODE = """
-#define UC_MODE_WIN 0
-#define UC_MODE_LINUX 1
-#define UC_MODE_OSX 2
-
-// TODO: allow default mode to be configured
-static uint16_t unicode_mode = UC_MODE_WIN;
-
-uint16_t hextokeycode(uint8_t hex) {{
-    if (hex == 0x0) {{
-        return KC_P0;
-    }}
-    if (hex < 0xA) {{
-        return KC_P1 + (hex - 0x1);
-    }}
-    return KC_A + (hex - 0xA);
-}}
-
-void unicode_action_function(uint16_t hi, uint16_t lo) {{
-    switch (unicode_mode) {{
-    case UC_MODE_WIN:
-        register_code(KC_LALT);
-
-        register_code(KC_PPLS);
-        unregister_code(KC_PPLS);
-
-        register_code(hextokeycode((hi & 0xF0) >> 4));
-        unregister_code(hextokeycode((hi & 0xF0) >> 4));
-        register_code(hextokeycode((hi & 0x0F)));
-        unregister_code(hextokeycode((hi & 0x0F)));
-        register_code(hextokeycode((lo & 0xF0) >> 4));
-        unregister_code(hextokeycode((lo & 0xF0) >> 4));
-        register_code(hextokeycode((lo & 0x0F)));
-        unregister_code(hextokeycode((lo & 0x0F)));
-
-        unregister_code(KC_LALT);
-        break;
-    case UC_MODE_LINUX:
-        register_code(KC_LCTL);
-        register_code(KC_LSFT);
-
-        register_code(KC_U);
-        unregister_code(KC_U);
-
-        register_code(hextokeycode((hi & 0xF0) >> 4));
-        unregister_code(hextokeycode((hi & 0xF0) >> 4));
-        register_code(hextokeycode((hi & 0x0F)));
-        unregister_code(hextokeycode((hi & 0x0F)));
-        register_code(hextokeycode((lo & 0xF0) >> 4));
-        unregister_code(hextokeycode((lo & 0xF0) >> 4));
-        register_code(hextokeycode((lo & 0x0F)));
-        unregister_code(hextokeycode((lo & 0x0F)));
-
-        unregister_code(KC_LCTL);
-        unregister_code(KC_LSFT);
-        break;
-    case UC_MODE_OSX:
-        break;
-    }}
-}}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
-    if (!record->event.pressed) {{
-        return MACRO_NONE;
-    }}
-    // MACRODOWN only works in this function
-    switch(id) {{
-        case UM:
-            unicode_mode = (unicode_mode + 1) % 2;
-            break;
-{macro_cases}
-{unicode_macro_cases}
-        default:
-            break;
-    }}
-    return MACRO_NONE;
-}};
-"""
-
-
-UNICODE_MACRO_TEMPLATE = """
-case {macro_id}:
-    unicode_action_function(0x{hi:02x}, 0x{lo:02x});
-    break;
-""".strip()
-
-
-def unicode_macro_cases(config):
-    for macro_id, uc_hex in config['unicode_macros'].items():
-        hi = int(uc_hex, 16) >> 8
-        lo = int(uc_hex, 16) & 0xFF
-        unimacro_keys = ", ".join(
-            "T({})".format(
-                "KP_" + digit if digit.isdigit() else digit
-            ) for digit in uc_hex
-        )
-        yield UNICODE_MACRO_TEMPLATE.format(
-            macro_id=macro_id, hi=hi, lo=lo
-        )
-
-
-def iter_keymap_lines(keymap, row_indents=None):
-    col_widths = {}
-    col = 0
-    # first pass, figure out the column widths
-    prev_row_index = None
-    for code, row_index in keymap.values():
-        if row_index != prev_row_index:
-            col = 0
-            if row_indents:
-                col = row_indents[row_index]
-        col_widths[col] = max(len(code), col_widths.get(col, 0))
-        prev_row_index = row_index
-        col += 1
-
-    # second pass, yield the cell values
-    col = 0
-    prev_row_index = None
-    for key_index in sorted(keymap):
-        code, row_index = keymap[key_index]
-        if row_index != prev_row_index:
-            col = 0
-            yield "\n"
-            if row_indents:
-                for indent_col in range(row_indents[row_index]):
-                    pad = " " * (col_widths[indent_col] - 4)
-                    yield (" /*-*/" + pad)
-                col = row_indents[row_index]
-        else:
-            yield pad
-        yield " {}".format(code)
-        if key_index < len(keymap) - 1:
-            yield ","
-            # This will be yielded on the next iteration when
-            # we know that we're not at the end of a line.
-            pad = " " * (col_widths[col] - len(code))
-        prev_row_index = row_index
-        col += 1
-
-
-def iter_keymap_parts(config, keymaps):
-    # includes
-    for include_path in config['keymaps_includes']:
-        yield '#include "{}"\n'.format(include_path)
-
-    yield "\n"
-
-    # definitions
-    for i, macro_id in enumerate(sorted(config['macro_ids'])):
-        yield "#define {} {}\n".format(macro_id, i)
-
-    yield "\n"
-
-    for i, layer_name in enumerate(config['layer_lines']):
-        yield '#define L{0:<3} {0:<5}  // {1}\n'.format(i, layer_name)
-
-    yield "\n"
-
-    # keymaps
-    yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
-
-    for i, layer_name in enumerate(config['layer_lines']):
-        # comment
-        layer_lines = config['layer_lines'][layer_name]
-        prefixed_lines = " * " + " * ".join(layer_lines)
-        yield "/*\n{} */\n".format(prefixed_lines)
-
-        # keymap codes
-        keymap = keymaps[layer_name]
-        row_indents = ROW_INDENTS.get(config['layout'])
-        keymap_lines = "".join(iter_keymap_lines(keymap, row_indents))
-        yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
-
-    yield "};\n\n"
-
-    # no idea what this is for
-    yield "const uint16_t PROGMEM fn_actions[] = {};\n"
-
-    # macros
-    yield MACROCODE.format(
-        macro_cases="",
-        unicode_macro_cases="\n".join(unicode_macro_cases(config)),
-    )
-
-    # TODO: dynamically create blinking lights
-    yield USERCODE
-
-
-def main(argv=sys.argv[1:]):
-    if not argv or '-h' in argv or '--help' in argv:
-        print(__doc__)
-        return 0
-
-    in_path = os.path.abspath(argv[0])
-    if not os.path.exists(in_path):
-        print("No such file '{}'".format(in_path))
-        return 1
-
-    if len(argv) > 1:
-        out_path = os.path.abspath(argv[1])
-    else:
-        dirname = os.path.dirname(in_path)
-        out_path = os.path.join(dirname, "keymap.c")
-
-    config = parse_config(in_path)
-    valid_keys = parse_valid_keys(config, out_path)
-    keymaps = parse_keymaps(config, valid_keys)
-
-    with io.open(out_path, mode="w", encoding="utf-8") as fh:
-        for part in iter_keymap_parts(config, keymaps):
-            fh.write(part)
-
-
-if __name__ == '__main__':
-    sys.exit(main())
diff --git a/keyboards/ergodox_ez/util/readme.md b/keyboards/ergodox_ez/util/readme.md
deleted file mode 100644 (file)
index 26c5e5d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# ErgoDox EZ Utilities
-
-The Python script in this directory, by [mbarkhau](https://github.com/mbarkhau) allows you to write out a basic ErgoDox EZ keymap using Markdown notation, and then transpile it to C, which you can then compile. It's experimental, but if you're not comfortable using C, it's a nice option.
index 39a9cc0ae1caa9204284c01c754ea897d2a69018..57b2ef62e5f3a43b7338f789a5d4800c577b763d 100644 (file)
@@ -1,74 +1,3 @@
-\r
-\r
-# MCU name\r
-#MCU = at90usb1287\r
-MCU = atmega32u4\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the\r
-#     processor frequency in Hz. You can then use this symbol in your source code to\r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#\r
-#     This will be an integer division of F_USB below, as it is sourced by\r
-#     F_USB after it has run through any CPU prescalers. Note that this value\r
-#     does not *change* the processor frequency - it should merely be updated to\r
-#     reflect the processor speed set externally so that the code can use accurate\r
-#     software delays.\r
-F_CPU = 16000000\r
-\r
-\r
-#\r
-# LUFA specific\r
-#\r
-# Target architecture (see library "Board Types" documentation).\r
-ARCH = AVR8\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_USB, in all source code files equal to the\r
-#     input clock frequency (before any prescaling is performed) in Hz. This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_USB = $(F_CPU)\r
-\r
-# Interrupt driven control endpoint task(+60)\r
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT\r
-\r
-\r
-# Boot Section Size in *bytes*\r
-#   Teensy halfKay   512\r
-#   Teensy++ halfKay 1024\r
-#   Atmel DFU loader 4096\r
-#   LUFA bootloader  4096\r
-#   USBaspLoader     2048\r
-OPT_DEFS += -DBOOTLOADER_SIZE=4096\r
-\r
-\r
-# Build Options\r
-#   comment out to disable the options.\r
-#\r
-BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)\r
-MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)\r
-EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)\r
-# CONSOLE_ENABLE ?= yes                # Console for debug(+400)\r
-# COMMAND_ENABLE ?= yes                # Commands for debug and configuration\r
-KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key\r
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE\r
-# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend\r
-NKRO_ENABLE ?= yes                     # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work\r
-# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality\r
-# MIDI_ENABLE ?= YES                   # MIDI controls\r
-# UNICODE_ENABLE ?= YES                # Unicode\r
-# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID\r
-\r
-\r
-ifndef QUANTUM_DIR\r
-       include ../../Makefile\r
-endif\r
-\r
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
index 4813c4e786ff43012daeffb825534462998f25fc..97753bc069d2f3caba3bc4f1d02457005b5e4f63 100644 (file)
-/*\r
-Copyright 2012 Jun Wako <wakojun@gmail.com>\r
-\r
-This program is free software: you can redistribute it and/or modify\r
-it under the terms of the GNU General Public License as published by\r
-the Free Software Foundation, either version 2 of the License, or\r
-(at your option) any later version.\r
-\r
-This program is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
-GNU General Public License for more details.\r
-\r
-You should have received a copy of the GNU General Public License\r
-along with this program. If not, see <http://www.gnu.org/licenses/>.\r
-*/\r
-\r
-#ifndef CONFIG_H\r
-#define CONFIG_H\r
-\r
-#include "config_common.h"\r
-\r
-/* USB Device descriptor parameter */\r
-#define VENDOR_ID    0xFEED\r
-#define PRODUCT_ID   0x6060\r
-#define DEVICE_VER   0x0001\r
-#define MANUFACTURER    geekhack\r
-#define PRODUCT         GH60\r
-#define DESCRIPTION     t.m.k. keyboard firmware for GH60\r
-\r
-/* key matrix size */\r
-#define MATRIX_ROWS 5\r
-#define MATRIX_COLS 14\r
-\r
-/*\r
- * Keyboard Matrix Assignments\r
- *\r
- * Change this to how you wired your keyboard\r
- * COLS: AVR pins used for columns, left to right\r
- * ROWS: AVR pins used for rows, top to bottom\r
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)\r
- *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)\r
- *\r
-*/\r
- #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }\r
-// Rev A\r
-// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }\r
-// Rev B/C\r
-   #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }\r
-#define UNUSED_PINS\r
-\r
-/* COL2ROW or ROW2COL */\r
-#define DIODE_DIRECTION COL2ROW\r
-\r
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */\r
-#define DEBOUNCING_DELAY 5\r
-\r
-/* define if matrix has ghost (lacks anti-ghosting diodes) */\r
-//#define MATRIX_HAS_GHOST\r
-\r
-/* number of backlight levels */\r
-#define BACKLIGHT_LEVELS 3\r
-\r
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */\r
-#define LOCKING_SUPPORT_ENABLE\r
-/* Locking resynchronize hack */\r
-#define LOCKING_RESYNC_ENABLE\r
-\r
-/*\r
- * Force NKRO\r
- *\r
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved\r
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the\r
- * makefile for this to work.)\r
- *\r
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)\r
- * until the next keyboard reset.\r
- *\r
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is\r
- * fully operational during normal computer usage.\r
- *\r
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)\r
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by\r
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a\r
- * power-up.\r
- *\r
- */\r
-//#define FORCE_NKRO\r
-\r
-/*\r
- * Magic Key Options\r
- *\r
- * Magic keys are hotkey commands that allow control over firmware functions of\r
- * the keyboard. They are best used in combination with the HID Listen program,\r
- * found here: https://www.pjrc.com/teensy/hid_listen.html\r
- *\r
- * The options below allow the magic key functionality to be changed. This is\r
- * useful if your keyboard/keypad is missing keys and you want magic key support.\r
- *\r
- */\r
-\r
-/* key combination for magic key command */\r
-#define IS_COMMAND() ( \\r
-  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \\r
-)\r
-\r
-/* control how magic key switches layers */\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false\r
-\r
-/* override magic key keymap */\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM\r
-//#define MAGIC_KEY_HELP1     H\r
-//#define MAGIC_KEY_HELP2     SLASH\r
-//#define MAGIC_KEY_DEBUG     D\r
-//#define MAGIC_KEY_DEBUG_MATRIX  X\r
-//#define MAGIC_KEY_DEBUG_KBD   K\r
-//#define MAGIC_KEY_DEBUG_MOUSE  M\r
-//#define MAGIC_KEY_VERSION    V\r
-//#define MAGIC_KEY_STATUS     S\r
-//#define MAGIC_KEY_CONSOLE    C\r
-//#define MAGIC_KEY_LAYER0_ALT1  ESC\r
-//#define MAGIC_KEY_LAYER0_ALT2  GRAVE\r
-//#define MAGIC_KEY_LAYER0     0\r
-//#define MAGIC_KEY_LAYER1     1\r
-//#define MAGIC_KEY_LAYER2     2\r
-//#define MAGIC_KEY_LAYER3     3\r
-//#define MAGIC_KEY_LAYER4     4\r
-//#define MAGIC_KEY_LAYER5     5\r
-//#define MAGIC_KEY_LAYER6     6\r
-//#define MAGIC_KEY_LAYER7     7\r
-//#define MAGIC_KEY_LAYER8     8\r
-//#define MAGIC_KEY_LAYER9     9\r
-//#define MAGIC_KEY_BOOTLOADER   PAUSE\r
-//#define MAGIC_KEY_LOCK      CAPS\r
-//#define MAGIC_KEY_EEPROM     E\r
-//#define MAGIC_KEY_NKRO      N\r
-//#define MAGIC_KEY_SLEEP_LED   Z\r
-\r
-/*\r
- * Feature disable options\r
- * These options are also useful to firmware size reduction.\r
- */\r
-\r
-/* disable debug print */\r
-//#define NO_DEBUG\r
-\r
-/* disable print */\r
-//#define NO_PRINT\r
-\r
-/* disable action features */\r
-//#define NO_ACTION_LAYER\r
-//#define NO_ACTION_TAPPING\r
-//#define NO_ACTION_ONESHOT\r
-//#define NO_ACTION_MACRO\r
-//#define NO_ACTION_FUNCTION\r
-\r
-#endif\r
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0xFEED
+#define PRODUCT_ID   0x6060
+#define DEVICE_VER   0x0001
+#define MANUFACTURER    geekhack
+#define PRODUCT         GH60
+#define DESCRIPTION     t.m.k. keyboard firmware for GH60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+ #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+// Rev A
+// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
+// Rev B/C
+   #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1     H
+//#define MAGIC_KEY_HELP2     SLASH
+//#define MAGIC_KEY_DEBUG     D
+//#define MAGIC_KEY_DEBUG_MATRIX  X
+//#define MAGIC_KEY_DEBUG_KBD   K
+//#define MAGIC_KEY_DEBUG_MOUSE  M
+//#define MAGIC_KEY_VERSION    V
+//#define MAGIC_KEY_STATUS     S
+//#define MAGIC_KEY_CONSOLE    C
+//#define MAGIC_KEY_LAYER0_ALT1  ESC
+//#define MAGIC_KEY_LAYER0_ALT2  GRAVE
+//#define MAGIC_KEY_LAYER0     0
+//#define MAGIC_KEY_LAYER1     1
+//#define MAGIC_KEY_LAYER2     2
+//#define MAGIC_KEY_LAYER3     3
+//#define MAGIC_KEY_LAYER4     4
+//#define MAGIC_KEY_LAYER5     5
+//#define MAGIC_KEY_LAYER6     6
+//#define MAGIC_KEY_LAYER7     7
+//#define MAGIC_KEY_LAYER8     8
+//#define MAGIC_KEY_LAYER9     9
+//#define MAGIC_KEY_BOOTLOADER   PAUSE
+//#define MAGIC_KEY_LOCK      CAPS
+//#define MAGIC_KEY_EEPROM     E
+//#define MAGIC_KEY_NKRO      N
+//#define MAGIC_KEY_SLEEP_LED   Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
index 255d87de996274d1574fd8d757d5ecc9c8eb25dd..f5a158e12f99bd1e2a6d306e232e3d145057f8f8 100644 (file)
@@ -1,25 +1,25 @@
-#include "gh60.h"\r
-\r
-void led_set_kb(uint8_t usb_led) {\r
-       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here\r
-       \r
-    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {\r
-               gh60_caps_led_on();\r
-               } else {\r
-               gh60_caps_led_off(); \r
-    }\r
-       \r
-    // if (usb_led & (1<<USB_LED_NUM_LOCK)) {\r
-               // gh60_esc_led_on();\r
-               // } else {\r
-               // gh60_esc_led_off(); \r
-    // }\r
-       \r
-    // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {\r
-               // gh60_fn_led_on();\r
-               // } else {\r
-               // gh60_fn_led_off();   \r
-    // }\r
-\r
-       led_set_user(usb_led);  \r
-}\r
+#include "gh60.h"
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+       
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+               gh60_caps_led_on();
+               } else {
+               gh60_caps_led_off(); 
+    }
+       
+    // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+               // gh60_esc_led_on();
+               // } else {
+               // gh60_esc_led_off(); 
+    // }
+       
+    // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+               // gh60_fn_led_on();
+               // } else {
+               // gh60_fn_led_off();   
+    // }
+
+       led_set_user(usb_led);  
+}
index ca30562a44a94d466da262e87bab81b477d3f099..66bc2790d287cfe39a5b3debb3945953beab840f 100644 (file)
@@ -1,74 +1,75 @@
-#ifndef GH60_H\r
-#define GH60_H\r
-\r
-#include "quantum.h"\r
-#include "led.h"\r
-\r
-/* GH60 LEDs \r
- *   GPIO pads\r
- *   0 F7 WASD LEDs\r
- *   1 F6 ESC LED\r
- *   2 F5 FN LED\r
- *   3 F4 POKER Arrow LEDs\r
- *   B2 Capslock LED\r
- *   B0 not connected\r
- */\r
-inline void gh60_caps_led_on(void)      { DDRB |=  (1<<2); PORTB &= ~(1<<2); }\r
-inline void gh60_poker_leds_on(void)    { DDRF |=  (1<<4); PORTF &= ~(1<<4); }\r
-inline void gh60_fn_led_on(void)       { DDRF |=  (1<<5); PORTF &= ~(1<<5); }\r
-inline void gh60_esc_led_on(void)      { DDRF |=  (1<<6); PORTF &= ~(1<<6); }\r
-inline void gh60_wasd_leds_on(void)            { DDRF |=  (1<<7); PORTF &= ~(1<<7); }\r
-\r
-inline void gh60_caps_led_off(void)     { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }\r
-inline void gh60_poker_leds_off(void)   { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }\r
-inline void gh60_fn_led_off(void)      { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }\r
-inline void gh60_esc_led_off(void)     { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }\r
-inline void gh60_wasd_leds_off(void)           { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }\r
-\r
-/* GH60 keymap definition macro\r
- * K2C, K31 and  K3C are extra keys for ISO\r
- */\r
-#define KEYMAP( \\r
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \\r
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \\r
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \\r
-    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \\r
-    K40, K41, K42,           K45,                K49, K4A, K4B, K4C, K4D  \\r
-) { \\r
-    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D }, \\r
-    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D }, \\r
-    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D }, \\r
-    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D }, \\r
-    { KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_##K45, KC_NO,    KC_NO,    KC_NO,    KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D }  \\r
-}\r
-\r
-/* ANSI valiant. No extra keys for ISO */\r
-#define KEYMAP_ANSI( \\r
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \\r
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \\r
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \\r
-    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,           K3D, \\r
-    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \\r
-) KEYMAP( \\r
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \\r
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \\r
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO,  K2D, \\r
-    K30, NO,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO,  K3D, \\r
-    K40, K41, K42,           K45,                NO,  K4A, K4B, K4C, K4D  \\r
-)\r
-\r
-#define KEYMAP_HHKB( \\r
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\\r
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \\r
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \\r
-    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3C, \\r
-    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \\r
-) KEYMAP( \\r
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \\r
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \\r
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO,  K2D, \\r
-    K30, NO,  K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \\r
-    K40, K41, K42,           K45,                K49, K4A, K4B, K4C, K4D  \\r
-)\r
-\r
-#endif\r
+#ifndef GH60_H
+#define GH60_H
+
+#include "quantum.h"
+#include "led.h"
+
+/* GH60 LEDs
+ *   GPIO pads
+ *   0 F7 WASD LEDs
+ *   1 F6 ESC LED
+ *   2 F5 FN LED
+ *   3 F4 POKER Arrow LEDs
+ *   B2 Capslock LED
+ *   B0 not connected
+ */
+inline void gh60_caps_led_on(void)      { DDRB |=  (1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_on(void)    { DDRF |=  (1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_on(void)       { DDRF |=  (1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_on(void)      { DDRF |=  (1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_on(void)            { DDRF |=  (1<<7); PORTF &= ~(1<<7); }
+
+inline void gh60_caps_led_off(void)     { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_off(void)   { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_off(void)      { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_off(void)     { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_off(void)           { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
+
+/* GH60 keymap definition macro
+ * K2C, K31 and  K3C are extra keys for ISO
+ */
+#define KEYMAP( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+    K40, K41, K42,           K45,                K49, K4A, K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, KC_NO,    KC_NO,    K45, KC_NO,    KC_NO,    KC_NO,    K49, K4A, K4B, K4C, K4D }  \
+}
+
+/* ANSI variant. No extra keys for ISO */
+#define KEYMAP_ANSI( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
+    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,           K3D, \
+    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO,    K2D }, \
+    { K30, KC_NO,    K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO,    K3D }, \
+    { K40, K41, K42, KC_NO,    KC_NO,    K45, KC_NO,    KC_NO,    KC_NO,    KC_NO,    K4A, K4B, K4C, K4D }  \
+}
+
+/* HHKB Variant */
+#define KEYMAP_HHKB( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
+    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D, K3C, \
+    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO,    K2D }, \
+    { K30, KC_NO,    K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+    { K40, K41, K42, KC_NO,    KC_NO,    K45, KC_NO,    KC_NO,    KC_NO,    K49, K4A, K4B, K4C, K4D }  \
+}
+
+#endif
index 3622be41b88211a55aa6452d3e36e7e5360ab238..92f5459840c7b9595199a3c815d655602ad90ea7 100644 (file)
@@ -4,25 +4,25 @@
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     /* 0: qwerty */
     KEYMAP(
-       ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, GRV,  \
-        TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
-        CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,NO,  ENT,  \
-        LSFT,FN1, Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,FN0, RSFT, \
-        LCTL,LGUI,LALT,          SPC,                BSLS,RALT,RGUI,APP, RCTL),
+             KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_GRV,\
+        KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSPC,\
+        KC_CAPS,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT,\
+        KC_LSFT,F(1),KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,F(0),KC_RSFT,\
+        KC_LCTL,KC_LGUI,KC_LALT,       KC_SPC,             KC_BSLS,KC_RALT,KC_RGUI,KC_APP,KC_RCTL),
     /* 1: fn */
        KEYMAP(
-        ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS, \
-        TRNS,TRNS,UP,  TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
+        KC_ESC,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_TRNS,       KC_TRNS,            KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
     /* 2: arrows */
        KEYMAP(
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP,   \
-        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,LEFT,DOWN,RGHT),
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,\
+        KC_TRNS,KC_TRNS,KC_TRNS,       KC_TRNS,            KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT),
 };
 
 const uint16_t PROGMEM fn_actions[] = {
@@ -49,7 +49,7 @@ void matrix_scan_user(void) {
 
 //Layer LED indicators
     uint32_t layer = layer_state;
-       
+
     if (layer & (1<<1)) {
         gh60_wasd_leds_on();
         gh60_fn_led_on();
@@ -57,7 +57,7 @@ void matrix_scan_user(void) {
         gh60_wasd_leds_off();
         gh60_fn_led_off();
     }
-       
+
     if (layer & (1<<2)) {
         gh60_poker_leds_on();
         gh60_esc_led_on();
@@ -65,5 +65,5 @@ void matrix_scan_user(void) {
         gh60_poker_leds_off();
         gh60_esc_led_off();
     }
-       
+
 };
index 2e69aee298130c343a163075af3243f81b42eeef..c73cf114172ce101039196cad50aef9af22facd6 100644 (file)
-#----------------------------------------------------------------------------\r
-# On command line:\r
-#\r
-# make all = Make software.\r
-#\r
-# make clean = Clean out built project files.\r
-#\r
-# make coff = Convert ELF to AVR COFF.\r
-#\r
-# make extcoff = Convert ELF to AVR Extended COFF.\r
-#\r
-# make program = Download the hex file to the device.\r
-#                Please customize your programmer settings(PROGRAM_CMD)\r
-#\r
-# make teensy = Download the hex file to the device, using teensy_loader_cli.\r
-#               (must have teensy_loader_cli installed).\r
-#\r
-# make dfu = Download the hex file to the device, using dfu-programmer (must\r
-#            have dfu-programmer installed).\r
-#\r
-# make flip = Download the hex file to the device, using Atmel FLIP (must\r
-#             have Atmel FLIP installed).\r
-#\r
-# make dfu-ee = Download the eeprom file to the device, using dfu-programmer\r
-#               (must have dfu-programmer installed).\r
-#\r
-# make flip-ee = Download the eeprom file to the device, using Atmel FLIP\r
-#                (must have Atmel FLIP installed).\r
-#\r
-# make debug = Start either simulavr or avarice as specified for debugging, \r
-#              with avr-gdb or avr-insight as the front end for debugging.\r
-#\r
-# make filename.s = Just compile filename.c into the assembler code only.\r
-#\r
-# make filename.i = Create a preprocessed source file for use in submitting\r
-#                   bug reports to the GCC project.\r
-#\r
-# To rebuild project do "make clean" then "make all".\r
-#----------------------------------------------------------------------------\r
-\r
-# MCU name\r
-#MCU = at90usb1287\r
-MCU = atmega32u4\r
-\r
-# Processor frequency.\r
-#     This will define a symbol, F_CPU, in all source code files equal to the\r
-#     processor frequency in Hz. You can then use this symbol in your source code to\r
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done\r
-#     automatically to create a 32-bit value in your source code.\r
-#\r
-#     This will be an integer division of F_USB below, as it is sourced by\r
-#     F_USB after it has run through any CPU prescalers. Note that this value\r
-#     does not *change* the processor frequency - it should merely be updated to\r
-#     reflect the processor speed set externally so that the code can use accurate\r
-#     software delays.\r
-F_CPU = 16000000\r
-\r
-\r
-#\r
-# LUFA specific\r
-#\r
-# Target architecture (see library "Board Types" documentation).\r
-ARCH = AVR8\r
-\r
-# Input clock frequency.\r
-#     This will define a symbol, F_USB, in all source code files equal to the\r
-#     input clock frequency (before any prescaling is performed) in Hz. This value may\r
-#     differ from F_CPU if prescaling is used on the latter, and is required as the\r
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed\r
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'\r
-#     at the end, this will be done automatically to create a 32-bit value in your\r
-#     source code.\r
-#\r
-#     If no clock division is performed on the input clock inside the AVR (via the\r
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.\r
-F_USB = $(F_CPU)\r
-\r
-# Interrupt driven control endpoint task(+60)\r
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT\r
-\r
-\r
-# Boot Section Size in *bytes*\r
-#   Teensy halfKay   512\r
-#   Teensy++ halfKay 1024\r
-#   Atmel DFU loader 4096\r
-#   LUFA bootloader  4096\r
-#   USBaspLoader     2048\r
-OPT_DEFS += -DBOOTLOADER_SIZE=4096\r
-\r
-\r
-# Build Options\r
-#   comment out to disable the options.\r
-#\r
-BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)\r
-MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)\r
-EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)\r
-# CONSOLE_ENABLE ?= yes                # Console for debug(+400)\r
-# COMMAND_ENABLE ?= yes                # Commands for debug and configuration\r
-KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key\r
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE\r
-# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend\r
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work\r
-# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality\r
-# MIDI_ENABLE ?= YES           # MIDI controls\r
-# UNICODE_ENABLE ?= YES                # Unicode\r
-# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID\r
-RGBLIGHT_ENABLE ?= yes          # Enable RGB Underglow\r
-\r
-ifndef QUANTUM_DIR\r
-       include ../../../../Makefile\r
-endif\r
-\r
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+#                Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+#            have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+#             have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+#               (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+#                (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)
+# CONSOLE_ENABLE ?= yes                # Console for debug(+400)
+# COMMAND_ENABLE ?= yes                # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES           # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= yes          # Enable RGB Underglow
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
+
index 8272875ed0efda5df6a1d70df7b56141da7f4ab8..bcd7534617c28e7da0514b33129eb63ca6637653 100644 (file)
-/*\r
-Copyright 2012 Jun Wako <wakojun@gmail.com>\r
-\r
-This program is free software: you can redistribute it and/or modify\r
-it under the terms of the GNU General Public License as published by\r
-the Free Software Foundation, either version 2 of the License, or\r
-(at your option) any later version.\r
-\r
-This program is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
-GNU General Public License for more details.\r
-\r
-You should have received a copy of the GNU General Public License\r
-along with this program. If not, see <http://www.gnu.org/licenses/>.\r
-*/\r
-\r
-#ifndef CONFIG_H\r
-#define CONFIG_H\r
-\r
-#include "config_common.h"\r
-\r
-/* USB Device descriptor parameter */\r
-#define VENDOR_ID    0xFEED\r
-#define PRODUCT_ID   0x6060\r
-#define DEVICE_VER   0x0001\r
-#define MANUFACTURER    geekhack\r
-#define PRODUCT         GH60\r
-#define DESCRIPTION     t.m.k. keyboard firmware for GH60\r
-\r
-/* key matrix size */\r
-#define MATRIX_ROWS 5\r
-#define MATRIX_COLS 14\r
-\r
-/*\r
- * Keyboard Matrix Assignments\r
- *\r
- * Change this to how you wired your keyboard\r
- * COLS: AVR pins used for columns, left to right\r
- * ROWS: AVR pins used for rows, top to bottom\r
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)\r
- *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)\r
- *\r
-*/\r
- #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }\r
-// Rev A\r
-// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }\r
-// Rev B/C\r
-   #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }\r
-#define UNUSED_PINS\r
-\r
-/* COL2ROW or ROW2COL */\r
-#define DIODE_DIRECTION COL2ROW\r
-\r
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */\r
-#define DEBOUNCING_DELAY 5\r
-\r
-/* define if matrix has ghost (lacks anti-ghosting diodes) */\r
-//#define MATRIX_HAS_GHOST\r
-\r
-/* number of backlight levels */\r
-#define BACKLIGHT_LEVELS 3\r
-\r
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */\r
-#define LOCKING_SUPPORT_ENABLE\r
-/* Locking resynchronize hack */\r
-#define LOCKING_RESYNC_ENABLE\r
-\r
-/*\r
- * Force NKRO\r
- *\r
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved\r
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the\r
- * makefile for this to work.)\r
- *\r
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)\r
- * until the next keyboard reset.\r
- *\r
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is\r
- * fully operational during normal computer usage.\r
- *\r
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)\r
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by\r
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a\r
- * power-up.\r
- *\r
- */\r
-//#define FORCE_NKRO\r
-\r
-/*\r
- * Magic Key Options\r
- *\r
- * Magic keys are hotkey commands that allow control over firmware functions of\r
- * the keyboard. They are best used in combination with the HID Listen program,\r
- * found here: https://www.pjrc.com/teensy/hid_listen.html\r
- *\r
- * The options below allow the magic key functionality to be changed. This is\r
- * useful if your keyboard/keypad is missing keys and you want magic key support.\r
- *\r
- */\r
-\r
-/* key combination for magic key command */\r
-#define IS_COMMAND() ( \\r
-  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \\r
-)\r
-\r
-/* control how magic key switches layers */\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false\r
-\r
-/* override magic key keymap */\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS\r
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM\r
-//#define MAGIC_KEY_HELP1     H\r
-//#define MAGIC_KEY_HELP2     SLASH\r
-//#define MAGIC_KEY_DEBUG     D\r
-//#define MAGIC_KEY_DEBUG_MATRIX  X\r
-//#define MAGIC_KEY_DEBUG_KBD   K\r
-//#define MAGIC_KEY_DEBUG_MOUSE  M\r
-//#define MAGIC_KEY_VERSION    V\r
-//#define MAGIC_KEY_STATUS     S\r
-//#define MAGIC_KEY_CONSOLE    C\r
-//#define MAGIC_KEY_LAYER0_ALT1  ESC\r
-//#define MAGIC_KEY_LAYER0_ALT2  GRAVE\r
-//#define MAGIC_KEY_LAYER0     0\r
-//#define MAGIC_KEY_LAYER1     1\r
-//#define MAGIC_KEY_LAYER2     2\r
-//#define MAGIC_KEY_LAYER3     3\r
-//#define MAGIC_KEY_LAYER4     4\r
-//#define MAGIC_KEY_LAYER5     5\r
-//#define MAGIC_KEY_LAYER6     6\r
-//#define MAGIC_KEY_LAYER7     7\r
-//#define MAGIC_KEY_LAYER8     8\r
-//#define MAGIC_KEY_LAYER9     9\r
-//#define MAGIC_KEY_BOOTLOADER   PAUSE\r
-//#define MAGIC_KEY_LOCK      CAPS\r
-//#define MAGIC_KEY_EEPROM     E\r
-//#define MAGIC_KEY_NKRO      N\r
-//#define MAGIC_KEY_SLEEP_LED   Z\r
-\r
-/*\r
- * Feature disable options\r
- * These options are also useful to firmware size reduction.\r
- */\r
-\r
-/* disable debug print */\r
-//#define NO_DEBUG\r
-\r
-/* disable print */\r
-//#define NO_PRINT\r
-\r
-/* disable action features */\r
-//#define NO_ACTION_LAYER\r
-//#define NO_ACTION_TAPPING\r
-//#define NO_ACTION_ONESHOT\r
-//#define NO_ACTION_MACRO\r
-//#define NO_ACTION_FUNCTION\r
-\r
-/*\r
- * RGB Underglow\r
- * These settings are for the F4 by default:\r
- * \r
- *\r
- * #define ws2812_PORTREG  PORTF\r
- * #define ws2812_DDRREG   DDRF\r
- * #define ws2812_pin PF4\r
- * #define RGBLED_NUM 14     // Number of LEDs\r
- * #define RGBLIGHT_HUE_STEP 10\r
- * #define RGBLIGHT_SAT_STEP 17\r
- * #define RGBLIGHT_VAL_STEP 17\r
- *\r
- * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. \r
- * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. \r
- * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c\r
-*/\r
-\r
-/* Deprecated code below\r
-#define ws2812_PORTREG  PORTF \r
-#define ws2812_DDRREG   DDRF\r
-#define ws2812_pin PF4\r
-*/ \r
-#define RGB_DI_PIN F4\r
-#define RGBLIGHT_TIMER\r
-#define RGBLED_NUM 8         // Number of LEDs\r
-#define RGBLIGHT_HUE_STEP 8\r
-#define RGBLIGHT_SAT_STEP 8\r
-#define RGBLIGHT_VAL_STEP 8\r
-#endif\r
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0xFEED
+#define PRODUCT_ID   0x6060
+#define DEVICE_VER   0x0001
+#define MANUFACTURER    geekhack
+#define PRODUCT         GH60
+#define DESCRIPTION     t.m.k. keyboard firmware for GH60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+ #define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+// Rev A
+// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
+// Rev B/C
+   #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1     H
+//#define MAGIC_KEY_HELP2     SLASH
+//#define MAGIC_KEY_DEBUG     D
+//#define MAGIC_KEY_DEBUG_MATRIX  X
+//#define MAGIC_KEY_DEBUG_KBD   K
+//#define MAGIC_KEY_DEBUG_MOUSE  M
+//#define MAGIC_KEY_VERSION    V
+//#define MAGIC_KEY_STATUS     S
+//#define MAGIC_KEY_CONSOLE    C
+//#define MAGIC_KEY_LAYER0_ALT1  ESC
+//#define MAGIC_KEY_LAYER0_ALT2  GRAVE
+//#define MAGIC_KEY_LAYER0     0
+//#define MAGIC_KEY_LAYER1     1
+//#define MAGIC_KEY_LAYER2     2
+//#define MAGIC_KEY_LAYER3     3
+//#define MAGIC_KEY_LAYER4     4
+//#define MAGIC_KEY_LAYER5     5
+//#define MAGIC_KEY_LAYER6     6
+//#define MAGIC_KEY_LAYER7     7
+//#define MAGIC_KEY_LAYER8     8
+//#define MAGIC_KEY_LAYER9     9
+//#define MAGIC_KEY_BOOTLOADER   PAUSE
+//#define MAGIC_KEY_LOCK      CAPS
+//#define MAGIC_KEY_EEPROM     E
+//#define MAGIC_KEY_NKRO      N
+//#define MAGIC_KEY_SLEEP_LED   Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * RGB Underglow
+ * These settings are for the F4 by default:
+ * 
+ *
+ * #define ws2812_PORTREG  PORTF
+ * #define ws2812_DDRREG   DDRF
+ * #define ws2812_pin PF4
+ * #define RGBLED_NUM 14     // Number of LEDs
+ * #define RGBLIGHT_HUE_STEP 10
+ * #define RGBLIGHT_SAT_STEP 17
+ * #define RGBLIGHT_VAL_STEP 17
+ *
+ * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. 
+ * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. 
+ * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
+*/
+
+/* Deprecated code below
+#define ws2812_PORTREG  PORTF 
+#define ws2812_DDRREG   DDRF
+#define ws2812_pin PF4
+*/ 
+#define RGB_DI_PIN F4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8         // Number of LEDs
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
index 263eec4e53c0bba0cb822dd89ee0b4b8941c6203..9acac7cecfda0f294bdeba9becba2c4af8219430 100644 (file)
@@ -8,9 +8,9 @@
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /*
-   *  Base layer, pretty standard ANSI layout. 
+   *  Base layer, pretty standard ANSI layout.
    * ,-----------------------------------------------------------.
-   * |FN12| 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+   * |F(12)| 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
    * |-----------------------------------------------------------|
    * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
    * |-----------------------------------------------------------|
@@ -22,13 +22,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * `-----------------------------------------------------------'
    */
        [_BL] = KEYMAP(
-        FN12,1,2,3,4,5,6,7,8,9,0,MINS,EQL,BSPC, \
-       TAB,Q,W,E,R,T,Y,U,I,O,P,LBRC,RBRC,BSLS, \
-        FN2,A,S,D,F,G,H,J,K,L,SCLN,QUOT,NO,ENT,  \
-        LSFT,NO,Z,X,C,V,B,N,M,COMM,DOT,SLSH,NO,RSFT, \
-        LCTL,LGUI,LALT,        SPC,      NO,RALT,FN0,APP, RCTL),
-   
-   /*  
+        F(12),KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, \
+       KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, \
+        F(2),KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT,  \
+        KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \
+        KC_LCTL,KC_LGUI,KC_LALT,        KC_SPC,      KC_NO,KC_RALT,F(0),KC_APP,KC_RCTL),
+
+   /*
    * Locking arrow keys to WASD for when you need dedicated arrow keys
    * ,-----------------------------------------------------------.
    * |    |  |   |   |   |   |   |   |   |   |   |   |   |       |
@@ -43,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * `-----------------------------------------------------------'
    */
        [_AL] = KEYMAP(
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,UP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,   \
-        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,   \
+        KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
 
 
-   /* 
+   /*
    * Primary function layer, mostly the same as the traditional Pok3r layout.
    * ,-------------------------------------------------------------.
    * |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL   |
@@ -65,15 +65,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * `-------------------------------------------------------------'
    */
        [_FL] = KEYMAP(
-        GRAVE,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, DELETE, \
-        TRNS,FN1,TRNS,TRNS,TRNS,TRNS,CALC,PGUP,UP,PGDN,PSCR,SLCK,PAUS,TRNS, \
-        TRNS,MUTE,_VOLDOWN,_VOLUP,TRNS,TRNS,HOME,LEFT,DOWN,RGHT,INS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,FN3,TRNS,TRNS,TRNS,TRNS,END,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
-   
-   /* 
+        KC_GRAVE,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_DELETE, \
+        KC_TRNS,F(1),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, \
+        KC_TRNS,KC_MUTE,KC__VOLDOWN,KC__VOLUP,KC_TRNS,KC_TRNS,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_TRNS,F(3),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_END,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
+
+   /*
    * Locking layer for controlling the underglow.
-   * 
+   *
    * ,-----------------------------------------------------------.
    * |    |  |   |   |   |   |   |   |   |   |   |   |   |       |
    * |-----------------------------------------------------------|
@@ -87,11 +87,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * `-----------------------------------------------------------'
    */
        [_UL] = KEYMAP(
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,FN4,FN5,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,FN6,FN7,FN8,FN9,FN10,FN11,TRNS,TRNS,TRNS,TRNS,TRNS,   \
-        TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS,TRNS),
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+        KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,   \
+        KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
 };
 
 enum function_id {
@@ -124,7 +124,7 @@ const uint16_t PROGMEM fn_actions[] = {
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 {
-  // MACRODOWN only works in this function 
+  // MACRODOWN only works in this function
       switch(id) {
         case 0:
           if (record->event.pressed) {
diff --git a/keyboards/gh60/keymaps/sethbc/Makefile b/keyboards/gh60/keymaps/sethbc/Makefile
new file mode 100644 (file)
index 0000000..457a3d0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/gh60/keymaps/sethbc/keymap.c b/keyboards/gh60/keymaps/sethbc/keymap.c
new file mode 100644 (file)
index 0000000..599e664
--- /dev/null
@@ -0,0 +1,76 @@
+#include "gh60.h"
+#include "action_layer.h"
+
+#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: qwerty */
+  KEYMAP_HHKB(
+             F(0),KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV,\
+        KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSPC,\
+        KC_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_ENT,\
+        KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,F(1),\
+        KC_LCTL,KC_LALT,KC_LGUI,      KC_SPC,            KC_RGUI,KC_RALT,KC_APP,KC_RCTL),
+    /* 1: fn */
+       KEYMAP_HHKB(
+        KC_GRV,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_TRNS,KC_TRNS,\
+        KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RIGHT,KC_PENT,\
+        KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END,KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS,\
+        KC_TRNS,KC_TRNS,KC_TRNS,      KC_TRNS,           KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
+};
+
+enum function_id {
+    SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_FUNCTION(SHIFT_ESC),
+    [1] = ACTION_LAYER_MOMENTARY(1),  // to Fn overlay
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+}
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  static uint8_t shift_esc_shift_mask;
+  switch (id) {
+    case SHIFT_ESC:
+      shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+      if (record->event.pressed) {
+        if (shift_esc_shift_mask) {
+          add_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          add_key(KC_ESC);
+          send_keyboard_report();
+        }
+      } else {
+        if (shift_esc_shift_mask) {
+          del_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          del_key(KC_ESC);
+          send_keyboard_report();
+        }
+      }
+      break;
+  }
+}
index 3787f938e7883a972ae83c41d0ba01b4af5bd6c7..e9bf1983a5b772d81a4395972e48dee91271a358 100644 (file)
@@ -1,18 +1,18 @@
-    /* Column pin configuration\r
-    * col: 0   1   2   3   4   5   6   7   8   9   10  11  12  13\r
-    * pin: F0  F1  E6  C7  C6  B6  D4  B1  B7  B5  B4  D7  D6  B3  (Rev.C)\r
-    */\r
-     \r
-    /* Row pin configuration\r
-    * row: 0   1   2   3   4\r
-    * pin: D0  D1  D2  D3  D5\r
-    */\r
-     \r
-    GPIO pads\r
-    0 F7 WASD LEDs\r
-    1 F6 ESC LED\r
-    2 F5 FN LED\r
-    3 F4 POKER Arrow LEDs\r
-     \r
-    B2 Capslock LED\r
+    /* Column pin configuration
+    * col: 0   1   2   3   4   5   6   7   8   9   10  11  12  13
+    * pin: F0  F1  E6  C7  C6  B6  D4  B1  B7  B5  B4  D7  D6  B3  (Rev.C)
+    */
+     
+    /* Row pin configuration
+    * row: 0   1   2   3   4
+    * pin: D0  D1  D2  D3  D5
+    */
+     
+    GPIO pads
+    0 F7 WASD LEDs
+    1 F6 ESC LED
+    2 F5 FN LED
+    3 F4 POKER Arrow LEDs
+     
+    B2 Capslock LED
     B0 not connected
\ No newline at end of file
index 92302d507ccb4d22d9e70b17bc4bc9104fe162ea..8c744bfd3c5327e44111cf0dfa23d579614ce878 100644 (file)
@@ -1,60 +1,62 @@
-## gh60 Rev C keyboard firmware\r
-\r
-![gh60 Rev C PCB](gh60revc.jpg)\r
-\r
-    /* Column pin configuration\r
-    * col: 0   1   2   3   4   5   6   7   8   9   10  11  12  13\r
-    * pin: F0  F1  E6  C7  C6  B6  D4  B1  B7  B5  B4  D7  D6  B3  (Rev.C)\r
-    */\r
-     \r
-    /* Row pin configuration\r
-    * row: 0   1   2   3   4\r
-    * pin: D0  D1  D2  D3  D5\r
-    */\r
-     \r
-    GPIO pads\r
-    0 F7 WASD LEDs\r
-    1 F6 ESC LED\r
-    2 F5 FN LED\r
-    3 F4 POKER Arrow LEDs\r
-     \r
-    B2 Capslock LED\r
-    B0 not connected\r
-       \r
-Functions to controls LED clusters\r
-       \r
-    gh60_caps_led_on()\r
-    gh60_poker_leds_on()\r
-    gh60_fn_led_on()\r
-    gh60_esc_led_on()\r
-    gh60_wasd_leds_on()\r
-    \r
-    gh60_caps_led_off()\r
-    gh60_poker_leds_off()\r
-    gh60_fn_led_off()\r
-    gh60_esc_led_off()\r
-    gh60_wasd_leds_off()\r
-       \r
-======================\r
-\r
-## Quantum MK Firmware\r
-\r
-For the full Quantum feature list, see [the parent readme.md](/readme.md).\r
-\r
-## Building\r
-\r
-Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. \r
-\r
-Depending on which keymap you would like to use, you will have to compile slightly differently.\r
-\r
-### Default\r
-To build with the default keymap, simply run `make`.\r
-\r
-### Other Keymaps\r
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.\r
-\r
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:\r
-```\r
-$ make KEYMAP=[default|jack|<name>]\r
-```\r
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.\r
+## gh60 Rev C keyboard firmware
+
+![gh60 Rev C PCB](gh60revc.jpg)
+
+    /* Column pin configuration
+    * col: 0   1   2   3   4   5   6   7   8   9   10  11  12  13
+    * pin: F0  F1  E6  C7  C6  B6  D4  B1  B7  B5  B4  D7  D6  B3  (Rev.C)
+    */
+     
+    /* Row pin configuration
+    * row: 0   1   2   3   4
+    * pin: D0  D1  D2  D3  D5
+    */
+     
+    GPIO pads
+    0 F7 WASD LEDs
+    1 F6 ESC LED
+    2 F5 FN LED
+    3 F4 POKER Arrow LEDs
+     
+    B2 Capslock LED
+    B0 not connected
+       
+Functions to controls LED clusters
+       
+    gh60_caps_led_on()
+    gh60_poker_leds_on()
+    gh60_fn_led_on()
+    gh60_esc_led_on()
+    gh60_wasd_leds_on()
+    
+    gh60_caps_led_off()
+    gh60_poker_leds_off()
+    gh60_fn_led_off()
+    gh60_esc_led_off()
+    gh60_wasd_leds_off()
+       
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make default`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/gh60/rules.mk b/keyboards/gh60/rules.mk
new file mode 100644 (file)
index 0000000..aba680e
--- /dev/null
@@ -0,0 +1,66 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)
+# CONSOLE_ENABLE ?= yes                # Console for debug(+400)
+# COMMAND_ENABLE ?= yes                # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes                     # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES                   # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/handwired/CMD60/CMD60.c b/keyboards/handwired/CMD60/CMD60.c
new file mode 100644 (file)
index 0000000..799848e
--- /dev/null
@@ -0,0 +1,8 @@
+#include "CMD60.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
diff --git a/keyboards/handwired/CMD60/CMD60.h b/keyboards/handwired/CMD60/CMD60.h
new file mode 100644 (file)
index 0000000..f90871f
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef CMD60_H
+#define CMD60_H
+
+#include "quantum.h"
+
+#define KEYMAP( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
+    ) { \
+  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D  },  \
+  {  K10,  K11,  K12,  K13,    K14,    K15,  K16,    K17,    K18,    K19,  K1A,  K1B,  K1C,  K1D  },  \
+  {  K20,  K21,  K22,  K23,    K24,    K25,  K26,    K27,    K28,    K29,  K2A,  K2B,  K2C,  K2D  },  \
+  {  K30,  K31,  K32,  K33,    K34,    K35,  K36,    K37,    K38,    K39,  K3A,  K3B,  K3C,  K3D  },  \
+  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  KC_NO,K4A,  K4B,  K4C,  K4D  }   \
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/handwired/CMD60/Makefile b/keyboards/handwired/CMD60/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/CMD60/README.md b/keyboards/handwired/CMD60/README.md
new file mode 100644 (file)
index 0000000..83e3715
--- /dev/null
@@ -0,0 +1,35 @@
+CMD60 keyboard firmware
+======================
+
+##CMD60
+
+This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
+with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
+and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
+achieve a higher level of productivity if you take the time to learn its function layers.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 folder.
+Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
+the Teensy Loader to program your .hex file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+
+To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+
+```
+$ make keymap=[default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/handwired/CMD60/config.h b/keyboards/handwired/CMD60/config.h
new file mode 100644 (file)
index 0000000..27eb400
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    cmd
+#define PRODUCT         CMD60
+#define DESCRIPTION     Advanced Programming Keeb Layout
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3, C6, D7, B4, B5, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/handwired/CMD60/keymaps/default/keymap.c b/keyboards/handwired/CMD60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..9f9cbcd
--- /dev/null
@@ -0,0 +1,66 @@
+#include "CMD60.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = KEYMAP( /* CMD60 - QWERTY */
+      KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  \
+      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
+      LT(3, KC_ENT),  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
+      KC_LSFT,  KC_Z,    KC_X,     KC_C,    KC_V,     KC_B,     KC_N,     KC_M,    KC_COMM,  KC_DOT,  KC_SLSH,   KC_NO,  KC_NO,    KC_RSFT,  \
+      KC_LCTL,  KC_LGUI,  KC_LALT,                     LT(2, KC_SPC),                                       MO(3),  MO(4),  MO(5),  TG(1) \
+  ),
+  [1] = KEYMAP( /* CMD60 - GameMode */
+      KC_TRNS,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,     KC_TRNS,  KC_TRNS,   KC_TRNS,  \
+      KC_TRNS,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,     KC_TRNS,  KC_TRNS,  KC_TRNS,  \
+      KC_CAPS,  KC_TRNS,  KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,  KC_TRNS,  KC_NO,    KC_TRNS,   \
+      KC_LSFT,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,  KC_NO,    KC_RSFT,  \
+      KC_TRNS,  KC_NO,  KC_TRNS,                     KC_SPC,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
+  ),
+  [2] = KEYMAP( /* CMD60 - Arrows */
+      KC_GRV,   KC_F1,     KC_F2,     KC_F3,    KC_F4,     KC_F5,     KC_F6,     KC_F7,    KC_F8,  KC_F9,     KC_F10,     KC_F11,  KC_F12,   KC_DEL,  \
+      KC_TRNS,   KC_BSPC,     KC_UP,     KC_DEL,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_BSPC,    KC_UP,  KC_DEL,     KC_PSCR,     KC_SLCK,  KC_PAUS,  KC_TRNS,  \
+      KC_TRNS,  KC_LEFT,  KC_DOWN,     KC_RIGHT,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_LEFT,    KC_DOWN,  KC_RIGHT,     KC_TRNS,  KC_TRNS,  KC_NO,    KC_TRNS,   \
+      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_SPC,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,  KC_NO,    KC_TRNS,  \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
+  ),
+  [3] = KEYMAP( /* CMD60 - Functions */
+      KC_GRV,   KC_F1,     KC_F2,     KC_F3,    KC_F4,     KC_F5,     KC_F6,     KC_F7,    KC_F8,  KC_F9,     KC_F10,     KC_F11,  KC_F12,   KC_DEL,  \
+      KC_AUDIO_MUTE,   KC_BSPC,     KC_PGUP,     KC_DEL,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_PGUP,    KC_UP,  KC_PGDN,     KC_TRNS,     KC_PAUSE,  KC_SLCK,  KC_PSCREEN,  \
+      KC_TRNS,  KC_HOME,  KC_PGDN,     KC_END,    KC_TRNS,     KC_TRNS,     KC_HOME,     KC_LEFT,    KC_DOWN,  KC_RIGHT,     KC_TRNS,  KC_INSERT,  KC_NO,    KC_TRNS,   \
+      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_END,     KC_TRNS,    KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,  KC_NO,    KC_TRNS,  \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
+  ),
+  [4] = KEYMAP( /* CMD60 - Mouse */
+      KC_SYSTEM_SLEEP,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,     KC_TRNS,  KC_TRNS,   KC_TRNS,  \
+      KC_TRNS,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_MS_BTN1,  KC_MS_UP,     KC_MS_BTN2,     KC_TRNS,  KC_TRNS,  KC_TRNS,  \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_MS_LEFT,  KC_MS_DOWN,     KC_MS_RIGHT,  KC_TRNS,  KC_NO,    KC_TRNS,   \
+      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_MS_WH_UP,  KC_MS_BTN3,  KC_MS_WH_DOWN,   KC_NO,  KC_NO,    KC_TRNS,  \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
+  ),
+  [5] = KEYMAP( /* CMD60 - Media */
+      KC_SYSTEM_WAKE,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,     KC_TRNS,  KC_TRNS,   KC_TRNS,  \
+      KC_TRNS,   KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,     KC_AUDIO_VOL_DOWN,  KC_AUDIO_VOL_UP,  KC_AUDIO_MUTE,  \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_TRNS,     KC_TRNS,  KC_MEDIA_PREV_TRACK,  KC_MEDIA_NEXT_TRACK,    KC_MEDIA_PLAY_PAUSE,   \
+      KC_TRNS,  KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,    KC_TRNS,  KC_WWW_BACK,  KC_WWW_FORWARD,   KC_NO,  KC_NO,    KC_WWW_REFRESH,  \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,                     KC_TRNS,                                       KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS \
+  ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/handwired/CMD60/rules.mk b/keyboards/handwired/CMD60/rules.mk
new file mode 100644 (file)
index 0000000..7117599
--- /dev/null
@@ -0,0 +1,73 @@
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
+
+
index 57493a47caffa019f6112be7d716a01f18e7b6ab..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,3 +1,3 @@
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 711759917370a6886c1e3e79a9fde4c7a5fff1f7..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,73 +1,3 @@
-
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes        # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= no            # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE ?= no            # MIDI controls
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no           # Audio output on port C6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
-endif
-
-
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/fivethirteen/rules.mk b/keyboards/handwired/fivethirteen/rules.mk
new file mode 100644 (file)
index 0000000..7117599
--- /dev/null
@@ -0,0 +1,73 @@
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
+
+
diff --git a/keyboards/handwired/gamenum/Makefile b/keyboards/handwired/gamenum/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/gamenum/README.md b/keyboards/handwired/gamenum/README.md
new file mode 100644 (file)
index 0000000..5b53004
--- /dev/null
@@ -0,0 +1,102 @@
+GameNum firmware
+======================
+## Board overview
+
+The GameNum was designed to facilitate the use of mechanical keys for gaming even when your packing space is limited.
+It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers.
+The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games.
+The RTS layer is meant to be used rotating the device 90 degrees counterclockwise.
+
+The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK.
+
+## Build considerations
+
+Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind.
+Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz. 
+The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled.
+'+' of the LED goes to the respective pins and can be joined together on the '-' into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro.
+
+## schematic of the switches and diodes
+
+![schematic overview](http://i.imgur.com/fleitoA.jpg)
+
+Keep in mind that the minus of the diodes should point towards the pro micros inputs.
+
+##LED hookup
+
+![led overview](http://i.imgur.com/U6m865n.jpg)
+
+## Adding more layers
+
+Adding additional layers is pretty straight forward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`.
+Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers. 
+
+Next thing to do is to add the actual layer for the keymap.
+
+```
+[DEF] = KEYMAP(
+  KC_FN0,   KC_SLSH, KC_ASTR, KC_MINS, \
+  KC_7,      KC_8,       KC_9,       KC_PLUS, \
+  KC_4,      KC_5,       KC_6, \
+  KC_1,      KC_2,       KC_3, \
+  KC_0,      KC_DOT,  KC_ENT \
+)
+```
+
+This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D:
+In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does!
+
+Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer.
+The number that is at the end of the keycode corresponds with the code in the function. 
+`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well.
+
+Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`.
+Look for this piece of code: 
+
+```
+       DDRD |= (1<<4);
+       PORTD &= ~(1<<4);
+```
+
+Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<<y);` defines that pin as an output. `PORTx &= ~(1<<y);` sets the pin to LOW turning off the LED.
+
+Now go back to `keymap.c` and look for the `process_record_user` function. The function is basically a switch case that checks if you pushed one of the defined layer-switch buttons. When it sees that you pushed one of them it sets the pins of the LED's either low or high.
+
+```
+  case KC_FN1:
+      if (record->event.pressed) {
+        PORTC &= ~(1 << 6); // PC6 goes low 
+               PORTD |= (1<<4); //PD4 goes high
+     }
+     break;
+```
+
+This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit.
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/handwired/gamenum folder.
+Read the README.md for the qmk repository on how to set up your developer enviroment to build your firmware with.
+Building firmware on Windows can be a bit of a hassle. Linux is a lot easier to use if you have some experience with it. A raspberry pi will already be able to build the firmware for you.
+Once your dev env is set up, you'll be able to type `make` to generate your .hex - you can then use AVRDudess to program your .hex file.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+
+To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+
+```
+$ make keymap=[default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
+
+
diff --git a/keyboards/handwired/gamenum/config.h b/keyboards/handwired/gamenum/config.h
new file mode 100644 (file)
index 0000000..6af876a
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x1234
+#define PRODUCT_ID      0x5678
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Seth-Senpai
+#define PRODUCT         GameNum
+#define DESCRIPTION     Numpad with gamelayers
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+#define MATRIX_COL_PINS { D7, E6, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+// #define BACKLIGHT_PIN C6
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/handwired/gamenum/gamenum.c b/keyboards/handwired/gamenum/gamenum.c
new file mode 100644 (file)
index 0000000..8048194
--- /dev/null
@@ -0,0 +1,14 @@
+#include "gamenum.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+       DDRC |= (1<<6);
+       PORTC &= ~(1<<6);
+       
+       DDRD |= (1<<4);
+       PORTD &= ~(1<<4);
+       
+       matrix_init_user();
+       
+}
diff --git a/keyboards/handwired/gamenum/gamenum.h b/keyboards/handwired/gamenum/gamenum.h
new file mode 100644 (file)
index 0000000..ea633b9
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef GAMENUM_H
+#define GAMENUM_H
+
+#include "quantum.h"
+
+#define KEYMAP( \
+       k00, k01, k02, k03, \
+       k10, k11, k12, k13, \
+       k20, k21, k22,        \
+       k30, k31, k32,        \
+              k41, k42, k43  \
+) \
+{ \
+       { k00, k01, k02, k03}, \
+       { k10, k11, k12, k13}, \
+       { k20, k21, k22, KC_NO}, \
+       { k30, k31, k32, KC_NO}, \
+       { KC_NO, k41, k42, k43}  \
+}
+
+#endif
diff --git a/keyboards/handwired/gamenum/keymaps/default/keymap.c b/keyboards/handwired/gamenum/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..6950b74
--- /dev/null
@@ -0,0 +1,68 @@
+#include "gamenum.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+
+#define _______ KC_TRNS
+
+#define DEF 0
+#define HDN 1
+#define OSY 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DEF] = KEYMAP(
+  KC_FN0,   KC_SLSH, KC_ASTR, KC_MINS, \
+  KC_7,      KC_8,       KC_9,       KC_PLUS, \
+  KC_4,      KC_5,       KC_6, \
+  KC_1,      KC_2,       KC_3, \
+  KC_0,      KC_DOT,  KC_ENT \
+),
+[HDN] = KEYMAP(
+  KC_FN1,   KC_1,      KC_2,           KC_3,  \
+  KC_Q,      KC_W,     KC_E,           KC_R, \
+  KC_A,      KC_S,     KC_D, \
+  KC_Z,      KC_X,     KC_C, \
+  KC_LSFT, KC_LALT,  KC_SPC \
+),
+[OSY] = KEYMAP(
+  KC_A,        KC_Q,   KC_1,   KC_FN2, \
+  KC_S,        KC_W,   KC_2,   KC_LALT, \
+  KC_D,        KC_E,   KC_3, \
+  KC_F,        KC_R,   KC_4, \
+  KC_SPC, KC_T,        KC_TAB \
+)
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+               [0] = ACTION_LAYER_SET(HDN, ON_PRESS),
+               [1] = ACTION_LAYER_SET(OSY, ON_PRESS),
+               [2] = ACTION_LAYER_SET(DEF, ON_PRESS),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  return MACRO_NONE;
+};
+
+
+bool process_record_user (uint16_t keycode, keyrecord_t *record) {
+  switch(keycode) {
+  case KC_FN0:
+      if (record->event.pressed) {
+        PORTC |= (1 << 6); // PC6 goes high 
+     }
+     break;
+  case KC_FN1:
+      if (record->event.pressed) {
+        PORTC &= ~(1 << 6); // PC6 goes high 
+               PORTD |= (1<<4);
+     }
+     break;
+  case KC_FN2:
+      if (record->event.pressed) {
+        PORTD &= ~(1 << 4); // PC6 goes high 
+     }
+     break;
+  }
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/handwired/gamenum/rules.mk b/keyboards/handwired/gamenum/rules.mk
new file mode 100644 (file)
index 0000000..afb9372
--- /dev/null
@@ -0,0 +1,73 @@
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
+
+ifndef QUANTUM_DIR
+       include ../../Makefile
+endif
+
+
diff --git a/keyboards/handwired/minorca/Makefile b/keyboards/handwired/minorca/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/minorca/config.h b/keyboards/handwired/minorca/config.h
new file mode 100644 (file)
index 0000000..4cdafcb
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6660
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    ME
+#define PRODUCT         MinOrca
+#define DESCRIPTION     Tiny Whale
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* MinOrca PCB default pin-out */
+#define MATRIX_COL_PINS { D4, D6, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 }
+#define MATRIX_ROW_PINS { B0, B1, B2, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/handwired/minorca/keymaps/default/Makefile b/keyboards/handwired/minorca/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..a573488
--- /dev/null
@@ -0,0 +1,25 @@
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../../Makefile
+endif
diff --git a/keyboards/handwired/minorca/keymaps/default/config.h b/keyboards/handwired/minorca/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..bf40376
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT              KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP              KC_SPACE
+
+#endif
diff --git a/keyboards/handwired/minorca/keymaps/default/keymap.c b/keyboards/handwired/minorca/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..a55d578
--- /dev/null
@@ -0,0 +1,44 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "minorca.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = { /* Base */
+        {KC_ESC,  KC_Q,    KC_W,     KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC },
+        {KC_TAB,  KC_A,    KC_S,     KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    XXXXXXX, KC_ENT  },
+        {KC_LCTRL,XXXXXXX, KC_Z,     KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_QUOT, KC_FN1,  KC_FN0 },
+        {KC_NO,   XXXXXXX, KC_NO,    KC_LALT, KC_SPC,  XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, KC_DOT,  KC_SLSH, KC_NO }
+    },
+    [1] = { /* First */
+        {KC_GRV,  KC_1,    KC_2,     KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DELT },
+        {KC_TAB,  KC_MPRV, KC_MPLY,  KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI  },
+        {KC_LCTRL,XXXXXXX, KC_Z,     KC_X,    KC_C,    KC_PGDN, KC_END,  KC_L,    KC_SCLN, KC_UP,   KC_FN1,  KC_FN0 },
+        {KC_NO,   XXXXXXX, KC_NO,    KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO }
+    },
+    [2] = { /* Second */
+        {KC_ESC,  KC_EXLM, KC_AT,    KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT },
+        {KC_TAB,  KC_MUTE, KC_VOLD,  KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT  },
+        {KC_CAPS, XXXXXXX, KC_LSFT,  KC_RSFT, KC_PAUSE,KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_UP,   KC_FN1,  KC_FN0 },
+        {KC_NO,   XXXXXXX, KC_NO,    KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO }
+    },
+}; 
+const uint16_t PROGMEM fn_actions[] = {
+           [0] = ACTION_LAYER_MOMENTARY(1),  // to First overlay
+           [1] = ACTION_LAYER_MOMENTARY(2),  // to Second overlay
+
+};
\ No newline at end of file
diff --git a/keyboards/handwired/minorca/keymaps/default/readme.md b/keyboards/handwired/minorca/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..6ed31f8
--- /dev/null
@@ -0,0 +1,5 @@
+# The Default Minorca Layout
+
+Copied from https://github.com/pancinteractive/qmk_firmware/blob/master/keyboard/minorca_mkV/keymaps/default/keymap.c
+
+It looks incomplete.
\ No newline at end of file
diff --git a/keyboards/handwired/minorca/keymaps/readme.md b/keyboards/handwired/minorca/keymaps/readme.md
new file mode 100644 (file)
index 0000000..058923b
--- /dev/null
@@ -0,0 +1,23 @@
+# How to add your own keymap
+
+Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
+
+    _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
+
+\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
+
+and contain the following files:
+
+* `keymap.c`
+* `readme.md` *recommended*
+* `config.h` *optional*, found automatically when compiling
+* `Makefile` *optional*, found automatically when compling
+
+When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
+
+     * **folder_name** description
+
+# List of Minorca keymaps
+
+* **default** default Minorca layout
+* **rgb** layout with WS2812b control
diff --git a/keyboards/handwired/minorca/keymaps/rgb/Makefile b/keyboards/handwired/minorca/keymaps/rgb/Makefile
new file mode 100644 (file)
index 0000000..2b2af13
--- /dev/null
@@ -0,0 +1,25 @@
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes       # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../../Makefile
+endif
diff --git a/keyboards/handwired/minorca/keymaps/rgb/config.h b/keyboards/handwired/minorca/keymaps/rgb/config.h
new file mode 100644 (file)
index 0000000..43b3c59
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT              KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP              KC_SPACE
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D5
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 13     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#endif
diff --git a/keyboards/handwired/minorca/keymaps/rgb/example.jpg b/keyboards/handwired/minorca/keymaps/rgb/example.jpg
new file mode 100644 (file)
index 0000000..a04c8d3
Binary files /dev/null and b/keyboards/handwired/minorca/keymaps/rgb/example.jpg differ
diff --git a/keyboards/handwired/minorca/keymaps/rgb/keymap.c b/keyboards/handwired/minorca/keymaps/rgb/keymap.c
new file mode 100644 (file)
index 0000000..9002afb
--- /dev/null
@@ -0,0 +1,65 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "minorca.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _TB 3
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = { /* Qwerty */
+  {KC_ESC,     KC_Q,       KC_W,       KC_E,       KC_R,     KC_T,    KC_Y,     KC_U,       KC_I,       KC_O,       KC_P,       KC_BSPC},
+  {FUNC(0),    KC_A,       KC_S,       KC_D,       KC_F,     KC_G,    KC_H,     KC_J,       KC_K,       KC_L,       XXXXXXX,    KC_QUOT},
+  {KC_LSFT,    XXXXXXX,    KC_Z,       KC_X,       KC_C,     KC_V,    KC_B,     KC_N,       KC_M,       KC_COMM,    KC_DOT,     FUNC(1)},
+  {KC_LCTL,    XXXXXXX,    KC_LGUI,    KC_LALT,    FUNC(2),  XXXXXXX, XXXXXXX,  FUNC(3),    XXXXXXX,    KC_RALT,    KC_APP,     KC_RCTL}
+},
+
+[_RAISE] = {
+  {S(KC_GRV),  S(KC_1),    S(KC_2),    S(KC_3),    S(KC_4),  S(KC_5), S(KC_6),  S(KC_7),    S(KC_8),    S(KC_9),    S(KC_0),    KC_BSPC},
+  {KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_PAUSE,   KC_TRNS,  KC_TRNS, KC_TRNS,  S(KC_MINS), S(KC_EQL),  S(KC_LBRC), XXXXXXX,    S(KC_BSLS)},
+  {KC_TRNS,    XXXXXXX,    KC_F1,      KC_F2,      KC_F3,    KC_F4,   KC_F5,    KC_F6,      KC_F7,      KC_F8,      KC_F9,      KC_ENT},
+  {KC_TRNS,    XXXXXXX,    KC_TRNS,    KC_TRNS,    KC_TRNS,  XXXXXXX, XXXXXXX,  KC_TRNS,    XXXXXXX,    KC_MNXT,    KC_MUTE,    KC_MPLY}
+},
+
+[_LOWER] = {
+  {KC_GRV,     KC_1,       KC_2,       KC_3,       KC_4,     KC_5,    KC_6,     KC_7,       KC_8,       KC_9,       KC_0,       KC_DELETE},
+  {KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,  KC_TRNS, KC_TRNS,  KC_MINS,    KC_EQL,     KC_LBRC,    XXXXXXX,    KC_BSLS},
+  {KC_TRNS,    XXXXXXX,    KC_F11,     KC_F12,     KC_F13,   KC_F14,  KC_F15,   KC_F16,     KC_F17,     KC_F18,     KC_PGUP,    KC_ENT},
+  {KC_TRNS,    XXXXXXX,    KC_TRNS,    KC_TRNS,    KC_TRNS,  XXXXXXX, XXXXXXX,  KC_TRNS,    XXXXXXX,    KC_HOME,    KC_PGDN,    KC_END}
+},
+
+[_TB] = { /* Tab */
+  {KC_ESC,     KC_CALC,    KC_WHOM,    KC_MAIL,    KC_MYCM,  KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_PSCR,    KC_TRNS},
+  {KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    XXXXXXX,    KC_TRNS},
+  {KC_TRNS,    XXXXXXX,    RGB_TOG,    RGB_MOD,    RGB_HUI,  RGB_HUD, RGB_SAI,  RGB_SAD,    RGB_VAI,    RGB_VAD,    KC_UP,      KC_ENT},
+  {BL_STEP,    XXXXXXX,    KC_TRNS,    KC_TRNS,    KC_TRNS,  XXXXXXX, XXXXXXX,  KC_TRNS,    XXXXXXX,    KC_LEFT,    KC_DOWN,    KC_RGHT}
+}
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+  [0]  = ACTION_LAYER_TAP_KEY(_TB, KC_TAB),
+  [1]  = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+  [2]  = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC),
+  [3]  = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC),
+};
diff --git a/keyboards/handwired/minorca/keymaps/rgb/readme.md b/keyboards/handwired/minorca/keymaps/rgb/readme.md
new file mode 100644 (file)
index 0000000..f50dfa5
--- /dev/null
@@ -0,0 +1,25 @@
+#RGB backlight for MinOrca
+
+![wiring](example.jpg)
+
+Example of adding WS2812b LEDs to a MinOrca.
+
+http://www.40percent.club/2016/08/tiny-whale.html
+
+The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key. 
+
+* Tab + Z              Toggle on/off
+* Tab + X              Mode
+* Tab + C              Hue+
+* Tab + V              Hue-
+* Tab + B              Saturation+
+* Tab + N              Saturation-
+* Tab + M              Brightness+
+* Tab + ,              Brightness-
+
+Example wiring:
+
+WS2812 data pin is connected to D5
+
+![wiring](wiring1.jpg)
+![wiring closeup](wiring2.jpg)
diff --git a/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg b/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg
new file mode 100644 (file)
index 0000000..7dcbe80
Binary files /dev/null and b/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg differ
diff --git a/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg b/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg
new file mode 100644 (file)
index 0000000..fd91d3e
Binary files /dev/null and b/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg differ
diff --git a/keyboards/handwired/minorca/minorca.c b/keyboards/handwired/minorca/minorca.c
new file mode 100644 (file)
index 0000000..24e72c2
--- /dev/null
@@ -0,0 +1,6 @@
+#include "minorca.h"
+
+void matrix_init_kb(void) {
+
+       matrix_init_user();
+}
\ No newline at end of file
diff --git a/keyboards/handwired/minorca/minorca.h b/keyboards/handwired/minorca/minorca.h
new file mode 100644 (file)
index 0000000..158e5b4
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef MINORCA_H
+#define MINORCA_H
+
+#include "quantum.h"
+
+#endif
diff --git a/keyboards/handwired/minorca/readme.md b/keyboards/handwired/minorca/readme.md
new file mode 100644 (file)
index 0000000..93c7679
--- /dev/null
@@ -0,0 +1,33 @@
+minorca keyboard firmware
+======================
+Handwired 40% keyboard
+
+http://www.panc.co/blog/minorcasebright-information-page
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
+
+### Notable forks (which some of the keymap files are from)
+- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
+- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
+- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
+- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid)
diff --git a/keyboards/handwired/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk
new file mode 100644 (file)
index 0000000..c51371a
--- /dev/null
@@ -0,0 +1,67 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no         # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+NKRO_ENABLE ?= yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= yes       # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
\ No newline at end of file
index c6d10856a187c74e24d0c916c83f406418128090..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,65 +1,3 @@
-
-
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
-#NKRO_ENABLE = yes     # USB Nkey Rollover - not yet supported in LUFA
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
 endif
\ No newline at end of file
diff --git a/keyboards/handwired/onekey/rules.mk b/keyboards/handwired/onekey/rules.mk
new file mode 100644 (file)
index 0000000..c6d1085
--- /dev/null
@@ -0,0 +1,65 @@
+
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
+#NKRO_ENABLE = yes     # USB Nkey Rollover - not yet supported in LUFA
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/Makefile b/keyboards/handwired/promethium/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
new file mode 100644 (file)
index 0000000..473af67
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6660
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Priyadi
+#define PRODUCT         Promethium Keyboard
+#define DESCRIPTION     Promethium Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+/* default pin-out */
+#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 }
+#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/* PS/2 mouse */
+#ifdef PS2_USE_BUSYWAIT
+#   define PS2_CLOCK_PORT  PORTD
+#   define PS2_CLOCK_PIN   PIND
+#   define PS2_CLOCK_DDR   DDRD
+#   define PS2_CLOCK_BIT   1
+#   define PS2_DATA_PORT   PORTD
+#   define PS2_DATA_PIN    PIND
+#   define PS2_DATA_DDR    DDRD
+#   define PS2_DATA_BIT    2
+#endif
+
+/* PS/2 mouse interrupt version */
+#ifdef PS2_USE_INT
+/* uses INT1 for clock line(ATMega32U4) */
+#define PS2_CLOCK_PORT  PORTD
+#define PS2_CLOCK_PIN   PIND
+#define PS2_CLOCK_DDR   DDRD
+#define PS2_CLOCK_BIT   3
+#define PS2_DATA_PORT   PORTD
+#define PS2_DATA_PIN    PIND
+#define PS2_DATA_DDR    DDRD
+#define PS2_DATA_BIT    2
+
+#define PS2_INT_INIT()  do {    \
+    EICRA |= ((1<<ISC31) |      \
+              (0<<ISC30));      \
+} while (0)
+#define PS2_INT_ON()  do {      \
+    EIMSK |= (1<<INT3);         \
+} while (0)
+#define PS2_INT_OFF() do {      \
+    EIMSK &= ~(1<<INT3);        \
+} while (0)
+#define PS2_INT_VECT    INT3_vect
+#endif
+
+/* PS/2 mouse USART version */
+#ifdef PS2_USE_USART
+/* XCK for clock line and RXD for data line */
+#define PS2_CLOCK_PORT  PORTD
+#define PS2_CLOCK_PIN   PIND
+#define PS2_CLOCK_DDR   DDRD
+#define PS2_CLOCK_BIT   5
+#define PS2_DATA_PORT   PORTD
+#define PS2_DATA_PIN    PIND
+#define PS2_DATA_DDR    DDRD
+#define PS2_DATA_BIT    2
+
+/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
+/* set DDR of CLOCK as input to be slave */
+#define PS2_USART_INIT() do {   \
+    PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);   \
+    PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);     \
+    UCSR1C = ((1 << UMSEL10) |  \
+              (3 << UPM10)   |  \
+              (0 << USBS1)   |  \
+              (3 << UCSZ10)  |  \
+              (0 << UCPOL1));   \
+    UCSR1A = 0;                 \
+    UBRR1H = 0;                 \
+    UBRR1L = 0;                 \
+} while (0)
+#define PS2_USART_RX_INT_ON() do {  \
+    UCSR1B = ((1 << RXCIE1) |       \
+              (1 << RXEN1));        \
+} while (0)
+#define PS2_USART_RX_POLL_ON() do { \
+    UCSR1B = (1 << RXEN1);          \
+} while (0)
+#define PS2_USART_OFF() do {    \
+    UCSR1C = 0;                 \
+    UCSR1B &= ~((1 << RXEN1) |  \
+                (1 << TXEN1));  \
+} while (0)
+#define PS2_USART_RX_READY      (UCSR1A & (1<<RXC1))
+#define PS2_USART_RX_DATA       UDR1
+#define PS2_USART_ERROR         (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
+#define PS2_USART_RX_VECT       USART1_RX_vect
+#endif
+
+
+#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/Makefile b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
new file mode 100644 (file)
index 0000000..46fdfa0
--- /dev/null
@@ -0,0 +1,29 @@
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+UNICODEMAP_ENABLE = yes
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+PS2_MOUSE_ENABLE = yes
+PS2_USE_INT = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../../Makefile
+endif
+
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h
new file mode 100644 (file)
index 0000000..8b78c0d
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT              KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP              KC_SPACE
+
+#define PREVENT_STUCK_MODIFIERS
+
+#define RGB_DI_PIN B5
+#define RGBSPS_NUM 57
+
+#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/flash.sh b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh
new file mode 100755 (executable)
index 0000000..14a3b43
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+sleep 10
+avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:../../../../../.build/handwired_promethium_priyadi.hex
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
new file mode 100644 (file)
index 0000000..bf797a7
--- /dev/null
@@ -0,0 +1,841 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "promethium.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+  #include "musical_notes.h"
+#endif
+#include "eeconfig.h"
+#include "process_unicode.h"
+#include "quantum.h"
+#include "rgbsps.h"
+#include "ps2_mouse.h"
+#include "ps2.h"
+#define COUNT(x) (sizeof (x) / sizeof (*(x)))
+
+// #define RGBLED_NUM 5
+// struct cRGB led[RGBLED_NUM];
+
+
+extern keymap_config_t keymap_config;
+
+enum layers {
+  _QWERTY,
+  _COLEMAK,
+  _WORKMAN,
+  _PUNC,
+  _NUM,
+  _FUNC,
+  _EMOJI,
+  _GUI,
+};
+
+enum planck_keycodes {
+  // layouts
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  WORKMAN,
+
+  // layer switchers
+  PUNC,
+  NUM,
+  FUNC,
+  EMOJI,
+  GUI,
+
+  // os switchers
+  LINUX,
+  WIN,
+  OSX,
+};
+
+// Fillers to make layering clearer
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// unicode map
+
+enum unicode_name {
+  GRIN, // grinning face 😊
+  TJOY, // tears of joy 😂
+  SMILE, // grining face with smiling eyes 😁
+  HEART, // heart ❤
+  EYERT, // smiling face with heart shaped eyes 😍
+  CRY, // crying face 😭
+  SMEYE, // smiling face with smiling eyes 😊
+  UNAMU, // unamused 😒
+  KISS, // kiss 😘
+  HART2, // two hearts 💕
+  WEARY, // weary 😩
+  OKHND, // ok hand sign 👌
+  PENSV, // pensive 😔
+  SMIRK, // smirk 😏
+  RECYC, // recycle ♻
+  WINK, // wink 😉
+  THMUP, // thumb up 👍
+  THMDN, // thumb down 👎
+  PRAY, // pray 🙏
+  PHEW, // relieved 😌
+  MUSIC, // musical notes
+  FLUSH, // flushed 😳
+  CELEB, // celebration 🙌
+  CRY2, // crying face 😢
+  COOL, // smile with sunglasses 😎
+  NOEVS, // see no evil
+  NOEVH, // hear no evil
+  NOEVK, // speak no evil
+  POO, // pile of poo
+  EYES, // eyes
+  VIC, // victory hand
+  BHART, // broken heart
+  SLEEP, // sleeping face
+  SMIL2, // smiling face with open mouth & sweat
+  HUNRD, // 100
+  CONFU, // confused
+  TONGU, // face with tongue & winking eye
+  DISAP, // disappointed
+  YUMMY, // face savoring delicious food
+  CLAP, // hand clapping
+  FEAR, // face screaming in fear
+  HORNS, // smiling face with horns
+  HALO, // smiling face with halo
+  BYE, // waving hand
+  SUN, // sun
+  MOON, // moon
+  SKULL, // skull
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+  [GRIN] = 0x1F600,
+  [TJOY] = 0x1F602,
+  [SMILE] = 0x1F601,
+  [HEART] = 0x2764,
+  [EYERT] = 0x1f60d,
+  [CRY] = 0x1f62d,
+  [SMEYE] = 0x1F60A,
+  [UNAMU] = 0x1F612,
+  [KISS] = 0x1F618,
+  [HART2] = 0x1F495,
+  [WEARY] = 0x1F629,
+  [OKHND] = 0x1F44C,
+  [PENSV] = 0x1F614,
+  [SMIRK] = 0x1F60F,
+  [RECYC] = 0x267B,
+  [WINK] = 0x1F609,
+  [THMUP] = 0x1F44D,
+  [THMDN] = 0x1F44E,
+  [PRAY] = 0x1F64F,
+  [PHEW] = 0x1F60C,
+  [MUSIC] = 0x1F3B6,
+  [FLUSH] = 0x1F633,
+  [CELEB] = 0x1F64C,
+  [CRY2] = 0x1F622,
+  [COOL] = 0x1F60E,
+  [NOEVS] = 0x1F648,
+  [NOEVH] = 0x1F649,
+  [NOEVK] = 0x1F64A,
+  [POO] = 0x1F4A9,
+  [EYES] = 0x1F440,
+  [VIC] = 0x270C,
+  [BHART] = 0x1F494,
+  [SLEEP] = 0x1F634,
+  [SMIL2] = 0x1F605,
+  [HUNRD] = 0x1F4AF,
+  [CONFU] = 0x1F615,
+  [TONGU] = 0x1F61C,
+  [DISAP] = 0x1F61E,
+  [YUMMY] = 0x1F60B,
+  [CLAP] = 0x1F44F,
+  [FEAR] = 0x1F631,
+  [HORNS] = 0x1F608,
+  [HALO] = 0x1F607,
+  [BYE] = 0x1F44B,
+  [SUN] = 0x2600,
+  [MOON] = 0x1F314,
+  [SKULL] = 0x1F480,
+};
+
+
+// hybrid shift - =
+// #undef KC_LSFT
+// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
+// #undef KC_RSFT
+// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
+
+
+// hybrid right-gui & scroll lock (mapped to Compose in OS)
+#undef KC_RCTL
+#define KC_RCTL MT(MOD_LCTL, KC_SLCK)
+
+// RGBSPS
+
+const uint8_t PROGMEM LED_ALNUM[] = {
+  LED_Z,
+  LED_A,
+  LED_Q,
+  LED_W,
+  LED_S,
+  LED_X,
+  LED_C,
+  LED_D,
+  LED_E,
+  LED_R,
+  LED_F,
+  LED_V,
+  LED_B,
+  LED_G,
+  LED_T,
+  LED_N,
+  LED_HH,
+  LED_Y,
+  LED_U,
+  LED_J,
+  LED_M,
+  LED_COMM,
+  LED_K,
+  LED_I,
+  LED_O,
+  LED_L,
+  LED_DOT,
+  LED_SLSH,
+  LED_SCLN,
+  LED_P,
+  LED_LSPC,
+  LED_RSPC
+};
+
+const uint8_t PROGMEM LED_MODS[] = {
+  LED_TAB,
+  LED_ESC,
+  LED_LSFT,
+  LED_LCTL,
+  LED_LGUI,
+  LED_LALT,
+  LED_RALT,
+  LED_RGUI,
+  LED_BKSP,
+  LED_ENT,
+  LED_RSFT,
+  LED_RCTL
+};
+
+const uint8_t PROGMEM LED_FN[] = {
+  LED_PUNC,
+  LED_NUM,
+  LED_FUNC,
+  LED_EMOJI
+};
+
+const uint8_t PROGMEM LED_INDICATORS[] = {
+  LED_IND_EMOJI,
+  LED_IND_NUM,
+  LED_IND_FUNC,
+  LED_IND_BATTERY,
+  LED_IND_USB,
+  LED_IND_BLUETOOTH,
+};
+
+const uint8_t PROGMEM LED_TRACKPOINT[] = {
+  LED_TRACKPOINT1,
+  LED_TRACKPOINT2,
+  LED_TRACKPOINT3,
+};
+
+void led_reset(void) {
+  for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+    rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
+  }
+
+  for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
+    rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
+  }
+
+  for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
+    rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
+  }
+}
+
+void led_layer_normal(void) {
+  rgbsps_set(LED_IND_FUNC, 0, 0, 0);
+  rgbsps_set(LED_IND_NUM, 0, 0, 0);
+  rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+  led_reset();
+
+  rgbsps_send();
+}
+
+void led_layer_func(void) {
+  rgbsps_set(LED_IND_FUNC, 0, 15, 0);
+  rgbsps_set(LED_IND_NUM, 0, 0, 0);
+  rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+  led_reset();
+
+  for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+    rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
+  }
+
+  rgbsps_set(LED_I, 15, 0, 15);
+  rgbsps_set(LED_J, 15, 0, 15);
+  rgbsps_set(LED_K, 15, 0, 15);
+  rgbsps_set(LED_L, 15, 0, 15);
+
+  rgbsps_set(LED_U, 15, 0, 0);
+  rgbsps_set(LED_O, 15, 0, 0);
+  rgbsps_set(LED_COMM, 15, 0, 0);
+  rgbsps_set(LED_DOT, 15, 0, 0);
+  rgbsps_set(LED_SCLN, 15, 0, 0);
+  rgbsps_set(LED_P, 15, 0, 0);
+
+  rgbsps_set(LED_Q, 0, 15, 0);
+  rgbsps_set(LED_W, 0, 15, 0);
+  rgbsps_set(LED_E, 0, 15, 0);
+  rgbsps_set(LED_R, 0, 15, 0);
+  rgbsps_set(LED_A, 0, 15, 0);
+  rgbsps_set(LED_S, 0, 15, 0);
+  rgbsps_set(LED_D, 0, 15, 0);
+  rgbsps_set(LED_F, 0, 15, 0);
+  rgbsps_set(LED_Z, 0, 15, 0);
+  rgbsps_set(LED_X, 0, 15, 0);
+  rgbsps_set(LED_C, 0, 15, 0);
+  rgbsps_set(LED_V, 0, 15, 0);
+
+  rgbsps_send();
+}
+
+void led_layer_punc(void) {
+  rgbsps_set(LED_IND_FUNC, 0, 15, 0);
+  rgbsps_set(LED_IND_NUM, 0, 0, 15);
+  rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+  led_reset();
+
+  rgbsps_send();
+}
+
+void led_layer_num(void) {
+  rgbsps_set(LED_IND_FUNC, 0, 0, 0);
+  rgbsps_set(LED_IND_NUM, 0, 0, 15);
+  rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+  led_reset();
+
+  for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+    rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
+  }
+
+  rgbsps_set(LED_U, 0, 5, 15);
+  rgbsps_set(LED_I, 0, 5, 15);
+  rgbsps_set(LED_O, 0, 5, 15);
+  rgbsps_set(LED_J, 0, 5, 15);
+  rgbsps_set(LED_K, 0, 5, 15);
+  rgbsps_set(LED_L, 0, 5, 15);
+  rgbsps_set(LED_M, 0, 5, 15);
+  rgbsps_set(LED_COMM, 0, 5, 15);
+  rgbsps_set(LED_DOT, 0, 5, 15);
+  rgbsps_set(LED_FUNC, 0, 5, 15);
+
+  rgbsps_set(LED_EMOJI, 0, 10, 15);
+  rgbsps_set(LED_RALT, 0, 10, 15);
+
+  rgbsps_set(LED_Q, 0, 10, 15);
+  rgbsps_set(LED_W, 0, 10, 15);
+  rgbsps_set(LED_E, 0, 10, 15);
+  rgbsps_set(LED_R, 0, 10, 15);
+  rgbsps_set(LED_T, 0, 10, 15);
+  rgbsps_set(LED_Y, 0, 10, 15);
+  rgbsps_set(LED_P, 0, 10, 15);
+
+  rgbsps_set(LED_A, 0, 15, 15);
+  rgbsps_set(LED_S, 0, 15, 15);
+  rgbsps_set(LED_D, 0, 15, 15);
+  rgbsps_set(LED_F, 0, 15, 15);
+  rgbsps_set(LED_Z, 0, 15, 15);
+  rgbsps_set(LED_X, 0, 15, 15);
+  rgbsps_set(LED_C, 0, 15, 15);
+  rgbsps_set(LED_V, 0, 15, 15);
+
+  rgbsps_send();
+}
+
+void led_layer_emoji(void) {
+  for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+    rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0);
+  }
+  for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
+    rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
+  }
+  for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
+    rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0);
+  }
+
+  rgbsps_set(LED_IND_FUNC, 0, 0, 0);
+  rgbsps_set(LED_IND_NUM, 0, 0, 0);
+  rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
+
+  rgbsps_set(LED_PUNC, 15, 15, 15);
+  rgbsps_set(LED_EMOJI, 15, 15, 15);
+
+  rgbsps_send();
+}
+
+void led_layer_gui(void) {
+  rgbsps_set(LED_IND_FUNC, 15, 10, 15);
+  rgbsps_set(LED_IND_NUM, 15, 10, 15);
+  rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
+  rgbsps_send();
+}
+
+void led_init(void) {
+  // turn off all
+  rgbsps_turnoff();
+
+  // set trackpoint color
+  rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
+  rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
+  rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
+
+  // // hardcode indicator for now
+  rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
+  rgbsps_set(LED_IND_USB, 15, 15, 15);
+  rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
+
+  led_layer_normal();
+}
+
+
+// keymaps
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Punc | Num  |    Space    | Func |Emoji |AltGr | GUI  | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP(
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+  KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT ,
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+  KC_LCTL, KC_LGUI, KC_LALT, PUNC,    NUM,     KC_SPC,  KC_SPC,  FUNC,    EMOJI,   KC_RALT, KC_RGUI, KC_RCTL
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Punc | Num  |    Space    | Func |Emoji |AltGr | GUI  | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP(
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC,
+  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_ENT ,
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+  KC_LCTL, KC_LGUI, KC_LALT, PUNC,    NUM,     KC_SPC,  KC_SPC,  FUNC,    EMOJI,   KC_RALT, KC_RGUI, KC_RCTL
+),
+
+/* Workman
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   D  |   R  |   W  |   B  |   J  |   F  |   U  |   P  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   H  |   T  |   G  |   Y  |   N  |   E  |   O  |   I  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   M  |   C  |   V  |   K  |   K  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Punc | Num  |    Space    | Func |Emoji |AltGr | GUI  | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_WORKMAN] = KEYMAP(
+  KC_TAB,  KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_BSPC,
+  KC_ESC,  KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_ENT ,
+  KC_LSFT, KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+  KC_LCTL, KC_LGUI, KC_LALT, PUNC,    NUM,     KC_SPC,  KC_SPC,  FUNC,    EMOJI,   KC_RALT, KC_RGUI, KC_RCTL
+),
+
+/* Punc
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   `  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |   \  |   -  |   =  |   <  |   >  |   (  |   )  |   '  |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |   |  |   _  |   +  |   {  |   }  |   [  |   ]  |   "  |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PUNC] = KEYMAP(
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
+  XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS,  KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
+  XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Num
+ * ,-----------------------------------------------------------------------------------.
+ * |  ^   |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |  @   |  A   |  B   |  C   |  (   |  )   |   4  |   5  |   6  |   :  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |  &   |  #   |  D   |  E   |  F   |  [   |  ]   |   1  |   2  |   3  |   /  |  *   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |  x   |      |             |   0  |   ,  |   .  |   +  |  -   |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUM] = KEYMAP(
+  KC_CIRC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC,
+  KC_ESC,    KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN,    KC_4,    KC_5,    KC_6, KC_COLN,  KC_ENT,
+  KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC,    KC_1,    KC_2,    KC_3, KC_SLSH, KC_ASTR,
+  _______, _______, _______,    KC_X, _______,  KC_SPC,  KC_SPC,    KC_0, KC_COMM,  KC_DOT, KC_PLUS, KC_MINS
+),
+
+/* Func
+ * ,-----------------------------------------------------------------------------------.
+ * |      |  F1  |  F2  |  F3  |  F4  |      |      | PgUp |  Up  | PgDn | PgUp | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  F5  |  F6  |  F7  |  F8  |PrtSc |      | Left | Down | Right| PgDn | Ins  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F9  |  F10 |  F11 |  F12 |      |      |      | Home |  End |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = KEYMAP(
+  XXXXXXX,   KC_F1,   KC_F2,   KC_F3,   KC_F4, XXXXXXX, XXXXXXX, KC_PGUP,   KC_UP, KC_PGDN, KC_PGUP,  KC_DEL,
+  XXXXXXX,   KC_F5,   KC_F6,   KC_F7,  KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,  KC_INS,
+  _______,   KC_F9,  KC_F10,  KC_F11,  KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME,  KC_END, XXXXXXX, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Emoji
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_EMOJI] = KEYMAP(
+  X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
+  X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART),  X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
+  X(THMDN),X(SLEEP), X(CLAP),  X(CRY),  X(VIC),X(BHART),  X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
+    X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
+),
+
+/* GUI
+ * ,-----------------------------------------------------------------------------------.
+ * |      |  D1  |  D2  |  D3  |  D4  |  D5  |  D6  |  D7  |  D8  |  D9  |  D10 |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Linux |      | Vol- | Mute | Vol+ |      |      |  D-  |      |  D+  |      |Qwerty|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Win  |      | Prev | Play | Next |      |      |      |      |      |      |Colmak|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | OSX  |      |      |      |      |  BL- |  BL+ |      |      |      |      |Workmn|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GUI] = KEYMAP(
+  _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______,
+    LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY,
+      WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
+      OSX, _______, _______, _______, _______,  BL_DEC,  BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
+),
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_workman[][2]    = SONG(DVORAK_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
+float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
+float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  #ifdef AUDIO_ENABLE
+  // faux clicky
+  if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
+  #endif
+
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case WORKMAN:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_workman, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_WORKMAN);
+      }
+      return false;
+      break;
+
+
+
+    case PUNC:
+      if (record->event.pressed) {
+        layer_on(_PUNC);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+        if (IS_LAYER_ON(_GUI)) {
+          led_layer_gui();
+        } else {
+          led_layer_punc();;
+        }
+      } else {
+        layer_off(_PUNC);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+        if (IS_LAYER_ON(_EMOJI)) {
+          led_layer_emoji();
+        } else {
+          led_layer_normal();;
+        }
+      }
+      return false;
+      break;
+    case EMOJI:
+      if (record->event.pressed) {
+        layer_on(_EMOJI);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+        if (IS_LAYER_ON(_GUI)) {
+          led_layer_gui();
+        } else {
+          led_layer_emoji();;
+        }
+      } else {
+        layer_off(_EMOJI);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+        if (IS_LAYER_ON(_PUNC)) {
+          led_layer_punc();
+        } else {
+          led_layer_normal();;
+        }
+      }
+      return false;
+      break;
+    case NUM:
+      if (record->event.pressed) {
+        layer_on(_NUM);
+        led_layer_num();
+      } else {
+        layer_off(_NUM);
+        led_layer_normal();
+      }
+      return false;
+      break;
+    case FUNC:
+      if (record->event.pressed) {
+        layer_on(_FUNC);
+        led_layer_func();
+      } else {
+        layer_off(_FUNC);
+        led_layer_normal();
+      }
+      return false;
+      break;
+
+
+    case LINUX:
+      set_unicode_input_mode(UC_LNX);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_linux, false, 0);
+      #endif
+      return false;
+      break;
+    case WIN:
+      set_unicode_input_mode(UC_WINC);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_windows, false, 0);
+      #endif
+      return false;
+      break;
+    case OSX:
+      set_unicode_input_mode(UC_OSX);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_osx, false, 0);
+      #endif
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+  #ifdef AUDIO_ENABLE
+      startup_user();
+  #endif
+  set_unicode_input_mode(UC_LNX);
+  led_init();
+}
+
+// void init_rgblight(void) {
+//   for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+//     led[i].r = 255;
+//     led[i].g = 85;
+//     led[i].b = 0;
+//   }
+//   ws2812_setleds(led, RGBLED_NUM);
+// }
+
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+#endif
+
+
+void ps2_mouse_init_user() {
+    // set TrackPoint sensitivity
+    PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2");
+    PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81");
+    PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A");
+    PS2_MOUSE_SEND(0x60, "set trackpoint sensitivity: 0x60");
+
+    // set TrackPoint speed
+    // (transfer function upper plateau speed)
+    PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2");
+    PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81");
+    PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60");
+    PS2_MOUSE_SEND(0x90, "set trackpoint speed: 0x90");
+
+    // set TrackPoint Negative Inertia factor
+    PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2");
+    PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81");
+    PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D");
+    PS2_MOUSE_SEND(0x03, "set negative inertia factor: 0x03");
+
+    // disable up threshold (click)
+    PS2_MOUSE_SEND(0xE2, "set disable up threshold: 0xE2");
+    PS2_MOUSE_SEND(0x47, "set disable up threshold: 0x47");
+    PS2_MOUSE_SEND(0x2C, "set disable up threshold: 0x2C");
+    PS2_MOUSE_SEND(0x01, "set disable up threshold: 0x01");
+
+    // enable TrackPoint Press to Select (PtS)
+    // print("ps2_mouse_init: send 0xE2: ");
+    // rcv = ps2_host_send(0xE2);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x47: ");
+    // rcv = ps2_host_send(0x47);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x2C: ");
+    // rcv = ps2_host_send(0x2C);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x00: ");
+    // rcv = ps2_host_send(0x00);
+    // phex(rcv); phex(ps2_error); print("\n");
+
+    // set TrackPoint Press to Select threshold
+    // print("ps2_mouse_init: send 0xE2: ");
+    // rcv = ps2_host_send(0xE2);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x81: ");
+    // rcv = ps2_host_send(0x81);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x5C: ");
+    // rcv = ps2_host_send(0x5C);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // // default PtS threshold is 0x08
+    // print("ps2_mouse_init: send 0x04: ");
+    // rcv = ps2_host_send(0x04);
+    // phex(rcv); phex(ps2_error); print("\n");
+
+    // set TrackPoint Press to Select time constant (zTc)
+    // print("ps2_mouse_init: send 0xE2: ");
+    // rcv = ps2_host_send(0xE2);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x81: ");
+    // rcv = ps2_host_send(0x81);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // print("ps2_mouse_init: send 0x5E: ");
+    // rcv = ps2_host_send(0x5E);
+    // phex(rcv); phex(ps2_error); print("\n");
+    // // default zTc is 0x26
+    // print("ps2_mouse_init: send 0x45: ");
+    // rcv = ps2_host_send(0x45);
+    // phex(rcv); phex(ps2_error); print("\n");
+
+    /*
+    // set TrackPoint Press to Select Jenks Curvature (jkcur)
+    print("ps2_mouse_init: send 0xE2: ");
+    rcv = ps2_host_send(0xE2);
+    phex(rcv); phex(ps2_error); print("\n");
+    print("ps2_mouse_init: send 0x81: ");
+    rcv = ps2_host_send(0x81);
+    phex(rcv); phex(ps2_error); print("\n");
+    print("ps2_mouse_init: send 0x5D: ");
+    rcv = ps2_host_send(0x5D);
+    phex(rcv); phex(ps2_error); print("\n");
+    // default jkcur is 0x87
+    print("ps2_mouse_init: send 0x87: ");
+    rcv = ps2_host_send(0x87);
+    phex(rcv); phex(ps2_error); print("\n");
+    */
+
+    /*
+    // set TrackPoint Minimum Drag (mindrag)
+    print("ps2_mouse_init: send 0xE2: ");
+    rcv = ps2_host_send(0xE2);
+    phex(rcv); phex(ps2_error); print("\n");
+    print("ps2_mouse_init: send 0x81: ");
+    rcv = ps2_host_send(0x81);
+    phex(rcv); phex(ps2_error); print("\n");
+    print("ps2_mouse_init: send 0x59: ");
+    rcv = ps2_host_send(0x59);
+    phex(rcv); phex(ps2_error); print("\n");
+    // default PtS mindrag is 0x14
+    print("ps2_mouse_init: send 0x14: ");
+    rcv = ps2_host_send(0x14);
+    phex(rcv); phex(ps2_error); print("\n");
+    */
+}
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/readme.md b/keyboards/handwired/promethium/keymaps/priyadi/readme.md
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/handwired/promethium/keymaps/readme.md b/keyboards/handwired/promethium/keymaps/readme.md
new file mode 100644 (file)
index 0000000..5276913
--- /dev/null
@@ -0,0 +1,22 @@
+# How to add your own keymap
+
+Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
+
+    _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
+
+\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
+
+and contain the following files:
+
+* `keymap.c`
+* `readme.md` *recommended*
+* `config.h` *optional*, found automatically when compiling
+* `Makefile` *optional*, found automatically when compling
+
+When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
+
+     * **folder_name** description
+
+# List of Promethium keymaps
+
+
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
new file mode 100644 (file)
index 0000000..a0035cc
--- /dev/null
@@ -0,0 +1,6 @@
+#include "promethium.h"
+
+void matrix_init_kb(void) {
+
+       matrix_init_user();
+}
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h
new file mode 100644 (file)
index 0000000..662eeab
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef PROMETHIUM_H
+#define PROMETHIUM_H
+
+#include "quantum.h"
+
+#define PS2_INIT_DELAY 2000
+
+#define KEYMAP( \
+    k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
+    k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+    k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
+    k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
+) \
+{ \
+    {k11, k12, k13, k14, k15, k16}, \
+    {k21, k22, k23, k24, k25, k26}, \
+    {k31, k32, k33, k34, k35, k36}, \
+    {k41, k42, k43, k44, k45, k46}, \
+    {k17, k18, k19, k1a, k1b, k1c}, \
+    {k27, k28, k29, k2a, k2b, k2c}, \
+    {k37, k38, k39, k3a, k3b, k3c}, \
+    {k47, k48, k49, k4a, k4b, k4c} \
+}
+
+enum led_sequence {
+  LED_IND_BLUETOOTH,
+  LED_IND_USB,
+  LED_IND_BATTERY,
+
+  LED_IND_FUNC,
+  LED_IND_NUM,
+  LED_IND_EMOJI,
+
+  LED_BKSP,
+  LED_ENT,
+  LED_RSFT,
+  LED_RCTL,
+
+  LED_RGUI,
+  LED_SLSH,
+  LED_SCLN,
+  LED_P,
+
+  LED_O,
+  LED_L,
+  LED_DOT,
+  LED_RALT,
+
+  LED_EMOJI,
+  LED_COMM,
+  LED_K,
+  LED_I,
+
+  LED_U,
+  LED_J,
+  LED_M,
+  LED_FUNC,
+
+  LED_RSPC,
+  LED_N,
+  LED_HH,
+  LED_Y,
+
+  LED_TRACKPOINT3,
+  LED_TRACKPOINT2,
+  LED_TRACKPOINT1,
+
+  LED_LSPC,
+  LED_B,
+  LED_G,
+  LED_T,
+
+  LED_R,
+  LED_F,
+  LED_V,
+  LED_NUM,
+
+  LED_PUNC,
+  LED_C,
+  LED_D,
+  LED_E,
+
+  LED_W,
+  LED_S,
+  LED_X,
+  LED_LALT,
+
+  LED_LGUI,
+  LED_Z,
+  LED_A,
+  LED_Q,
+
+  LED_TAB,
+  LED_ESC,
+  LED_LSFT,
+  LED_LCTL,
+};
+
+#endif
+
+
diff --git a/keyboards/handwired/promethium/readme.md b/keyboards/handwired/promethium/readme.md
new file mode 100644 (file)
index 0000000..e63d2f1
--- /dev/null
@@ -0,0 +1,13 @@
+Promethium Keyboard Firmware
+============================
+A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE controller.
+
+Features:
+
+* Single piece split form factor
+* Columnar stagger
+* Trackpoint
+* Bluetooth LE *TBD*
+* Battery
+* Per switch RGB LED
+* Proximity sensor for energy conservation *TBD*
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c
new file mode 100644 (file)
index 0000000..ea922ec
--- /dev/null
@@ -0,0 +1,24 @@
+#include "light_ws2812.h"
+#include "rgbsps.h"
+
+struct cRGB led[RGBSPS_NUM];
+
+void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
+  led[index].r = r;
+  led[index].g = g;
+  led[index].b = b;
+}
+
+void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) {
+  for (uint16_t i = 0; i < RGBSPS_NUM; i++) {
+    rgbsps_set(i, r, g, b);
+  }
+}
+
+void rgbsps_turnoff(void) {
+  rgbsps_setall(0, 0, 0);
+}
+
+void rgbsps_send(void) {
+  ws2812_setleds(led, RGBSPS_NUM);
+}
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.h b/keyboards/handwired/promethium/rgbsps.h
new file mode 100644 (file)
index 0000000..6da197f
--- /dev/null
@@ -0,0 +1,4 @@
+void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
+void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b);
+void rgbsps_turnoff(void);
+void rgbsps_send(void);
\ No newline at end of file
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
new file mode 100644 (file)
index 0000000..891f523
--- /dev/null
@@ -0,0 +1,74 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 8000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no         # Console for debug(+400)
+COMMAND_ENABLE ?= no         # Commands for debug and configuration
+NKRO_ENABLE ?= yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+UNICODEMAP_ENABLE ?= yes
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+PS2_MOUSE_ENABLE ?= yes
+PS2_USE_INT ?= yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
+
+SRC += $(QUANTUM_DIR)/light_ws2812.c
+SRC += rgbsps.c
\ No newline at end of file
diff --git a/keyboards/handwired/retro_refit/Makefile b/keyboards/handwired/retro_refit/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/retro_refit/config.h b/keyboards/handwired/retro_refit/config.h
new file mode 100644 (file)
index 0000000..f2194e5
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Nobody
+#define PRODUCT         retro_refit
+#define DESCRIPTION     Retro Refit
+
+/* key matrix size */
+#define MATRIX_ROWS 11
+#define MATRIX_COLS 8
+
+// See note in retro_refit.h for an explanation of how this matrix is wired up
+#define MATRIX_ROW_PINS { D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, D2, D3, C7, D5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 0
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+
+/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */
+#define FORCE_NKRO
+
+/*
+ * Magic key options
+ * These options allow the magic key functionality to be changed. This is useful
+ * if your keyboard/keypad is missing keys and you want magic key support.
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* remap magic keys */
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+#define MAGIC_KEY_LOCK             BSLS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/handwired/retro_refit/keymaps/default/keymap.c b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..405402d
--- /dev/null
@@ -0,0 +1,33 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "retro_refit.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] =
+       KEYMAP( ESC,    F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,  F9,  F10, NLCK, SLCK, PSCR, PAUS, \
+                       GRV,     1,    2,    3,    4,    5,    6,    7,    8,   9,    0, MINS,  EQL, BSPC, HOME, \
+                       TAB,     Q,    W,    E,    R,    T,    Y,    U,    I,   O,    P, LBRC, RBRC,       PGUP, \
+                       BSLS,    A,    S,    D,    F,    G,    H,    J,    K,   L, SCLN, QUOT,        ENT, PGDN, \
+                       LSFT,          Z,    X,    C,    V,    B,    N,    M, COMM, DOT, SLSH, RSFT,   UP,  END, \
+                       LCTL, LGUI, LALT,        SPC,                               INS,  DEL, LEFT, DOWN, RGHT),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/handwired/retro_refit/readme.md b/keyboards/handwired/retro_refit/readme.md
new file mode 100644 (file)
index 0000000..9f10edf
--- /dev/null
@@ -0,0 +1,60 @@
+retro_refit keyboard firmware
+======================
+
+## Keyboard Info
+
+The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop".
+
+http://imgur.com/a/08Fyj
+
+This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
+
+The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y.
+
+```
+#define KEYMAP( \
+       K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+       K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+       K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45,      K97, \
+       K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30,      K44, K87, \
+       K26,      K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+       K10, K06, K25,                K07,                K86, K85, K95, K90, K93  \
+) { \
+{      KC_##K00,       KC_##K01,       KC_##K02,       KC_##K03,       KC_##K04,       KC_##K05,       KC_##K06,       KC_##K07,       }, \
+{      KC_##K10,       KC_##K11,       KC_##K12,       KC_##K13,       KC_##K14,       KC_##K15,       KC_##K16,       KC_##K17,       }, \
+{      KC_##K20,       KC_##K21,       KC_##K22,       KC_##K23,       KC_##K24,       KC_##K25,       KC_##K26,       KC_##K27,       }, \
+{      KC_##K30,       KC_##K31,       KC_##K32,       KC_##K33,       KC_##K34,       KC_##K35,       KC_##K36,       KC_##K37,       }, \
+{      KC_##K40,       KC_##K41,       KC_##K42,       KC_##K43,       KC_##K44,       KC_##K45,       KC_##K46,       KC_##K47,       }, \
+{      KC_##K50,       KC_##K51,       KC_##K52,       KC_##K53,       KC_##K54,       KC_##K55,       KC_##K56,       KC_##K57,       }, \
+{      KC_##K60,       KC_##K61,       KC_##K62,       KC_##K63,       KC_##K64,       KC_##K65,       KC_##K66,       KC_##K67,       }, \
+{      KC_##K70,       KC_##K71,       KC_##K72,       KC_##K73,       KC_##K74,       KC_##K75,       KC_##K76,       KC_##K77,       }, \
+{      KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_##K85,       KC_##K86,       KC_##K87,       }, \
+{      KC_##K90,       KC_##K91,       KC_NO,          KC_##K93,       KC_##K94,       KC_##K95,       KC_NO,          KC_##K97,       }, \
+{      KC_##KA0,       KC_##KA1,       KC_##KA2,       KC_##KA3,       KC_##KA4,       KC_##KA5,       KC_##KA6,       KC_##KA7,       }  \
+}
+```
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make default`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
\ No newline at end of file
diff --git a/keyboards/handwired/retro_refit/retro_refit.c b/keyboards/handwired/retro_refit/retro_refit.c
new file mode 100644 (file)
index 0000000..3d610eb
--- /dev/null
@@ -0,0 +1,47 @@
+#include "retro_refit.h"
+#include "led.h"
+
+void matrix_init_kb(void) {
+    // put your keyboard start-up code here
+    // runs once when the firmware starts up
+
+    // Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS)
+    DDRD |= (1<<6);
+    PORTD |= (1<<6);
+
+    matrix_init_user();
+};
+
+void led_set_kb(uint8_t usb_led) {
+    // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        // output low
+        DDRD |= (1<<0);
+        PORTD &= ~(1<<0);
+    } else {
+        // Hi-Z
+        DDRD &= ~(1<<0);
+        PORTD &= ~(1<<0);
+    }
+    if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+        // output low
+        DDRD |= (1<<1);
+        PORTD &= ~(1<<1);
+    } else {
+        // Hi-Z
+        DDRD &= ~(1<<1);
+        PORTD &= ~(1<<1);
+    }
+    if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+        // output low
+        DDRC |= (1<<6);
+        PORTC &= ~(1<<6);
+    } else {
+        // Hi-Z
+        DDRC &= ~(1<<6);
+        PORTC &= ~(1<<6);
+    }
+
+    led_set_user(usb_led);
+};
\ No newline at end of file
diff --git a/keyboards/handwired/retro_refit/retro_refit.h b/keyboards/handwired/retro_refit/retro_refit.h
new file mode 100644 (file)
index 0000000..109acdc
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef RETRO_REFIT_H
+#define RETRO_REFIT_H
+
+#include "quantum.h"
+
+// This macro is an example of using a non-standard row-column matrix. The 
+// keyboard in question had 11 rows and 8 columns, but the rows were not all 
+// horizontal, and the columns were not all vertical. For example, row 2 
+// contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and
+// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", 
+// "Left Alt", "Up Arrow", and "Down Arrow".
+//
+// The macro makes programming the keys easier and in a more straight-forward
+// manner because it realigns the keys into a 6x15 sensible keyboard layout 
+// instead of the obtuse 11x8 matrix.
+
+#define KEYMAP( \
+       K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+       K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+       K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45,      K97, \
+       K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30,      K44, K87, \
+       K26,      K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+       K10, K06, K25,                K07,                K86, K85, K95, K90, K93  \
+) { \
+{      KC_##K00,       KC_##K01,       KC_##K02,       KC_##K03,       KC_##K04,       KC_##K05,       KC_##K06,       KC_##K07,       }, \
+{      KC_##K10,       KC_##K11,       KC_##K12,       KC_##K13,       KC_##K14,       KC_##K15,       KC_##K16,       KC_##K17,       }, \
+{      KC_##K20,       KC_##K21,       KC_##K22,       KC_##K23,       KC_##K24,       KC_##K25,       KC_##K26,       KC_##K27,       }, \
+{      KC_##K30,       KC_##K31,       KC_##K32,       KC_##K33,       KC_##K34,       KC_##K35,       KC_##K36,       KC_##K37,       }, \
+{      KC_##K40,       KC_##K41,       KC_##K42,       KC_##K43,       KC_##K44,       KC_##K45,       KC_##K46,       KC_##K47,       }, \
+{      KC_##K50,       KC_##K51,       KC_##K52,       KC_##K53,       KC_##K54,       KC_##K55,       KC_##K56,       KC_##K57,       }, \
+{      KC_##K60,       KC_##K61,       KC_##K62,       KC_##K63,       KC_##K64,       KC_##K65,       KC_##K66,       KC_##K67,       }, \
+{      KC_##K70,       KC_##K71,       KC_##K72,       KC_##K73,       KC_##K74,       KC_##K75,       KC_##K76,       KC_##K77,       }, \
+{      KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_##K85,       KC_##K86,       KC_##K87,       }, \
+{      KC_##K90,       KC_##K91,       KC_NO,          KC_##K93,       KC_##K94,       KC_##K95,       KC_NO,          KC_##K97,       }, \
+{      KC_##KA0,       KC_##KA1,       KC_##KA2,       KC_##KA3,       KC_##KA4,       KC_##KA5,       KC_##KA6,       KC_##KA7,       } \
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/handwired/retro_refit/rules.mk b/keyboards/handwired/retro_refit/rules.mk
new file mode 100644 (file)
index 0000000..10fbfa5
--- /dev/null
@@ -0,0 +1,68 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes          # Console for debug(+400)
+COMMAND_ENABLE ?= yes          # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes                     # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES                   # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/handwired/rules.mk b/keyboards/handwired/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/handwired/traveller/Makefile b/keyboards/handwired/traveller/Makefile
new file mode 100644 (file)
index 0000000..191c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/handwired/traveller/config.h b/keyboards/handwired/traveller/config.h
new file mode 100644 (file)
index 0000000..2b82da4
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    You
+#define PRODUCT         traveller
+#define DESCRIPTION     A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4 
+#define MATRIX_COLS 13 
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+ // no I can't say why this order seemed like a good idea
+#define MATRIX_COL_PINS { B5, D6, B7, B6, F6, B1, B3, F7, B4, E6, D7, C6, D4 }
+#define UNUSED_PINS
+
+// LED stuff
+#define RGB_DI_PIN B2
+//#define RBLIGHT_TIMER
+#define RGBLED_NUM 1     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..13d889a
--- /dev/null
@@ -0,0 +1,305 @@
+#include "traveller.h"
+#include "mousekey.h"
+#include "action_layer.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+#define _QW 0
+#define _LW 1
+#define _HI 2
+#define _NAV 4
+#define _CUR 5
+#define _FKEYS 6 
+#define _TRNS 8
+
+// We do the same trick for functions
+#define  RGBLED_TOGGLE 10
+#define _HIOUT 15
+#define _LWOUT 16
+// Macros
+#define  MDL 4
+#define  MDR 5
+#define  MUR 6
+#define  MUL 3 
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------.      .-----------------------------------------.
+ * | NAV  | ` ~  |   W  |   E  |   R  |   T  |      |  Y   |   U  |   I  |   O  |  -   |  =   |
+ * |------+------+------+------+------+------|      |------+------+------+------+------+------|
+ * | Tab  |   Q  |   S  |   D  |   F  |   G  |      |  H   |  J   |   K  |   L  |   P  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ *|ctrl/esc|  A  |   X  |   C  |   V  |   B  |Ctrl /|   N  |   M  |   ,  |   .  |   ;  |  '   |
+ * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
+ * | Shift|   Z  | Del  | GUI  | Low  | Bspc |/Enter| Spc  | Hi   | GUI  | Alt  |  /   |Shift |
+ * `------------------------------------------------------------------------------------------'
+ * 
+ */
+[_QW] = KEYMAP( 
+  F(_NAV),          KC_GRV, KC_W,    KC_E,    KC_R,    KC_T,             KC_Y,    KC_U,    KC_I,    KC_O,    KC_MINS,  KC_EQL,
+  KC_TAB,           KC_Q,    KC_S,    KC_D,    KC_F,    KC_G,            KC_H,    KC_J,    KC_K,    KC_L,    KC_P,     KC_BSLS,
+  CTL_T(KC_ESC),    KC_A,    KC_X,    KC_C,    KC_V,    KC_B,    KC_RCTL,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SCLN,        KC_QUOT,
+  KC_LSFT, KC_Z,    KC_DEL, KC_LGUI, MO(_LW), KC_BSPC, KC_ENTER, KC_SPC,  MO(_HI), KC_RGUI, KC_RALT,    KC_SLSH,   KC_RSFT
+ ),
+
+/* LOW  - numbers, missing or awkward programming keys
+ Doubled 1 key allows lazy reach with ring finger. 
+ * ,-----------------------------------------.      .-----------------------------------------.
+ * | FKeys|   1  |   2  |  3   |   4  |   5  |      |  6   |  7   |   8  |   9  |   0  |Ctrl-alt-del|
+ * |------+------+------+------+------+------|      +------+------+------+------+------+------|
+ * | Tab  |   1  |  ]   |  (   |  )   |      |      |   *  |   (  |   )  |   [  |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | Caps |  [   |      |  {   |   }  |  `   |     /|   #  |   {  |   }  |      | ]    |      |
+ * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
+ * | Shift|      |      |      | Low  |      |/     |      |  Hi  |      |      |      |Shift |
+ * `------------------------------------------------------------------------------------------'
+ * 
+ */
+
+[_LW] = KEYMAP( 
+  F(_FKEYS),   KC_1,     KC_2,      KC_3,     KC_4,    KC_5,             KC_6,    KC_7,       KC_8,      KC_9,    KC_0,  LCTL(LALT(KC_DEL)) ,
+  KC_TRNS,  KC_1,     KC_RBRC,   KC_LPRN,  KC_RPRN, KC_NO,               KC_ASTR, KC_LPRN,    KC_RPRN,    KC_LBRC,    KC_NO, KC_NO,
+  KC_CAPS,   KC_LBRC,  KC_NO,     KC_LCBR,  KC_RCBR, KC_TILD,   KC_TRNS,  KC_HASH, KC_LCBR,    KC_RCBR,   KC_NO,    KC_RBRC,   KC_NO,
+  KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,    KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS
+),
+
+/* HI - Punctuation, shell and 
+url ://@.com  row on bottom,    && is opposite ||       ^$ are in regex order: ^.*$    
+Right hand nav keys work pretty well chorded with the Right hand Hi Key
+ * ,-----------------------------------------.      .-----------------------------------------.
+ * |FKEYS |   !  |   @  |   #  |   $  |   %  |      |  ^   |   &  |   *  |   (  |   )  |   +  |
+ * |------+------+------+------+------+------|      |------+------+------+------+------+------|
+ * |      |  !   |  &   |  "|" |   $  |   %  |      |  Vol+|  Mute|      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | CAPS |  ^   |   :  |   .  |   *  |   -  |     /|  Vol-| Play | PgUp | Home | Up   | End  |
+ * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
+ * |      |   /  |      |      | Low  |      |/     |      |  Hi  | PgDn | Left| Down | Right |
+ * `------------------------------------------------------------------------------------------'
+ * 
+ */
+
+[_HI] = KEYMAP( 
+ F(_FKEYS), KC_EXLM,  KC_AT,   KC_HASH,  KC_DLR,   KC_PERC,           KC_CIRC,  KC_AMPR,    KC_ASTR,   KC_LPRN,  KC_RPRN,  KC_PLUS,
+ KC_TRNS, KC_EXLM,  KC_AMPR, KC_PIPE,  KC_DLR,   KC_PERC,             KC_VOLU, KC_MUTE,    KC_NO,     KC_NO,    KC_NO,    KC_NO, 
+ KC_CAPS, KC_CIRC,  KC_COLN,  KC_DOT,  KC_ASTR,  KC_MINS,   KC_TRNS,  KC_VOLD, KC_PPLS,    KC_PGUP,   KC_HOME,  KC_UP,    KC_END,
+ KC_TRNS, KC_SLSH,  KC_TRNS,  KC_TRNS, F(_LW),   KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,    KC_PGDN,   KC_LEFT,  KC_DOWN,  KC_RIGHT 
+),     
+
+/* NAV - mouse &  navigation
+//gui left and right are line home/end, or fore & back in browser
+// Mouse buttons are reversed for comfort - bigger stretch is to the right button. 
+
+ * ,-----------------------------------------.      .-----------------------------------------.
+* | NAV  |      |      | Up   |      |Gui-> |      | MwU  | MS_UL| MS_U |MS_UR |      |Ms Norm|
+* |------+------+------+------+------+------|      |------+------+------+------+------+--------|
+* |      |Gui<- | Left | Down |Right | C^E  |      | BTN3 | MS_L |MS Up | MS_R |      |Ms Fast |
+* |------+------+------+------+------+------|------|------+------+------+------+------+--------|
+* |      | C^A  | GUI X| GUI C| GUI_V|      |Enter/| MWD  | M_DL |MS Dwn|MS_DR | Up   |Ms Slow |
+* |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
+* |      | GuiZ |      |      | Low  |      |/ButnR|ButnL |  Hi  |      | Left | Down | Right |
+* `------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = KEYMAP( 
+  F(_NAV),  KC_NO,         KC_NO,    KC_UP,       KC_NO,     RGUI(KC_RIGHT),            KC_WH_U,  M(MUL), KC_MS_U,   M(MUR), KC_NO, KC_ACL2,
+  KC_TRNS, RGUI(KC_LEFT),  KC_LEFT,  KC_DOWN,     KC_RIGHT,  LCTL(KC_E),                KC_BTN3,  KC_MS_L,  KC_MS_U,   KC_MS_R,  KC_NO, KC_ACL1,
+  KC_TRNS, LCTL(KC_A),     LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO,         KC_ENTER,   KC_WH_D,  M(MDL), KC_MS_D,  M(MDR),  KC_UP, KC_ACL0,
+  KC_TRNS, RGUI(KC_Z),     KC_TRNS,  KC_TRNS,     KC_TRNS,   KC_TRNS,       KC_BTN2,   KC_BTN1,  KC_TRNS,  KC_TRNS,   KC_LEFT,   KC_DOWN,   KC_RIGHT
+),
+
+/* FKEYS - Funtion keys & mac stuff
+ * ,-----------------------------------------.      .-----------------------------------------.
+ * | FKEYS| F1   | F2   | F3   |  F4  | F5   |      | F6   | F7   | F8   | F9   | F10  | Ctrl | 
+ * |------+------+------+------+------+------|      |------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |  F11 | F12  |  F13 | F14  |  F15 | Alt  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * |Qwerty|      |      |      |      |      |     /|      |      |      |      |      | Del  |
+ * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
+ * |    . |RGBTog|  .   |      | LO   | Bspc |/     |      | HI   |      |      |      |      |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */ 
+[_FKEYS] = KEYMAP( 
+  F(_FKEYS), KC_F1,    KC_F2,          KC_F3,      KC_F4,     KC_F5,               KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,    KC_RCTL,
+  KC_TRNS,   KC_NO,    KC_NO,   KC_NO,      KC_NO,     KC_NO,               KC_F11,   KC_F12,   KC_F13,    KC_F14,  KC_F15,     KC_LALT ,
+  F(_QW),   KC_NO,     KC_NO,   KC_NO,      KC_NO,     KC_NO,    KC_TRNS,   KC_NO,    KC_NO,    KC_NO,      KC_NO,   KC_NO,    KC_DEL,
+  KC_TRNS, F(RGBLED_TOGGLE),    KC_TRNS,    KC_TRNS,   KC_TRNS,  KC_TRNS,   KC_TRNS,   KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS
+),
+
+
+/* TRNS - skeleton for laters
+ * ,-----------------------------------------.      .-----------------------------------------.
+ * |   .  |   .  |   .  |   .  |   .  |   .  |      |  ^   |   &  |   *  |   (  |   )  |      |
+ * |------+------+------+------+------+------|      |------+------+------+------+------+------|
+ * |   .  |   .  |   .  |   .  |   .  |   .  |      |  6   |  7   |   8  |   9  |   0  |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * |   .  |   .  |   .  |   .  |   .  |   .  |     /|      |      |      |   .  |   ;  |  "   |
+ * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
+ * |    . |   .  |  .   | GUI  |  LO  |   .  |/     | Spc  |  HI  | GUI  |  M0  |  /   |LSFT |
+ * `------------------------------------------------------------------------------------------'
+ * 
+ */
+
+[_TRNS] = {
+  {KC_TRNS,  KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_NO,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS},
+  {KC_TRNS,  KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_NO,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,      KC_TRNS},
+  {KC_TRNS,  KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,      KC_TRNS},
+  {KC_TRNS, KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS,  KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,   KC_TRNS}
+ }
+
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+    [_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY  layer
+    [_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
+    [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch               
+    [_NAV] = ACTION_LAYER_TOGGLE(_NAV),                                   
+    [_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),  
+    [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
+    [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
+    
+    // Functions
+  [RGBLED_TOGGLE]  = ACTION_FUNCTION(RGBLED_TOGGLE),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+            #ifdef BACKLIGHT_ENABLE
+              backlight_step();
+            #endif
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+
+   // from  algernon's ErgoDox EZ layout,
+       case MUL:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_UP);
+          mousekey_on(KC_MS_LEFT);
+        } else {
+          mousekey_off(KC_MS_UP);
+          mousekey_off(KC_MS_LEFT);
+        }
+        mousekey_send();
+        break;
+
+      case MUR:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_UP);
+          mousekey_on(KC_MS_RIGHT);
+        } else {
+          mousekey_off(KC_MS_UP);
+          mousekey_off(KC_MS_RIGHT);
+        }
+        mousekey_send();
+        break;
+
+      case MDL:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_DOWN);
+          mousekey_on(KC_MS_LEFT);
+        } else {
+          mousekey_off(KC_MS_DOWN);
+          mousekey_off(KC_MS_LEFT);
+        }
+        mousekey_send();
+        break;
+
+      case MDR:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_DOWN);
+          mousekey_on(KC_MS_RIGHT);
+        } else {
+          mousekey_off(KC_MS_DOWN);
+          mousekey_off(KC_MS_RIGHT);
+        }
+        mousekey_send();
+        break;
+
+
+      }
+    return MACRO_NONE;
+};
+
+
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch (id) {
+    case RGBLED_TOGGLE:
+      //led operations
+      if (record->event.pressed) {
+        rgblight_toggle();
+      }
+        break;
+  }
+}
+
+
+void LayerLEDSet(uint8_t layr) {
+
+    switch (layr) {
+        case _QW:
+            rgblight_setrgb(0,20, 0); //  dim green
+        break;
+        case _LW:
+            // deep purple
+            rgblight_setrgb(20,0,35); 
+            break;  
+        case _HI:
+            // light blue
+           rgblight_setrgb(0,20,20); 
+            break;    
+        case _NAV:
+            // Yellowy orange
+            rgblight_setrgb(25,20,0); // brighter
+            break;
+        case _FKEYS:
+         // RED
+           rgblight_setrgb(20,0,0); // brighter
+            break;  
+        default:
+            rgblight_setrgb(20,2,20);//error
+            break;
+    }
+ return;
+  
+}
+
+void matrix_init_user(void) {
+}
+
+// Bleah globals need to be initialized.
+uint8_t old_layer=_QW;
+
+void matrix_scan_user(void) {
+         uint8_t layer = biton32(layer_state);
+         if (old_layer != layer) {
+           LayerLEDSet(layer);
+           old_layer=layer;
+           }
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+
diff --git a/keyboards/handwired/traveller/keymaps/default/readme.md b/keyboards/handwired/traveller/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..7ddc40b
--- /dev/null
@@ -0,0 +1,2 @@
+# The default keymap for handwired/traveller
+this is a kitchen sink build 
diff --git a/keyboards/handwired/traveller/readme.md b/keyboards/handwired/traveller/readme.md
new file mode 100644 (file)
index 0000000..646844b
--- /dev/null
@@ -0,0 +1,35 @@
+traveler keyboard firmware
+======================
+
+## Traveller Specific Info ##
+The traveller is a varient on the atreus keyboard. 
+Like the Atreus, it is designed to be a good compromise between size and ergonomics. 
+
+key differences are 
+- an additional column for each pinky
+- an RGB LED in the center to show the current layer
+- more finger stagger,  splay angle and contoured keycaps (F2 profile for space key). 
+
+You can make your own traveller  keyboard by using the openscad tools from the atreus repository, and adding a hole for the LED to shine through. 
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboard/traveler folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/handwired/traveller/rules.mk b/keyboards/handwired/traveller/rules.mk
new file mode 100644 (file)
index 0000000..12a4b71
--- /dev/null
@@ -0,0 +1,89 @@
+
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+# for avr upload
+USB ?= /dev/cu.usbmodem1421
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+
+ifdef TEENSY2
+    OPT_DEFS += -DATREUS_TEENSY2
+    ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
+else
+    OPT_DEFS += -DATREUS_ASTAR
+    OPT_DEFS += -DCATERINA_BOOTLOADER
+    ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+                            avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+endif
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# MCU name
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no        # Console for debug(+400)
+COMMAND_ENABLE ?= no        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
+RGBLIGHT_ENABLE = yes
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
+
+upload: build
+       $(ATREUS_UPLOAD_COMMAND)
+
diff --git a/keyboards/handwired/traveller/traveller.c b/keyboards/handwired/traveller/traveller.c
new file mode 100644 (file)
index 0000000..9d25341
--- /dev/null
@@ -0,0 +1,61 @@
+#include "traveller.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+        // leave this function blank - it can be defined in a keymap file
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+        // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+void process_action_user(keyrecord_t *record) {
+        // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+        // leave this function blank - it can be defined in a keymap file
+}
+
+void matrix_init_kb(void) {
+        // put your keyboard start-up code here
+        // runs once when the firmware starts up
+
+#ifdef RGBLIGHT_ENABLE
+        rgblight_init();
+        rgblight_mode(1); // solid, no timer
+        rgblight_setrgb(0,20,0);// dim green, happens to be same as _QW
+#endif
+
+// Turn status LED on
+        DDRC |= (1<<7);
+        PORTC |= (1<<7);
+
+        matrix_init_user();
+}
+
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
+
+
diff --git a/keyboards/handwired/traveller/traveller.h b/keyboards/handwired/traveller/traveller.h
new file mode 100644 (file)
index 0000000..972a1a9
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef TRAVELLER_H
+#define TRAVELLER_H
+
+#include "quantum.h"
+#include "led.h"
+
+#ifdef RGBLIGHT_ENABLE
+  #include "rgblight.h"
+#endif
+#ifdef BACKLIGHT_ENABLE
+        #include "backlight.h"
+#endif
+
+
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+        k00, k01, k02, k03, k04, k05,       k07, k08, k09, k0a, k0b, k0c, \
+        k10, k11, k12, k13, k14, k15,       k17, k18, k19, k1a, k1b, k1c, \
+        k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+        k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c  \
+) \
+{ \
+        { k00, k01, k02, k03, k04, k05, KC_NO, k07, k08, k09, k0a, k0b, k0c }, \
+        { k10, k11, k12, k13, k14, k15, KC_NO, k17, k18, k19, k1a, k1b, k1c }, \
+        { k20, k21, k22, k23, k24, k25, k26,   k27, k28, k29, k2a, k2b, k2c }, \
+        { k30, k31, k32, k33, k34, k35, k36,   k37, k38, k39, k3a, k3b, k3c } \
+}
+
+#endif
index 6fe973e1ebb6892e542e618d4a3e783cf586664a..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,90 +1,3 @@
-
-
-# project specific files
-SRC = matrix.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-#OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# as per original hasu settings
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-CUSTOM_MATRIX    ?= yes # Custom matrix file for the HHKB
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-# NKRO_ENABLE ?= yes           # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
-# MIDI_ENABLE ?= YES           # MIDI controls
-# UNICODE_ENABLE ?= YES                # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
-
-ifneq (, $(findstring yes, $(HHKB_JP)))
-       OPT_DEFS += -DHHKB_JP
-endif
-
-debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
-debug-on: all
-
-debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
-debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
-debug-off: all
+endif
\ No newline at end of file
diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c
new file mode 100644 (file)
index 0000000..2b6d390
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * dbroqua HHKB Layout
+ */
+#include "hhkb.h"
+
+#define BASE 0
+#define FN 1
+#define MOUSE 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* BASE Level: Default Layer
+     * ,-----------------------------------------------------------------------------------------.
+     * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  \  |  `  |
+     * |-----------------------------------------------------------------------------------------+
+     * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |  Bksp  |
+     * |-----------------------------------------------------------------------------------------+
+     * | Ctrl    |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+     * |-----------------------------------------------------------------------------------------+
+     * | Shift     |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  | Shift     | fn  |
+     * +-----------------------------------------------------------------------------------------+
+     *         | Gui |  Alt   |               Space               | AltGr |Mouse|
+     *         `----------------------------------------------------------------´
+     */
+    [BASE] = KEYMAP(
+        KC_ESC,   KC_1,  KC_2,  KC_3,  KC_4,  KC_5,  KC_6,  KC_7,  KC_8,     KC_9,    KC_0,     KC_MINS,  KC_EQL,    KC_BSLS,  KC_GRV, \
+        KC_TAB,   KC_Q,  KC_W,  KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,     KC_O,    KC_P,     KC_LBRC,  KC_RBRC,   KC_BSPC,          \
+        KC_LCTL,  KC_A,  KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,     KC_L,    KC_SCLN,  KC_QUOT,  KC_ENT,                      \
+        KC_LSFT,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM,  KC_DOT,  KC_SLSH,  KC_RSFT,  MO(FN),                    \
+                        KC_LGUI, KC_LALT,  /*        */ KC_SPC, KC_RALT, MO(MOUSE)
+    ),
+
+    /* FN Layer
+     * ,-----------------------------------------------------------------------------------------.
+     * | Pwr |  F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F0  | F11 | F12 | Ins | Del|
+     * |-----------------------------------------------------------------------------------------+
+     * | Caps   |     |     |     |     |     |     |     |PrtSc| Slck| Paus|  Up |     |        |
+     * |-----------------------------------------------------------------------------------------+
+     * |         | Vol-| Vol+| Mute|     |     | *   | /   | Home| PgUp| Left |Right|            |
+     * |-----------------------------------------------------------------------------------------+
+     * |           | Prev| Play| Next|     |     | +   | -   | End |PgDwn| Down|           |     |
+     * +-----------------------------------------------------------------------------------------+
+     *         |     |        |                                   | Stop  |     |
+     *         `----------------------------------------------------------------´
+     */
+    [FN] = KEYMAP(
+        KC_PWR,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_INS,   KC_DEL, \
+        KC_CAPS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  KC_UP,    KC_TRNS,  KC_TRNS,          \
+        KC_TRNS,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_PAST,  KC_PSLS,  KC_HOME,  KC_PGUP,  KC_LEFT,  KC_RGHT,  KC_TRNS,                    \
+        KC_TRNS,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_TRNS,  KC_TRNS,  KC_PPLS,  KC_PMNS,  KC_END,   KC_PGDN,  KC_DOWN,  KC_TRNS,  KC_TRNS,                    \
+                        KC_TRNS, KC_TRNS,           KC_TRNS,                KC_MSTP, KC_TRNS
+    ),
+
+    /* MOUSE Layer
+     * ,-----------------------------------------------------------------------------------------.
+     * |     |      |     |     |     |     |     |     |     |     |     |     |     |     |    |
+     * |-----------------------------------------------------------------------------------------+
+     * |        |     | WUp |     |     |     |     |     |     |     | Btn1|  Up | Btn2|        |
+     * |-----------------------------------------------------------------------------------------+
+     * |         | WLt | WDn | WRt |     |     |     |     |     |     | Left |Right|            |
+     * |-----------------------------------------------------------------------------------------+
+     * |           |     |     |     |     |     |     |     |     | Btn3| Down|           |     |
+     * +-----------------------------------------------------------------------------------------+
+     *         |     |        |                                   |       |     |
+     *         `----------------------------------------------------------------´
+     */
+    [MOUSE] = KEYMAP(
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_TRNS, \
+        KC_TRNS,  KC_TRNS,  KC_WH_U,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_BTN1,  KC_MS_U,  KC_BTN2,  KC_TRNS,          \
+        KC_TRNS,  KC_WH_L,  KC_WH_D,  KC_WH_R,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_MS_L,  KC_MS_R,  KC_TRNS,                    \
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_BTN3,  KC_MS_D,  KC_TRNS,  KC_TRNS,                    \
+                        KC_TRNS, KC_TRNS,           KC_TRNS,                KC_TRNS, KC_TRNS
+    )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/hhkb/keymaps/dbroqua/readme.md b/keyboards/hhkb/keymaps/dbroqua/readme.md
new file mode 100644 (file)
index 0000000..0afebc8
--- /dev/null
@@ -0,0 +1,9 @@
+# Dbroqua Layout
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+```
\ No newline at end of file
index 92986292a233dd6403c6b2f242237021cbbd50fa..a7f700f019c2f3312dc7ca3e58b7bc18cc1f90a9 100644 (file)
@@ -1 +1 @@
-HHKB_JP=yes
+OPT_DEFS += -DHHKB_JP
index 92986292a233dd6403c6b2f242237021cbbd50fa..a7f700f019c2f3312dc7ca3e58b7bc18cc1f90a9 100644 (file)
@@ -1 +1 @@
-HHKB_JP=yes
+OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/keymaps/sh_jp/Makefile b/keyboards/hhkb/keymaps/sh_jp/Makefile
new file mode 100644 (file)
index 0000000..a7f700f
--- /dev/null
@@ -0,0 +1 @@
+OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md
new file mode 100644 (file)
index 0000000..4f82f2f
--- /dev/null
@@ -0,0 +1,86 @@
+###Keymaps with both Dvorak layout and QWER layout for HHKB JP.  
+
+1. The default layout is Dvorak.
+2. Use `Tog` to toggle between Dvorak and QWER
+3. Holding `NewCmd`, the original `LftCmd`,  will activate the `NewCmd` layer which means `NewCmd+key` is the same as `Cmd+key` in normal QWER layout.<sup>[1](#cmdTab)</sup>
+  - For example, no matter you are in Dvorak layout or QWER layout, you can use `Cmd+s` to save a currently editing file.
+4. `Symb` makes type symbols easier
+  - for example: `Symb+a` is `!`.
+5. `Spc+key` equals to `Shft+key` while using `Spc` alone will yield a space as usual.
+6. There's an extra `Tab` in the last line.
+    
+```
+Layer DVOR:
+,-----------------------------------------------------------.
+|Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|   |Bsp|
+|-----------------------------------------------------------|
+|Tab  |  '|   ,|  .|  P|  Y|  F|  G|  C|  R|  L|  /|  =|    |
+|------------------------------------------------------` Ent|
+|Ctrl  |  A|  O|  E|  U|  I|  D|  H|  T|  N|  S|  -|  \|    |
+|-----------------------------------------------------------|
+|Shft   |  ;|  Q|  J|  K|  X|  B|  M| W|  V|  Z|   | Up|    |
+|-----------------------------------------------------------|
+|FN| `| Alt|NewCmd|Symb|  Spc |Symb|Tab|RCmd|Tog|Lft|Dwn|Rgh|
+`-----------------------------------------------------------'
+```
+
+```
+Layer QWER:
+,-----------------------------------------------------------.
+|Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9| 10|  -|  =|   |Bsp|
+|-----------------------------------------------------------|
+|Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     |
+|------------------------------------------------------` Ent|
+|Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|    |
+|-----------------------------------------------------------|
+|Shft   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|   | Up|   |
+|-----------------------------------------------------------|
+|FN| `| Alt|NewCmd|Symb|  Spc  |Symb|Tab|Cmd|Tog|Lft|Dwn|Rgh|
+`-----------------------------------------------------------'
+```
+
+```
+Layer Symb:
+,-----------------------------------------------------------.
+|   |   |   |   |   |   |   |   |   |   |  |   |   |   |    |
+|-----------------------------------------------------------|
+|     |   |   |   [|   ]|   |   |  {|  }|   |   |   |   |   |
+|------------------------------------------------------`    |
+|      |  !|  @|  #|  $|  %|  ^|  &|  *|  (|  )|  '|  \|    |
+|-----------------------------------------------------------|
+|       |   |   |   |   |   |   |   |   |   |   |   |   |   |
+|-----------------------------------------------------------|
+|  |  |    |      |    |       |    |   |   |   |   |   |   |
+`-----------------------------------------------------------'
+```
+
+```
+Layer FUNC: HHKB mode (HHKB Fn)
+,-----------------------------------------------------------.
+|Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+|-----------------------------------------------------------|
+|Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |     |
+|------------------------------------------------------`    |
+|      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|   |    |
+|-----------------------------------------------------------|
+|       |   |   |   |   |   |  +|  -|End|PgD|Dow|   |   |   |
+|-----------------------------------------------------------|
+|   ||   |   |   |   |         |   |   |   |   ||   |   |   |
+`-----------------------------------------------------------'
+```
+
+```
+Empty Layer:
+,-----------------------------------------------------------.
+|   |   |   |   |   |   |   |   |   |   |  |   |   |   |    |
+|-----------------------------------------------------------|
+|     |   |   |   |   |   |   |   |   |   |   |   |   |     |
+|------------------------------------------------------`    |
+|      |   |   |   |   |   |   |   |   |   |   |   |   |    |
+|-----------------------------------------------------------|
+|       |   |   |   |   |   |   |   |   |   |   |   |   |   |
+|-----------------------------------------------------------|
+|  |  |    |      |    |       |    |   |   |   |   |   |   |
+`-----------------------------------------------------------'
+```
+<a name="cmdTab">1</a>: `NewCmd + Tab` does not work, you can use `RCmd+Tab` to switch among applications.
diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c
new file mode 100644 (file)
index 0000000..d4cb3b0
--- /dev/null
@@ -0,0 +1,60 @@
+#include "hhkb.h"
+
+#define _______ KC_TRNS
+
+enum {
+  DVOR,
+  QWER,
+  NEW_CMD,
+  SYMB,
+  FUNC
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [DVOR] = KEYMAP_JP(
+    KC_ESC,   KC_1,    KC_2,    KC_3,    KC_4,     KC_5,    KC_6,    KC_7,     KC_8,    KC_9,    KC_0, KC_LBRC,  KC_RBRC, KC_JYEN,  KC_BSPC,
+    KC_TAB,   KC_QUOT, KC_COMM, KC_DOT,  KC_P,     KC_Y,    KC_F,    KC_G,     KC_C,    KC_R,   KC_L, KC_SLSH, KC_EQL,
+    KC_LCTL,  KC_A,    KC_O,    KC_E,    KC_U,     KC_I,    KC_D,    KC_H,     KC_T,    KC_N,   KC_S, KC_MINS, KC_BSLS, KC_ENT,
+    KC_LSFT,  KC_SCLN, KC_Q,    KC_J,    KC_K,     KC_X,    KC_B,    KC_M,     KC_W,    KC_V,   KC_Z,   KC_RO,  KC_UP, KC_RSFT,
+    MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD),   MO(SYMB),    MT(MOD_LSFT, KC_SPC),    MO(SYMB),  KC_TAB, KC_RGUI,   TG(QWER), KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+  [QWER] = KEYMAP_JP(
+    KC_ESC,   KC_1,    KC_2,    KC_3,    KC_4,     KC_5,    KC_6,    KC_7,     KC_8,    KC_9,    KC_0, KC_MINS,  KC_EQL, KC_JYEN,  KC_BSPC,
+    KC_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,     KC_T,    KC_Y,    KC_U,     KC_I,    KC_O,    KC_P, KC_LBRC, KC_RBRC,
+    KC_LCTL,  KC_A,    KC_S,    KC_D,    KC_F,     KC_G,    KC_H,    KC_J,     KC_K,    KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+    KC_LSFT,  KC_Z,    KC_X,    KC_C,    KC_V,     KC_B,    KC_N,    KC_M,  KC_COMM,  KC_DOT, KC_SLSH,                      KC_RO, KC_UP, KC_RSFT,
+    MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD),    MO(SYMB),    MT(MOD_LSFT, KC_SPC),    MO(SYMB),  KC_TAB, KC_RGUI,   _______, KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+  [NEW_CMD] = KEYMAP_JP(
+    _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4),  LGUI(KC_5), LGUI(KC_6), LGUI(KC_7),  LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, LGUI(KC_BSPC),
+    _______,  LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R),  LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U),  LGUI(KC_I), LGUI(KC_O),  LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC),
+    _______,  LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F),  LGUI(KC_G), LGUI(KC_H), LGUI(KC_J),  LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______,
+    LGUI(KC_LSFT),  LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B),  LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM),  LGUI(KC_DOT),  LGUI(KC_SLSH),  _______, _______, _______,
+    _______, _______, _______, _______, _______,     LGUI(KC_SPC), _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT)
+  ),
+
+  [SYMB] = KEYMAP_JP(
+    _______,    _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,   _______,  _______,  _______,  _______,  _______,  _______,
+    _______, _______,   _______,   KC_LBRC,   KC_RBRC,   _______,   _______,   LSFT(KC_LBRC),   LSFT(KC_RBRC),   _______,  _______,_______,  _______,
+    _______, LSFT(KC_1),LSFT(KC_2),LSFT(KC_3),LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), _______, _______, _______,
+    _______, _______, _______, _______,  _______, _______, _______, _______,  _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, _______
+  ),
+
+  [FUNC] = KEYMAP_JP(
+    KC_PWR,    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12,  KC_INS,  KC_DEL,
+    KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,   KC_UP, _______,
+    _______, KC_VOLD, KC_VOLU, KC_MUTE,  KC_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT,
+    _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS,  KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
+    _______, _______, _______, _______, _______,     _______     , _______, _______, _______, _______, _______, _______, _______
+  )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) {
+  return MACRO_NONE;
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
diff --git a/keyboards/hhkb/keymaps/shela/Makefile b/keyboards/hhkb/keymaps/shela/Makefile
new file mode 100644 (file)
index 0000000..d0586bd
--- /dev/null
@@ -0,0 +1 @@
+SRC += action_pseudo_lut.c
diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c
new file mode 100644 (file)
index 0000000..b205968
--- /dev/null
@@ -0,0 +1,142 @@
+#include "quantum.h"
+#include "action_pseudo_lut.h"
+
+static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
+
+/*
+ * Pseudo layout action.
+ * This action converts a keycode in order to output the character according to the keymap you specified
+ * still your keyboard layout recognized wrongly on your OS.
+ * Memo: Using other layer keymap to get keycode
+ */
+void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) {
+    static uint8_t prev_shift;
+    uint16_t keycode;
+    uint16_t pseudo_keycode;
+
+    /* get keycode from keymap you specified */
+    keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
+
+    prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+
+    if (record->event.pressed) {
+        /* when magic commands entered, keycode does not converted */
+        if (IS_COMMAND()) {
+            if (prev_shift) {
+                add_shift_bit(keycode);
+            }
+            register_code(keycode);
+            return;
+        }
+
+        if (prev_shift) {
+            pseudo_keycode = convert_keycode(keymap, keycode, true);
+            dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
+            add_shift_bit(keycode);
+
+            if (IS_LSFT(pseudo_keycode)) {
+                register_code(QK_LSFT ^ pseudo_keycode);
+            } else {
+                /* delete shift mod temporarily */
+                del_mods(prev_shift);
+                send_keyboard_report();
+                register_code(pseudo_keycode);
+                add_mods(prev_shift);
+                send_keyboard_report();
+            }
+        } else {
+            pseudo_keycode = convert_keycode(keymap, keycode, false);
+            dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
+
+            if (IS_LSFT(pseudo_keycode)) {
+                add_weak_mods(MOD_BIT(KC_LSFT));
+                send_keyboard_report();
+                register_code(QK_LSFT ^ pseudo_keycode);
+                /* on Windows, prevent key repeat to avoid unintended output */
+                unregister_code(QK_LSFT ^ pseudo_keycode);
+                del_weak_mods(MOD_BIT(KC_LSFT));
+                send_keyboard_report();
+            } else {
+                register_code(pseudo_keycode);
+            }
+        }
+    } else {
+        if (get_shift_bit(keycode)) {
+            del_shift_bit(keycode);
+            pseudo_keycode = convert_keycode(keymap, keycode, true);
+        } else {
+            pseudo_keycode = convert_keycode(keymap, keycode, false);
+        }
+        dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
+
+        if (IS_LSFT(pseudo_keycode)) {
+            unregister_code(QK_LSFT ^ pseudo_keycode);
+        } else {
+            unregister_code(pseudo_keycode);
+        }
+    }
+}
+
+uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded)
+{
+    uint16_t pseudo_keycode;
+
+    switch (keycode) {
+        case KC_A ... KC_CAPSLOCK:
+#if defined(__AVR__)
+            if (shift_modded) {
+                pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
+            } else {
+                pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
+            }
+#else
+            if (shift_modded) {
+                pseudo_keycode = keymap[keycode][1];
+            } else {
+                pseudo_keycode = keymap[keycode][0];
+            }
+#endif
+            /* if undefined, use got keycode as it is */
+            if (pseudo_keycode == 0x00) {
+                if (shift_modded) {
+                    pseudo_keycode = S(keycode);
+                } else {
+                    pseudo_keycode = keycode;
+                }
+            }
+            break;
+        default:
+            if (shift_modded) {
+                pseudo_keycode = S(keycode);
+            } else {
+                pseudo_keycode = keycode;
+            }
+            break;
+    }
+    return pseudo_keycode;
+}
+
+uint8_t get_shift_bit(uint16_t keycode) {
+    if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+        return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
+    } else {
+        dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
+        return 0;
+    }
+}
+
+void add_shift_bit(uint16_t keycode) {
+    if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+        send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
+    } else {
+        dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
+    }
+}
+
+void del_shift_bit(uint16_t keycode) {
+    if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+        send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
+    } else {
+        dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
+    }
+}
diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h
new file mode 100644 (file)
index 0000000..6812524
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef ACTION_PSEUDO_LUT_H
+#define ACTION_PSEUDO_LUT_H
+
+#define SHIFT_BIT_SIZE (0xE7 / 8 + 1) // 1bit per 1key
+
+#define IS_LSFT(kc) ((QK_LSFT & (kc)) == QK_LSFT)
+
+void action_pseudo_lut(keyrecord_t *, uint8_t, const uint16_t (*)[2]);
+uint16_t convert_keycode(const uint16_t (*)[2], uint16_t, bool);
+
+uint8_t get_shift_bit(uint16_t);
+void add_shift_bit(uint16_t);
+void del_shift_bit(uint16_t);
+
+#endif
diff --git a/keyboards/hhkb/keymaps/shela/config.h b/keyboards/hhkb/keymaps/shela/config.h
new file mode 100644 (file)
index 0000000..08cc1fb
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef CONFIG_SHELA_H
+#define CONFIG_SHELA_H
+
+#include "../../config.h"
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 230
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 2000
+
+#endif
diff --git a/keyboards/hhkb/keymaps/shela/keymap.c b/keyboards/hhkb/keymaps/shela/keymap.c
new file mode 100644 (file)
index 0000000..c286b99
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * HHKB Pro 2 US Layout for shela
+ */
+#include "hhkb.h"
+#include "keymap_jis2us.h"
+#include "action_pseudo_lut.h"
+
+enum keymap_layout {
+    BASE = 0,
+    PSEUDO_US,
+    DVORAK,
+    MOUSE,
+    TENKEY,
+    HHKB,
+    SPACE_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /* Layer 0: Default Layer
+     * ,-----------------------------------------------------------------------------------------.
+     * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  `  | BSp |
+     * |-----------------------------------------------------------------------------------------|
+     * |  Tab   |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |   \    |
+     * |-----------------------------------------------------------------------------------------|
+     * | Control  |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |   Enter    |
+     * |-----------------------------------------------------------------------------------------|
+     * |    Shift    |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |  Shift  | Fn0 |
+     * `-----------------------------------------------------------------------------------------'
+     *           |LAlt |  LGui  |               SpaceFN             |  RGui  |RAlt |
+     *           `-----------------------------------------------------------------'
+     */
+    [BASE] =
+        KEYMAP(KC_ESC, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS,KC_EQL, KC_GRV, KC_BSPC, \
+               KC_TAB, KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,KC_RBRC,KC_BSLS, \
+               KC_LCTL,KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,KC_ENT, \
+         OSM(MOD_LSFT),KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_FN0, \
+                               KC_LALT,KC_LGUI,                KC_FN2,                 KC_RGUI,KC_RALT),
+
+    /* Layer 1: Pseudo US Layout Layer */
+    [PSEUDO_US] =
+        KEYMAP(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC, \
+               KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, \
+               KC_LCTL,KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT, \
+         OSM(MOD_LSFT),KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT,KC_FN0, \
+                               KC_LGUI,KC_FN3,                 KC_FN2,                 KC_FN4 ,KC_RGUI),
+
+    /* Layer 2: Dvorak Layer
+     * ,-----------------------------------------------------------------------------------------.
+     * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  [  |  ]  |  `  | BSp |
+     * |-----------------------------------------------------------------------------------------|
+     * |  Tab   |  '  |  ,  |  .  |  P  |  Y  |  F  |  G  |  C  |  R  |  L  |  /  |  =  |   \    |
+     * |-----------------------------------------------------------------------------------------|
+     * | Control  |  A  |  O  |  E  |  U  |  I  |  D  |  H  |  T  |  N  |  S  |  -  |   Enter    |
+     * |-----------------------------------------------------------------------------------------|
+     * |    Shift    |  ;  |  Q  |  J  |  K  |  X  |  B  |  M  |  W  |  V  |  Z  |  Shift  | Fn0 |
+     * `-----------------------------------------------------------------------------------------'
+     *           |LAlt |  LGui  |              SpaceFN              |  RGui  |RAlt |
+     *           `-----------------------------------------------------------------'
+     */
+    [DVORAK] =
+        KEYMAP(KC_ESC, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_LBRC,KC_RBRC,KC_GRV, KC_BSPC, \
+               KC_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P,   KC_Y,   KC_F,   KC_G,   KC_C,   KC_R,   KC_L,   KC_SLSH,KC_EQL, KC_BSLS, \
+               KC_LCTL,KC_A,   KC_O,   KC_E,   KC_U,   KC_I,   KC_D,   KC_H,   KC_T,   KC_N,   KC_S,   KC_MINS,KC_ENT, \
+               KC_LSFT,KC_SCLN,KC_Q,   KC_J,   KC_K,   KC_X,   KC_B,   KC_M,   KC_W,   KC_V,   KC_Z,   KC_RSFT,KC_FN0, \
+                               KC_LALT,KC_LGUI,                KC_FN2,                 KC_RGUI,KC_RALT),
+
+    /* Layer 3: Mouse layer
+     * ,-----------------------------------------------------------------------------------------.
+     * | Esc | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 |     |     |
+     * |-----------------------------------------------------------------------------------------|
+     * |        |     |     |     |     |     | MwL | MwD | MwU | MwR |     |     |     |        |
+     * |-----------------------------------------------------------------------------------------|
+     * |          |     |     |     |     |     | McL | McD | McU | McR |     |     |            |
+     * |-----------------------------------------------------------------------------------------|
+     * |             |     |     |     |     |     | Mb1 | Mb2 | Mb3 |     |     |         | Fn0 |
+     * `-----------------------------------------------------------------------------------------'
+     *           |     |        |                Mb1                |        |     |
+     *           `-----------------------------------------------------------------'
+     */
+    [MOUSE] =
+        KEYMAP(KC_ESC, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_NO,  KC_TRNS, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,KC_NO,  KC_NO,  KC_NO,  KC_NO, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_NO,  KC_NO,  KC_TRNS, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_BTN1,KC_BTN2,KC_BTN3,KC_NO,  KC_NO,  KC_TRNS,KC_FN0, \
+                               KC_TRNS,KC_TRNS,                KC_BTN1,                KC_TRNS,KC_TRNS),
+
+    /* Layer 4: Tenkey layer
+     * ,-----------------------------------------------------------------------------------------.
+     * | Esc |     |     |     |     |     |     |     |     |     |  /  |  *  |  -  |     | BSp |
+     * |-----------------------------------------------------------------------------------------|
+     * |        |     |     |     |     |     |     |     |     |  7  |  8  |  9  |  +  |        |
+     * |-----------------------------------------------------------------------------------------|
+     * |          |     |     |     |     |     |     |     |     |  4  |  5  |  6  |   Enter    |
+     * |-----------------------------------------------------------------------------------------|
+     * |             |     |     |     |     |     |     |     |  1  |  2  |  3  |    +    | Fn0 |
+     * `-----------------------------------------------------------------------------------------'
+     *           |     |        |              SpaceFN              |   0    |  .  |
+     *           `-----------------------------------------------------------------'
+     */
+    [TENKEY] =
+        KEYMAP(KC_ESC, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_PSLS,KC_PAST,KC_PMNS,KC_NO,  KC_BSPC, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_KP_7,KC_KP_8,KC_KP_9,KC_PPLS,KC_NO, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_KP_4,KC_KP_5,KC_KP_6,KC_PENT, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_KP_1,KC_KP_2,KC_KP_3,KC_PPLS,KC_FN0, \
+                               KC_TRNS,KC_TRNS,                KC_FN2,                 KC_KP_0,KC_PDOT),
+
+    /* Layer 5: HHKB mode (HHKB Fn)
+     * ,-----------------------------------------------------------------------------------------.
+     * | Pwr | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 | Ins | Del |
+     * |-----------------------------------------------------------------------------------------|
+     * |  Caps  | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 |     |     | Psc | Slk | Pus | Up  |     |  BSp   |
+     * |-----------------------------------------------------------------------------------------|
+     * |          | VoD | VoU | Mut |     |     |  *  |  /  | Hom | PgU | Lef | Rig |   Enter    |
+     * |-----------------------------------------------------------------------------------------|
+     * |             |     |     |     |     |     |  +  |  -  | End | PgD | Dow |         |     |
+     * `-----------------------------------------------------------------------------------------'
+     *           |     |        |                                   |        |     |
+     *           `-----------------------------------------------------------------'
+     */
+    [HHKB] =
+        KEYMAP(KC_PWR, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+               KC_CAPS,KC_FN5, KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_UP,  KC_TRNS,KC_BSPC, \
+               KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \
+                               KC_TRNS,KC_TRNS,                KC_TRNS,                KC_TRNS,KC_TRNS),
+
+    /* Layer 6: SpaceFN
+     * ,-----------------------------------------------------------------------------------------.
+     * |  `  | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 |     | Del |
+     * |-----------------------------------------------------------------------------------------|
+     * |        | End | Up  | Hom |     |     |     | Hom | Up  | End | Psc | Slk | Pau |  Ins   |
+     * |-----------------------------------------------------------------------------------------|
+     * |          | Lef | Dow | Rig | PgU |     | PgU | Lef | Dow | Rig |     |     |            |
+     * |-----------------------------------------------------------------------------------------|
+     * |             |     |     | PgD |     | Spc | PgD |  `  |  ~  |     |     |         |     |
+     * `-----------------------------------------------------------------------------------------'
+     *           |     |        |                                   |        |     |
+     *           `-----------------------------------------------------------------'
+     */
+    [SPACE_FN] =
+        KEYMAP(KC_GRV, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_NO,  KC_DEL, \
+               KC_TRNS,KC_END, KC_UP,  KC_HOME,KC_NO,  KC_NO,  KC_NO,  KC_HOME,KC_UP,  KC_END, KC_PSCR,KC_SLCK,KC_PAUS,KC_INS, \
+               KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_PGUP,KC_NO,  KC_PGUP,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO,  KC_NO,  KC_TRNS, \
+               KC_TRNS,KC_NO,  KC_NO,  KC_PGDN,KC_NO,  KC_SPC, KC_PGDN,KC_GRV, KC_TILD,KC_NO,  KC_NO,  KC_TRNS,KC_NO, \
+                               KC_TRNS,KC_TRNS,                KC_TRNS,                KC_TRNS,KC_TRNS),
+};
+
+/*
+ * user defined action function
+ */
+enum function_id {
+    PSEUDO_US_FUNCTION,
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+
+    switch (id) {
+        case PSEUDO_US_FUNCTION:
+            action_pseudo_lut(record, BASE, keymap_jis2us);
+            break;
+    }
+}
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_MOMENTARY(HHKB),
+    [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
+    [2] = ACTION_LAYER_TAP_KEY(SPACE_FN, KC_SPACE),
+    [3] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_MHEN),
+    [4] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_KANA),
+    [5] = ACTION_DEFAULT_LAYER_SET(BASE),
+    [6] = ACTION_DEFAULT_LAYER_SET(PSEUDO_US),
+    [7] = ACTION_DEFAULT_LAYER_SET(MOUSE),
+    [8] = ACTION_DEFAULT_LAYER_SET(TENKEY),
+    [9] = ACTION_DEFAULT_LAYER_SET(DVORAK),
+};
diff --git a/keyboards/hhkb/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h
new file mode 100644 (file)
index 0000000..cf2bd4f
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef KEYMAP_JIS2US_H
+#define KEYMAP_JIS2US_H
+
+/* keymap for convert from JIS to US */
+const uint16_t PROGMEM keymap_jis2us[][2] = {
+    [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
+
+    [KC_1]    = { KC_1,    KC_EXLM    }, /* 1 and ! -> 1 and ! */
+    [KC_2]    = { KC_2,    KC_LBRC    }, /* 2 and " -> 2 and @ */
+    [KC_3]    = { KC_3,    KC_HASH    }, /* 3 and # -> 3 and # */
+    [KC_4]    = { KC_4,    KC_DLR     }, /* 4 and $ -> 4 and $ */
+    [KC_5]    = { KC_5,    KC_PERC    }, /* 5 and % -> 5 and % */
+    [KC_6]    = { KC_6,    KC_EQL     }, /* 6 and & -> 6 and ^ */
+    [KC_7]    = { KC_7,    KC_CIRC    }, /* 7 and ' -> 7 and & */
+    [KC_8]    = { KC_8,    KC_DQT     }, /* 8 and ( -> 8 and * */
+    [KC_9]    = { KC_9,    KC_ASTR    }, /* 9 and ) -> 9 and ( */
+    [KC_0]    = { KC_0,    KC_LPRN    }, /* 0 and (no assign) -> 0 and ) */
+    [KC_MINS] = { KC_MINS, S(KC_RO)   }, /* - and = -> - and _ */
+    [KC_EQL]  = { KC_UNDS, KC_COLN    }, /* ^ and ~ -> = and + */
+    [KC_LBRC] = { KC_RBRC, KC_RCBR    }, /* @ and ` -> [ and { */
+    [KC_RBRC] = { KC_BSLS, KC_PIPE    }, /* [ and { -> ] and } */
+    [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
+    [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
+    [KC_SCLN] = { KC_SCLN, KC_QUOT    }, /* ; and + -> ; and : */
+    [KC_QUOT] = { KC_AMPR, KC_AT      }, /* : and * -> ' and " */
+    [KC_GRV]  = { KC_LCBR, KC_PLUS    }, /* (no assign) -> ` and ~ */
+    [KC_COMM] = { KC_COMM, KC_LT      }, /* , and < -> , and < */
+    [KC_DOT]  = { KC_DOT,  KC_GT      }, /* . and > -> . and > */
+    [KC_SLSH] = { KC_SLSH, KC_QUES    }, /* / and ? -> / and ? */
+};
+
+#endif
diff --git a/keyboards/hhkb/keymaps/shela/readme.md b/keyboards/hhkb/keymaps/shela/readme.md
new file mode 100644 (file)
index 0000000..5a06a83
--- /dev/null
@@ -0,0 +1,14 @@
+# Shela's HHKB Layout
+
+Layer 0: US Layout  
+Layer 1: Pseudo US Layout  
+Layer 2: Dvorak Layout  
+Layer 3: Mouse  
+Layer 4: Tenkey  
+Layer 5: HHKB Fn Key  
+Layer 6: SpaceFN  
+
+## Pseudo US Layout
+
+On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings.  
+But, you can use HHKB like a US layout keyboard as it is.
index 39d49b32a1766312c361e1cbdbf7cf77300ff93e..367c0a08f7e51b866594ad3d7608f31f46bfe34a 100644 (file)
@@ -168,13 +168,15 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
+
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk
new file mode 100644 (file)
index 0000000..a46271f
--- /dev/null
@@ -0,0 +1,80 @@
+
+
+# project specific files
+SRC = matrix.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+#OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# as per original hasu settings
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes  # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes   # Console for debug(+400)
+COMMAND_ENABLE ?= yes   # Commands for debug and configuration
+CUSTOM_MATRIX ?= yes    # Custom matrix file for the HHKB
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes       # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= yes       # MIDI controls
+# UNICODE_ENABLE ?= yes    # Unicode
+# BLUETOOTH_ENABLE ?= yes  # Enable Bluetooth with the Adafruit EZ-Key HID
+
+debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
+debug-on: all
+
+debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
+debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
+debug-off: all
diff --git a/keyboards/infinity60/MEMO.txt b/keyboards/infinity60/MEMO.txt
new file mode 100644 (file)
index 0000000..e2886aa
--- /dev/null
@@ -0,0 +1,385 @@
+flabbergast's TMK/ChibiOS port
+==============================
+2015/10/16
+
+
+Build
+-----
+$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
+
+$ cd tmk_keyboard
+$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
+or
+$ cd tmk_keyboard/tmk_core/tool/chibios
+$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
+
+$ cd tmk_keyboard/keyboard/infinity_chibios
+$ make
+
+
+
+
+Chibios Configuration
+---------------------
+halconf.h: for HAL configuration
+    placed in project directory
+    read in chibios/os/hal/hal.mk
+    included in chibios/os/hal/include/hal.h
+mcuconf.h: for MCU configuration
+    placed in project directory
+    included in halconf.h
+
+
+Chibios Term
+------------
+PAL = Port Abstraction Layer
+    palWritePad
+    palReadPad
+    palSetPad
+    chibios/os/hal/include/pal.h
+
+LLD = Low Level Driver
+
+
+Makefile
+--------
+    #   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+    MCU_FAMILY = KINETIS
+    MCU_SERIES = KL2x
+
+    # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+    #   or <this_dir>/ld/
+    MCU_LDSCRIPT = MKL26Z64
+
+    #  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+    MCU_STARTUP = kl2x
+
+    # Board: it should exist either in <chibios>/os/hal/boards/
+    #  or <this_dir>/boards
+    BOARD = PJRC_TEENSY_LC
+
+    MCU  = cortex-m0
+
+    # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+    ARMV = 6
+
+
+halconf.h
+---------
+
+
+mcuconf.h
+---------
+
+
+chconf.h
+--------
+
+
+ld script
+---------
+--- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld     2015-10-15 09:08:58.732904304 +0900
++++ ld/MKL26Z64.ld      2015-10-15 08:48:06.430215496 +0900
+@@ -27,7 +27,8 @@
+ {
+   flash0   :  org = 0x00000000,  len = 0xc0
+   flashcfg :  org = 0x00000400,  len = 0x10
+-  flash    :  org = 0x00000410,  len = 64k - 0x410
++  flash    :  org = 0x00000410,  len = 62k - 0x410
++  eeprom_emu : org = 0x0000F800, len = 2k
+   ram      :  org = 0x1FFFF800,  len = 8k
+ }
+
+@@ -35,6 +36,10 @@
+ __ram_size__            = LENGTH(ram);
+ __ram_end__             = __ram_start__ + __ram_size__;
+
++__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
++__eeprom_workarea_size__  = LENGTH(eeprom_emu);
++__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;
++
+ SECTIONS
+ {
+   . = 0;
+
+
+
+Configuration/Startup for Infinity 60%
+--------------------------------------
+Configuration:
+
+
+Clock:
+Inifinity   
+    FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
+    Clock dividor:
+    SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
+    SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
+    SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
+    Internal reference clock:
+    MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
+    MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
+    FLL multipilication:
+    MCG_C4[DMX32] = 1
+    MCG_C4[DRST_DRS] = 01   FLL factor 1464 * 32.768kHz = 48MHz
+
+chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
+    k20x_clock_init(): called in __early_init() defined in board.c
+        disable watchdog and configure clock
+
+        configurable macros:
+        KINETIS_NO_INIT: whether init or not
+        KINETIS_MCG_MODE: clock mode   
+            KINETIS_MCG_MODE_FEI
+            KINETIS_MCG_MODE_PEE
+                hal/ports/KINETIS/K20x/hal_lld.h
+            
+
+chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
+    PALConfig pal_default_config
+    boardInit()
+    __early_init()
+    macro definitions for board infos, freq and mcu type
+
+chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
+
+USB
+
+
+Startup
+-------
+    common/ports/ARMCMx/GCC/crt0_v[67]m.s
+        Reset_Handler: startup code
+    common/ports/ARMCMx/GCC/crt1.c
+        __core_init(): weak
+        __early_init(): weak
+        __late_init(): weak
+        __default_exit(): weak
+            called from Reset_Handler of crt0
+    common/ports/ARMCMx/GCC/vector.c
+    common/ports/ARMCMx/GCC/ld/*.ld
+
+chibios/os/common/ports/ARMCMx/compilers/GCC/
+├── crt0_v6m.s
+├── crt0_v7m.s
+├── crt1.c
+├── ld
+│   ├── MK20DX128BLDR3.ld
+│   ├── MK20DX128BLDR4.ld
+│   ├── MK20DX128.ld
+│   ├── MK20DX256.ld
+│   ├── MKL25Z128.ld
+│   ├── MKL26Z128.ld
+│   ├── MKL26Z64.ld
+│   └── STM32L476xG.ld
+├── mk
+│   ├── startup_k20x5.mk
+│   ├── startup_k20x7.mk
+│   ├── startup_k20x.mk
+│   ├── startup_kl2x.mk
+│   └── startup_stm32l4xx.mk
+├── rules.ld
+├── rules.mk
+└── vectors.c
+
+chibios/os/hal/
+├── boards
+│   ├── FREESCALE_FREEDOM_K20D50M
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── MCHCK_K20
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── PJRC_TEENSY_3
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── PJRC_TEENSY_3_1
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── PJRC_TEENSY_LC
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── readme.txt
+│   ├── simulator
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   └── board.mk
+│   ├── ST_NUCLEO_F030R8
+│   │   ├── board.c
+│   │   ├── board.h
+│   │   ├── board.mk
+│   │   └── cfg
+│   │       └── board.chcfg
+├── hal.mk
+├── include
+│   ├── adc.h
+│   ├── can.h
+│   ├── dac.h
+│   ├── ext.h
+│   ├── gpt.h
+│   ├── hal_channels.h
+│   ├── hal_files.h
+│   ├── hal.h
+│   ├── hal_ioblock.h
+│   ├── hal_mmcsd.h
+│   ├── hal_queues.h
+│   ├── hal_streams.h
+│   ├── i2c.h
+│   ├── i2s.h
+│   ├── icu.h
+│   ├── mac.h
+│   ├── mii.h
+│   ├── mmc_spi.h
+│   ├── pal.h
+│   ├── pwm.h
+│   ├── rtc.h
+│   ├── sdc.h
+│   ├── serial.h
+│   ├── serial_usb.h
+│   ├── spi.h
+│   ├── st.h
+│   ├── uart.h
+│   └── usb.h
+├── lib
+│   └── streams
+│       ├── chprintf.c
+│       ├── chprintf.h
+│       ├── memstreams.c
+│       ├── memstreams.h
+│       ├── nullstreams.c
+│       └── nullstreams.h
+├── osal
+│   ├── nil
+│   │   ├── osal.c
+│   │   ├── osal.h
+│   │   └── osal.mk
+│   ├── os-less
+│   │   └── ARMCMx
+│   │       ├── osal.c
+│   │       ├── osal.h
+│   │       └── osal.mk
+│   └── rt
+│       ├── osal.c
+│       ├── osal.h
+│       └── osal.mk
+├── ports
+│   ├── AVR
+│   ├── common
+│   │   └── ARMCMx
+│   │       ├── mpu.h
+│   │       ├── nvic.c
+│   │       └── nvic.h
+│   ├── KINETIS
+│   │   ├── K20x
+│   │   │   ├── hal_lld.c
+│   │   │   ├── hal_lld.h
+│   │   │   ├── kinetis_registry.h
+│   │   │   ├── platform.dox
+│   │   │   ├── platform.mk
+│   │   │   ├── pwm_lld.c
+│   │   │   ├── pwm_lld.h
+│   │   │   ├── spi_lld.c
+│   │   │   └── spi_lld.h
+│   │   ├── KL2x
+│   │   │   ├── hal_lld.c
+│   │   │   ├── hal_lld.h
+│   │   │   ├── kinetis_registry.h
+│   │   │   ├── platform.mk
+│   │   │   ├── pwm_lld.c
+│   │   │   └── pwm_lld.h
+│   │   ├── LLD
+│   │   │   ├── adc_lld.c
+│   │   │   ├── adc_lld.h
+│   │   │   ├── ext_lld.c
+│   │   │   ├── ext_lld.h
+│   │   │   ├── gpt_lld.c
+│   │   │   ├── gpt_lld.h
+│   │   │   ├── i2c_lld.c
+│   │   │   ├── i2c_lld.h
+│   │   │   ├── pal_lld.c
+│   │   │   ├── pal_lld.h
+│   │   │   ├── serial_lld.c
+│   │   │   ├── serial_lld.h
+│   │   │   ├── st_lld.c
+│   │   │   ├── st_lld.h
+│   │   │   ├── usb_lld.c
+│   │   │   └── usb_lld.h
+│   │   └── README.md
+│   ├── LPC
+│   ├── simulator
+│   └── STM32
+├── src
+│   ├── adc.c
+│   ├── can.c
+│   ├── dac.c
+│   ├── ext.c
+│   ├── gpt.c
+│   ├── hal.c
+│   ├── hal_mmcsd.c
+│   ├── hal_queues.c
+│   ├── i2c.c
+│   ├── i2s.c
+│   ├── icu.c
+│   ├── mac.c
+│   ├── mmc_spi.c
+│   ├── pal.c
+│   ├── pwm.c
+│   ├── rtc.c
+│   ├── sdc.c
+│   ├── serial.c
+│   ├── serial_usb.c
+│   ├── spi.c
+│   ├── st.c
+│   ├── uart.c
+│   └── usb.c
+└── templates
+    ├── adc_lld.c
+    ├── adc_lld.h
+    ├── can_lld.c
+    ├── can_lld.h
+    ├── dac_lld.c
+    ├── dac_lld.h
+    ├── ext_lld.c
+    ├── ext_lld.h
+    ├── gpt_lld.c
+    ├── gpt_lld.h
+    ├── halconf.h
+    ├── hal_lld.c
+    ├── hal_lld.h
+    ├── i2c_lld.c
+    ├── i2c_lld.h
+    ├── i2s_lld.c
+    ├── i2s_lld.h
+    ├── icu_lld.c
+    ├── icu_lld.h
+    ├── mac_lld.c
+    ├── mac_lld.h
+    ├── mcuconf.h
+    ├── osal
+    │   ├── osal.c
+    │   ├── osal.h
+    │   └── osal.mk
+    ├── pal_lld.c
+    ├── pal_lld.h
+    ├── platform.mk
+    ├── pwm_lld.c
+    ├── pwm_lld.h
+    ├── rtc_lld.c
+    ├── rtc_lld.h
+    ├── sdc_lld.c
+    ├── sdc_lld.h
+    ├── serial_lld.c
+    ├── serial_lld.h
+    ├── spi_lld.c
+    ├── spi_lld.h
+    ├── st_lld.c
+    ├── st_lld.h
+    ├── uart_lld.c
+    ├── uart_lld.h
+    ├── usb_lld.c
+    └── usb_lld.h
diff --git a/keyboards/infinity60/Makefile b/keyboards/infinity60/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/infinity60/bootloader_defs.h b/keyboards/infinity60/bootloader_defs.h
new file mode 100644 (file)
index 0000000..c67153b
--- /dev/null
@@ -0,0 +1 @@
+#define KIIBOHD_BOOTLOADER
diff --git a/keyboards/infinity60/chconf.h b/keyboards/infinity60/chconf.h
new file mode 100644 (file)
index 0000000..d9114ec
--- /dev/null
@@ -0,0 +1,524 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/**
+ * @file    templates/chconf.h
+ * @brief   Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ *          contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   System time counter resolution.
+ * @note    Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION                32
+
+/**
+ * @brief   System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ *          setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY                 100000
+
+/**
+ * @brief   Time delta constant for the tick-less mode.
+ * @note    If this value is zero then the system uses the classic
+ *          periodic tick. This value represents the minimum number
+ *          of ticks that is safe to specify in a timeout directive.
+ *          The value one is not valid, timeouts are rounded up to
+ *          this value.
+ */
+#define CH_CFG_ST_TIMEDELTA                 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ *          threads before preemption occurs. Setting this value to zero
+ *          disables the preemption for threads with equal priority and the
+ *          round robin becomes cooperative. Note that higher priority
+ *          threads can still preempt, the kernel is always preemptive.
+ * @note    Disabling the round robin preemption makes the kernel more compact
+ *          and generally faster.
+ * @note    The round robin preemption is not supported in tickless mode and
+ *          must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM                 20
+
+/**
+ * @brief   Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ *          then the whole available RAM is used. The core memory is made
+ *          available to the heap allocator and/or can be used directly through
+ *          the simplified core memory allocator.
+ *
+ * @note    In order to let the OS manage the whole RAM the linker script must
+ *          provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note    Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE                 0
+
+/**
+ * @brief   Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ *          does not spawn the idle thread. The application @p main()
+ *          function becomes the idle thread and must implement an
+ *          infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD               FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE              TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ *          is used when two possible implementations exist.
+ *
+ * @note    This is not related to the compiler optimization options.
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED               TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ *          the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM                       FALSE
+
+/**
+ * @brief   Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY                 TRUE
+
+/**
+ * @brief   Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ *          the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT                 TRUE
+
+/**
+ * @brief   Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES               TRUE
+
+/**
+ * @brief   Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ *          priority rather than in FIFO order.
+ *
+ * @note    The default is @p FALSE. Enable this if you have special
+ *          requirements.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
+
+/**
+ * @brief   Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES                  TRUE
+
+/**
+ * @brief   Enables recursive behavior on mutexes.
+ * @note    Recursive mutexes are heavier and have an increased
+ *          memory footprint.
+ *
+ * @note    The default is @p FALSE.
+ * @note    Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
+
+/**
+ * @brief   Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS                 TRUE
+
+/**
+ * @brief   Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ *          specification are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
+
+/**
+ * @brief   Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS                   TRUE
+
+/**
+ * @brief   Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ *          are included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
+
+/**
+ * @brief   Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES                 TRUE
+
+/**
+ * @brief   Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ *          FIFO order.
+ *
+ * @note    The default is @p FALSE. Enable this if you have special
+ *          requirements.
+ * @note    Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE
+
+/**
+ * @brief   Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ *          included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES                TRUE
+
+/**
+ * @brief   Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE                  TRUE
+
+/**
+ * @brief   Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ *          @p CH_CFG_USE_SEMAPHORES.
+ * @note    Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP                     TRUE
+
+/**
+ * @brief   Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS                 TRUE
+
+/**
+ * @brief   Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_WAITEXIT.
+ * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC                  TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Debug option, kernel statistics.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS                   FALSE
+
+/**
+ * @brief   Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ *          at runtime.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
+
+/**
+ * @brief   Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ *          parameters are activated.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS                FALSE
+
+/**
+ * @brief   Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ *          activated. This includes consistency checks inside the kernel,
+ *          runtime anomalies and port-defined checks.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS               FALSE
+
+/**
+ * @brief   Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief   Trace buffer entries.
+ * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ *          different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE            128
+
+/**
+ * @brief   Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note    The default is @p FALSE.
+ * @note    The stack check is performed in a architecture/port dependent way.
+ *          It may not be implemented or some ports.
+ * @note    The default failure mode is to halt the system with the global
+ *          @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK           FALSE
+
+/**
+ * @brief   Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ *          value when a thread is created. This can be useful for the
+ *          runtime measurement of the used stack.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS                 FALSE
+
+/**
+ * @brief   Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ *          counts the system ticks occurred while executing the thread.
+ *
+ * @note    The default is @p FALSE.
+ * @note    This debug option is not currently compatible with the
+ *          tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING            FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
+  /* Add threads custom fields here.*/
+
+/**
+ * @brief   Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note    It is invoked from within @p chThdInit() and implicitly from all
+ *          the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
+  /* Add threads initialization code here.*/                                \
+}
+
+/**
+ * @brief   Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
+  /* Add threads finalization code here.*/                                  \
+}
+
+/**
+ * @brief   Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
+  /* Context switch code here.*/                                            \
+}
+
+/**
+ * @brief   ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
+  /* IRQ prologue code here.*/                                              \
+}
+
+/**
+ * @brief   ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
+  /* IRQ epilogue code here.*/                                              \
+}
+
+/**
+ * @brief   Idle thread enter hook.
+ * @note    This hook is invoked within a critical zone, no OS functions
+ *          should be invoked from here.
+ * @note    This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
+  /* Idle-enter code here.*/                                                \
+}
+
+/**
+ * @brief   Idle thread leave hook.
+ * @note    This hook is invoked within a critical zone, no OS functions
+ *          should be invoked from here.
+ * @note    This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
+  /* Idle-leave code here.*/                                                \
+}
+
+/**
+ * @brief   Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
+  /* Idle loop code here.*/                                                 \
+}
+
+/**
+ * @brief   System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ *          after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
+  /* System tick event code here.*/                                         \
+}
+
+/**
+ * @brief   System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ *          the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
+  /* System halt code here.*/                                               \
+}
+
+/**
+ * @brief   Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ *          trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) {                                            \
+  /* Trace code here.*/                                                     \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h).    */
+/*===========================================================================*/
+
+#endif  /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/infinity60/config.h b/keyboards/infinity60/config.h
new file mode 100644 (file)
index 0000000..f8346fe
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define PREVENT_STUCK_MODIFIERS
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6464
+#define DEVICE_VER      0x0001
+/* in python2: list(u"whatever".encode('utf-16-le')) */
+/*   at most 32 characters or the ugly hack in usb_main.c borks */
+#define MANUFACTURER "Input Club"
+#define USBSTR_MANUFACTURER    'I', '\x00', 'n', '\x00', 'p', '\x00', 'u', '\x00', 't', '\x00', ' ', '\x00', 'C', '\x00', 'l', '\x00', 'u', '\x00', 'b', '\x00'
+#define PRODUCT "Infinity keyboard/QMK"
+#define USBSTR_PRODUCT         'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00'
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 7
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE    5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Keymap for Infinity prototype */
+//#define INFINITY_PROTOTYPE
+
+/* Keymap for Infinity 1.1a (first revision with LED support) */
+//#define INFINITY_LED
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/infinity60/halconf.h b/keyboards/infinity60/halconf.h
new file mode 100644 (file)
index 0000000..46b37a4
--- /dev/null
@@ -0,0 +1,353 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+/**
+ * @file    templates/halconf.h
+ * @brief   HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ *          various device drivers from your application. You may also use
+ *          this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief   Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL                 TRUE
+#endif
+
+/**
+ * @brief   Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN                 FALSE
+#endif
+
+/**
+ * @brief   Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT                 FALSE
+#endif
+
+/**
+ * @brief   Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C                 FALSE
+#endif
+
+/**
+ * @brief   Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S                 FALSE
+#endif
+
+/**
+ * @brief   Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI             FALSE
+#endif
+
+/**
+ * @brief   Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM                 FALSE
+#endif
+
+/**
+ * @brief   Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL              FALSE
+#endif
+
+/**
+ * @brief   Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB          TRUE
+#endif
+
+/**
+ * @brief   Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI                 FALSE
+#endif
+
+/**
+ * @brief   Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART                FALSE
+#endif
+
+/**
+ * @brief   Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB                 TRUE
+#endif
+
+/**
+ * @brief   Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG                 FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT                TRUE
+#endif
+
+/**
+ * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION    TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE          TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION    TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY           FALSE
+#endif
+
+/**
+ * @brief   Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS              TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings.                                          */
+/*===========================================================================*/
+
+/**
+ * @brief   Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ *          routines releasing some extra CPU time for the threads with
+ *          lower priority, this may slow down the driver a bit however.
+ *          This option is recommended also if the SPI driver does not
+ *          use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING            TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Number of initialization attempts before rejecting the card.
+ * @note    Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY              100
+#endif
+
+/**
+ * @brief   Include support for MMC cards.
+ * @note    MMC support is not yet implemented so this option must be kept
+ *          at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT             FALSE
+#endif
+
+/**
+ * @brief   Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ *          routines releasing some extra CPU time for the threads with
+ *          lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING            TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings.                                           */
+/*===========================================================================*/
+
+/**
+ * @brief   Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ *          default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE      38400
+#endif
+
+/**
+ * @brief   Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ *          buffers depending on the requirements of your application.
+ * @note    The default is 64 bytes for both the transmission and receive
+ *          buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE         16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting.                                        */
+/*===========================================================================*/
+
+/**
+ * @brief   Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ *          the USB data endpoint maximum packet size.
+ * @note    The default is 64 bytes for both the transmission and receive
+ *          buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE     256
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT                TRUE
+#endif
+
+/**
+ * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION    TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT                TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/infinity60/infinity60.c b/keyboards/infinity60/infinity60.c
new file mode 100644 (file)
index 0000000..e471250
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "infinity60.h"
diff --git a/keyboards/infinity60/infinity60.h b/keyboards/infinity60/infinity60.h
new file mode 100644 (file)
index 0000000..f1ba15e
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+Copyright 2014 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef KEYMAP_COMMON_H
+#define KEYMAP_COMMON_H
+
+#include "quantum.h"
+
+#ifdef INFINITY_PROTOTYPE
+
+/* Infinity prototype */
+#define KEYMAP( \
+    K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \
+    K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \
+    K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \
+    K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \
+    K06, K16, K26,           K36,                K46, K56, K66, K76 \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06 }, \
+    { K10, K11, K12, K13, K14, K15, K16 }, \
+    { K20, K21, K22, K23, K24, K25, K26 }, \
+    { K30, K31, K32, K33, K34, K35, K36 }, \
+    { K40, K41, K42, K43, K44, K45, K46 }, \
+    { K50, K51, K52, K53, K54, K55, K56 }, \
+    { K60, K61, K62, K63, K64, K65, K66 }, \
+    { K70, K71, K72, K73, K74, K75, K76 }, \
+    { K80, K81, K82, K83, K84, K85, K86 }  \
+}
+
+#else
+
+/* Infinity production */
+#define KEYMAP( \
+    K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, \
+    K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, \
+    K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, \
+    K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \
+    K16, K26, K36,           K46,                K56, K66, K76, K86 \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06 }, \
+    { K10, K11, K12, K13, K14, K15, K16 }, \
+    { K20, K21, K22, K23, K24, K25, K26 }, \
+    { K30, K31, K32, K33, K34, K35, K36 }, \
+    { K40, K41, K42, K43, K44, K45, K46 }, \
+    { K50, K51, K52, K53, K54, K55, K56 }, \
+    { K60, K61, K62, K63, K64, K65, K66 }, \
+    { K70, K71, K72, K73, K74, K75, K76 }, \
+    { K80, K81, K82, K83, K84, K85, K86 }  \
+}
+
+#endif
+
+#endif
diff --git a/keyboards/infinity60/keymaps/default/keymap.c b/keyboards/infinity60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..4434128
--- /dev/null
@@ -0,0 +1,48 @@
+#include "infinity60.h"
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Layer 0: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  `|BSp|
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
+     * |-----------------------------------------------------------|
+     * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
+     * |-----------------------------------------------------------|
+     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn0|
+     * |-----------------------------------------------------------'
+     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
+     * `-----------------------------------------------------------'
+     */
+    [0] = KEYMAP(
+      KC_ESC, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \
+      KC_TAB, KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,KC_RBRC,KC_BSPC, \
+      KC_LCTL,KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,KC_ENT,  \
+      KC_LSFT,KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,MO(1), \
+      KC_NO,  KC_LGUI,KC_LALT,          KC_SPC,                KC_RALT,KC_RGUI,KC_NO, KC_NO),
+
+    /* Layer 1: HHKB mode (HHKB Fn)
+     * ,-----------------------------------------------------------.
+     * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+     * |-----------------------------------------------------------|
+     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |Backs|
+     * |-----------------------------------------------------------|
+     * |      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |
+     * |-----------------------------------------------------------|
+     * |        |   |   |   |   |   |  +|  -|End|PgD|Dow|      |   |
+     * `-----------------------------------------------------------'
+     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
+     * `-----------------------------------------------------------'
+     */ 
+    [1] = KEYMAP(
+      KC_PWR, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,   \
+      KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,      \
+      KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT,            \
+      KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS,            \
+      KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
+};
+
+const uint16_t fn_actions[] = {
+    
+};
+
diff --git a/keyboards/infinity60/keymaps/depariel/keymap.c b/keyboards/infinity60/keymaps/depariel/keymap.c
new file mode 100755 (executable)
index 0000000..7412b9b
--- /dev/null
@@ -0,0 +1,82 @@
+#include "infinity60.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Layer 0: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  \|  `|
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]| Bksp|
+     * |-----------------------------------------------------------|
+     * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
+     * |-----------------------------------------------------------|
+     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn2|
+     * |-----------------------------------------------------------'
+     * |Fn2 |Gui |Alt |         Space           |RAlt|Prv|PlPs|Next|
+     * `-----------------------------------------------------------'
+     */
+    [0] = KEYMAP(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,            KC_BSLS,  KC_GRV, \
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC,           KC_BSPC, \
+        KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, LT(5, KC_ENT),  \
+        KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, MO(4), \
+        MO(4),   KC_LGUI, KC_LALT,               LT(3, KC_SPC),                 KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT),
+
+    /* Layer 1: "Toggle" off SpaceFn for League of Legends
+     */
+    [1] = KEYMAP(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS,  KC_GRV, \
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC, \
+        KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  \
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, MO(4), \
+        MO(4),   KC_LGUI, KC_LALT,                   KC_SPC,                    KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT),
+           
+    /* Layer 2: "Toggle" off SpaceFn for MapleRoyals
+     */
+    [2] = KEYMAP(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS,  KC_GRV, \
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC, \
+        KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,  \
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_UP,   KC_LSFT, \
+        MO(4),   KC_LGUI, KC_LALT,                   KC_SPC,                    KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
+
+    /* Layer 3: FN layer 1
+     */ 
+    [3] = KEYMAP(
+        KC_NO,           KC_F1,   KC_F2,   KC_F3,   KC_F4,          KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NO,   KC_NO,   \
+        KC_NO,           KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4),    KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP,   KC_NO,   KC_LPRN, KC_RPRN, KC_DEL,      \
+        MO(6),           KC_MS_L, KC_MS_D, KC_MS_R, KC_NO,          KC_END,  KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,   KC_NO,           \
+        LGUI(KC_SPC),    KC_NO,   KC_NO,   KC_NO,   KC_NO,          KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_CALC, KC_MENU, KC_TRNS, TG(4),           \
+        KC_TRNS,         KC_TRNS, KC_TRNS,                       LT(3, KC_SPC),                KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU),
+    
+    /* Layer 4: FN layer 2
+     */ 
+    [4] = KEYMAP(
+        KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_PMNS, KC_PPLS, KC_PSLS, TG(2),   \
+        KC_CAPS, KC_NO,   KC_UP,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_PSCR, KC_NO,   KC_P7,   KC_P8,   KC_P9,   KC_PAST, KC_BSPC,      \
+        KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_P4,   KC_P5,   KC_P6,   KC_PENT,           \
+        KC_LSFT, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_P1,   KC_P2,   KC_P3,   KC_RSFT, MO(4),           \
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                   KC_P0,   KC_PDOT, KC_NO,   TG(1)),
+    
+    /* Layer 5: FN layer 3
+     */ 
+    [5] = KEYMAP(
+        KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,            KC_NO,   KC_NO,   \
+        KC_TAB , KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_NO,            KC_TRNS,      \
+        KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_F17,  KC_F18,  KC_F19,  KC_F20,  LT(5, KC_ENT),           \
+        KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_F21,  KC_F22,  KC_F23,  KC_F24,  KC_TRNS, KC_TRNS,           \
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                   KC_RALT, KC_NO,   KC_NO,  KC_NO),
+    
+    /* Layer 6: FN layer 4
+     */ 
+    [6] = KEYMAP(
+        KC_NO,                 KC_NO,            KC_NO,          KC_NO,            KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   \
+        LCTL(LSFT(KC_TAB)),    KC_NO,            LGUI(KC_UP),    KC_NO,            KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,      \
+        MO(6),                 LGUI(KC_LEFT),    LGUI(KC_DOWN),  LGUI(KC_RGHT),    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,       \
+        KC_TRNS,               KC_NO,            KC_NO,          KC_NO,            KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_TRNS, KC_TRNS,           \
+        KC_TRNS,               KC_TRNS,          KC_TRNS,                   KC_TRNS,                 KC_TRNS, KC_NO,   KC_NO,   KC_NO),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
diff --git a/keyboards/infinity60/keymaps/hasu/keymap.c b/keyboards/infinity60/keymaps/hasu/keymap.c
new file mode 100644 (file)
index 0000000..d372886
--- /dev/null
@@ -0,0 +1,113 @@
+#include "infinity60.h"
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Layer 0: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  `|BSp|
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
+     * |-----------------------------------------------------------|
+     * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
+     * |-----------------------------------------------------------|
+     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn0|
+     * |-----------------------------------------------------------'
+     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
+     * `-----------------------------------------------------------'
+     */
+    [0] = KEYMAP(
+        KC_ESC,    KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,           KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \
+        KC_TAB,    KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,           KC_LBRC,KC_RBRC,KC_BSPC, \
+        KC_LCTL,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \
+        OSM(MOD_LSFT), KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \
+        KC_NO,     KC_LGUI,KC_LALT,         LT(4, KC_SPC),                 MO(4),  KC_RGUI,KC_NO,          KC_NO),
+
+    /* Layer 1: HHKB mode (HHKB Fn)
+     * ,-----------------------------------------------------------.
+     * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+     * |-----------------------------------------------------------|
+     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |Backs|
+     * |-----------------------------------------------------------|
+     * |      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |
+     * |-----------------------------------------------------------|
+     * |        |   |   |   |   |   |  +|  -|End|PgD|Dow|      |   |
+     * `-----------------------------------------------------------'
+     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
+     * `-----------------------------------------------------------'
+     */ 
+    [1] = KEYMAP(
+        KC_PWR, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+        KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP,  KC_TRNS,KC_BSPC, \
+        KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT, \
+        KC_LSFT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_RSFT,KC_TRNS, \
+        KC_TRNS,KC_LGUI,KC_LALT,          KC_TRNS,                      KC_RALT,KC_RGUI,KC_TRNS,KC_TRNS),
+
+    /* Layer 2: Vi mode[Slash]
+     * ,-----------------------------------------------------------.
+     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+     * |-----------------------------------------------------------|
+     * |Tab  |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd|   |   |   |Backs|
+     * |-----------------------------------------------------------|
+     * |Contro|   |Lef|Dow|Rig|   |Lef|Dow|Up |Rig|   |   |Return  |
+     * |-----------------------------------------------------------|
+     * |Shift   |   |   |   |   |   |Hom|PgD|PgUlEnd|Fn0|Shift |   |
+     * `-----------------------------------------------------------'
+     *       |Gui|Alt  |          Space        |Alt  |Gui|
+     *       `-------------------------------------------'
+     */
+    [2] = KEYMAP(
+        KC_GRV, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10,         KC_F11, KC_F12, KC_INS, KC_DEL, \
+        KC_TAB, KC_HOME,KC_PGDN,KC_UP,  KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO,          KC_NO,  KC_NO,  KC_BSPC, \
+        KC_LCTL,KC_NO,  KC_LEFT,KC_DOWN,KC_RGHT,KC_NO,  KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,KC_NO,          KC_NO,  KC_ENT, \
+        KC_LSFT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_HOME,KC_PGDN,KC_PGUP,KC_END, LT(2, KC_SLSH), KC_RSFT,KC_TRNS, \
+        KC_TRNS,KC_LGUI,KC_LALT,          KC_SPC,                       KC_RALT,KC_RGUI,KC_TRNS,        KC_TRNS),
+
+    /* Layer 3: Mouse mode(IJKL)[Semicolon]
+     * ,-----------------------------------------------------------.
+     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+     * |-----------------------------------------------------------|
+     * |Tab  |   |   |   |   |   |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
+     * |-----------------------------------------------------------|
+     * |Contro|   |   |   |   |   |Mb2|McL|McD|McR|Fn |   |Return  |
+     * |-----------------------------------------------------------|
+     * |Shift   |   |   |   |   |Mb3|Mb2|Mb1|Mb4|Mb5|   |Shift |   |
+     * `-----------------------------------------------------------'
+     *      |Gui |Alt  |          Mb1          |Fn   |Fn |
+     *      `--------------------------------------------'
+     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
+     */
+    [3] = KEYMAP(
+        KC_GRV,       KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,          KC_F9,          KC_F10,         KC_F11,         KC_F12,        KC_INS, KC_DEL, \
+        LALT(KC_TAB), KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_WH_L,KC_WH_D,KC_MS_U,        KC_WH_U,        KC_WH_R,        ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB), \
+        KC_LCTL,      KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO,  KC_NO,  KC_MS_L,KC_MS_D,        KC_MS_R,        LT(3, KC_SCLN), KC_NO,          KC_ENT, \
+        KC_LSFT,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO,          KC_RSFT,        KC_TRNS, \
+        KC_TRNS,      KC_LGUI,KC_LALT,          KC_BTN1,                      KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS),
+
+    /* Layer 4: Mouse mode(IJKL)[Space]
+     * ,-----------------------------------------------------------.
+     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+     * |-----------------------------------------------------------|
+     * |Tab  |   |   |   |   |   |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
+     * |-----------------------------------------------------------|
+     * |Contro|   |   |   |   |   |Mb2|McL|McD|McR|Mb1|   |Return  |
+     * |-----------------------------------------------------------|
+     * |Shift   |   |   |   |   |Mb3|Mb2|Mb1|Mb4|Mb5|   |Shift |   |
+     * `-----------------------------------------------------------'
+     *      |Gui |Alt  |          Mb1          |Fn   |Fn |
+     *      `--------------------------------------------'
+     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
+     */
+    [4] = KEYMAP(
+        KC_GRV,       KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,         KC_F9,         KC_F10, KC_F11, KC_F12, KC_INS,       KC_DEL, \
+        LALT(KC_TAB), KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_WH_L,KC_WH_D,KC_MS_U,       KC_WH_U,       KC_WH_R,KC_BTN4,KC_BTN5,LALT(KC_TAB), \
+        KC_LCTL,      KC_VOLD,KC_VOLU,KC_MUTE,KC_NO,  KC_NO,  KC_NO,  KC_MS_L,KC_MS_D,       KC_MS_R,       KC_BTN1,KC_NO,  KC_ENT, \
+        KC_LSFT,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT),ALT_T(KC_RGHT),KC_NO,  KC_RSFT,KC_TRNS, \
+        KC_TRNS,      KC_LGUI,KC_LALT,          KC_TRNS,                      KC_TRNS,       KC_TRNS,       KC_TRNS,KC_TRNS),
+
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t fn_actions[] = {
+
+};
diff --git a/keyboards/infinity60/led.c b/keyboards/infinity60/led.c
new file mode 100644 (file)
index 0000000..aed66c7
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+
+#include "led.h"
+
+
+void led_set(uint8_t usb_led) {
+}
diff --git a/keyboards/infinity60/matrix.c b/keyboards/infinity60/matrix.c
new file mode 100644 (file)
index 0000000..d2f1852
--- /dev/null
@@ -0,0 +1,176 @@
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include "hal.h"
+#include "timer.h"
+#include "wait.h"
+#include "print.h"
+#include "matrix.h"
+
+
+/*
+ * Infinity Pinusage:
+ * Column pins are input with internal pull-down. Row pins are output and strobe with high.
+ * Key is high or 1 when it turns on.
+ *  INFINITY PRODUCTION (NO LED)
+ *     col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
+ *     row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 }
+ *  INFINITY PRODUCTION (WITH LED)
+ *     col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
+ *     row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 }
+ */
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+static bool debouncing = false;
+static uint16_t debouncing_time = 0;
+
+
+void matrix_init(void)
+{
+    /* Column(sense) */
+    palSetPadMode(GPIOD, 1,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 2,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 3,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 4,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 5,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 6,  PAL_MODE_INPUT_PULLDOWN);
+    palSetPadMode(GPIOD, 7,  PAL_MODE_INPUT_PULLDOWN);
+
+#ifdef INFINITY_LED
+    /* Row(strobe) */
+    palSetPadMode(GPIOC, 0,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 1,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 2,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 3,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 4,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 5,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 6,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 7,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL);
+#else
+    /* Row(strobe) */
+    palSetPadMode(GPIOB, 0,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 1,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 2,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 3,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOB, 17, PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 4,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOC, 5,  PAL_MODE_OUTPUT_PUSHPULL);
+    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL);
+#endif
+    memset(matrix, 0, MATRIX_ROWS);
+    memset(matrix_debouncing, 0, MATRIX_ROWS);
+}
+
+uint8_t matrix_scan(void)
+{
+    for (int row = 0; row < MATRIX_ROWS; row++) {
+        matrix_row_t data = 0;
+    #ifdef INFINITY_LED
+        // strobe row
+        switch (row) {
+            case 0: palSetPad(GPIOC, 0);    break;
+            case 1: palSetPad(GPIOC, 1);    break;
+            case 2: palSetPad(GPIOC, 2);    break;
+            case 3: palSetPad(GPIOC, 3);    break;
+            case 4: palSetPad(GPIOC, 4);    break;
+            case 5: palSetPad(GPIOC, 5);    break;
+            case 6: palSetPad(GPIOC, 6);    break;
+            case 7: palSetPad(GPIOC, 7);    break;
+            case 8: palSetPad(GPIOD, 0);    break;
+        }
+    #else
+        // strobe row
+        switch (row) {
+            case 0: palSetPad(GPIOB, 0);    break;
+            case 1: palSetPad(GPIOB, 1);    break;
+            case 2: palSetPad(GPIOB, 2);    break;
+            case 3: palSetPad(GPIOB, 3);    break;
+            case 4: palSetPad(GPIOB, 16);   break;
+            case 5: palSetPad(GPIOB, 17);   break;
+            case 6: palSetPad(GPIOC, 4);    break;
+            case 7: palSetPad(GPIOC, 5);    break;
+            case 8: palSetPad(GPIOD, 0);    break;
+        }
+    #endif
+
+        // need wait to settle pin state
+        // if you wait too short, or have a too high update rate
+        // the keyboard might freeze, or there might not be enough
+        // processing power to update the LCD screen properly.
+        // 20us, or two ticks at 100000Hz seems to be OK
+        wait_us(20);
+
+        // read col data
+        data = (palReadPort(GPIOD)>>1);
+    #ifdef INFINITY_LED
+        // un-strobe row
+        switch (row) {
+            case 0: palClearPad(GPIOC, 0);    break;
+            case 1: palClearPad(GPIOC, 1);    break;
+            case 2: palClearPad(GPIOC, 2);    break;
+            case 3: palClearPad(GPIOC, 3);    break;
+            case 4: palClearPad(GPIOC, 4);    break;
+            case 5: palClearPad(GPIOC, 5);    break;
+            case 6: palClearPad(GPIOC, 6);    break;
+            case 7: palClearPad(GPIOC, 7);    break;
+            case 8: palClearPad(GPIOD, 0);    break;
+        }
+    #else
+        // un-strobe row
+        switch (row) {
+            case 0: palClearPad(GPIOB, 0);    break;
+            case 1: palClearPad(GPIOB, 1);    break;
+            case 2: palClearPad(GPIOB, 2);    break;
+            case 3: palClearPad(GPIOB, 3);    break;
+            case 4: palClearPad(GPIOB, 16);   break;
+            case 5: palClearPad(GPIOB, 17);   break;
+            case 6: palClearPad(GPIOC, 4);    break;
+            case 7: palClearPad(GPIOC, 5);    break;
+            case 8: palClearPad(GPIOD, 0);    break;
+        }
+    #endif
+
+        if (matrix_debouncing[row] != data) {
+            matrix_debouncing[row] = data;
+            debouncing = true;
+            debouncing_time = timer_read();
+        }
+    }
+
+    if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
+        for (int row = 0; row < MATRIX_ROWS; row++) {
+            matrix[row] = matrix_debouncing[row];
+        }
+        debouncing = false;
+    }
+    return 1;
+}
+
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+    return (matrix[row] & (1<<col));
+}
+
+matrix_row_t matrix_get_row(uint8_t row)
+{
+    return matrix[row];
+}
+
+void matrix_print(void)
+{
+    xprintf("\nr/c 01234567\n");
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+        xprintf("%02X: ");
+        matrix_row_t data = matrix_get_row(row);
+        for (int col = 0; col < MATRIX_COLS; col++) {
+            if (data & (1<<col))
+                xprintf("1");
+            else
+                xprintf("0");
+        }
+        xprintf("\n");
+    }
+}
diff --git a/keyboards/infinity60/mcuconf.h b/keyboards/infinity60/mcuconf.h
new file mode 100644 (file)
index 0000000..f453304
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT             FALSE
+
+/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1     1
+#define KINETIS_CLKDIV1_OUTDIV2     1
+#define KINETIS_CLKDIV1_OUTDIV4     2
+#define KINETIS_BUSCLK_FREQUENCY    KINETIS_SYSCLK_FREQUENCY
+#define KINETIS_FLASHCLK_FREQUENCY  KINETIS_SYSCLK_FREQUENCY/2
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0            TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0                TRUE
+/* Need to redefine this, since the default is for K20x */
+/* This is for Teensy LC; you should comment it out (or change to 5)
+ * for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY       2
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/infinity60/readme.md b/keyboards/infinity60/readme.md
new file mode 100644 (file)
index 0000000..97457b4
--- /dev/null
@@ -0,0 +1,29 @@
+Infinity 60% keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme](/).
+
+## Keymaps
+
+Several versions of keymaps are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
+
+
+## Compiling
+
+Download or clone the whole firmware and navigate to the keyboards/infinity60 folder. Once your dev env is setup, you'll be able to use the `make` command to both compile your keymap and flash it to your keyboard.
+
+To just compile, which generates the output files in the `.build` folder at the root of the repository, run `make keymap`, where keymap is the name of the keymap that you want to compile.
+
+## Flashing
+
+To flash the firmware to the keyboard
+
+1. First press the flash button on the bottom of the keyboard. If you already have a flah button mapped in a keyboard layout running on the keyboard, you can also use that.
+2. Then run `make keymap-dfu-util`, where keymap is the name of the keymap you want to flash. On Linux based operating systems you might need to run the comamnd as root, for example `sudo make keymap-dfu-util` on Ubuntu.
+
+**Tip** `make keymap-dfu-util` will also compile the keymap if needed, so you can skip the compilation step if you want to.
+
diff --git a/keyboards/infinity60/rules.mk b/keyboards/infinity60/rules.mk
new file mode 100644 (file)
index 0000000..56d6470
--- /dev/null
@@ -0,0 +1,66 @@
+# project specific files
+SRC =  matrix.c \
+       led.c
+
+## chip/board settings
+# - the next two should match the directories in
+#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+# - For Teensies, FAMILY = KINETIS and SERIES is either
+#   KL2x (LC) or K20x (3.0,3.1,3.2).
+# - For Infinity KB, SERIES = K20x
+MCU_FAMILY = KINETIS
+MCU_SERIES = K20x
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
+# - LDSCRIPT =
+#   - MKL26Z64 for Teensy LC
+#   - MK20DX128 for Teensy 3.0
+#   - MK20DX256 for Teensy 3.1 and 3.2
+#   - MK20DX128BLDR4 for Infinity with Kiibohd bootloader
+MCU_LDSCRIPT = MK20DX128BLDR4
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+# - STARTUP =
+#   - kl2x for Teensy LC
+#   - k20x5 for Teensy 3.0 and Infinity KB
+#   - k20x7 for Teensy 3.1 and 3.2
+MCU_STARTUP = k20x5
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+# - BOARD =
+#   - PJRC_TEENSY_LC for Teensy LC
+#   - PJRC_TEENSY_3 for Teensy 3.0
+#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
+#   - MCHCK_K20 for Infinity KB
+BOARD = MCHCK_K20
+
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+# I.e. 6 for Teensy LC; 7 for Teensy 3.x
+ARMV = 7
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration
+## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
+MOUSEKEY_ENABLE ?= yes # Mouse keys
+EXTRAKEY_ENABLE ?= yes # Audio control and System control
+CONSOLE_ENABLE ?= yes  # Console for debug
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes         # USB Nkey Rollover
+CUSTOM_MATRIX ?= yes # Custom matrix file
\ No newline at end of file
diff --git a/keyboards/infinity_chibios/MEMO.txt b/keyboards/infinity_chibios/MEMO.txt
deleted file mode 100644 (file)
index e2886aa..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-flabbergast's TMK/ChibiOS port
-==============================
-2015/10/16
-
-
-Build
------
-$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
-
-$ cd tmk_keyboard
-$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
-or
-$ cd tmk_keyboard/tmk_core/tool/chibios
-$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
-
-$ cd tmk_keyboard/keyboard/infinity_chibios
-$ make
-
-
-
-
-Chibios Configuration
----------------------
-halconf.h: for HAL configuration
-    placed in project directory
-    read in chibios/os/hal/hal.mk
-    included in chibios/os/hal/include/hal.h
-mcuconf.h: for MCU configuration
-    placed in project directory
-    included in halconf.h
-
-
-Chibios Term
-------------
-PAL = Port Abstraction Layer
-    palWritePad
-    palReadPad
-    palSetPad
-    chibios/os/hal/include/pal.h
-
-LLD = Low Level Driver
-
-
-Makefile
---------
-    #   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-    MCU_FAMILY = KINETIS
-    MCU_SERIES = KL2x
-
-    # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-    #   or <this_dir>/ld/
-    MCU_LDSCRIPT = MKL26Z64
-
-    #  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-    MCU_STARTUP = kl2x
-
-    # Board: it should exist either in <chibios>/os/hal/boards/
-    #  or <this_dir>/boards
-    BOARD = PJRC_TEENSY_LC
-
-    MCU  = cortex-m0
-
-    # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-    ARMV = 6
-
-
-halconf.h
----------
-
-
-mcuconf.h
----------
-
-
-chconf.h
---------
-
-
-ld script
----------
---- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld     2015-10-15 09:08:58.732904304 +0900
-+++ ld/MKL26Z64.ld      2015-10-15 08:48:06.430215496 +0900
-@@ -27,7 +27,8 @@
- {
-   flash0   :  org = 0x00000000,  len = 0xc0
-   flashcfg :  org = 0x00000400,  len = 0x10
--  flash    :  org = 0x00000410,  len = 64k - 0x410
-+  flash    :  org = 0x00000410,  len = 62k - 0x410
-+  eeprom_emu : org = 0x0000F800, len = 2k
-   ram      :  org = 0x1FFFF800,  len = 8k
- }
-
-@@ -35,6 +36,10 @@
- __ram_size__            = LENGTH(ram);
- __ram_end__             = __ram_start__ + __ram_size__;
-
-+__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
-+__eeprom_workarea_size__  = LENGTH(eeprom_emu);
-+__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;
-+
- SECTIONS
- {
-   . = 0;
-
-
-
-Configuration/Startup for Infinity 60%
---------------------------------------
-Configuration:
-
-
-Clock:
-Inifinity   
-    FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
-    Clock dividor:
-    SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
-    SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
-    SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
-    Internal reference clock:
-    MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
-    MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
-    FLL multipilication:
-    MCG_C4[DMX32] = 1
-    MCG_C4[DRST_DRS] = 01   FLL factor 1464 * 32.768kHz = 48MHz
-
-chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
-    k20x_clock_init(): called in __early_init() defined in board.c
-        disable watchdog and configure clock
-
-        configurable macros:
-        KINETIS_NO_INIT: whether init or not
-        KINETIS_MCG_MODE: clock mode   
-            KINETIS_MCG_MODE_FEI
-            KINETIS_MCG_MODE_PEE
-                hal/ports/KINETIS/K20x/hal_lld.h
-            
-
-chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
-    PALConfig pal_default_config
-    boardInit()
-    __early_init()
-    macro definitions for board infos, freq and mcu type
-
-chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
-
-USB
-
-
-Startup
--------
-    common/ports/ARMCMx/GCC/crt0_v[67]m.s
-        Reset_Handler: startup code
-    common/ports/ARMCMx/GCC/crt1.c
-        __core_init(): weak
-        __early_init(): weak
-        __late_init(): weak
-        __default_exit(): weak
-            called from Reset_Handler of crt0
-    common/ports/ARMCMx/GCC/vector.c
-    common/ports/ARMCMx/GCC/ld/*.ld
-
-chibios/os/common/ports/ARMCMx/compilers/GCC/
-├── crt0_v6m.s
-├── crt0_v7m.s
-├── crt1.c
-├── ld
-│   ├── MK20DX128BLDR3.ld
-│   ├── MK20DX128BLDR4.ld
-│   ├── MK20DX128.ld
-│   ├── MK20DX256.ld
-│   ├── MKL25Z128.ld
-│   ├── MKL26Z128.ld
-│   ├── MKL26Z64.ld
-│   └── STM32L476xG.ld
-├── mk
-│   ├── startup_k20x5.mk
-│   ├── startup_k20x7.mk
-│   ├── startup_k20x.mk
-│   ├── startup_kl2x.mk
-│   └── startup_stm32l4xx.mk
-├── rules.ld
-├── rules.mk
-└── vectors.c
-
-chibios/os/hal/
-├── boards
-│   ├── FREESCALE_FREEDOM_K20D50M
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── MCHCK_K20
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── PJRC_TEENSY_3
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── PJRC_TEENSY_3_1
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── PJRC_TEENSY_LC
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── readme.txt
-│   ├── simulator
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── ST_NUCLEO_F030R8
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   ├── board.mk
-│   │   └── cfg
-│   │       └── board.chcfg
-├── hal.mk
-├── include
-│   ├── adc.h
-│   ├── can.h
-│   ├── dac.h
-│   ├── ext.h
-│   ├── gpt.h
-│   ├── hal_channels.h
-│   ├── hal_files.h
-│   ├── hal.h
-│   ├── hal_ioblock.h
-│   ├── hal_mmcsd.h
-│   ├── hal_queues.h
-│   ├── hal_streams.h
-│   ├── i2c.h
-│   ├── i2s.h
-│   ├── icu.h
-│   ├── mac.h
-│   ├── mii.h
-│   ├── mmc_spi.h
-│   ├── pal.h
-│   ├── pwm.h
-│   ├── rtc.h
-│   ├── sdc.h
-│   ├── serial.h
-│   ├── serial_usb.h
-│   ├── spi.h
-│   ├── st.h
-│   ├── uart.h
-│   └── usb.h
-├── lib
-│   └── streams
-│       ├── chprintf.c
-│       ├── chprintf.h
-│       ├── memstreams.c
-│       ├── memstreams.h
-│       ├── nullstreams.c
-│       └── nullstreams.h
-├── osal
-│   ├── nil
-│   │   ├── osal.c
-│   │   ├── osal.h
-│   │   └── osal.mk
-│   ├── os-less
-│   │   └── ARMCMx
-│   │       ├── osal.c
-│   │       ├── osal.h
-│   │       └── osal.mk
-│   └── rt
-│       ├── osal.c
-│       ├── osal.h
-│       └── osal.mk
-├── ports
-│   ├── AVR
-│   ├── common
-│   │   └── ARMCMx
-│   │       ├── mpu.h
-│   │       ├── nvic.c
-│   │       └── nvic.h
-│   ├── KINETIS
-│   │   ├── K20x
-│   │   │   ├── hal_lld.c
-│   │   │   ├── hal_lld.h
-│   │   │   ├── kinetis_registry.h
-│   │   │   ├── platform.dox
-│   │   │   ├── platform.mk
-│   │   │   ├── pwm_lld.c
-│   │   │   ├── pwm_lld.h
-│   │   │   ├── spi_lld.c
-│   │   │   └── spi_lld.h
-│   │   ├── KL2x
-│   │   │   ├── hal_lld.c
-│   │   │   ├── hal_lld.h
-│   │   │   ├── kinetis_registry.h
-│   │   │   ├── platform.mk
-│   │   │   ├── pwm_lld.c
-│   │   │   └── pwm_lld.h
-│   │   ├── LLD
-│   │   │   ├── adc_lld.c
-│   │   │   ├── adc_lld.h
-│   │   │   ├── ext_lld.c
-│   │   │   ├── ext_lld.h
-│   │   │   ├── gpt_lld.c
-│   │   │   ├── gpt_lld.h
-│   │   │   ├── i2c_lld.c
-│   │   │   ├── i2c_lld.h
-│   │   │   ├── pal_lld.c
-│   │   │   ├── pal_lld.h
-│   │   │   ├── serial_lld.c
-│   │   │   ├── serial_lld.h
-│   │   │   ├── st_lld.c
-│   │   │   ├── st_lld.h
-│   │   │   ├── usb_lld.c
-│   │   │   └── usb_lld.h
-│   │   └── README.md
-│   ├── LPC
-│   ├── simulator
-│   └── STM32
-├── src
-│   ├── adc.c
-│   ├── can.c
-│   ├── dac.c
-│   ├── ext.c
-│   ├── gpt.c
-│   ├── hal.c
-│   ├── hal_mmcsd.c
-│   ├── hal_queues.c
-│   ├── i2c.c
-│   ├── i2s.c
-│   ├── icu.c
-│   ├── mac.c
-│   ├── mmc_spi.c
-│   ├── pal.c
-│   ├── pwm.c
-│   ├── rtc.c
-│   ├── sdc.c
-│   ├── serial.c
-│   ├── serial_usb.c
-│   ├── spi.c
-│   ├── st.c
-│   ├── uart.c
-│   └── usb.c
-└── templates
-    ├── adc_lld.c
-    ├── adc_lld.h
-    ├── can_lld.c
-    ├── can_lld.h
-    ├── dac_lld.c
-    ├── dac_lld.h
-    ├── ext_lld.c
-    ├── ext_lld.h
-    ├── gpt_lld.c
-    ├── gpt_lld.h
-    ├── halconf.h
-    ├── hal_lld.c
-    ├── hal_lld.h
-    ├── i2c_lld.c
-    ├── i2c_lld.h
-    ├── i2s_lld.c
-    ├── i2s_lld.h
-    ├── icu_lld.c
-    ├── icu_lld.h
-    ├── mac_lld.c
-    ├── mac_lld.h
-    ├── mcuconf.h
-    ├── osal
-    │   ├── osal.c
-    │   ├── osal.h
-    │   └── osal.mk
-    ├── pal_lld.c
-    ├── pal_lld.h
-    ├── platform.mk
-    ├── pwm_lld.c
-    ├── pwm_lld.h
-    ├── rtc_lld.c
-    ├── rtc_lld.h
-    ├── sdc_lld.c
-    ├── sdc_lld.h
-    ├── serial_lld.c
-    ├── serial_lld.h
-    ├── spi_lld.c
-    ├── spi_lld.h
-    ├── st_lld.c
-    ├── st_lld.h
-    ├── uart_lld.c
-    ├── uart_lld.h
-    ├── usb_lld.c
-    └── usb_lld.h
diff --git a/keyboards/infinity_chibios/Makefile b/keyboards/infinity_chibios/Makefile
deleted file mode 100644 (file)
index 649b43e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# project specific files
-SRC =  matrix.c \
-       led.c
-
-## chip/board settings
-# - the next two should match the directories in
-#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-# - For Teensies, FAMILY = KINETIS and SERIES is either
-#   KL2x (LC) or K20x (3.0,3.1,3.2).
-# - For Infinity KB, SERIES = K20x
-MCU_FAMILY = KINETIS
-MCU_SERIES = K20x
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-#   or <this_dir>/ld/
-# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
-# - LDSCRIPT =
-#   - MKL26Z64 for Teensy LC
-#   - MK20DX128 for Teensy 3.0
-#   - MK20DX256 for Teensy 3.1 and 3.2
-#   - MK20DX128BLDR4 for Infinity with Kiibohd bootloader
-MCU_LDSCRIPT = MK20DX128BLDR4
-
-# Startup code to use
-#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-# - STARTUP =
-#   - kl2x for Teensy LC
-#   - k20x5 for Teensy 3.0 and Infinity KB
-#   - k20x7 for Teensy 3.1 and 3.2
-MCU_STARTUP = k20x5
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-#  or <this_dir>/boards
-# - BOARD =
-#   - PJRC_TEENSY_LC for Teensy LC
-#   - PJRC_TEENSY_3 for Teensy 3.0
-#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
-#   - MCHCK_K20 for Infinity KB
-BOARD = MCHCK_K20
-
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU  = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-# I.e. 6 for Teensy LC; 7 for Teensy 3.x
-ARMV = 7
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration
-## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
-MOUSEKEY_ENABLE ?= yes # Mouse keys
-EXTRAKEY_ENABLE ?= yes # Audio control and System control
-CONSOLE_ENABLE ?= yes  # Console for debug
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes         # USB Nkey Rollover
-CUSTOM_MATRIX ?= yes # Custom matrix file
-
-ifndef QUANTUM_DIR
-       include ../../Makefile
-endif
\ No newline at end of file
diff --git a/keyboards/infinity_chibios/bootloader_defs.h b/keyboards/infinity_chibios/bootloader_defs.h
deleted file mode 100644 (file)
index c67153b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define KIIBOHD_BOOTLOADER
diff --git a/keyboards/infinity_chibios/chconf.h b/keyboards/infinity_chibios/chconf.h
deleted file mode 100644 (file)
index b886c38..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-/**\r
- * @file    templates/chconf.h\r
- * @brief   Configuration file template.\r
- * @details A copy of this file must be placed in each project directory, it\r
- *          contains the application specific kernel settings.\r
- *\r
- * @addtogroup config\r
- * @details Kernel related settings and hooks.\r
- * @{\r
- */\r
-\r
-#ifndef CHCONF_H\r
-#define CHCONF_H\r
-\r
-#define _CHIBIOS_RT_CONF_\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name System timers settings\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   System time counter resolution.\r
- * @note    Allowed values are 16 or 32 bits.\r
- */\r
-#define CH_CFG_ST_RESOLUTION                32\r
-\r
-/**\r
- * @brief   System tick frequency.\r
- * @details Frequency of the system timer that drives the system ticks. This\r
- *          setting also defines the system tick time unit.\r
- */\r
-#define CH_CFG_ST_FREQUENCY                 1000\r
-\r
-/**\r
- * @brief   Time delta constant for the tick-less mode.\r
- * @note    If this value is zero then the system uses the classic\r
- *          periodic tick. This value represents the minimum number\r
- *          of ticks that is safe to specify in a timeout directive.\r
- *          The value one is not valid, timeouts are rounded up to\r
- *          this value.\r
- */\r
-#define CH_CFG_ST_TIMEDELTA                 0\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Kernel parameters and options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Round robin interval.\r
- * @details This constant is the number of system ticks allowed for the\r
- *          threads before preemption occurs. Setting this value to zero\r
- *          disables the preemption for threads with equal priority and the\r
- *          round robin becomes cooperative. Note that higher priority\r
- *          threads can still preempt, the kernel is always preemptive.\r
- * @note    Disabling the round robin preemption makes the kernel more compact\r
- *          and generally faster.\r
- * @note    The round robin preemption is not supported in tickless mode and\r
- *          must be set to zero in that case.\r
- */\r
-#define CH_CFG_TIME_QUANTUM                 20\r
-\r
-/**\r
- * @brief   Managed RAM size.\r
- * @details Size of the RAM area to be managed by the OS. If set to zero\r
- *          then the whole available RAM is used. The core memory is made\r
- *          available to the heap allocator and/or can be used directly through\r
- *          the simplified core memory allocator.\r
- *\r
- * @note    In order to let the OS manage the whole RAM the linker script must\r
- *          provide the @p __heap_base__ and @p __heap_end__ symbols.\r
- * @note    Requires @p CH_CFG_USE_MEMCORE.\r
- */\r
-#define CH_CFG_MEMCORE_SIZE                 0\r
-\r
-/**\r
- * @brief   Idle thread automatic spawn suppression.\r
- * @details When this option is activated the function @p chSysInit()\r
- *          does not spawn the idle thread. The application @p main()\r
- *          function becomes the idle thread and must implement an\r
- *          infinite loop.\r
- */\r
-#define CH_CFG_NO_IDLE_THREAD               FALSE\r
-\r
-/* Use __WFI in the idle thread for waiting. Does lower the power\r
- * consumption. */\r
-#define CORTEX_ENABLE_WFI_IDLE              TRUE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Performance options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   OS optimization.\r
- * @details If enabled then time efficient rather than space efficient code\r
- *          is used when two possible implementations exist.\r
- *\r
- * @note    This is not related to the compiler optimization options.\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_OPTIMIZE_SPEED               TRUE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Subsystem options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Time Measurement APIs.\r
- * @details If enabled then the time measurement APIs are included in\r
- *          the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_TM                       FALSE\r
-\r
-/**\r
- * @brief   Threads registry APIs.\r
- * @details If enabled then the registry APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_REGISTRY                 TRUE\r
-\r
-/**\r
- * @brief   Threads synchronization APIs.\r
- * @details If enabled then the @p chThdWait() function is included in\r
- *          the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_WAITEXIT                 TRUE\r
-\r
-/**\r
- * @brief   Semaphores APIs.\r
- * @details If enabled then the Semaphores APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_SEMAPHORES               TRUE\r
-\r
-/**\r
- * @brief   Semaphores queuing mode.\r
- * @details If enabled then the threads are enqueued on semaphores by\r
- *          priority rather than in FIFO order.\r
- *\r
- * @note    The default is @p FALSE. Enable this if you have special\r
- *          requirements.\r
- * @note    Requires @p CH_CFG_USE_SEMAPHORES.\r
- */\r
-#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE\r
-\r
-/**\r
- * @brief   Mutexes APIs.\r
- * @details If enabled then the mutexes APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MUTEXES                  TRUE\r
-\r
-/**\r
- * @brief   Enables recursive behavior on mutexes.\r
- * @note    Recursive mutexes are heavier and have an increased\r
- *          memory footprint.\r
- *\r
- * @note    The default is @p FALSE.\r
- * @note    Requires @p CH_CFG_USE_MUTEXES.\r
- */\r
-#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE\r
-\r
-/**\r
- * @brief   Conditional Variables APIs.\r
- * @details If enabled then the conditional variables APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_MUTEXES.\r
- */\r
-#define CH_CFG_USE_CONDVARS                 TRUE\r
-\r
-/**\r
- * @brief   Conditional Variables APIs with timeout.\r
- * @details If enabled then the conditional variables APIs with timeout\r
- *          specification are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_CONDVARS.\r
- */\r
-#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE\r
-\r
-/**\r
- * @brief   Events Flags APIs.\r
- * @details If enabled then the event flags APIs are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_EVENTS                   TRUE\r
-\r
-/**\r
- * @brief   Events Flags APIs with timeout.\r
- * @details If enabled then the events APIs with timeout specification\r
- *          are included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_EVENTS.\r
- */\r
-#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE\r
-\r
-/**\r
- * @brief   Synchronous Messages APIs.\r
- * @details If enabled then the synchronous messages APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MESSAGES                 TRUE\r
-\r
-/**\r
- * @brief   Synchronous Messages queuing mode.\r
- * @details If enabled then messages are served by priority rather than in\r
- *          FIFO order.\r
- *\r
- * @note    The default is @p FALSE. Enable this if you have special\r
- *          requirements.\r
- * @note    Requires @p CH_CFG_USE_MESSAGES.\r
- */\r
-#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE\r
-\r
-/**\r
- * @brief   Mailboxes APIs.\r
- * @details If enabled then the asynchronous messages (mailboxes) APIs are\r
- *          included in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_SEMAPHORES.\r
- */\r
-#define CH_CFG_USE_MAILBOXES                TRUE\r
-\r
-/**\r
- * @brief   Core Memory Manager APIs.\r
- * @details If enabled then the core memory manager APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MEMCORE                  TRUE\r
-\r
-/**\r
- * @brief   Heap Allocator APIs.\r
- * @details If enabled then the memory heap allocator APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or\r
- *          @p CH_CFG_USE_SEMAPHORES.\r
- * @note    Mutexes are recommended.\r
- */\r
-#define CH_CFG_USE_HEAP                     TRUE\r
-\r
-/**\r
- * @brief   Memory Pools Allocator APIs.\r
- * @details If enabled then the memory pools allocator APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- */\r
-#define CH_CFG_USE_MEMPOOLS                 TRUE\r
-\r
-/**\r
- * @brief   Dynamic Threads APIs.\r
- * @details If enabled then the dynamic threads creation APIs are included\r
- *          in the kernel.\r
- *\r
- * @note    The default is @p TRUE.\r
- * @note    Requires @p CH_CFG_USE_WAITEXIT.\r
- * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.\r
- */\r
-#define CH_CFG_USE_DYNAMIC                  TRUE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Debug options\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Debug option, kernel statistics.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_STATISTICS                   FALSE\r
-\r
-/**\r
- * @brief   Debug option, system state check.\r
- * @details If enabled the correct call protocol for system APIs is checked\r
- *          at runtime.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_SYSTEM_STATE_CHECK           FALSE\r
-\r
-/**\r
- * @brief   Debug option, parameters checks.\r
- * @details If enabled then the checks on the API functions input\r
- *          parameters are activated.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_ENABLE_CHECKS                FALSE\r
-\r
-/**\r
- * @brief   Debug option, consistency checks.\r
- * @details If enabled then all the assertions in the kernel code are\r
- *          activated. This includes consistency checks inside the kernel,\r
- *          runtime anomalies and port-defined checks.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_ENABLE_ASSERTS               FALSE\r
-\r
-/**\r
- * @brief   Debug option, trace buffer.\r
- * @details If enabled then the trace buffer is activated.\r
- *\r
- * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.\r
- */\r
-#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED\r
-\r
-/**\r
- * @brief   Trace buffer entries.\r
- * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is\r
- *          different from @p CH_DBG_TRACE_MASK_DISABLED.\r
- */\r
-#define CH_DBG_TRACE_BUFFER_SIZE            128\r
-\r
-/**\r
- * @brief   Debug option, stack checks.\r
- * @details If enabled then a runtime stack check is performed.\r
- *\r
- * @note    The default is @p FALSE.\r
- * @note    The stack check is performed in a architecture/port dependent way.\r
- *          It may not be implemented or some ports.\r
- * @note    The default failure mode is to halt the system with the global\r
- *          @p panic_msg variable set to @p NULL.\r
- */\r
-#define CH_DBG_ENABLE_STACK_CHECK           FALSE\r
-\r
-/**\r
- * @brief   Debug option, stacks initialization.\r
- * @details If enabled then the threads working area is filled with a byte\r
- *          value when a thread is created. This can be useful for the\r
- *          runtime measurement of the used stack.\r
- *\r
- * @note    The default is @p FALSE.\r
- */\r
-#define CH_DBG_FILL_THREADS                 FALSE\r
-\r
-/**\r
- * @brief   Debug option, threads profiling.\r
- * @details If enabled then a field is added to the @p thread_t structure that\r
- *          counts the system ticks occurred while executing the thread.\r
- *\r
- * @note    The default is @p FALSE.\r
- * @note    This debug option is not currently compatible with the\r
- *          tickless mode.\r
- */\r
-#define CH_DBG_THREADS_PROFILING            FALSE\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/**\r
- * @name Kernel hooks\r
- * @{\r
- */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Threads descriptor structure extension.\r
- * @details User fields added to the end of the @p thread_t structure.\r
- */\r
-#define CH_CFG_THREAD_EXTRA_FIELDS                                          \\r
-  /* Add threads custom fields here.*/\r
-\r
-/**\r
- * @brief   Threads initialization hook.\r
- * @details User initialization code added to the @p chThdInit() API.\r
- *\r
- * @note    It is invoked from within @p chThdInit() and implicitly from all\r
- *          the threads creation APIs.\r
- */\r
-#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \\r
-  /* Add threads initialization code here.*/                                \\r
-}\r
-\r
-/**\r
- * @brief   Threads finalization hook.\r
- * @details User finalization code added to the @p chThdExit() API.\r
- */\r
-#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \\r
-  /* Add threads finalization code here.*/                                  \\r
-}\r
-\r
-/**\r
- * @brief   Context switch hook.\r
- * @details This hook is invoked just before switching between threads.\r
- */\r
-#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \\r
-  /* Context switch code here.*/                                            \\r
-}\r
-\r
-/**\r
- * @brief   ISR enter hook.\r
- */\r
-#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \\r
-  /* IRQ prologue code here.*/                                              \\r
-}\r
-\r
-/**\r
- * @brief   ISR exit hook.\r
- */\r
-#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \\r
-  /* IRQ epilogue code here.*/                                              \\r
-}\r
-\r
-/**\r
- * @brief   Idle thread enter hook.\r
- * @note    This hook is invoked within a critical zone, no OS functions\r
- *          should be invoked from here.\r
- * @note    This macro can be used to activate a power saving mode.\r
- */\r
-#define CH_CFG_IDLE_ENTER_HOOK() {                                          \\r
-  /* Idle-enter code here.*/                                                \\r
-}\r
-\r
-/**\r
- * @brief   Idle thread leave hook.\r
- * @note    This hook is invoked within a critical zone, no OS functions\r
- *          should be invoked from here.\r
- * @note    This macro can be used to deactivate a power saving mode.\r
- */\r
-#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \\r
-  /* Idle-leave code here.*/                                                \\r
-}\r
-\r
-/**\r
- * @brief   Idle Loop hook.\r
- * @details This hook is continuously invoked by the idle thread loop.\r
- */\r
-#define CH_CFG_IDLE_LOOP_HOOK() {                                           \\r
-  /* Idle loop code here.*/                                                 \\r
-}\r
-\r
-/**\r
- * @brief   System tick event hook.\r
- * @details This hook is invoked in the system tick handler immediately\r
- *          after processing the virtual timers queue.\r
- */\r
-#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \\r
-  /* System tick event code here.*/                                         \\r
-}\r
-\r
-/**\r
- * @brief   System halt hook.\r
- * @details This hook is invoked in case to a system halting error before\r
- *          the system is halted.\r
- */\r
-#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \\r
-  /* System halt code here.*/                                               \\r
-}\r
-\r
-/**\r
- * @brief   Trace hook.\r
- * @details This hook is invoked each time a new record is written in the\r
- *          trace buffer.\r
- */\r
-#define CH_CFG_TRACE_HOOK(tep) {                                            \\r
-  /* Trace code here.*/                                                     \\r
-}\r
-\r
-/** @} */\r
-\r
-/*===========================================================================*/\r
-/* Port-specific settings (override port settings defaulted in chcore.h).    */\r
-/*===========================================================================*/\r
-\r
-#endif  /* CHCONF_H */\r
-\r
-/** @} */\r
diff --git a/keyboards/infinity_chibios/config.h b/keyboards/infinity_chibios/config.h
deleted file mode 100644 (file)
index cb90222..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Copyright 2015 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6464
-#define DEVICE_VER      0x0001
-/* in python2: list(u"whatever".encode('utf-16-le')) */
-/*   at most 32 characters or the ugly hack in usb_main.c borks */
-#define MANUFACTURER "TMK"
-#define USBSTR_MANUFACTURER    'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00'
-#define PRODUCT "Infinity keyboard/TMK"
-#define USBSTR_PRODUCT         'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00'
-
-/* key matrix size */
-#define MATRIX_ROWS 9
-#define MATRIX_COLS 7
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE    5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
-    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* Keymap for Infiity prototype */
-#define INFINITY_PROTOTYPE
-
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/infinity_chibios/halconf.h b/keyboards/infinity_chibios/halconf.h
deleted file mode 100644 (file)
index 53538de..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-/**\r
- * @file    templates/halconf.h\r
- * @brief   HAL configuration header.\r
- * @details HAL configuration file, this file allows to enable or disable the\r
- *          various device drivers from your application. You may also use\r
- *          this file in order to override the device drivers default settings.\r
- *\r
- * @addtogroup HAL_CONF\r
- * @{\r
- */\r
-\r
-#ifndef _HALCONF_H_\r
-#define _HALCONF_H_\r
-\r
-#include "mcuconf.h"\r
-\r
-/**\r
- * @brief   Enables the PAL subsystem.\r
- */\r
-#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)\r
-#define HAL_USE_PAL                 TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the ADC subsystem.\r
- */\r
-#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)\r
-#define HAL_USE_ADC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the CAN subsystem.\r
- */\r
-#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)\r
-#define HAL_USE_CAN                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the DAC subsystem.\r
- */\r
-#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)\r
-#define HAL_USE_DAC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the EXT subsystem.\r
- */\r
-#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)\r
-#define HAL_USE_EXT                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the GPT subsystem.\r
- */\r
-#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)\r
-#define HAL_USE_GPT                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the I2C subsystem.\r
- */\r
-#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)\r
-#define HAL_USE_I2C                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the I2S subsystem.\r
- */\r
-#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)\r
-#define HAL_USE_I2S                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the ICU subsystem.\r
- */\r
-#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)\r
-#define HAL_USE_ICU                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the MAC subsystem.\r
- */\r
-#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)\r
-#define HAL_USE_MAC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the MMC_SPI subsystem.\r
- */\r
-#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)\r
-#define HAL_USE_MMC_SPI             FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the PWM subsystem.\r
- */\r
-#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)\r
-#define HAL_USE_PWM                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the RTC subsystem.\r
- */\r
-#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)\r
-#define HAL_USE_RTC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SDC subsystem.\r
- */\r
-#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)\r
-#define HAL_USE_SDC                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SERIAL subsystem.\r
- */\r
-#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)\r
-#define HAL_USE_SERIAL              FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SERIAL over USB subsystem.\r
- */\r
-#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)\r
-#define HAL_USE_SERIAL_USB          TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the SPI subsystem.\r
- */\r
-#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)\r
-#define HAL_USE_SPI                 FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the UART subsystem.\r
- */\r
-#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)\r
-#define HAL_USE_UART                FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the USB subsystem.\r
- */\r
-#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)\r
-#define HAL_USE_USB                 TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the WDG subsystem.\r
- */\r
-#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)\r
-#define HAL_USE_WDG                 FALSE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* ADC driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Enables synchronous APIs.\r
- * @note    Disabling this option saves both code and data space.\r
- */\r
-#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)\r
-#define ADC_USE_WAIT                TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.\r
- * @note    Disabling this option saves both code and data space.\r
- */\r
-#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
-#define ADC_USE_MUTUAL_EXCLUSION    TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* CAN driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Sleep mode related APIs inclusion switch.\r
- */\r
-#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)\r
-#define CAN_USE_SLEEP_MODE          TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* I2C driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Enables the mutual exclusion APIs on the I2C bus.\r
- */\r
-#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
-#define I2C_USE_MUTUAL_EXCLUSION    TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* MAC driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Enables an event sources for incoming packets.\r
- */\r
-#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)\r
-#define MAC_USE_ZERO_COPY           FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables an event sources for incoming packets.\r
- */\r
-#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)\r
-#define MAC_USE_EVENTS              TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* MMC_SPI driver related settings.                                          */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Delays insertions.\r
- * @details If enabled this options inserts delays into the MMC waiting\r
- *          routines releasing some extra CPU time for the threads with\r
- *          lower priority, this may slow down the driver a bit however.\r
- *          This option is recommended also if the SPI driver does not\r
- *          use a DMA channel and heavily loads the CPU.\r
- */\r
-#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)\r
-#define MMC_NICE_WAITING            TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* SDC driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Number of initialization attempts before rejecting the card.\r
- * @note    Attempts are performed at 10mS intervals.\r
- */\r
-#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)\r
-#define SDC_INIT_RETRY              100\r
-#endif\r
-\r
-/**\r
- * @brief   Include support for MMC cards.\r
- * @note    MMC support is not yet implemented so this option must be kept\r
- *          at @p FALSE.\r
- */\r
-#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)\r
-#define SDC_MMC_SUPPORT             FALSE\r
-#endif\r
-\r
-/**\r
- * @brief   Delays insertions.\r
- * @details If enabled this options inserts delays into the MMC waiting\r
- *          routines releasing some extra CPU time for the threads with\r
- *          lower priority, this may slow down the driver a bit however.\r
- */\r
-#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)\r
-#define SDC_NICE_WAITING            TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* SERIAL driver related settings.                                           */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Default bit rate.\r
- * @details Configuration parameter, this is the baud rate selected for the\r
- *          default configuration.\r
- */\r
-#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)\r
-#define SERIAL_DEFAULT_BITRATE      38400\r
-#endif\r
-\r
-/**\r
- * @brief   Serial buffers size.\r
- * @details Configuration parameter, you can change the depth of the queue\r
- *          buffers depending on the requirements of your application.\r
- * @note    The default is 64 bytes for both the transmission and receive\r
- *          buffers.\r
- */\r
-#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)\r
-#define SERIAL_BUFFERS_SIZE         16\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* SERIAL_USB driver related setting.                                        */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Serial over USB buffers size.\r
- * @details Configuration parameter, the buffer size must be a multiple of\r
- *          the USB data endpoint maximum packet size.\r
- * @note    The default is 64 bytes for both the transmission and receive\r
- *          buffers.\r
- */\r
-#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)\r
-#define SERIAL_USB_BUFFERS_SIZE     256\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* SPI driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Enables synchronous APIs.\r
- * @note    Disabling this option saves both code and data space.\r
- */\r
-#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)\r
-#define SPI_USE_WAIT                TRUE\r
-#endif\r
-\r
-/**\r
- * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.\r
- * @note    Disabling this option saves both code and data space.\r
- */\r
-#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)\r
-#define SPI_USE_MUTUAL_EXCLUSION    TRUE\r
-#endif\r
-\r
-/*===========================================================================*/\r
-/* USB driver related settings.                                              */\r
-/*===========================================================================*/\r
-\r
-/**\r
- * @brief   Enables synchronous APIs.\r
- * @note    Disabling this option saves both code and data space.\r
- */\r
-#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)\r
-#define USB_USE_WAIT                TRUE\r
-#endif\r
-\r
-#endif /* _HALCONF_H_ */\r
-\r
-/** @} */\r
diff --git a/keyboards/infinity_chibios/infinity_chibios.c b/keyboards/infinity_chibios/infinity_chibios.c
deleted file mode 100644 (file)
index 845eda0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#include "infinity_chibios.h"
diff --git a/keyboards/infinity_chibios/infinity_chibios.h b/keyboards/infinity_chibios/infinity_chibios.h
deleted file mode 100644 (file)
index a44c68b..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-Copyright 2014 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
-
-#include "quantum.h"
-
-#ifdef INFINITY_PROTOTYPE
-
-/* Infinity prototype */
-#define KEYMAP( \
-    K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \
-    K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \
-    K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \
-    K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \
-    K06, K16, K26,           K36,                K46, K56, K66, K76 \
-) { \
-    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
-    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
-    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
-    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
-    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
-    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
-    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
-    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
-    { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 }  \
-}
-
-#else
-
-/* Infinity production */
-#define KEYMAP( \
-    K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, \
-    K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, \
-    K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, \
-    K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \
-    K16, K26, K36,           K46,                K56, K66, K76, K86 \
-) { \
-    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
-    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
-    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
-    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
-    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
-    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
-    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
-    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
-    { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 }  \
-}
-
-#endif
-
-#endif
diff --git a/keyboards/infinity_chibios/keymaps/default/keymap.c b/keyboards/infinity_chibios/keymaps/default/keymap.c
deleted file mode 100644 (file)
index 2acf728..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "infinity_chibios.h"
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    /* Layer 0: Default Layer
-     * ,-----------------------------------------------------------.
-     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  `|BSp|
-     * |-----------------------------------------------------------|
-     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
-     * |-----------------------------------------------------------|
-     * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
-     * |-----------------------------------------------------------|
-     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn0|
-     * |-----------------------------------------------------------'
-     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
-     * `-----------------------------------------------------------'
-     */
-    [0] =
-    KEYMAP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS, GRV, \
-           TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
-           LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,ENT,  \
-           LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RSFT,FN0, \
-           NO,  LGUI,LALT,          SPC,                RALT,RGUI,NO, NO),
-
-    /* Layer 1: HHKB mode (HHKB Fn)
-     * ,-----------------------------------------------------------.
-     * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
-     * |-----------------------------------------------------------|
-     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |Backs|
-     * |-----------------------------------------------------------|
-     * |      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |
-     * |-----------------------------------------------------------|
-     * |        |   |   |   |   |   |  +|  -|End|PgD|Dow|      |   |
-     * `-----------------------------------------------------------'
-     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
-     * `-----------------------------------------------------------'
-     */ 
-    [1] = 
-    KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,   \
-           CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC,      \
-           TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT,            \
-           TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS,            \
-           TRNS,TRNS,TRNS,          TRNS,               TRNS,TRNS,TRNS,TRNS),
-};
-
-const uint16_t fn_actions[] = {
-    [0] = ACTION_LAYER_MOMENTARY(1),
-};
-
diff --git a/keyboards/infinity_chibios/keymaps/hasu/keymap.c b/keyboards/infinity_chibios/keymaps/hasu/keymap.c
deleted file mode 100644 (file)
index e9a212f..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#include "infinity_chibios.h"
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    /* Layer 0: Default Layer
-     * ,-----------------------------------------------------------.
-     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  `|BSp|
-     * |-----------------------------------------------------------|
-     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
-     * |-----------------------------------------------------------|
-     * |Contro|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Enter   |
-     * |-----------------------------------------------------------|
-     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn0|
-     * |-----------------------------------------------------------'
-     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
-     * `-----------------------------------------------------------'
-     */
-    [0] =
-    KEYMAP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS,GRV, \
-           TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
-           LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,FN6, \
-           FN7, Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT,FN1, \
-           NO,  LGUI,LALT,          FN4,                FN5, RGUI,NO, NO),
-
-    /* Layer 1: HHKB mode (HHKB Fn)
-     * ,-----------------------------------------------------------.
-     * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
-     * |-----------------------------------------------------------|
-     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |Backs|
-     * |-----------------------------------------------------------|
-     * |      |VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |
-     * |-----------------------------------------------------------|
-     * |        |   |   |   |   |   |  +|  -|End|PgD|Dow|      |   |
-     * `-----------------------------------------------------------'
-     * |     |Gui|Alt  |         Space         |Alt  |Gui|   |     |
-     * `-----------------------------------------------------------'
-     */ 
-    [1] = 
-    KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
-           CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP,  TRNS,BSPC, \
-           LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
-           LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \
-           TRNS,LGUI,LALT,          TRNS,               RALT,RGUI,TRNS,TRNS),
-
-    /* Layer 2: Vi mode[Slash]
-     * ,-----------------------------------------------------------.
-     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
-     * |-----------------------------------------------------------|
-     * |Tab  |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd|   |   |   |Backs|
-     * |-----------------------------------------------------------|
-     * |Contro|   |Lef|Dow|Rig|   |Lef|Dow|Up |Rig|   |   |Return  |
-     * |-----------------------------------------------------------|
-     * |Shift   |   |   |   |   |   |Hom|PgD|PgUlEnd|Fn0|Shift |   |
-     * `-----------------------------------------------------------'
-     *       |Gui|Alt  |          Space        |Alt  |Gui|
-     *       `-------------------------------------------'
-     */
-    [2] = \
-    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
-           TAB, HOME,PGDN,UP,  PGUP,END, HOME,PGDN,PGUP,END, NO,  NO,  NO,  BSPC, \
-           LCTL,NO,  LEFT,DOWN,RGHT,NO,  LEFT,DOWN,UP,  RGHT,NO,  NO,  ENT, \
-           LSFT,NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, FN2, RSFT,TRNS, \
-           TRNS,LGUI,LALT,          SPC,                RALT,RGUI,TRNS,TRNS),
-
-    /* Layer 3: Mouse mode(IJKL)[Semicolon]
-     * ,-----------------------------------------------------------.
-     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
-     * |-----------------------------------------------------------|
-     * |Tab  |   |   |   |   |   |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
-     * |-----------------------------------------------------------|
-     * |Contro|   |   |   |   |   |Mb2|McL|McD|McR|Fn |   |Return  |
-     * |-----------------------------------------------------------|
-     * |Shift   |   |   |   |   |Mb3|Mb2|Mb1|Mb4|Mb5|   |Shift |   |
-     * `-----------------------------------------------------------'
-     *      |Gui |Alt  |          Mb1          |Fn   |Fn |
-     *      `--------------------------------------------'
-     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
-     */
-    [3] = \
-    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
-           FN8, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \
-           LCTL,ACL0,ACL1,ACL2,ACL2,NO,  NO,  MS_L,MS_D,MS_R,FN3, NO,  ENT, \
-           LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
-           TRNS,LGUI,LALT,          BTN1,               TRNS,TRNS,TRNS,TRNS),
-
-    /* Layer 4: Mouse mode(IJKL)[Space]
-     * ,-----------------------------------------------------------.
-     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
-     * |-----------------------------------------------------------|
-     * |Tab  |   |   |   |   |   |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
-     * |-----------------------------------------------------------|
-     * |Contro|   |   |   |   |   |Mb2|McL|McD|McR|Mb1|   |Return  |
-     * |-----------------------------------------------------------|
-     * |Shift   |   |   |   |   |Mb3|Mb2|Mb1|Mb4|Mb5|   |Shift |   |
-     * `-----------------------------------------------------------'
-     *      |Gui |Alt  |          Mb1          |Fn   |Fn |
-     *      `--------------------------------------------'
-     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
-     */
-    [4] = \
-    KEYMAP(GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
-           FN8, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \
-           LCTL,VOLD,VOLU,MUTE,NO,  NO,  NO,  MS_L,MS_D,MS_R,BTN1,NO,  ENT, \
-           LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
-           TRNS,LGUI,LALT,          TRNS,               TRNS,TRNS,TRNS,TRNS),
-
-};
-
-/* id for user defined functions */
-enum function_id {
-    LSHIFT_LPAREN,
-};
-
-enum macro_id {
-    HELLO,
-    VOLUP,
-    ALT_TAB,
-};
-
-/*
- * Fn action definition
- */
-const uint16_t fn_actions[] = {
-    [0] = ACTION_DEFAULT_LAYER_SET(0),                // Default layer(not used)
-    [1] = ACTION_LAYER_TAP_TOGGLE(1),                 // HHKB layer(toggle with 5 taps)
-    [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash*
-    [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN),           // Mousekey layer with Semicolon*
-    [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC),            // Mousekey layer with Space
-    [5] = ACTION_LAYER_MOMENTARY(4),                  // Mousekey layer(IJKL)
-    [6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT),      // RControl with tap Enter
-    [7] = ACTION_MODS_ONESHOT(MOD_LSFT),              // Oneshot Shift
-    [8] = ACTION_MACRO(ALT_TAB),                      // Application switching
-    [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT),
-   [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT),
-};
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    switch (id) {
-        case HELLO:
-            return (record->event.pressed ?
-                    MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
-                    MACRO_NONE );
-        case VOLUP:
-            return (record->event.pressed ?
-                    MACRO( D(VOLU), U(VOLU), END ) :
-                    MACRO_NONE );
-        case ALT_TAB:
-            return (record->event.pressed ?
-                    MACRO( D(LALT), D(TAB), END ) :
-                    MACRO( U(TAB), END ));
-    }
-    return MACRO_NONE;
-}
-
-
-
-/*
- * user defined action function
- */
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    if (record->event.pressed) dprint("P"); else dprint("R");
-    dprintf("%d", record->tap.count);
-    if (record->tap.interrupted) dprint("i");
-    dprint("\n");
-
-    switch (id) {
-        case LSHIFT_LPAREN:
-            // Shift parentheses example: LShft + tap '('
-            // http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
-            // http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899
-            if (record->event.pressed) {
-                if (record->tap.count > 0 && !record->tap.interrupted) {
-                    if (record->tap.interrupted) {
-                        dprint("tap interrupted\n");
-                        register_mods(MOD_BIT(KC_LSHIFT));
-                    }
-                } else {
-                    register_mods(MOD_BIT(KC_LSHIFT));
-                }
-            } else {
-                if (record->tap.count > 0 && !(record->tap.interrupted)) {
-                    add_weak_mods(MOD_BIT(KC_LSHIFT));
-                    send_keyboard_report();
-                    register_code(KC_9);
-                    unregister_code(KC_9);
-                    del_weak_mods(MOD_BIT(KC_LSHIFT));
-                    send_keyboard_report();
-                    record->tap.count = 0;  // ad hoc: cancel tap
-                } else {
-                    unregister_mods(MOD_BIT(KC_LSHIFT));
-                }
-            }
-            break;
-    }
-}
diff --git a/keyboards/infinity_chibios/led.c b/keyboards/infinity_chibios/led.c
deleted file mode 100644 (file)
index aed66c7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "hal.h"
-
-#include "led.h"
-
-
-void led_set(uint8_t usb_led) {
-}
diff --git a/keyboards/infinity_chibios/matrix.c b/keyboards/infinity_chibios/matrix.c
deleted file mode 100644 (file)
index 2c68ea8..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#include <stdint.h>
-#include <stdbool.h>
-#include <string.h>
-#include "hal.h"
-#include "timer.h"
-#include "wait.h"
-#include "print.h"
-#include "matrix.h"
-
-
-/*
- * Infinity Pinusage:
- * Column pins are input with internal pull-down. Row pins are output and strobe with high.
- * Key is high or 1 when it turns on.
- *
- *     col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
- *     row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 }
- */
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-static bool debouncing = false;
-static uint16_t debouncing_time = 0;
-
-
-void matrix_init(void)
-{
-    /* Column(sense) */
-    palSetPadMode(GPIOD, 1,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 2,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 3,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 4,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 5,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 6,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 7,  PAL_MODE_INPUT_PULLDOWN);
-
-    /* Row(strobe) */
-    palSetPadMode(GPIOB, 0,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 1,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 2,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 3,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 17, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOC, 4,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOC, 5,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL);
-
-    memset(matrix, 0, MATRIX_ROWS);
-    memset(matrix_debouncing, 0, MATRIX_ROWS);
-}
-
-uint8_t matrix_scan(void)
-{
-    for (int row = 0; row < MATRIX_ROWS; row++) {
-        matrix_row_t data = 0;
-
-        // strobe row
-        switch (row) {
-            case 0: palSetPad(GPIOB, 0);    break;
-            case 1: palSetPad(GPIOB, 1);    break;
-            case 2: palSetPad(GPIOB, 2);    break;
-            case 3: palSetPad(GPIOB, 3);    break;
-            case 4: palSetPad(GPIOB, 16);   break;
-            case 5: palSetPad(GPIOB, 17);   break;
-            case 6: palSetPad(GPIOC, 4);    break;
-            case 7: palSetPad(GPIOC, 5);    break;
-            case 8: palSetPad(GPIOD, 0);    break;
-        }
-
-        wait_us(1); // need wait to settle pin state
-
-        // read col data
-        data = (palReadPort(GPIOD)>>1);
-
-        // un-strobe row
-        switch (row) {
-            case 0: palClearPad(GPIOB, 0);    break;
-            case 1: palClearPad(GPIOB, 1);    break;
-            case 2: palClearPad(GPIOB, 2);    break;
-            case 3: palClearPad(GPIOB, 3);    break;
-            case 4: palClearPad(GPIOB, 16);   break;
-            case 5: palClearPad(GPIOB, 17);   break;
-            case 6: palClearPad(GPIOC, 4);    break;
-            case 7: palClearPad(GPIOC, 5);    break;
-            case 8: palClearPad(GPIOD, 0);    break;
-        }
-
-        if (matrix_debouncing[row] != data) {
-            matrix_debouncing[row] = data;
-            debouncing = true;
-            debouncing_time = timer_read();
-        }
-    }
-
-    if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
-        for (int row = 0; row < MATRIX_ROWS; row++) {
-            matrix[row] = matrix_debouncing[row];
-        }
-        debouncing = false;
-    }
-    return 1;
-}
-
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
-    return (matrix[row] & (1<<col));
-}
-
-matrix_row_t matrix_get_row(uint8_t row)
-{
-    return matrix[row];
-}
-
-void matrix_print(void)
-{
-    xprintf("\nr/c 01234567\n");
-    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        xprintf("%02X: ");
-        matrix_row_t data = matrix_get_row(row);
-        for (int col = 0; col < MATRIX_COLS; col++) {
-            if (data & (1<<col))
-                xprintf("1");
-            else
-                xprintf("0");
-        }
-        xprintf("\n");
-    }
-}
diff --git a/keyboards/infinity_chibios/mcuconf.h b/keyboards/infinity_chibios/mcuconf.h
deleted file mode 100644 (file)
index 66b6ce2..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*\r
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio\r
-\r
-    Licensed under the Apache License, Version 2.0 (the "License");\r
-    you may not use this file except in compliance with the License.\r
-    You may obtain a copy of the License at\r
-\r
-        http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-    Unless required by applicable law or agreed to in writing, software\r
-    distributed under the License is distributed on an "AS IS" BASIS,\r
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-    See the License for the specific language governing permissions and\r
-    limitations under the License.\r
-*/\r
-\r
-#ifndef _MCUCONF_H_\r
-#define _MCUCONF_H_\r
-\r
-#define K20x_MCUCONF\r
-\r
-/*\r
- * HAL driver system settings.\r
- */\r
-\r
-/* Select the MCU clocking mode below by enabling the appropriate block. */\r
-\r
-#define KINETIS_NO_INIT             FALSE\r
-\r
-/* FEI mode - 48 MHz with internal 32.768 kHz crystal */\r
-#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI\r
-#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */\r
-#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */\r
-#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */\r
-#define KINETIS_CLKDIV1_OUTDIV1     1\r
-#define KINETIS_CLKDIV1_OUTDIV2     1\r
-#define KINETIS_CLKDIV1_OUTDIV4     2\r
-#define KINETIS_BUSCLK_FREQUENCY    KINETIS_SYSCLK_FREQUENCY\r
-#define KINETIS_FLASHCLK_FREQUENCY  KINETIS_SYSCLK_FREQUENCY/2\r
-\r
-/*\r
- * SERIAL driver system settings.\r
- */\r
-#define KINETIS_SERIAL_USE_UART0            TRUE\r
-\r
-/*\r
- * USB driver settings\r
- */\r
-#define KINETIS_USB_USE_USB0                TRUE\r
-/* Need to redefine this, since the default is for K20x */\r
-/* This is for Teensy LC; you should comment it out (or change to 5)\r
- * for Teensy 3.x */\r
-#define KINETIS_USB_USB0_IRQ_PRIORITY       2\r
-\r
-#endif /* _MCUCONF_H_ */\r
diff --git a/keyboards/infinity_ergodox/MEMO.txt b/keyboards/infinity_ergodox/MEMO.txt
deleted file mode 100644 (file)
index e2886aa..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-flabbergast's TMK/ChibiOS port
-==============================
-2015/10/16
-
-
-Build
------
-$ git clone -b chibios https://github.com/flabbergast/tmk_keyboard.git
-
-$ cd tmk_keyboard
-$ git submodule add -f -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
-or
-$ cd tmk_keyboard/tmk_core/tool/chibios
-$ git clone -b kinetis https://github.com/flabbergast/ChibiOS.git tmk_core/tool/chibios/chibios
-
-$ cd tmk_keyboard/keyboard/infinity_chibios
-$ make
-
-
-
-
-Chibios Configuration
----------------------
-halconf.h: for HAL configuration
-    placed in project directory
-    read in chibios/os/hal/hal.mk
-    included in chibios/os/hal/include/hal.h
-mcuconf.h: for MCU configuration
-    placed in project directory
-    included in halconf.h
-
-
-Chibios Term
-------------
-PAL = Port Abstraction Layer
-    palWritePad
-    palReadPad
-    palSetPad
-    chibios/os/hal/include/pal.h
-
-LLD = Low Level Driver
-
-
-Makefile
---------
-    #   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-    MCU_FAMILY = KINETIS
-    MCU_SERIES = KL2x
-
-    # - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-    #   or <this_dir>/ld/
-    MCU_LDSCRIPT = MKL26Z64
-
-    #  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-    MCU_STARTUP = kl2x
-
-    # Board: it should exist either in <chibios>/os/hal/boards/
-    #  or <this_dir>/boards
-    BOARD = PJRC_TEENSY_LC
-
-    MCU  = cortex-m0
-
-    # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-    ARMV = 6
-
-
-halconf.h
----------
-
-
-mcuconf.h
----------
-
-
-chconf.h
---------
-
-
-ld script
----------
---- ../../tmk_core/tool/chibios/chibios/os/common/ports/ARMCMx/compilers/GCC/ld/MKL26Z64.ld     2015-10-15 09:08:58.732904304 +0900
-+++ ld/MKL26Z64.ld      2015-10-15 08:48:06.430215496 +0900
-@@ -27,7 +27,8 @@
- {
-   flash0   :  org = 0x00000000,  len = 0xc0
-   flashcfg :  org = 0x00000400,  len = 0x10
--  flash    :  org = 0x00000410,  len = 64k - 0x410
-+  flash    :  org = 0x00000410,  len = 62k - 0x410
-+  eeprom_emu : org = 0x0000F800, len = 2k
-   ram      :  org = 0x1FFFF800,  len = 8k
- }
-
-@@ -35,6 +36,10 @@
- __ram_size__            = LENGTH(ram);
- __ram_end__             = __ram_start__ + __ram_size__;
-
-+__eeprom_workarea_start__ = ORIGIN(eeprom_emu);
-+__eeprom_workarea_size__  = LENGTH(eeprom_emu);
-+__eeprom_workarea_end__   = __eeprom_workarea_start__ + __eeprom_workarea_size__;
-+
- SECTIONS
- {
-   . = 0;
-
-
-
-Configuration/Startup for Infinity 60%
---------------------------------------
-Configuration:
-
-
-Clock:
-Inifinity   
-    FEI(FLL Engaged Internal) mode with core clock:48MHz, bus clock:48MHz, flash clock:24MHz
-    Clock dividor:
-    SIM_CLKDIV1[OUTDIV1] = 0 divide-by-1 for core clock
-    SIM_CLKDIV1[OUTDIV2] = 0 divide-by-1 for bus clock
-    SIM_CLKDIV1[OUTDIV4] = 1 divide-by-2 for flash clock
-    Internal reference clock:
-    MCG_C1[IREFS] = 1 Internal Reference Select for clock source for FLL
-    MCG_C1[IRCLKEN] = 1 Internal Reference Clock Enable
-    FLL multipilication:
-    MCG_C4[DMX32] = 1
-    MCG_C4[DRST_DRS] = 01   FLL factor 1464 * 32.768kHz = 48MHz
-
-chibios/os/hal/ports/KINETIS/K20x/hal_lld.c
-    k20x_clock_init(): called in __early_init() defined in board.c
-        disable watchdog and configure clock
-
-        configurable macros:
-        KINETIS_NO_INIT: whether init or not
-        KINETIS_MCG_MODE: clock mode   
-            KINETIS_MCG_MODE_FEI
-            KINETIS_MCG_MODE_PEE
-                hal/ports/KINETIS/K20x/hal_lld.h
-            
-
-chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.h
-    PALConfig pal_default_config
-    boardInit()
-    __early_init()
-    macro definitions for board infos, freq and mcu type
-
-chibios/os/hal/boards/FREESCALE_FREEDOM_K20D50M/board.c
-
-USB
-
-
-Startup
--------
-    common/ports/ARMCMx/GCC/crt0_v[67]m.s
-        Reset_Handler: startup code
-    common/ports/ARMCMx/GCC/crt1.c
-        __core_init(): weak
-        __early_init(): weak
-        __late_init(): weak
-        __default_exit(): weak
-            called from Reset_Handler of crt0
-    common/ports/ARMCMx/GCC/vector.c
-    common/ports/ARMCMx/GCC/ld/*.ld
-
-chibios/os/common/ports/ARMCMx/compilers/GCC/
-├── crt0_v6m.s
-├── crt0_v7m.s
-├── crt1.c
-├── ld
-│   ├── MK20DX128BLDR3.ld
-│   ├── MK20DX128BLDR4.ld
-│   ├── MK20DX128.ld
-│   ├── MK20DX256.ld
-│   ├── MKL25Z128.ld
-│   ├── MKL26Z128.ld
-│   ├── MKL26Z64.ld
-│   └── STM32L476xG.ld
-├── mk
-│   ├── startup_k20x5.mk
-│   ├── startup_k20x7.mk
-│   ├── startup_k20x.mk
-│   ├── startup_kl2x.mk
-│   └── startup_stm32l4xx.mk
-├── rules.ld
-├── rules.mk
-└── vectors.c
-
-chibios/os/hal/
-├── boards
-│   ├── FREESCALE_FREEDOM_K20D50M
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── MCHCK_K20
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── PJRC_TEENSY_3
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── PJRC_TEENSY_3_1
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── PJRC_TEENSY_LC
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── readme.txt
-│   ├── simulator
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   └── board.mk
-│   ├── ST_NUCLEO_F030R8
-│   │   ├── board.c
-│   │   ├── board.h
-│   │   ├── board.mk
-│   │   └── cfg
-│   │       └── board.chcfg
-├── hal.mk
-├── include
-│   ├── adc.h
-│   ├── can.h
-│   ├── dac.h
-│   ├── ext.h
-│   ├── gpt.h
-│   ├── hal_channels.h
-│   ├── hal_files.h
-│   ├── hal.h
-│   ├── hal_ioblock.h
-│   ├── hal_mmcsd.h
-│   ├── hal_queues.h
-│   ├── hal_streams.h
-│   ├── i2c.h
-│   ├── i2s.h
-│   ├── icu.h
-│   ├── mac.h
-│   ├── mii.h
-│   ├── mmc_spi.h
-│   ├── pal.h
-│   ├── pwm.h
-│   ├── rtc.h
-│   ├── sdc.h
-│   ├── serial.h
-│   ├── serial_usb.h
-│   ├── spi.h
-│   ├── st.h
-│   ├── uart.h
-│   └── usb.h
-├── lib
-│   └── streams
-│       ├── chprintf.c
-│       ├── chprintf.h
-│       ├── memstreams.c
-│       ├── memstreams.h
-│       ├── nullstreams.c
-│       └── nullstreams.h
-├── osal
-│   ├── nil
-│   │   ├── osal.c
-│   │   ├── osal.h
-│   │   └── osal.mk
-│   ├── os-less
-│   │   └── ARMCMx
-│   │       ├── osal.c
-│   │       ├── osal.h
-│   │       └── osal.mk
-│   └── rt
-│       ├── osal.c
-│       ├── osal.h
-│       └── osal.mk
-├── ports
-│   ├── AVR
-│   ├── common
-│   │   └── ARMCMx
-│   │       ├── mpu.h
-│   │       ├── nvic.c
-│   │       └── nvic.h
-│   ├── KINETIS
-│   │   ├── K20x
-│   │   │   ├── hal_lld.c
-│   │   │   ├── hal_lld.h
-│   │   │   ├── kinetis_registry.h
-│   │   │   ├── platform.dox
-│   │   │   ├── platform.mk
-│   │   │   ├── pwm_lld.c
-│   │   │   ├── pwm_lld.h
-│   │   │   ├── spi_lld.c
-│   │   │   └── spi_lld.h
-│   │   ├── KL2x
-│   │   │   ├── hal_lld.c
-│   │   │   ├── hal_lld.h
-│   │   │   ├── kinetis_registry.h
-│   │   │   ├── platform.mk
-│   │   │   ├── pwm_lld.c
-│   │   │   └── pwm_lld.h
-│   │   ├── LLD
-│   │   │   ├── adc_lld.c
-│   │   │   ├── adc_lld.h
-│   │   │   ├── ext_lld.c
-│   │   │   ├── ext_lld.h
-│   │   │   ├── gpt_lld.c
-│   │   │   ├── gpt_lld.h
-│   │   │   ├── i2c_lld.c
-│   │   │   ├── i2c_lld.h
-│   │   │   ├── pal_lld.c
-│   │   │   ├── pal_lld.h
-│   │   │   ├── serial_lld.c
-│   │   │   ├── serial_lld.h
-│   │   │   ├── st_lld.c
-│   │   │   ├── st_lld.h
-│   │   │   ├── usb_lld.c
-│   │   │   └── usb_lld.h
-│   │   └── README.md
-│   ├── LPC
-│   ├── simulator
-│   └── STM32
-├── src
-│   ├── adc.c
-│   ├── can.c
-│   ├── dac.c
-│   ├── ext.c
-│   ├── gpt.c
-│   ├── hal.c
-│   ├── hal_mmcsd.c
-│   ├── hal_queues.c
-│   ├── i2c.c
-│   ├── i2s.c
-│   ├── icu.c
-│   ├── mac.c
-│   ├── mmc_spi.c
-│   ├── pal.c
-│   ├── pwm.c
-│   ├── rtc.c
-│   ├── sdc.c
-│   ├── serial.c
-│   ├── serial_usb.c
-│   ├── spi.c
-│   ├── st.c
-│   ├── uart.c
-│   └── usb.c
-└── templates
-    ├── adc_lld.c
-    ├── adc_lld.h
-    ├── can_lld.c
-    ├── can_lld.h
-    ├── dac_lld.c
-    ├── dac_lld.h
-    ├── ext_lld.c
-    ├── ext_lld.h
-    ├── gpt_lld.c
-    ├── gpt_lld.h
-    ├── halconf.h
-    ├── hal_lld.c
-    ├── hal_lld.h
-    ├── i2c_lld.c
-    ├── i2c_lld.h
-    ├── i2s_lld.c
-    ├── i2s_lld.h
-    ├── icu_lld.c
-    ├── icu_lld.h
-    ├── mac_lld.c
-    ├── mac_lld.h
-    ├── mcuconf.h
-    ├── osal
-    │   ├── osal.c
-    │   ├── osal.h
-    │   └── osal.mk
-    ├── pal_lld.c
-    ├── pal_lld.h
-    ├── platform.mk
-    ├── pwm_lld.c
-    ├── pwm_lld.h
-    ├── rtc_lld.c
-    ├── rtc_lld.h
-    ├── sdc_lld.c
-    ├── sdc_lld.h
-    ├── serial_lld.c
-    ├── serial_lld.h
-    ├── spi_lld.c
-    ├── spi_lld.h
-    ├── st_lld.c
-    ├── st_lld.h
-    ├── uart_lld.c
-    ├── uart_lld.h
-    ├── usb_lld.c
-    └── usb_lld.h
diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/infinity_ergodox/Makefile
deleted file mode 100644 (file)
index 7edc03d..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# project specific files
-SRC =  matrix.c \
-       led.c
-
-## chip/board settings
-# - the next two should match the directories in
-#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-# - For Teensies, FAMILY = KINETIS and SERIES is either
-#   KL2x (LC) or K20x (3.0,3.1,3.2).
-# - For Infinity KB, SERIES = K20x
-MCU_FAMILY = KINETIS
-MCU_SERIES = K20x
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-#   or <this_dir>/ld/
-# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
-# - LDSCRIPT =
-#   - MKL26Z64 for Teensy LC
-#   - MK20DX128 for Teensy 3.0
-#   - MK20DX256 for Teensy 3.1 and 3.2
-#   - MK20DX128BLDR4 for Infinity 60% with Kiibohd bootloader
-#   - MK20DX256BLDR8 for Infinity ErgoDox with Kiibohd bootloader
-MCU_LDSCRIPT = MK20DX256BLDR8
-
-# Startup code to use
-#  - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-# - STARTUP =
-#   - kl2x for Teensy LC
-#   - k20x5 for Teensy 3.0 and Infinity 60%
-#   - k20x7 for Teensy 3.1, 3.2 and Infinity ErgoDox
-MCU_STARTUP = k20x7
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-#  or <this_dir>/boards
-# - BOARD =
-#   - PJRC_TEENSY_LC for Teensy LC
-#   - PJRC_TEENSY_3 for Teensy 3.0
-#   - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
-#   - MCHCK_K20 for Infinity KB
-#BOARD = MCHCK_K20
-BOARD = PJRC_TEENSY_3_1
-
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU  = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-# I.e. 6 for Teensy LC; 7 for Teensy 3.x
-ARMV = 7
-
-# Vector table for application
-# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
-# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration
-## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
-MOUSEKEY_ENABLE ?= yes # Mouse keys
-EXTRAKEY_ENABLE ?= yes # Audio control and System control
-CONSOLE_ENABLE ?= yes  # Console for debug
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes         # USB Nkey Rollover
-CUSTOM_MATRIX ?= yes # Custom matrix file
-SERIAL_LINK_ENABLE = yes
-VISUALIZER_ENABLE ?= yes
-LCD_ENABLE ?= yes
-LED_ENABLE ?= yes
-LCD_BACKLIGHT_ENABLE ?= yes
-
-ifdef LCD_ENABLE
-include drivers/gdisp/st7565ergodox/driver.mk
-endif
-
-ifdef LED_ENABLE
-include drivers/gdisp/IS31FL3731C/driver.mk
-endif
-
-ifndef QUANTUM_DIR
-       include ../../Makefile
-endif
\ No newline at end of file
diff --git a/keyboards/infinity_ergodox/bootloader_defs.h b/keyboards/infinity_ergodox/bootloader_defs.h
deleted file mode 100644 (file)
index c67153b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define KIIBOHD_BOOTLOADER
diff --git a/keyboards/infinity_ergodox/chconf.h b/keyboards/infinity_ergodox/chconf.h
deleted file mode 100644 (file)
index d59c35e..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-
-/**
- * @file    templates/chconf.h
- * @brief   Configuration file template.
- * @details A copy of this file must be placed in each project directory, it
- *          contains the application specific kernel settings.
- *
- * @addtogroup config
- * @details Kernel related settings and hooks.
- * @{
- */
-
-#ifndef _CHCONF_H_
-#define _CHCONF_H_
-
-#define _CHIBIOS_RT_CONF_
-
-/*===========================================================================*/
-/**
- * @name System timers settings
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief   System time counter resolution.
- * @note    Allowed values are 16 or 32 bits.
- */
-#define CH_CFG_ST_RESOLUTION                32
-
-/**
- * @brief   System tick frequency.
- * @details Frequency of the system timer that drives the system ticks. This
- *          setting also defines the system tick time unit.
- */
-#define CH_CFG_ST_FREQUENCY                 100000
-
-/**
- * @brief   Time delta constant for the tick-less mode.
- * @note    If this value is zero then the system uses the classic
- *          periodic tick. This value represents the minimum number
- *          of ticks that is safe to specify in a timeout directive.
- *          The value one is not valid, timeouts are rounded up to
- *          this value.
- */
-#define CH_CFG_ST_TIMEDELTA                 0
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Kernel parameters and options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief   Round robin interval.
- * @details This constant is the number of system ticks allowed for the
- *          threads before preemption occurs. Setting this value to zero
- *          disables the preemption for threads with equal priority and the
- *          round robin becomes cooperative. Note that higher priority
- *          threads can still preempt, the kernel is always preemptive.
- * @note    Disabling the round robin preemption makes the kernel more compact
- *          and generally faster.
- * @note    The round robin preemption is not supported in tickless mode and
- *          must be set to zero in that case.
- */
-#define CH_CFG_TIME_QUANTUM                 20
-
-/**
- * @brief   Managed RAM size.
- * @details Size of the RAM area to be managed by the OS. If set to zero
- *          then the whole available RAM is used. The core memory is made
- *          available to the heap allocator and/or can be used directly through
- *          the simplified core memory allocator.
- *
- * @note    In order to let the OS manage the whole RAM the linker script must
- *          provide the @p __heap_base__ and @p __heap_end__ symbols.
- * @note    Requires @p CH_CFG_USE_MEMCORE.
- */
-#define CH_CFG_MEMCORE_SIZE                 0
-
-/**
- * @brief   Idle thread automatic spawn suppression.
- * @details When this option is activated the function @p chSysInit()
- *          does not spawn the idle thread. The application @p main()
- *          function becomes the idle thread and must implement an
- *          infinite loop.
- */
-#define CH_CFG_NO_IDLE_THREAD               FALSE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Performance options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief   OS optimization.
- * @details If enabled then time efficient rather than space efficient code
- *          is used when two possible implementations exist.
- *
- * @note    This is not related to the compiler optimization options.
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_OPTIMIZE_SPEED               TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Subsystem options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief   Time Measurement APIs.
- * @details If enabled then the time measurement APIs are included in
- *          the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_TM                       FALSE
-
-/**
- * @brief   Threads registry APIs.
- * @details If enabled then the registry APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_REGISTRY                 TRUE
-
-/**
- * @brief   Threads synchronization APIs.
- * @details If enabled then the @p chThdWait() function is included in
- *          the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_WAITEXIT                 TRUE
-
-/**
- * @brief   Semaphores APIs.
- * @details If enabled then the Semaphores APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_SEMAPHORES               TRUE
-
-/**
- * @brief   Semaphores queuing mode.
- * @details If enabled then the threads are enqueued on semaphores by
- *          priority rather than in FIFO order.
- *
- * @note    The default is @p FALSE. Enable this if you have special
- *          requirements.
- * @note    Requires @p CH_CFG_USE_SEMAPHORES.
- */
-#define CH_CFG_USE_SEMAPHORES_PRIORITY      FALSE
-
-/**
- * @brief   Mutexes APIs.
- * @details If enabled then the mutexes APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_MUTEXES                  TRUE
-
-/**
- * @brief   Enables recursive behavior on mutexes.
- * @note    Recursive mutexes are heavier and have an increased
- *          memory footprint.
- *
- * @note    The default is @p FALSE.
- * @note    Requires @p CH_CFG_USE_MUTEXES.
- */
-#define CH_CFG_USE_MUTEXES_RECURSIVE        FALSE
-
-/**
- * @brief   Conditional Variables APIs.
- * @details If enabled then the conditional variables APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_CFG_USE_MUTEXES.
- */
-#define CH_CFG_USE_CONDVARS                 TRUE
-
-/**
- * @brief   Conditional Variables APIs with timeout.
- * @details If enabled then the conditional variables APIs with timeout
- *          specification are included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_CFG_USE_CONDVARS.
- */
-#define CH_CFG_USE_CONDVARS_TIMEOUT         TRUE
-
-/**
- * @brief   Events Flags APIs.
- * @details If enabled then the event flags APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_EVENTS                   TRUE
-
-/**
- * @brief   Events Flags APIs with timeout.
- * @details If enabled then the events APIs with timeout specification
- *          are included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_CFG_USE_EVENTS.
- */
-#define CH_CFG_USE_EVENTS_TIMEOUT           TRUE
-
-/**
- * @brief   Synchronous Messages APIs.
- * @details If enabled then the synchronous messages APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_MESSAGES                 TRUE
-
-/**
- * @brief   Synchronous Messages queuing mode.
- * @details If enabled then messages are served by priority rather than in
- *          FIFO order.
- *
- * @note    The default is @p FALSE. Enable this if you have special
- *          requirements.
- * @note    Requires @p CH_CFG_USE_MESSAGES.
- */
-#define CH_CFG_USE_MESSAGES_PRIORITY        FALSE
-
-/**
- * @brief   Mailboxes APIs.
- * @details If enabled then the asynchronous messages (mailboxes) APIs are
- *          included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_CFG_USE_SEMAPHORES.
- */
-#define CH_CFG_USE_MAILBOXES                TRUE
-
-/**
- * @brief   I/O Queues APIs.
- * @details If enabled then the I/O queues APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_QUEUES                   TRUE
-
-/**
- * @brief   Core Memory Manager APIs.
- * @details If enabled then the core memory manager APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_MEMCORE                  TRUE
-
-/**
- * @brief   Heap Allocator APIs.
- * @details If enabled then the memory heap allocator APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
- *          @p CH_CFG_USE_SEMAPHORES.
- * @note    Mutexes are recommended.
- */
-#define CH_CFG_USE_HEAP                     TRUE
-
-/**
- * @brief   Memory Pools Allocator APIs.
- * @details If enabled then the memory pools allocator APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#define CH_CFG_USE_MEMPOOLS                 TRUE
-
-/**
- * @brief   Dynamic Threads APIs.
- * @details If enabled then the dynamic threads creation APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_CFG_USE_WAITEXIT.
- * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
- */
-#define CH_CFG_USE_DYNAMIC                  TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Debug options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief   Debug option, kernel statistics.
- *
- * @note    The default is @p FALSE.
- */
-#define CH_DBG_STATISTICS                   FALSE
-
-/**
- * @brief   Debug option, system state check.
- * @details If enabled the correct call protocol for system APIs is checked
- *          at runtime.
- *
- * @note    The default is @p FALSE.
- */
-#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
-
-/**
- * @brief   Debug option, parameters checks.
- * @details If enabled then the checks on the API functions input
- *          parameters are activated.
- *
- * @note    The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_CHECKS                FALSE
-
-/**
- * @brief   Debug option, consistency checks.
- * @details If enabled then all the assertions in the kernel code are
- *          activated. This includes consistency checks inside the kernel,
- *          runtime anomalies and port-defined checks.
- *
- * @note    The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_ASSERTS               FALSE
-
-/**
- * @brief   Debug option, trace buffer.
- * @details If enabled then the context switch circular trace buffer is
- *          activated.
- *
- * @note    The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_TRACE                 FALSE
-
-/**
- * @brief   Debug option, stack checks.
- * @details If enabled then a runtime stack check is performed.
- *
- * @note    The default is @p FALSE.
- * @note    The stack check is performed in a architecture/port dependent way.
- *          It may not be implemented or some ports.
- * @note    The default failure mode is to halt the system with the global
- *          @p panic_msg variable set to @p NULL.
- */
-#define CH_DBG_ENABLE_STACK_CHECK           FALSE
-
-/**
- * @brief   Debug option, stacks initialization.
- * @details If enabled then the threads working area is filled with a byte
- *          value when a thread is created. This can be useful for the
- *          runtime measurement of the used stack.
- *
- * @note    The default is @p FALSE.
- */
-#define CH_DBG_FILL_THREADS                 FALSE
-
-/**
- * @brief   Debug option, threads profiling.
- * @details If enabled then a field is added to the @p thread_t structure that
- *          counts the system ticks occurred while executing the thread.
- *
- * @note    The default is @p FALSE.
- * @note    This debug option is not currently compatible with the
- *          tickless mode.
- */
-#define CH_DBG_THREADS_PROFILING            FALSE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Kernel hooks
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief   Threads descriptor structure extension.
- * @details User fields added to the end of the @p thread_t structure.
- */
-#define CH_CFG_THREAD_EXTRA_FIELDS                                          \
-  /* Add threads custom fields here.*/
-
-/**
- * @brief   Threads initialization hook.
- * @details User initialization code added to the @p chThdInit() API.
- *
- * @note    It is invoked from within @p chThdInit() and implicitly from all
- *          the threads creation APIs.
- */
-#define CH_CFG_THREAD_INIT_HOOK(tp) {                                       \
-  /* Add threads initialization code here.*/                                \
-}
-
-/**
- * @brief   Threads finalization hook.
- * @details User finalization code added to the @p chThdExit() API.
- *
- * @note    It is inserted into lock zone.
- * @note    It is also invoked when the threads simply return in order to
- *          terminate.
- */
-#define CH_CFG_THREAD_EXIT_HOOK(tp) {                                       \
-  /* Add threads finalization code here.*/                                  \
-}
-
-/**
- * @brief   Context switch hook.
- * @details This hook is invoked just before switching between threads.
- */
-#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) {                              \
-  /* Context switch code here.*/                                            \
-}
-
-/**
- * @brief   ISR enter hook.
- */
-#define CH_CFG_IRQ_PROLOGUE_HOOK() {                                        \
-  /* IRQ prologue code here.*/                                              \
-}
-
-/**
- * @brief   ISR exit hook.
- */
-#define CH_CFG_IRQ_EPILOGUE_HOOK() {                                        \
-  /* IRQ epilogue code here.*/                                              \
-}
-
-/**
- * @brief   Idle thread enter hook.
- * @note    This hook is invoked within a critical zone, no OS functions
- *          should be invoked from here.
- * @note    This macro can be used to activate a power saving mode.
- */
-#define CH_CFG_IDLE_ENTER_HOOK() {                                          \
-}
-
-/**
- * @brief   Idle thread leave hook.
- * @note    This hook is invoked within a critical zone, no OS functions
- *          should be invoked from here.
- * @note    This macro can be used to deactivate a power saving mode.
- */
-#define CH_CFG_IDLE_LEAVE_HOOK() {                                          \
-}
-
-/**
- * @brief   Idle Loop hook.
- * @details This hook is continuously invoked by the idle thread loop.
- */
-#define CH_CFG_IDLE_LOOP_HOOK() {                                           \
-  /* Idle loop code here.*/                                                 \
-}
-
-/**
- * @brief   System tick event hook.
- * @details This hook is invoked in the system tick handler immediately
- *          after processing the virtual timers queue.
- */
-#define CH_CFG_SYSTEM_TICK_HOOK() {                                         \
-  /* System tick event code here.*/                                         \
-}
-
-/**
- * @brief   System halt hook.
- * @details This hook is invoked in case to a system halting error before
- *          the system is halted.
- */
-#define CH_CFG_SYSTEM_HALT_HOOK(reason) {                                   \
-  /* System halt code here.*/                                               \
-}
-
-/**
- * @brief   Trace hook.
- * @details This hook is invoked each time a new record is written in the
- *          trace buffer.
- */
-#define CH_CFG_TRACE_HOOK(tep) {                                            \
-  /* Trace code here.*/                                                     \
-}
-
-/** @} */
-
-/*===========================================================================*/
-/* Port-specific settings (override port settings defaulted in chcore.h).    */
-/*===========================================================================*/
-
-#endif  /* _CHCONF_H_ */
-
-/** @} */
diff --git a/keyboards/infinity_ergodox/config.h b/keyboards/infinity_ergodox/config.h
deleted file mode 100644 (file)
index d24ee0f..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-Copyright 2015 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6464
-#define DEVICE_VER      0x0001
-/* in python2: list(u"whatever".encode('utf-16-le')) */
-/*   at most 32 characters or the ugly hack in usb_main.c borks */
-#define MANUFACTURER "TMK"
-#define USBSTR_MANUFACTURER    'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00'
-#define PRODUCT "Infinity keyboard/TMK"
-#define USBSTR_PRODUCT         'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00'
-
-/* key matrix size */
-#define MATRIX_ROWS 18
-#define MATRIX_COLS 5
-#define LOCAL_MATRIX_ROWS 9
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE    5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
-    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* Keymap for Infiity prototype */
-#define INFINITY_PROTOTYPE
-
-#define SERIAL_LINK_BAUD 562500
-#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1)
-// The visualizer needs gfx thread priorities
-#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2)
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h
deleted file mode 100644 (file)
index 2ea73f1..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef _GDISP_LLD_BOARD_H
-#define _GDISP_LLD_BOARD_H
-
-static const I2CConfig i2ccfg = {
-  400000 // clock speed (Hz); 400kHz max for IS31
-};
-
-#define GDISP_SCREEN_WIDTH  7
-#define GDISP_SCREEN_HEIGHT 7
-
-static const uint8_t led_mask[] = {
-       0xFF, 0x00, /* C1-1 -> C1-16 */
-       0xFF, 0x00, /* C2-1 -> C2-16 */
-       0xFF, 0x00, /* C3-1 -> C3-16 */
-       0xFF, 0x00, /* C4-1 -> C4-16 */
-       0x3F, 0x00, /* C5-1 -> C5-16 */
-       0x00, 0x00, /* C6-1 -> C6-16 */
-       0x00, 0x00, /* C7-1 -> C7-16 */
-       0x00, 0x00, /* C8-1 -> C8-16 */
-       0x00, 0x00, /* C9-1 -> C9-16 */
-};
-
-// The address of the LED
-#define LA(c, r) (c + r * 16 )
-// Need to be an address that is not mapped, but inside the range of the controller matrix
-#define NA LA(8, 8)
-
-// The numbers in the comments are the led numbers DXX on the PCB
-// The mapping is taken from the schematic of left hand side
-static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = {
-//   45        44        43        42        41        40        39
-   { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)},
-//   52        51        50        49        48        47        46
-   { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) },
-//   58        57        56        55        54        53        N/A
-   { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA },
-//   67        66        65        64        63        62        61
-   { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) },
-//   76        75        74        73        72        60        59
-   { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) },
-//   N/A       N/A       N/A       N/A       N/A       N/A       68
-   { NA,       NA,       NA,       NA,       NA,       NA,       LA(5, 4) },
-//   N/A       N/A       N/A       N/A       71        70        69
-   { NA,       NA,       NA,       NA,       LA(6, 2), LA(6, 1), LA(6, 0) },
-};
-
-
-#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND
-#define IS31_TIMEOUT 5000
-
-static GFXINLINE void init_board(GDisplay *g) {
-    (void) g;
-    /* I2C pins */
-    palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL
-    palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA
-    palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL);
-    palClearPad(GPIOB, 16);
-    /* start I2C */
-    i2cStart(&I2CD1, &i2ccfg);
-    // try high drive (from kiibohd)
-    I2CD1.i2c->C2 |= I2Cx_C2_HDRS;
-    // try glitch fixing (from kiibohd)
-    I2CD1.i2c->FLT = 4;
-}
-
-static GFXINLINE void post_init_board(GDisplay *g) {
-       (void) g;
-}
-
-static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) {
-    (void) g;
-    return led_mask;
-}
-
-static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y)
-{
-    (void) g;
-    return led_mapping[y][x];
-}
-
-static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) {
-    (void) g;
-    if(!shutdown) {
-        palSetPad(GPIOB, 16);
-    }
-    else {
-        palClearPad(GPIOB, 16);
-    }
-}
-
-static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
-       (void) g;
-       i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT));
-}
-
-#endif /* _GDISP_LLD_BOARD_H */
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk
deleted file mode 100644 (file)
index f32d0d8..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-GFXINC += drivers/gdisp/IS31FL3731C
-GFXSRC += drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
deleted file mode 100644 (file)
index 1d21f0c..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "gfx.h"
-
-#if GFX_USE_GDISP
-
-#define GDISP_DRIVER_VMT                       GDISPVMT_IS31FL3731C_ERGODOX
-#include "drivers/gdisp/IS31FL3731C/gdisp_lld_config.h"
-#include "src/gdisp/gdisp_driver.h"
-
-#include "board_IS31FL3731C.h"
-
-/*===========================================================================*/
-/* Driver local definitions.                                                 */
-/*===========================================================================*/
-
-#ifndef GDISP_SCREEN_HEIGHT
-       #define GDISP_SCREEN_HEIGHT             9
-#endif
-#ifndef GDISP_SCREEN_WIDTH
-       #define GDISP_SCREEN_WIDTH              16
-#endif
-#ifndef GDISP_INITIAL_CONTRAST
-       #define GDISP_INITIAL_CONTRAST  0
-#endif
-#ifndef GDISP_INITIAL_BACKLIGHT
-       #define GDISP_INITIAL_BACKLIGHT 100
-#endif
-
-#define GDISP_FLG_NEEDFLUSH                    (GDISP_FLG_DRIVER<<0)
-
-#define IS31_ADDR_DEFAULT 0x74
-
-#define IS31_REG_CONFIG  0x00
-// bits in reg
-#define IS31_REG_CONFIG_PICTUREMODE 0x00
-#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08
-#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18
-// D2:D0 bits are starting frame for autoplay mode
-
-#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode
-
-#define IS31_REG_AUTOPLAYCTRL1 0x02
-// D6:D4 number of loops (000=infty)
-// D2:D0 number of frames to be used
-
-#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms)
-
-#define IS31_REG_DISPLAYOPT 0x05
-#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames
-#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8
-// D2:D0 bits blink period time (*0.27s)
-
-#define IS31_REG_AUDIOSYNC 0x06
-#define IS31_REG_AUDIOSYNC_ENABLE 0x1
-
-#define IS31_REG_FRAMESTATE 0x07
-
-#define IS31_REG_BREATHCTRL1 0x08
-// D6:D4 fade out time (26ms*2^i)
-// D2:D0 fade in time (26ms*2^i)
-
-#define IS31_REG_BREATHCTRL2 0x09
-#define IS31_REG_BREATHCTRL2_ENABLE 0x10
-// D2:D0 extinguish time (3.5ms*2^i)
-
-#define IS31_REG_SHUTDOWN 0x0A
-#define IS31_REG_SHUTDOWN_OFF 0x0
-#define IS31_REG_SHUTDOWN_ON 0x1
-
-#define IS31_REG_AGCCTRL 0x0B
-#define IS31_REG_ADCRATE 0x0C
-
-#define IS31_COMMANDREGISTER 0xFD
-#define IS31_FUNCTIONREG 0x0B    // helpfully called 'page nine'
-#define IS31_FUNCTIONREG_SIZE 0xD
-
-#define IS31_FRAME_SIZE 0xB4
-
-#define IS31_PWM_REG 0x24
-#define IS31_PWM_SIZE 0x90
-
-#define IS31_LED_MASK_SIZE 0x12
-#define IS31_SCREEN_WIDTH 16
-
-#define IS31
-
-//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm
-const unsigned char cie[256] = {
-    0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
-    1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
-    2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
-    3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
-    5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
-    7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
-    10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
-    13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
-    17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
-    22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
-    28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
-    34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
-    41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
-    49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
-    58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
-    68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
-    80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
-    92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
-    106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
-    121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
-    138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
-    155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
-    175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
-    196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
-    218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
-    242, 245, 247, 250, 252, 255,
-};
-
-
-/*===========================================================================*/
-/* Driver local functions.                                                   */
-/*===========================================================================*/
-
-typedef struct{
-    uint8_t write_buffer_offset;
-    uint8_t write_buffer[IS31_FRAME_SIZE];
-    uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH];
-    uint8_t page;
-}__attribute__((__packed__)) PrivData;
-
-// Some common routines and macros
-#define PRIV(g)                         ((PrivData*)g->priv)
-
-/*===========================================================================*/
-/* Driver exported functions.                                                */
-/*===========================================================================*/
-
-static GFXINLINE void write_page(GDisplay* g, uint8_t page) {
-    uint8_t tx[2] __attribute__((aligned(2)));
-    tx[0] = IS31_COMMANDREGISTER;
-    tx[1] = page;
-    write_data(g, tx, 2);
-}
-
-static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) {
-    uint8_t tx[2] __attribute__((aligned(2)));
-    tx[0] = reg;
-    tx[1] = data;
-    write_page(g, page);
-    write_data(g, tx, 2);
-}
-
-static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) {
-    PRIV(g)->write_buffer_offset = offset;
-    write_page(g, page);
-    write_data(g, (uint8_t*)PRIV(g), length + 1);
-}
-
-LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
-       // The private area is the display surface.
-       g->priv = gfxAlloc(sizeof(PrivData));
-    __builtin_memset(PRIV(g), 0, sizeof(PrivData));
-       PRIV(g)->page = 0;
-
-       // Initialise the board interface
-       init_board(g);
-       gfxSleepMilliseconds(10);
-
-    // zero function page, all registers (assuming full_page is all zeroes)
-    write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE);
-    set_hardware_shutdown(g, false);
-    gfxSleepMilliseconds(10);
-    // software shutdown
-    write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
-    gfxSleepMilliseconds(10);
-    // zero function page, all registers
-    write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE);
-    gfxSleepMilliseconds(10);
-
-
-    // zero all LED registers on all 8 pages, and enable the mask
-    __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE);
-    for(uint8_t i=0; i<8; i++) {
-        write_ram(g, i, 0, IS31_FRAME_SIZE);
-        gfxSleepMilliseconds(1);
-    }
-
-    // software shutdown disable (i.e. turn stuff on)
-    write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
-    gfxSleepMilliseconds(10);
-
-    // Finish Init
-    post_init_board(g);
-
-       /* Initialise the GDISP structure */
-       g->g.Width = GDISP_SCREEN_WIDTH;
-       g->g.Height = GDISP_SCREEN_HEIGHT;
-       g->g.Orientation = GDISP_ROTATE_0;
-       g->g.Powermode = powerOn;
-       g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
-       g->g.Contrast = GDISP_INITIAL_CONTRAST;
-       return TRUE;
-}
-
-#if GDISP_HARDWARE_FLUSH
-       LLDSPEC void gdisp_lld_flush(GDisplay *g) {
-               // Don't flush if we don't need it.
-               if (!(g->flags & GDISP_FLG_NEEDFLUSH))
-                       return;
-
-               PRIV(g)->page++;
-               PRIV(g)->page %= 2;
-               // TODO: some smarter algorithm for this
-               // We should run only one physical page at a time
-               // This way we don't need to send so much data, and
-               // we could use slightly less memory
-               uint8_t* src = PRIV(g)->frame_buffer;
-               for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
-                   for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
-                       PRIV(g)->write_buffer[get_led_address(g, x, y)]=cie[*src];
-                       ++src;
-                   }
-               }
-        write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE);
-        gfxSleepMilliseconds(1);
-        write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page);
-
-               g->flags &= ~GDISP_FLG_NEEDFLUSH;
-       }
-#endif
-
-#if GDISP_HARDWARE_DRAWPIXEL
-       LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) {
-               coord_t         x, y;
-
-               switch(g->g.Orientation) {
-               default:
-               case GDISP_ROTATE_0:
-                       x = g->p.x;
-                       y = g->p.y;
-                       break;
-               case GDISP_ROTATE_180:
-                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
-                       y = g->p.y;
-                       break;
-               }
-               PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color);
-               g->flags |= GDISP_FLG_NEEDFLUSH;
-       }
-#endif
-
-#if GDISP_HARDWARE_PIXELREAD
-       LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
-               coord_t         x, y;
-
-               switch(g->g.Orientation) {
-               default:
-               case GDISP_ROTATE_0:
-                       x = g->p.x;
-                       y = g->p.y;
-                       break;
-               case GDISP_ROTATE_180:
-                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
-                       y = g->p.y;
-                       break;
-               }
-               return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]);
-       }
-#endif
-
-#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL
-       LLDSPEC void gdisp_lld_control(GDisplay *g) {
-               switch(g->p.x) {
-               case GDISP_CONTROL_POWER:
-                       if (g->g.Powermode == (powermode_t)g->p.ptr)
-                               return;
-                       switch((powermode_t)g->p.ptr) {
-                       case powerOff:
-                       case powerSleep:
-                       case powerDeepSleep:
-                write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF);
-                               break;
-                       case powerOn:
-                write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON);
-                               break;
-                       default:
-                               return;
-                       }
-                       g->g.Powermode = (powermode_t)g->p.ptr;
-                       return;
-
-               case GDISP_CONTROL_ORIENTATION:
-                       if (g->g.Orientation == (orientation_t)g->p.ptr)
-                               return;
-                       switch((orientation_t)g->p.ptr) {
-                       /* Rotation is handled by the drawing routines */
-                       case GDISP_ROTATE_0:
-                       case GDISP_ROTATE_180:
-                               g->g.Height = GDISP_SCREEN_HEIGHT;
-                               g->g.Width = GDISP_SCREEN_WIDTH;
-                               break;
-                       case GDISP_ROTATE_90:
-                       case GDISP_ROTATE_270:
-                               g->g.Height = GDISP_SCREEN_WIDTH;
-                               g->g.Width = GDISP_SCREEN_HEIGHT;
-                               break;
-                       default:
-                               return;
-                       }
-                       g->g.Orientation = (orientation_t)g->p.ptr;
-                       return;
-
-               case GDISP_CONTROL_CONTRAST:
-                       return;
-               }
-       }
-#endif // GDISP_NEED_CONTROL
-
-#endif // GFX_USE_GDISP
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h
deleted file mode 100644 (file)
index bb28ad7..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef _GDISP_LLD_CONFIG_H
-#define _GDISP_LLD_CONFIG_H
-
-#if GFX_USE_GDISP
-
-/*===========================================================================*/
-/* Driver hardware support.                                                  */
-/*===========================================================================*/
-
-#define GDISP_HARDWARE_FLUSH                   TRUE            // This controller requires flushing
-#define GDISP_HARDWARE_DRAWPIXEL               TRUE
-#define GDISP_HARDWARE_PIXELREAD               TRUE
-#define GDISP_HARDWARE_CONTROL                 TRUE
-
-#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_GRAY256
-
-#endif /* GFX_USE_GDISP */
-
-#endif /* _GDISP_LLD_CONFIG_H */
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk
deleted file mode 100644 (file)
index 16c3f80..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-GFXINC += drivers/gdisp/emulator_lcd
-GFXSRC += drivers/gdisp/emulator_lcd/emulator_lcd.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c
deleted file mode 100644 (file)
index babfe2b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#define GDISP_DRIVER_VMT                       GDISPVMT_EMULATOR_LCD_ERGODOX
-#define GDISP_HARDWARE_DRAWPIXEL               TRUE
-#define GDISP_HARDWARE_PIXELREAD               TRUE
-#define GDISP_HARDWARE_CONTROL                 TRUE
-#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
-#define GDISP_SCREEN_WIDTH                     128
-#define GDISP_SCREEN_HEIGHT                    32
-#define ROTATE_180_IS_FLIP
-
-#include "emulator/emulator_driver_impl.h"
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk
deleted file mode 100644 (file)
index 2554344..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-GFXINC += drivers/gdisp/emulator_led
-GFXSRC += drivers/gdisp/emulator_led/emulator_led.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c
deleted file mode 100644 (file)
index b0ebcdc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#define GDISP_DRIVER_VMT                           GDISPVMT_EMULATOR_LED_ERGODOX
-#define GDISP_HARDWARE_DRAWPIXEL               TRUE
-#define GDISP_HARDWARE_PIXELREAD               TRUE
-#define GDISP_HARDWARE_CONTROL                 TRUE
-#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
-#define GDISP_SCREEN_WIDTH                     7
-#define GDISP_SCREEN_HEIGHT                    7
-#define ROTATE_180_IS_FLIP
-
-#include "emulator/emulator_driver_impl.h"
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h
deleted file mode 100644 (file)
index 290571c..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- *              http://ugfx.org/license.html
- */
-
-#ifndef _GDISP_LLD_BOARD_H
-#define _GDISP_LLD_BOARD_H
-
-#include "print.h"
-
-#define ST7565_LCD_BIAS         ST7565_LCD_BIAS_9 // actually 6
-#define ST7565_ADC              ST7565_ADC_NORMAL
-#define ST7565_COM_SCAN         ST7565_COM_SCAN_DEC
-#define ST7565_PAGE_ORDER       0,1,2,3
-/*
- * Custom page order for several LCD boards, e.g. HEM12864-99
- * #define ST7565_PAGE_ORDER       4,5,6,7,0,1,2,3
- */
-
-#define ST7565_GPIOPORT GPIOC
-#define ST7565_PORT PORTC
-#define ST7565_A0_PIN 7
-#define ST7565_RST_PIN 8
-#define ST7565_MOSI_PIN 6
-#define ST7565_SLCK_PIN 5
-#define ST7565_SS_PIN 4
-
-#define palSetPadModeRaw(portname, bits) \
-    ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits
-
-#define palSetPadModeNamed(portname, portmode) \
-    palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode)
-
-#define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2)
-// DSPI Clock and Transfer Attributes
-// Frame Size: 8 bits
-// MSB First
-// CLK Low by default
-static const SPIConfig spi1config = {
-       NULL,
-       /* HW dependent part.*/
-       ST7565_GPIOPORT,
-    ST7565_SS_PIN,
-    SPIx_CTARn_FMSZ(7)
-    | SPIx_CTARn_ASC(7)
-    | SPIx_CTARn_DT(7)
-    | SPIx_CTARn_CSSCK(7)
-    | SPIx_CTARn_PBR(0)
-    | SPIx_CTARn_BR(7)
-       //SPI_CR1_BR_0
-};
-
-static bool_t st7565_is_data_mode = 1;
-
-static GFXINLINE void init_board(GDisplay *g) {
-    (void) g;
-    palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN);
-    st7565_is_data_mode = 1;
-    palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN);
-    palSetPadModeRaw(MOSI, ST7565_SPI_MODE);
-    palSetPadModeRaw(SLCK, ST7565_SPI_MODE);
-    palSetPadModeRaw(SS, ST7565_SPI_MODE);
-
-    spiInit();
-    spiStart(&SPID1, &spi1config);
-    spiSelect(&SPID1);
-}
-
-static GFXINLINE void post_init_board(GDisplay *g) {
-       (void) g;
-}
-
-static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) {
-    (void) g;
-    if (state) {
-        palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN);
-    }
-    else {
-        palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN);
-    }
-}
-
-static GFXINLINE void acquire_bus(GDisplay *g) {
-    (void) g;
-    // Only the LCD is using the SPI bus, so no need to acquire
-    // spiAcquireBus(&SPID1);
-}
-
-static GFXINLINE void release_bus(GDisplay *g) {
-    (void) g;
-    // Only the LCD is using the SPI bus, so no need to release
-    //spiReleaseBus(&SPID1);
-}
-
-static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) {
-       (void) g;
-       if (st7565_is_data_mode) {
-           // The sleeps need to be at lest 10 vs 25 ns respectively
-           // So let's sleep two ticks, one tick might not be enough
-           // if we are at the end of the tick
-           chThdSleep(2);
-        palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN);
-        chThdSleep(2);
-        st7565_is_data_mode = 0;
-       }
-       spiSend(&SPID1, 1, &cmd);
-}
-
-static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) {
-       (void) g;
-       if (!st7565_is_data_mode) {
-           // The sleeps need to be at lest 10 vs 25 ns respectively
-           // So let's sleep two ticks, one tick might not be enough
-           // if we are at the end of the tick
-           chThdSleep(2);
-        palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN);
-           chThdSleep(2);
-        st7565_is_data_mode = 1;
-       }
-       spiSend(&SPID1, length, data);
-}
-
-#endif /* _GDISP_LLD_BOARD_H */
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk
deleted file mode 100644 (file)
index 889a1a0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-GFXINC += drivers/gdisp/st7565ergodox
-GFXSRC += drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
deleted file mode 100644 (file)
index c33aea8..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- *              http://ugfx.org/license.html
- */
-
-#include "gfx.h"
-
-#if GFX_USE_GDISP
-
-#define GDISP_DRIVER_VMT                       GDISPVMT_ST7565_ERGODOX
-#include "drivers/gdisp/st7565ergodox/gdisp_lld_config.h"
-#include "src/gdisp/gdisp_driver.h"
-
-#include "board_ST7565.h"
-
-/*===========================================================================*/
-/* Driver local definitions.                                                 */
-/*===========================================================================*/
-
-#ifndef GDISP_SCREEN_HEIGHT
-       #define GDISP_SCREEN_HEIGHT             32
-#endif
-#ifndef GDISP_SCREEN_WIDTH
-       #define GDISP_SCREEN_WIDTH              128
-#endif
-#ifndef GDISP_INITIAL_CONTRAST
-       #define GDISP_INITIAL_CONTRAST  0
-#endif
-#ifndef GDISP_INITIAL_BACKLIGHT
-       #define GDISP_INITIAL_BACKLIGHT 100
-#endif
-
-#define GDISP_FLG_NEEDFLUSH                    (GDISP_FLG_DRIVER<<0)
-
-#include "drivers/gdisp/st7565ergodox/st7565.h"
-
-/*===========================================================================*/
-/* Driver config defaults for backward compatibility.                       */
-/*===========================================================================*/
-#ifndef ST7565_LCD_BIAS
-  #define ST7565_LCD_BIAS         ST7565_LCD_BIAS_7
-#endif
-#ifndef ST7565_ADC
-  #define ST7565_ADC              ST7565_ADC_NORMAL
-#endif
-#ifndef ST7565_COM_SCAN
-  #define ST7565_COM_SCAN         ST7565_COM_SCAN_INC
-#endif
-#ifndef ST7565_PAGE_ORDER
-  #define ST7565_PAGE_ORDER       0,1,2,3
-#endif
-
-/*===========================================================================*/
-/* Driver local functions.                                                   */
-/*===========================================================================*/
-
-typedef struct{
-    bool_t buffer2;
-    uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8];
-}PrivData;
-
-// Some common routines and macros
-#define PRIV(g)                         ((PrivData*)g->priv)
-#define RAM(g)                                                 (PRIV(g)->ram)
-#define write_cmd2(g, cmd1, cmd2)              { write_cmd(g, cmd1); write_cmd(g, cmd2); }
-#define write_cmd3(g, cmd1, cmd2, cmd3)        { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); }
-
-// Some common routines and macros
-#define delay(us)                      gfxSleepMicroseconds(us)
-#define delay_ms(ms)           gfxSleepMilliseconds(ms)
-
-#define xyaddr(x, y)           ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH)
-#define xybit(y)                       (1<<((y)&7))
-
-/*===========================================================================*/
-/* Driver exported functions.                                                */
-/*===========================================================================*/
-
-/*
- * As this controller can't update on a pixel boundary we need to maintain the
- * the entire display surface in memory so that we can do the necessary bit
- * operations. Fortunately it is a small display in monochrome.
- * 64 * 128 / 8 = 1024 bytes.
- */
-
-LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
-       // The private area is the display surface.
-       g->priv = gfxAlloc(sizeof(PrivData));
-       PRIV(g)->buffer2 = false;
-
-       // Initialise the board interface
-       init_board(g);
-
-       // Hardware reset
-       setpin_reset(g, TRUE);
-       gfxSleepMilliseconds(20);
-       setpin_reset(g, FALSE);
-       gfxSleepMilliseconds(20);
-
-       acquire_bus(g);
-    write_cmd(g, ST7565_DISPLAY_OFF);
-       write_cmd(g, ST7565_LCD_BIAS);
-    write_cmd(g, ST7565_ADC);
-    write_cmd(g, ST7565_COM_SCAN);
-    
-    write_cmd(g, ST7565_START_LINE | 0);
-
-       write_cmd(g, ST7565_RESISTOR_RATIO | 0x6);
-
-       // turn on voltage converter (VC=1, VR=0, VF=0)
-       write_cmd(g, ST7565_POWER_CONTROL | 0x04);
-       delay_ms(50);
-
-       // turn on voltage regulator (VC=1, VR=1, VF=0)
-       write_cmd(g, ST7565_POWER_CONTROL | 0x06);
-       delay_ms(50);
-
-       // turn on voltage follower (VC=1, VR=1, VF=1)
-       write_cmd(g, ST7565_POWER_CONTROL | 0x07);
-       delay_ms(50);
-
-       write_cmd(g, 0xE2);
-    write_cmd(g, ST7565_COM_SCAN);
-       write_cmd2(g, ST7565_CONTRAST, GDISP_INITIAL_CONTRAST*64/101);
-       //write_cmd2(g, ST7565_CONTRAST, 0);
-       write_cmd(g, ST7565_DISPLAY_ON);
-       write_cmd(g, ST7565_ALLON_NORMAL);
-       write_cmd(g, ST7565_INVERT_DISPLAY);
-
-       write_cmd(g, ST7565_RMW);
-
-    // Finish Init
-    post_init_board(g);
-
-       // Release the bus
-       release_bus(g);
-
-       /* Initialise the GDISP structure */
-       g->g.Width = GDISP_SCREEN_WIDTH;
-       g->g.Height = GDISP_SCREEN_HEIGHT;
-       g->g.Orientation = GDISP_ROTATE_0;
-       g->g.Powermode = powerOn;
-       g->g.Backlight = GDISP_INITIAL_BACKLIGHT;
-       g->g.Contrast = GDISP_INITIAL_CONTRAST;
-       return TRUE;
-}
-
-#if GDISP_HARDWARE_FLUSH
-       LLDSPEC void gdisp_lld_flush(GDisplay *g) {
-               unsigned        p;
-
-               // Don't flush if we don't need it.
-               if (!(g->flags & GDISP_FLG_NEEDFLUSH))
-                       return;
-
-               acquire_bus(g);
-               unsigned dstOffset = (PRIV(g)->buffer2 ? 4 : 0);
-               for (p = 0; p < 4; p++) {
-                       write_cmd(g, ST7565_PAGE | (p + dstOffset));
-                       write_cmd(g, ST7565_COLUMN_MSB | 0);
-                       write_cmd(g, ST7565_COLUMN_LSB | 0);
-                       write_cmd(g, ST7565_RMW);
-                       write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH);
-               }
-               unsigned line = (PRIV(g)->buffer2 ? 32 : 0);
-        write_cmd(g, ST7565_START_LINE | line);
-        PRIV(g)->buffer2 = !PRIV(g)->buffer2;
-               release_bus(g);
-
-               g->flags &= ~GDISP_FLG_NEEDFLUSH;
-       }
-#endif
-
-#if GDISP_HARDWARE_DRAWPIXEL
-       LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) {
-               coord_t         x, y;
-
-               switch(g->g.Orientation) {
-               default:
-               case GDISP_ROTATE_0:
-                       x = g->p.x;
-                       y = g->p.y;
-                       break;
-               case GDISP_ROTATE_90:
-                       x = g->p.y;
-                       y = GDISP_SCREEN_HEIGHT-1 - g->p.x;
-                       break;
-               case GDISP_ROTATE_180:
-                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
-                       y = GDISP_SCREEN_HEIGHT-1 - g->p.y;
-                       break;
-               case GDISP_ROTATE_270:
-                       x = GDISP_SCREEN_HEIGHT-1 - g->p.y;
-                       y = g->p.x;
-                       break;
-               }
-               if (gdispColor2Native(g->p.color) != Black)
-                       RAM(g)[xyaddr(x, y)] |= xybit(y);
-               else
-                       RAM(g)[xyaddr(x, y)] &= ~xybit(y);
-               g->flags |= GDISP_FLG_NEEDFLUSH;
-       }
-#endif
-
-#if GDISP_HARDWARE_PIXELREAD
-       LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) {
-               coord_t         x, y;
-
-               switch(g->g.Orientation) {
-               default:
-               case GDISP_ROTATE_0:
-                       x = g->p.x;
-                       y = g->p.y;
-                       break;
-               case GDISP_ROTATE_90:
-                       x = g->p.y;
-                       y = GDISP_SCREEN_HEIGHT-1 - g->p.x;
-                       break;
-               case GDISP_ROTATE_180:
-                       x = GDISP_SCREEN_WIDTH-1 - g->p.x;
-                       y = GDISP_SCREEN_HEIGHT-1 - g->p.y;
-                       break;
-               case GDISP_ROTATE_270:
-                       x = GDISP_SCREEN_HEIGHT-1 - g->p.y;
-                       y = g->p.x;
-                       break;
-               }
-               return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black;
-       }
-#endif
-
-#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL
-       LLDSPEC void gdisp_lld_control(GDisplay *g) {
-               switch(g->p.x) {
-               case GDISP_CONTROL_POWER:
-                       if (g->g.Powermode == (powermode_t)g->p.ptr)
-                               return;
-                       switch((powermode_t)g->p.ptr) {
-                       case powerOff:
-                       case powerSleep:
-                       case powerDeepSleep:
-                               acquire_bus(g);
-                               write_cmd(g, ST7565_DISPLAY_OFF);
-                               release_bus(g);
-                               break;
-                       case powerOn:
-                               acquire_bus(g);
-                               write_cmd(g, ST7565_DISPLAY_ON);
-                               release_bus(g);
-                               break;
-                       default:
-                               return;
-                       }
-                       g->g.Powermode = (powermode_t)g->p.ptr;
-                       return;
-
-               case GDISP_CONTROL_ORIENTATION:
-                       if (g->g.Orientation == (orientation_t)g->p.ptr)
-                               return;
-                       switch((orientation_t)g->p.ptr) {
-                       /* Rotation is handled by the drawing routines */
-                       case GDISP_ROTATE_0:
-                       case GDISP_ROTATE_180:
-                               g->g.Height = GDISP_SCREEN_HEIGHT;
-                               g->g.Width = GDISP_SCREEN_WIDTH;
-                               break;
-                       case GDISP_ROTATE_90:
-                       case GDISP_ROTATE_270:
-                               g->g.Height = GDISP_SCREEN_WIDTH;
-                               g->g.Width = GDISP_SCREEN_HEIGHT;
-                               break;
-                       default:
-                               return;
-                       }
-                       g->g.Orientation = (orientation_t)g->p.ptr;
-                       return;
-
-               case GDISP_CONTROL_CONTRAST:
-            if ((unsigned)g->p.ptr > 100)
-               g->p.ptr = (void *)100;
-                       acquire_bus(g);
-                       write_cmd2(g, ST7565_CONTRAST, ((((unsigned)g->p.ptr)<<6)/101) & 0x3F);
-                       release_bus(g);
-            g->g.Contrast = (unsigned)g->p.ptr;
-                       return;
-               }
-       }
-#endif // GDISP_NEED_CONTROL
-
-#endif // GFX_USE_GDISP
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h
deleted file mode 100644 (file)
index 48587b9..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- *              http://ugfx.org/license.html
- */
-
-#ifndef _GDISP_LLD_CONFIG_H
-#define _GDISP_LLD_CONFIG_H
-
-#if GFX_USE_GDISP
-
-/*===========================================================================*/
-/* Driver hardware support.                                                  */
-/*===========================================================================*/
-
-#define GDISP_HARDWARE_FLUSH                   TRUE            // This controller requires flushing
-#define GDISP_HARDWARE_DRAWPIXEL               TRUE
-#define GDISP_HARDWARE_PIXELREAD               TRUE
-#define GDISP_HARDWARE_CONTROL                 TRUE
-
-#define GDISP_LLD_PIXELFORMAT                  GDISP_PIXELFORMAT_MONO
-
-#endif /* GFX_USE_GDISP */
-
-#endif /* _GDISP_LLD_CONFIG_H */
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h
deleted file mode 100644 (file)
index 48636b3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- *              http://ugfx.org/license.html
- */
-
-#ifndef _ST7565_H
-#define _ST7565_H
-
-#define ST7565_CONTRAST             0x81
-#define ST7565_ALLON_NORMAL         0xA4
-#define ST7565_ALLON                0xA5
-#define ST7565_POSITIVE_DISPLAY     0xA6
-#define ST7565_INVERT_DISPLAY       0xA7
-#define ST7565_DISPLAY_OFF          0xAE
-#define ST7565_DISPLAY_ON           0xAF
-
-#define ST7565_LCD_BIAS_7           0xA3
-#define ST7565_LCD_BIAS_9           0xA2
-
-#define ST7565_ADC_NORMAL           0xA0
-#define ST7565_ADC_REVERSE          0xA1
-
-#define ST7565_COM_SCAN_INC         0xC0
-#define ST7565_COM_SCAN_DEC         0xC8
-
-#define ST7565_START_LINE           0x40
-#define ST7565_PAGE                 0xB0
-#define ST7565_COLUMN_MSB           0x10
-#define ST7565_COLUMN_LSB           0x00
-#define ST7565_RMW                  0xE0
-
-#define ST7565_RESISTOR_RATIO       0x20
-#define ST7565_POWER_CONTROL        0x28
-
-#endif /* _ST7565_H */
diff --git a/keyboards/infinity_ergodox/gfxconf.h b/keyboards/infinity_ergodox/gfxconf.h
deleted file mode 100644 (file)
index 8caa577..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/**
- * This file has a different license to the rest of the uGFX system.
- * You can copy, modify and distribute this file as you see fit.
- * You do not need to publish your source modifications to this file.
- * The only thing you are not permitted to do is to relicense it
- * under a different license.
- */
-
-/**
- * Copy this file into your project directory and rename it as gfxconf.h
- * Edit your copy to turn on the uGFX features you want to use.
- * The values below are the defaults.
- *
- * Only remove the comments from lines where you want to change the
- * default value. This allows definitions to be included from
- * driver makefiles when required and provides the best future
- * compatibility for your project.
- *
- * Please use spaces instead of tabs in this file.
- */
-
-#ifndef _GFXCONF_H
-#define _GFXCONF_H
-
-
-///////////////////////////////////////////////////////////////////////////
-// GOS - One of these must be defined, preferably in your Makefile       //
-///////////////////////////////////////////////////////////////////////////
-//#define GFX_USE_OS_CHIBIOS                           TRUE
-//#define GFX_USE_OS_FREERTOS                          FALSE
-//    #define GFX_FREERTOS_USE_TRACE                   FALSE
-//#define GFX_USE_OS_WIN32                             FALSE
-//#define GFX_USE_OS_LINUX                             FALSE
-//#define GFX_USE_OS_OSX                               FALSE
-//#define GFX_USE_OS_ECOS                              FALSE
-//#define GFX_USE_OS_RAWRTOS                           FALSE
-//#define GFX_USE_OS_ARDUINO                           FALSE
-//#define GFX_USE_OS_KEIL                              FALSE
-//#define GFX_USE_OS_CMSIS                             FALSE
-//#define GFX_USE_OS_RAW32                             FALSE
-//    #define INTERRUPTS_OFF()                         optional_code
-//    #define INTERRUPTS_ON()                          optional_code
-// These are not defined by default for some reason
-#define GOS_NEED_X_THREADS     FALSE
-#define GOS_NEED_X_HEAP                FALSE
-
-// Options that (should where relevant) apply to all operating systems
-    #define GFX_NO_INLINE                            FALSE
-//    #define GFX_COMPILER                             GFX_COMPILER_UNKNOWN
-//    #define GFX_CPU                                  GFX_CPU_UNKNOWN
-//    #define GFX_OS_HEAP_SIZE                         0
-//    #define GFX_OS_NO_INIT                           FALSE
-//    #define GFX_OS_INIT_NO_WARNING                   FALSE
-//    #define GFX_OS_PRE_INIT_FUNCTION                 myHardwareInitRoutine
-//    #define GFX_OS_EXTRA_INIT_FUNCTION               myOSInitRoutine
-//    #define GFX_OS_EXTRA_DEINIT_FUNCTION             myOSDeInitRoutine
-
-
-///////////////////////////////////////////////////////////////////////////
-// GDISP                                                                 //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GDISP                                TRUE
-
-//#define GDISP_NEED_AUTOFLUSH                         FALSE
-//#define GDISP_NEED_TIMERFLUSH                        FALSE
-//#define GDISP_NEED_VALIDATION                        TRUE
-//#define GDISP_NEED_CLIP                              TRUE
-#define GDISP_NEED_CIRCLE                            TRUE
-#define GDISP_NEED_ELLIPSE                           TRUE
-#define GDISP_NEED_ARC                               TRUE
-#define GDISP_NEED_ARCSECTORS                        TRUE
-#define GDISP_NEED_CONVEX_POLYGON                    TRUE
-//#define GDISP_NEED_SCROLL                            FALSE
-#define GDISP_NEED_PIXELREAD                         TRUE
-#define GDISP_NEED_CONTROL                           TRUE
-//#define GDISP_NEED_QUERY                             FALSE
-//#define GDISP_NEED_MULTITHREAD                       FALSE
-//#define GDISP_NEED_STREAMING                         FALSE
-#define GDISP_NEED_TEXT                              TRUE
-//    #define GDISP_NEED_TEXT_WORDWRAP                 FALSE
-//    #define GDISP_NEED_ANTIALIAS                     FALSE
-//    #define GDISP_NEED_UTF8                          FALSE
-    #define GDISP_NEED_TEXT_KERNING                  TRUE
-//    #define GDISP_INCLUDE_FONT_UI1                   FALSE
-//    #define GDISP_INCLUDE_FONT_UI2                   FALSE           // The smallest preferred font.
-//    #define GDISP_INCLUDE_FONT_LARGENUMBERS          FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS10          FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS12          FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS16          FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS20          FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS24          FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS32          FALSE
-    #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12      TRUE
-//    #define GDISP_INCLUDE_FONT_FIXED_10X20           FALSE
-//    #define GDISP_INCLUDE_FONT_FIXED_7X14            FALSE
-    #define GDISP_INCLUDE_FONT_FIXED_5X8             TRUE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA       FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA       FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA       FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA       FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA       FALSE
-//    #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA   FALSE
-//    #define GDISP_INCLUDE_USER_FONTS                 FALSE
-
-//#define GDISP_NEED_IMAGE                             FALSE
-//    #define GDISP_NEED_IMAGE_NATIVE                  FALSE
-//    #define GDISP_NEED_IMAGE_GIF                     FALSE
-//    #define GDISP_NEED_IMAGE_BMP                     FALSE
-//        #define GDISP_NEED_IMAGE_BMP_1               FALSE
-//        #define GDISP_NEED_IMAGE_BMP_4               FALSE
-//        #define GDISP_NEED_IMAGE_BMP_4_RLE           FALSE
-//        #define GDISP_NEED_IMAGE_BMP_8               FALSE
-//        #define GDISP_NEED_IMAGE_BMP_8_RLE           FALSE
-//        #define GDISP_NEED_IMAGE_BMP_16              FALSE
-//        #define GDISP_NEED_IMAGE_BMP_24              FALSE
-//        #define GDISP_NEED_IMAGE_BMP_32              FALSE
-//    #define GDISP_NEED_IMAGE_JPG                     FALSE
-//    #define GDISP_NEED_IMAGE_PNG                     FALSE
-//    #define GDISP_NEED_IMAGE_ACCOUNTING              FALSE
-#ifdef EMULATOR
-#define GDISP_NEED_PIXMAP                            TRUE
-#endif
-//    #define GDISP_NEED_PIXMAP_IMAGE                  FALSE
-
-//#define GDISP_DEFAULT_ORIENTATION                    GDISP_ROTATE_LANDSCAPE    // If not defined the native hardware orientation is used.
-//#define GDISP_LINEBUF_SIZE                           128
-//#define GDISP_STARTUP_COLOR                          Black
-#define GDISP_NEED_STARTUP_LOGO                      FALSE
-
-//#define GDISP_TOTAL_DISPLAYS                          2
-
-#ifndef EMULATOR
-#define GDISP_DRIVER_LIST                            GDISPVMT_ST7565_ERGODOX, GDISPVMT_IS31FL3731C_ERGODOX
-#else
-#define GDISP_DRIVER_LIST                            GDISPVMT_EMULATOR_LCD_ERGODOX, GDISPVMT_EMULATOR_LED_ERGODOX
-#endif
-
-    #ifdef GDISP_DRIVER_LIST
-        // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability
-        #define GDISP_HARDWARE_STREAM_WRITE          FALSE
-        #define GDISP_HARDWARE_STREAM_READ           FALSE
-        #define GDISP_HARDWARE_STREAM_POS            FALSE
-        #define GDISP_HARDWARE_DRAWPIXEL             TRUE
-        #define GDISP_HARDWARE_CLEARS                FALSE
-        #define GDISP_HARDWARE_FILLS                 FALSE
-        #define GDISP_HARDWARE_BITFILLS              FALSE
-        #define GDISP_HARDWARE_SCROLL                FALSE
-        #define GDISP_HARDWARE_PIXELREAD             TRUE
-        #define GDISP_HARDWARE_CONTROL               TRUE
-        #define GDISP_HARDWARE_QUERY                 FALSE
-        #define GDISP_HARDWARE_CLIP                  FALSE
-
-        #define GDISP_PIXELFORMAT                    GDISP_PIXELFORMAT_RGB888
-    #endif
-
-// The custom format is not defined for some reason, so define it as error
-// so we don't get compiler warnings
-#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR
-
-#define GDISP_USE_GFXNET                             FALSE
-//    #define GDISP_GFXNET_PORT                        13001
-//    #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP         FALSE
-//    #define GDISP_DONT_WAIT_FOR_NET_DISPLAY          FALSE
-//    #define GDISP_GFXNET_UNSAFE_SOCKETS              FALSE
-
-
-///////////////////////////////////////////////////////////////////////////
-// GWIN                                                                  //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GWIN                                 FALSE
-
-//#define GWIN_NEED_WINDOWMANAGER                      FALSE
-//    #define GWIN_REDRAW_IMMEDIATE                    FALSE
-//    #define GWIN_REDRAW_SINGLEOP                     FALSE
-//    #define GWIN_NEED_FLASHING                       FALSE
-//        #define GWIN_FLASHING_PERIOD                 250
-
-//#define GWIN_NEED_CONSOLE                            FALSE
-//    #define GWIN_CONSOLE_USE_HISTORY                 FALSE
-//        #define GWIN_CONSOLE_HISTORY_AVERAGING       FALSE
-//        #define GWIN_CONSOLE_HISTORY_ATCREATE        FALSE
-//    #define GWIN_CONSOLE_ESCSEQ                      FALSE
-//    #define GWIN_CONSOLE_USE_BASESTREAM              FALSE
-//    #define GWIN_CONSOLE_USE_FLOAT                   FALSE
-//#define GWIN_NEED_GRAPH                              FALSE
-//#define GWIN_NEED_GL3D                               FALSE
-
-//#define GWIN_NEED_WIDGET                             FALSE
-//#define GWIN_FOCUS_HIGHLIGHT_WIDTH                   1
-//    #define GWIN_NEED_LABEL                          FALSE
-//        #define GWIN_LABEL_ATTRIBUTE                 FALSE
-//    #define GWIN_NEED_BUTTON                         FALSE
-//        #define GWIN_BUTTON_LAZY_RELEASE             FALSE
-//    #define GWIN_NEED_SLIDER                         FALSE
-//        #define GWIN_SLIDER_NOSNAP                   FALSE
-//        #define GWIN_SLIDER_DEAD_BAND                5
-//        #define GWIN_SLIDER_TOGGLE_INC               20
-//    #define GWIN_NEED_CHECKBOX                       FALSE
-//    #define GWIN_NEED_IMAGE                          FALSE
-//        #define GWIN_NEED_IMAGE_ANIMATION            FALSE
-//    #define GWIN_NEED_RADIO                          FALSE
-//    #define GWIN_NEED_LIST                           FALSE
-//        #define GWIN_NEED_LIST_IMAGES                FALSE
-//    #define GWIN_NEED_PROGRESSBAR                    FALSE
-//        #define GWIN_PROGRESSBAR_AUTO                FALSE
-//    #define GWIN_NEED_KEYBOARD                       FALSE
-//        #define GWIN_KEYBOARD_DEFAULT_LAYOUT         VirtualKeyboard_English1
-//        #define GWIN_NEED_KEYBOARD_ENGLISH1          TRUE
-//    #define GWIN_NEED_TEXTEDIT                       FALSE
-//    #define GWIN_FLAT_STYLING                        FALSE
-//    #define GWIN_WIDGET_TAGS                         FALSE
-
-//#define GWIN_NEED_CONTAINERS                         FALSE
-//    #define GWIN_NEED_CONTAINER                      FALSE
-//    #define GWIN_NEED_FRAME                          FALSE
-//    #define GWIN_NEED_TABSET                         FALSE
-//        #define GWIN_TABSET_TABHEIGHT                18
-
-
-///////////////////////////////////////////////////////////////////////////
-// GEVENT                                                                //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GEVENT                               TRUE
-
-//#define GEVENT_ASSERT_NO_RESOURCE                    FALSE
-//#define GEVENT_MAXIMUM_SIZE                          32
-//#define GEVENT_MAX_SOURCE_LISTENERS                  32
-
-
-///////////////////////////////////////////////////////////////////////////
-// GTIMER                                                                //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GTIMER                               FALSE
-
-//#define GTIMER_THREAD_PRIORITY                       HIGH_PRIORITY
-//#define GTIMER_THREAD_WORKAREA_SIZE                  2048
-
-
-///////////////////////////////////////////////////////////////////////////
-// GQUEUE                                                                //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GQUEUE                               FALSE
-
-//#define GQUEUE_NEED_ASYNC                            FALSE
-//#define GQUEUE_NEED_GSYNC                            FALSE
-//#define GQUEUE_NEED_FSYNC                            FALSE
-//#define GQUEUE_NEED_BUFFERS                          FALSE
-
-///////////////////////////////////////////////////////////////////////////
-// GINPUT                                                                //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GINPUT                               FALSE
-
-//#define GINPUT_NEED_MOUSE                            FALSE
-//    #define GINPUT_TOUCH_STARTRAW                    FALSE
-//    #define GINPUT_TOUCH_NOTOUCH                     FALSE
-//    #define GINPUT_TOUCH_NOCALIBRATE                 FALSE
-//    #define GINPUT_TOUCH_NOCALIBRATE_GUI             FALSE
-//    #define GINPUT_MOUSE_POLL_PERIOD                 25
-//    #define GINPUT_MOUSE_CLICK_TIME                  300
-//    #define GINPUT_TOUCH_CXTCLICK_TIME               700
-//    #define GINPUT_TOUCH_USER_CALIBRATION_LOAD       FALSE
-//    #define GINPUT_TOUCH_USER_CALIBRATION_SAVE       FALSE
-//    #define GMOUSE_DRIVER_LIST                       GMOUSEVMT_Win32, GMOUSEVMT_Win32
-//#define GINPUT_NEED_KEYBOARD                         FALSE
-//    #define GINPUT_KEYBOARD_POLL_PERIOD              200
-//    #define GKEYBOARD_DRIVER_LIST                    GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32
-//    #define GKEYBOARD_LAYOUT_OFF                     FALSE
-//        #define GKEYBOARD_LAYOUT_SCANCODE2_US        FALSE
-//#define GINPUT_NEED_TOGGLE                           FALSE
-//#define GINPUT_NEED_DIAL                             FALSE
-
-
-///////////////////////////////////////////////////////////////////////////
-// GFILE                                                                 //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GFILE                                FALSE
-
-//#define GFILE_NEED_PRINTG                            FALSE
-//#define GFILE_NEED_SCANG                             FALSE
-//#define GFILE_NEED_STRINGS                           FALSE
-//#define GFILE_NEED_FILELISTS                         FALSE
-//#define GFILE_NEED_STDIO                             FALSE
-//#define GFILE_NEED_NOAUTOMOUNT                       FALSE
-//#define GFILE_NEED_NOAUTOSYNC                        FALSE
-
-//#define GFILE_NEED_MEMFS                             FALSE
-//#define GFILE_NEED_ROMFS                             FALSE
-//#define GFILE_NEED_RAMFS                             FALSE
-//#define GFILE_NEED_FATFS                             FALSE
-//#define GFILE_NEED_NATIVEFS                          FALSE
-//#define GFILE_NEED_CHBIOSFS                          FALSE
-
-//#define GFILE_ALLOW_FLOATS                           FALSE
-//#define GFILE_ALLOW_DEVICESPECIFIC                   FALSE
-//#define GFILE_MAX_GFILES                             3
-
-///////////////////////////////////////////////////////////////////////////
-// GADC                                                                  //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GADC                                 FALSE
-
-//#define GADC_MAX_LOWSPEED_DEVICES                    4
-
-
-///////////////////////////////////////////////////////////////////////////
-// GAUDIO                                                                //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GAUDIO                               FALSE
-// There seems to be a bug in the ugfx code, the wrong define is used
-// So define it in order to avoid warnings
-#define GFX_USE_GAUDIN                               GFX_USE_GAUDIO
-//    #define GAUDIO_NEED_PLAY                         FALSE
-//    #define GAUDIO_NEED_RECORD                       FALSE
-
-
-///////////////////////////////////////////////////////////////////////////
-// GMISC                                                                 //
-///////////////////////////////////////////////////////////////////////////
-#define GFX_USE_GMISC                                TRUE
-
-//#define GMISC_NEED_ARRAYOPS                          FALSE
-//#define GMISC_NEED_FASTTRIG                          FALSE
-//#define GMISC_NEED_FIXEDTRIG                         FALSE
-//#define GMISC_NEED_INVSQRT                           FALSE
-//    #define GMISC_INVSQRT_MIXED_ENDIAN               FALSE
-//    #define GMISC_INVSQRT_REAL_SLOW                  FALSE
-#define GMISC_NEED_MATRIXFLOAT2D                     TRUE
-#define GMISC_NEED_MATRIXFIXED2D                     FALSE
-
-#endif /* _GFXCONF_H */
diff --git a/keyboards/infinity_ergodox/halconf.h b/keyboards/infinity_ergodox/halconf.h
deleted file mode 100644 (file)
index 55dd5e8..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-
-/**
- * @file    templates/halconf.h
- * @brief   HAL configuration header.
- * @details HAL configuration file, this file allows to enable or disable the
- *          various device drivers from your application. You may also use
- *          this file in order to override the device drivers default settings.
- *
- * @addtogroup HAL_CONF
- * @{
- */
-
-#ifndef _HALCONF_H_
-#define _HALCONF_H_
-
-#include "mcuconf.h"
-
-/**
- * @brief   Enables the PAL subsystem.
- */
-#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
-#define HAL_USE_PAL                 TRUE
-#endif
-
-/**
- * @brief   Enables the ADC subsystem.
- */
-#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
-#define HAL_USE_ADC                 FALSE
-#endif
-
-/**
- * @brief   Enables the CAN subsystem.
- */
-#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
-#define HAL_USE_CAN                 FALSE
-#endif
-
-/**
- * @brief   Enables the DAC subsystem.
- */
-#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
-#define HAL_USE_DAC                 FALSE
-#endif
-
-/**
- * @brief   Enables the EXT subsystem.
- */
-#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
-#define HAL_USE_EXT                 FALSE
-#endif
-
-/**
- * @brief   Enables the GPT subsystem.
- */
-#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
-#define HAL_USE_GPT                 FALSE
-#endif
-
-/**
- * @brief   Enables the I2C subsystem.
- */
-#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
-#define HAL_USE_I2C                 TRUE
-#endif
-
-/**
- * @brief   Enables the I2S subsystem.
- */
-#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
-#define HAL_USE_I2S                 FALSE
-#endif
-
-/**
- * @brief   Enables the ICU subsystem.
- */
-#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
-#define HAL_USE_ICU                 FALSE
-#endif
-
-/**
- * @brief   Enables the MAC subsystem.
- */
-#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
-#define HAL_USE_MAC                 FALSE
-#endif
-
-/**
- * @brief   Enables the MMC_SPI subsystem.
- */
-#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_MMC_SPI             FALSE
-#endif
-
-/**
- * @brief   Enables the PWM subsystem.
- */
-#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
-#define HAL_USE_PWM                 FALSE
-#endif
-
-/**
- * @brief   Enables the RTC subsystem.
- */
-#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
-#define HAL_USE_RTC                 FALSE
-#endif
-
-/**
- * @brief   Enables the SDC subsystem.
- */
-#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
-#define HAL_USE_SDC                 FALSE
-#endif
-
-/**
- * @brief   Enables the SERIAL subsystem.
- */
-#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL              TRUE
-#endif
-
-/**
- * @brief   Enables the SERIAL over USB subsystem.
- */
-#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL_USB          TRUE
-#endif
-
-/**
- * @brief   Enables the SPI subsystem.
- */
-#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_SPI                 TRUE
-#endif
-
-/**
- * @brief   Enables the UART subsystem.
- */
-#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
-#define HAL_USE_UART                FALSE
-#endif
-
-/**
- * @brief   Enables the USB subsystem.
- */
-#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
-#define HAL_USE_USB                 TRUE
-#endif
-
-/**
- * @brief   Enables the WDG subsystem.
- */
-#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
-#define HAL_USE_WDG                 FALSE
-#endif
-
-/*===========================================================================*/
-/* ADC driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Enables synchronous APIs.
- * @note    Disabling this option saves both code and data space.
- */
-#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
-#define ADC_USE_WAIT                TRUE
-#endif
-
-/**
- * @brief   Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
- * @note    Disabling this option saves both code and data space.
- */
-#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define ADC_USE_MUTUAL_EXCLUSION    TRUE
-#endif
-
-/*===========================================================================*/
-/* CAN driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Sleep mode related APIs inclusion switch.
- */
-#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
-#define CAN_USE_SLEEP_MODE          TRUE
-#endif
-
-/*===========================================================================*/
-/* I2C driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Enables the mutual exclusion APIs on the I2C bus.
- */
-#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define I2C_USE_MUTUAL_EXCLUSION    TRUE
-#endif
-
-/*===========================================================================*/
-/* MAC driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Enables an event sources for incoming packets.
- */
-#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
-#define MAC_USE_ZERO_COPY           FALSE
-#endif
-
-/**
- * @brief   Enables an event sources for incoming packets.
- */
-#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
-#define MAC_USE_EVENTS              TRUE
-#endif
-
-/*===========================================================================*/
-/* MMC_SPI driver related settings.                                          */
-/*===========================================================================*/
-
-/**
- * @brief   Delays insertions.
- * @details If enabled this options inserts delays into the MMC waiting
- *          routines releasing some extra CPU time for the threads with
- *          lower priority, this may slow down the driver a bit however.
- *          This option is recommended also if the SPI driver does not
- *          use a DMA channel and heavily loads the CPU.
- */
-#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
-#define MMC_NICE_WAITING            TRUE
-#endif
-
-/*===========================================================================*/
-/* SDC driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Number of initialization attempts before rejecting the card.
- * @note    Attempts are performed at 10mS intervals.
- */
-#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
-#define SDC_INIT_RETRY              100
-#endif
-
-/**
- * @brief   Include support for MMC cards.
- * @note    MMC support is not yet implemented so this option must be kept
- *          at @p FALSE.
- */
-#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
-#define SDC_MMC_SUPPORT             FALSE
-#endif
-
-/**
- * @brief   Delays insertions.
- * @details If enabled this options inserts delays into the MMC waiting
- *          routines releasing some extra CPU time for the threads with
- *          lower priority, this may slow down the driver a bit however.
- */
-#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
-#define SDC_NICE_WAITING            TRUE
-#endif
-
-/*===========================================================================*/
-/* SERIAL driver related settings.                                           */
-/*===========================================================================*/
-
-/**
- * @brief   Default bit rate.
- * @details Configuration parameter, this is the baud rate selected for the
- *          default configuration.
- */
-#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
-#define SERIAL_DEFAULT_BITRATE      38400
-#endif
-
-/**
- * @brief   Serial buffers size.
- * @details Configuration parameter, you can change the depth of the queue
- *          buffers depending on the requirements of your application.
- * @note    The default is 64 bytes for both the transmission and receive
- *          buffers.
- */
-#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
-#define SERIAL_BUFFERS_SIZE         128
-#endif
-
-/*===========================================================================*/
-/* SERIAL_USB driver related setting.                                        */
-/*===========================================================================*/
-
-/**
- * @brief   Serial over USB buffers size.
- * @details Configuration parameter, the buffer size must be a multiple of
- *          the USB data endpoint maximum packet size.
- * @note    The default is 64 bytes for both the transmission and receive
- *          buffers.
- */
-#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
-#define SERIAL_USB_BUFFERS_SIZE     256
-#endif
-
-/*===========================================================================*/
-/* SPI driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Enables synchronous APIs.
- * @note    Disabling this option saves both code and data space.
- */
-#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
-#define SPI_USE_WAIT                TRUE
-#endif
-
-/**
- * @brief   Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
- * @note    Disabling this option saves both code and data space.
- */
-#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define SPI_USE_MUTUAL_EXCLUSION    TRUE
-#endif
-
-/*===========================================================================*/
-/* USB driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief   Enables synchronous APIs.
- * @note    Disabling this option saves both code and data space.
- */
-#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
-#define USB_USE_WAIT                TRUE
-#endif
-
-#endif /* _HALCONF_H_ */
-
-/** @} */
diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/infinity_ergodox/infinity_ergodox.c
deleted file mode 100644 (file)
index 87ed40f..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#include "infinity_ergodox.h"
-#include "ch.h"
-#include "hal.h"
-#include "serial_link/system/serial_link.h"
-#include "lcd_backlight.h"
-
-void init_serial_link_hal(void) {
-    PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
-    PORTA->PCR[2] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(2);
-    PORTE->PCR[0] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(3);
-    PORTE->PCR[1] = PORTx_PCRn_DSE | PORTx_PCRn_SRE | PORTx_PCRn_MUX(3);
-}
-
-#define RED_PIN 1
-#define GREEN_PIN 2
-#define BLUE_PIN 3
-#define CHANNEL_RED FTM0->CHANNEL[0]
-#define CHANNEL_GREEN FTM0->CHANNEL[1]
-#define CHANNEL_BLUE FTM0->CHANNEL[2]
-
-#define RGB_PORT PORTC
-#define RGB_PORT_GPIO GPIOC
-
-// Base FTM clock selection (72 MHz system clock)
-// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period
-// Higher pre-scalar will use the most power (also look the best)
-// Pre-scalar calculations
-// 0 -      72 MHz -> 549 Hz
-// 1 -      36 MHz -> 275 Hz
-// 2 -      18 MHz -> 137 Hz
-// 3 -       9 MHz ->  69 Hz (Slightly visible flicker)
-// 4 -   4 500 kHz ->  34 Hz (Visible flickering)
-// 5 -   2 250 kHz ->  17 Hz
-// 6 -   1 125 kHz ->   9 Hz
-// 7 - 562 500  Hz ->   4 Hz
-// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
-// Which will reduce the brightness range
-#define PRESCALAR_DEFINE 0
-
-void lcd_backlight_hal_init(void) {
-       // Setup Backlight
-    SIM->SCGC6 |= SIM_SCGC6_FTM0;
-    FTM0->CNT = 0; // Reset counter
-
-       // PWM Period
-       // 16-bit maximum
-       FTM0->MOD = 0xFFFF;
-
-       // Set FTM to PWM output - Edge Aligned, Low-true pulses
-#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0)
-       CHANNEL_RED.CnSC = CNSC_MODE;
-       CHANNEL_GREEN.CnSC = CNSC_MODE;
-       CHANNEL_BLUE.CnSC = CNSC_MODE;
-
-       // System clock, /w prescalar setting
-       FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE);
-
-       CHANNEL_RED.CnV = 0;
-       CHANNEL_GREEN.CnV = 0;
-       CHANNEL_BLUE.CnV = 0;
-
-       RGB_PORT_GPIO->PDDR |= (1 << RED_PIN);
-       RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN);
-       RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN);
-
-#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4)
-    RGB_PORT->PCR[RED_PIN] = RGB_MODE;
-    RGB_PORT->PCR[GREEN_PIN] = RGB_MODE;
-    RGB_PORT->PCR[BLUE_PIN] = RGB_MODE;
-}
-
-void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
-       CHANNEL_RED.CnV = r;
-       CHANNEL_GREEN.CnV = g;
-       CHANNEL_BLUE.CnV = b;
-}
diff --git a/keyboards/infinity_ergodox/infinity_ergodox.h b/keyboards/infinity_ergodox/infinity_ergodox.h
deleted file mode 100644 (file)
index de72675..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_
-#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_
-
-#include "quantum.h"
-
-#define KEYMAP( \
-    A80, A70, A60, A50, A40, A30, A20,  \
-    A81, A71, A61, A51, A41, A31, A21,  \
-    A82, A72, A62, A52, A42, A32,       \
-    A83, A73, A63, A53, A43, A33, A23,  \
-    A84, A74, A64, A54, A44,            \
-                                  A13, A03, \
-                                       A04, \
-                             A34, A24, A14, \
-         B20, B30, B40, B50, B60, B70, B80, \
-         B21, B31, B41, B51, B61, B71, B81, \
-              B32, B42, B52, B62, B72, B82, \
-         B23, B33, B43, B53, B63, B73, B83, \
-                   B44, B54, B64, B74, B84, \
-    B03, B13,     \
-    B04,          \
-    B14, B24, B34 \
-) { \
-    { KC_NO,    KC_NO,    KC_NO,    KC_##A03, KC_##A04 }, \
-    { KC_NO,    KC_NO,    KC_NO,    KC_##A13, KC_##A14 }, \
-    { KC_##A20, KC_##A21, KC_NO,    KC_##A23, KC_##A24 }, \
-    { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \
-    { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \
-    { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \
-    { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \
-    { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \
-    { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \
-    { KC_NO,    KC_NO,    KC_NO,    KC_##B03, KC_##B04 }, \
-    { KC_NO,    KC_NO,    KC_NO,    KC_##B13, KC_##B14 }, \
-    { KC_##B20, KC_##B21, KC_NO,    KC_##B23, KC_##B24 }, \
-    { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \
-    { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \
-    { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \
-    { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \
-    { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \
-    { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 }  \
-}
-
-#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */
diff --git a/keyboards/infinity_ergodox/keymaps/default/keymap.c b/keyboards/infinity_ergodox/keymaps/default/keymap.c
deleted file mode 100644 (file)
index f1e6b1c..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "infinity_ergodox.h"
-
-// Workaround for old keymap format
-#define KC_RESET RESET
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    KEYMAP(  // layer 0 : default
-        // left hand
-        EQL, 1,   2,   3,   4,   5,   ESC,
-        BSLS,Q,   W,   E,   R,   T,   FN1,
-        TAB, A,   S,   D,   F,   G,
-        LSFT,Z,   X,   C,   V,   B,   FN0,
-        LGUI,GRV, BSLS,LEFT,RGHT,
-                                      LCTL,LALT,
-                                           HOME,
-                                 BSPC,DEL, END,
-        // right hand
-             FN2, 6,   7,   8,   9,   0,   MINS,
-             LBRC,Y,   U,   I,   O,   P,   RBRC,
-                  H,   J,   K,   L,   SCLN,QUOT,
-             FN0, N,   M,   COMM,DOT, SLSH,RSFT,
-                       LEFT,DOWN,UP,  RGHT,RGUI,
-        RALT,RCTL,
-        PGUP,
-        PGDN,ENT, SPC
-    ),
-
-    KEYMAP(  // layer 1 : function and symbol keys
-        // left hand
-        TRNS,F1,  F2,  F3,  F4,  F5,  F11,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,
-                                      TRNS,TRNS,
-                                           TRNS,
-                                 TRNS,TRNS,TRNS,
-        // right hand
-             F12, F6,  F7,  F8,  F9,  F10, TRNS,
-             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-                  TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-                       TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,
-        TRNS,
-        TRNS,TRNS,TRNS
-    ),
-
-    KEYMAP(  // layer 2 : keyboard functions
-        // left hand
-        RESET,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,
-                                      TRNS,TRNS,
-                                           TRNS,
-                                 TRNS,TRNS,TRNS,
-        // right hand
-             TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-                  TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-             TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-                       TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,
-        TRNS,
-        TRNS,TRNS,TRNS
-    ),
-
-    KEYMAP(  // layer 3: numpad
-        // left hand
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
-        TRNS,TRNS,TRNS,TRNS,TRNS,
-                                      TRNS,TRNS,
-                                           TRNS,
-                                 TRNS,TRNS,TRNS,
-        // right hand
-             TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
-             TRNS,NO,  P7,  P8,  P9,  PMNS,BSPC,
-                  NO,  P4,  P5,  P6,  PPLS,PENT,
-             TRNS,NO,  P1,  P2,  P3,  PPLS,PENT,
-                       P0,  PDOT,SLSH,PENT,PENT,
-        TRNS,TRNS,
-        TRNS,
-        TRNS,TRNS,TRNS
-    ),
-};
-const uint16_t fn_actions[] = {
-    ACTION_LAYER_MOMENTARY(1),                      // FN0 - switch to Layer1
-    ACTION_LAYER_SET(2, ON_PRESS),                  // FN1 - set Layer2
-    ACTION_LAYER_TOGGLE(3),                         // FN2 - toggle Layer3 aka Numpad layer
-    ACTION_LAYER_SET(0, ON_PRESS),                  // FN3 - set Layer0
-};
diff --git a/keyboards/infinity_ergodox/keymaps/default/visualizer.c b/keyboards/infinity_ergodox/keymaps/default/visualizer.c
deleted file mode 100644 (file)
index c0d335c..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-// Currently we are assuming that both the backlight and LCD are enabled
-// But it's entirely possible to write a custom visualizer that use only
-// one of them
-#ifndef LCD_BACKLIGHT_ENABLE
-#error This visualizer needs that LCD backlight is enabled
-#endif
-
-#ifndef LCD_ENABLE
-#error This visualizer needs that LCD is enabled
-#endif
-
-#include "visualizer.h"
-#include "led_test.h"
-
-static const char* welcome_text[] = {"TMK", "Infinity Ergodox"};
-
-// Just an example how to write custom keyframe functions, we could have moved
-// all this into the init function
-bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) {
-    (void)animation;
-    // Read the uGFX documentation for information how to use the displays
-    // http://wiki.ugfx.org/index.php/Main_Page
-    gdispClear(White);
-    // You can use static variables for things that can't be found in the animation
-    // or state structs
-    gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black);
-    gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black);
-    // Always remember to flush the display
-    gdispFlush();
-    // you could set the backlight color as well, but we won't do it here, since
-    // it's part of the following animation
-    // lcd_backlight_color(hue, saturation, intensity);
-    // We don't need constant updates, just drawing the screen once is enough
-    return false;
-}
-
-// Feel free to modify the animations below, or even add new ones if needed
-
-// Don't worry, if the startup animation is long, you can use the keyboard like normal
-// during that time
-static keyframe_animation_t startup_animation = {
-    .num_frames = 4,
-    .loop = false,
-    .frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0},
-    .frame_functions = {
-            display_welcome,
-            keyframe_animate_backlight_color,
-            keyframe_no_operation,
-            enable_visualization
-    },
-};
-
-// The color animation animates the LCD color when you change layers
-static keyframe_animation_t color_animation = {
-    .num_frames = 2,
-    .loop = false,
-    // Note that there's a 200 ms no-operation frame,
-    // this prevents the color from changing when activating the layer
-    // momentarily
-    .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)},
-    .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color},
-};
-
-// The LCD animation alternates between the layer name display and a
-// bitmap that displays all active layers
-static keyframe_animation_t lcd_animation = {
-    .num_frames = 2,
-    .loop = true,
-    .frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)},
-    .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap},
-};
-
-static keyframe_animation_t suspend_animation = {
-    .num_frames = 3,
-    .loop = false,
-    .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},
-    .frame_functions = {
-            keyframe_display_layer_text,
-            keyframe_animate_backlight_color,
-            keyframe_disable_lcd_and_backlight,
-    },
-};
-
-static keyframe_animation_t resume_animation = {
-    .num_frames = 5,
-    .loop = false,
-    .frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0},
-    .frame_functions = {
-            keyframe_enable_lcd_and_backlight,
-            display_welcome,
-            keyframe_animate_backlight_color,
-            keyframe_no_operation,
-            enable_visualization,
-    },
-};
-
-void initialize_user_visualizer(visualizer_state_t* state) {
-    // The brightness will be dynamically adjustable in the future
-    // But for now, change it here.
-    lcd_backlight_brightness(0x50);
-    state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF);
-    state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF);
-    start_keyframe_animation(&startup_animation);
-    start_keyframe_animation(&led_test_animation);
-}
-
-void update_user_visualizer_state(visualizer_state_t* state) {
-    // Add more tests, change the colors and layer texts here
-    // Usually you want to check the high bits (higher layers first)
-    // because that's the order layers are processed for keypresses
-    // You can for check for example:
-    // state->status.layer
-    // state->status.default_layer
-    // state->status.leds (see led.h for available statuses)
-    if (state->status.layer & 0x8) {
-        state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF);
-        state->layer_text = "Numpad";
-    }
-    else if (state->status.layer & 0x4) {
-        state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF);
-        state->layer_text = "KBD functions";
-    }
-    else if (state->status.layer & 0x2) {
-        state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF);
-        state->layer_text = "Function keys";
-    }
-    else {
-        state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF);
-        state->layer_text = "Default";
-    }
-    // You can also stop existing animations, and start your custom ones here
-    // remember that you should normally have only one animation for the LCD
-    // and one for the background. But you can also combine them if you want.
-    start_keyframe_animation(&lcd_animation);
-    start_keyframe_animation(&color_animation);
-}
-
-void user_visualizer_suspend(visualizer_state_t* state) {
-    state->layer_text = "Suspending...";
-    uint8_t hue = LCD_HUE(state->current_lcd_color);
-    uint8_t sat = LCD_SAT(state->current_lcd_color);
-    state->target_lcd_color = LCD_COLOR(hue, sat, 0);
-    start_keyframe_animation(&suspend_animation);
-}
-
-void user_visualizer_resume(visualizer_state_t* state) {
-    state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00);
-    state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF);
-    start_keyframe_animation(&resume_animation);
-    start_keyframe_animation(&led_test_animation);
-}
diff --git a/keyboards/infinity_ergodox/led.c b/keyboards/infinity_ergodox/led.c
deleted file mode 100644 (file)
index 77195bb..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "hal.h"
-
-#include "led.h"
-
-
-void led_set(uint8_t usb_led) {
-// The LCD backlight functionality conflicts with this simple
-// red backlight
-#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE)
-    // PTC1: LCD Backlight Red(0:on/1:off)
-    GPIOC->PDDR |= (1<<1);
-    PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
-    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
-        GPIOC->PCOR |= (1<<1);
-    } else {
-        GPIOC->PSOR |= (1<<1);
-    }
-#elif !defined(LCD_BACKLIGHT_ENABLE)
-    (void)usb_led;
-    GPIOC->PDDR |= (1<<1);
-    PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
-    GPIOC->PSOR |= (1<<1);
-    GPIOC->PDDR |= (1<<2);
-    PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
-    GPIOC->PSOR |= (1<<2);
-    GPIOC->PDDR |= (1<<3);
-    PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
-    GPIOC->PSOR |= (1<<3);
-#else
-    (void)usb_led;
-#endif
-}
diff --git a/keyboards/infinity_ergodox/matrix.c b/keyboards/infinity_ergodox/matrix.c
deleted file mode 100644 (file)
index 2b806cd..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <stdbool.h>
-#include <string.h>
-#include "hal.h"
-#include "timer.h"
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "matrix.h"
-
-
-/*
- * Infinity ErgoDox Pinusage:
- * Column pins are input with internal pull-down. Row pins are output and strobe with high.
- * Key is high or 1 when it turns on.
- *
- *     col: { PTD1, PTD4, PTD5, PTD6, PTD7 }
- *     row: { PTB2, PTB3, PTB18, PTB19, PTC0, PTC9, PTC10, PTC11, PTD0 }
- */
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[LOCAL_MATRIX_ROWS];
-static bool debouncing = false;
-static uint16_t debouncing_time = 0;
-
-
-void matrix_init(void)
-{
-    /* Column(sense) */
-    palSetPadMode(GPIOD, 1,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 4,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 5,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 6,  PAL_MODE_INPUT_PULLDOWN);
-    palSetPadMode(GPIOD, 7,  PAL_MODE_INPUT_PULLDOWN);
-
-    /* Row(strobe) */
-    palSetPadMode(GPIOB, 2,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 3,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOB, 19, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOC, 0,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOC, 9,  PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOC, 10, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOC, 11, PAL_MODE_OUTPUT_PUSHPULL);
-    palSetPadMode(GPIOD, 0,  PAL_MODE_OUTPUT_PUSHPULL);
-
-    memset(matrix, 0, MATRIX_ROWS);
-    memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS);
-}
-
-uint8_t matrix_scan(void)
-{
-    for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
-        matrix_row_t data = 0;
-
-        // strobe row
-        switch (row) {
-            case 0: palSetPad(GPIOB, 2);    break;
-            case 1: palSetPad(GPIOB, 3);    break;
-            case 2: palSetPad(GPIOB, 18);   break;
-            case 3: palSetPad(GPIOB, 19);   break;
-            case 4: palSetPad(GPIOC, 0);    break;
-            case 5: palSetPad(GPIOC, 9);    break;
-            case 6: palSetPad(GPIOC, 10);   break;
-            case 7: palSetPad(GPIOC, 11);   break;
-            case 8: palSetPad(GPIOD, 0);    break;
-        }
-
-        // need wait to settle pin state
-        // if you wait too short, or have a too high update rate
-        // the keyboard might freeze, or there might not be enough
-        // processing power to update the LCD screen properly.
-        // 20us, or two ticks at 100000Hz seems to be OK
-        wait_us(20);
-
-        // read col data: { PTD1, PTD4, PTD5, PTD6, PTD7 }
-        data = ((palReadPort(GPIOD) & 0xF0) >> 3) |
-               ((palReadPort(GPIOD) & 0x02) >> 1);
-
-        // un-strobe row
-        switch (row) {
-            case 0: palClearPad(GPIOB, 2);  break;
-            case 1: palClearPad(GPIOB, 3);  break;
-            case 2: palClearPad(GPIOB, 18); break;
-            case 3: palClearPad(GPIOB, 19); break;
-            case 4: palClearPad(GPIOC, 0);  break;
-            case 5: palClearPad(GPIOC, 9);  break;
-            case 6: palClearPad(GPIOC, 10); break;
-            case 7: palClearPad(GPIOC, 11); break;
-            case 8: palClearPad(GPIOD, 0);  break;
-        }
-
-        if (matrix_debouncing[row] != data) {
-            matrix_debouncing[row] = data;
-            debouncing = true;
-            debouncing_time = timer_read();
-        }
-    }
-
-    uint8_t offset = 0;
-#ifdef MASTER_IS_ON_RIGHT
-    if (is_serial_link_master()) {
-        offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS;
-    }
-#endif
-
-    if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
-        for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
-            matrix[offset + row] = matrix_debouncing[row];
-        }
-        debouncing = false;
-    }
-    return 1;
-}
-
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
-    return (matrix[row] & (1<<col));
-}
-
-matrix_row_t matrix_get_row(uint8_t row)
-{
-    return matrix[row];
-}
-
-void matrix_print(void)
-{
-    xprintf("\nr/c 01234567\n");
-    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        xprintf("%X0: ", row);
-        matrix_row_t data = matrix_get_row(row);
-        for (int col = 0; col < MATRIX_COLS; col++) {
-            if (data & (1<<col))
-                xprintf("1");
-            else
-                xprintf("0");
-        }
-        xprintf("\n");
-    }
-}
-
-void matrix_set_remote(matrix_row_t* rows, uint8_t index) {
-    uint8_t offset = 0;
-#ifdef MASTER_IS_ON_RIGHT
-    offset = MATRIX_ROWS - LOCAL_MATRIX_ROWS * (index + 2);
-#else
-    offset = LOCAL_MATRIX_ROWS * (index + 1);
-#endif
-    for (int row = 0; row < LOCAL_MATRIX_ROWS; row++) {
-        matrix[offset + row] = rows[row];
-    }
-}
diff --git a/keyboards/infinity_ergodox/mcuconf.h b/keyboards/infinity_ergodox/mcuconf.h
deleted file mode 100644 (file)
index f6730b9..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-    ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-
-#ifndef _MCUCONF_H_
-#define _MCUCONF_H_
-
-#define K20x_MCUCONF
-
-/*
- * HAL driver system settings.
- */
-
-#define K20x7
-
-/* Select the MCU clocking mode below by enabling the appropriate block. */
-
-#define KINETIS_NO_INIT             FALSE
-
-/* PEE mode - 48MHz system clock driven by external crystal. */
-#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_PEE
-#define KINETIS_PLLCLK_FREQUENCY    72000000UL
-#define KINETIS_SYSCLK_FREQUENCY    72000000UL
-#define KINETIS_BUSCLK_FREQUENCY    36000000UL
-#define KINETIS_FLASHCLK_FREQUENCY  24000000UL
-
-#if 0
-/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
-#define KINETIS_MCG_MODE            KINETIS_MCG_MODE_FEI
-#define KINETIS_MCG_FLL_DMX32       1           /* Fine-tune for 32.768 kHz */
-#define KINETIS_MCG_FLL_DRS         1           /* 1464x FLL factor */
-#define KINETIS_SYSCLK_FREQUENCY    47972352UL  /* 32.768 kHz * 1464 (~48 MHz) */
-#define KINETIS_CLKDIV1_OUTDIV1     1
-#define KINETIS_CLKDIV1_OUTDIV2     1
-#define KINETIS_CLKDIV1_OUTDIV4     2
-#define KINETIS_BUSCLK_FREQUENCY    KINETIS_SYSCLK_FREQUENCY
-#define KINETIS_FLASHCLK_FREQUENCY  KINETIS_SYSCLK_FREQUENCY/2
-#endif
-
-/*
- * SERIAL driver system settings.
- */
-#define KINETIS_SERIAL_USE_UART0            TRUE
-#define KINETIS_SERIAL_USE_UART1            TRUE
-
-/*
- * USB driver settings
- */
-#define KINETIS_USB_USE_USB0                TRUE
-/* Need to redefine this, since the default is for K20x */
-/* This is for Teensy LC; you should comment it out (or change to 5)
- * for Teensy 3.x */
-#define KINETIS_USB_USB0_IRQ_PRIORITY       2
-
-/*
- * SPI driver system settings.
- */
-#define KINETIS_SPI_USE_SPI0                TRUE
-
-#define KINETIS_I2C_USE_I2C0                TRUE
-
-#endif /* _MCUCONF_H_ */
diff --git a/keyboards/jd40/Makefile b/keyboards/jd40/Makefile
new file mode 100644 (file)
index 0000000..57b2ef6
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
diff --git a/keyboards/jd40/config.h b/keyboards/jd40/config.h
new file mode 100644 (file)
index 0000000..047be57
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0xFEED
+#define PRODUCT_ID   0x6060
+#define DEVICE_VER   0x0001
+#define MANUFACTURER    geekhack
+#define PRODUCT         jd40v2
+#define DESCRIPTION     t.m.k. keyboard firmware for JD40 MKII
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F1, F5, B4 }
+#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12         // Number of LEDs
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#endif
diff --git a/keyboards/jd40/jd40.c b/keyboards/jd40/jd40.c
new file mode 100644 (file)
index 0000000..fa06356
--- /dev/null
@@ -0,0 +1,26 @@
+#include "jd40.h"
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+       
+
+  //  if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+       //      gh60_caps_led_on();
+       //      } else {
+       //      gh60_caps_led_off(); 
+  //  }
+       
+    // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+               // gh60_esc_led_on();
+               // } else {
+               // gh60_esc_led_off(); 
+    // }
+       
+    // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+               // gh60_fn_led_on();
+               // } else {
+               // gh60_fn_led_off();   
+    // }
+
+       led_set_user(usb_led);  
+}
diff --git a/keyboards/jd40/jd40.h b/keyboards/jd40/jd40.h
new file mode 100644 (file)
index 0000000..77a1222
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef JD40_H
+#define JD40_H
+
+#include "quantum.h"
+#include "led.h"
+
+/* GH60 LEDs 
+ *   GPIO pads
+ *   0 F7 WASD LEDs
+ *   1 F6 ESC LED
+ *   2 F5 FN LED
+ *   3 F4 POKER Arrow LEDs
+ *   B2 Capslock LED
+ *   B0 not connected
+ */
+ /*
+inline void gh60_caps_led_on(void)      { DDRB |=  (1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_on(void)    { DDRF |=  (1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_on(void)       { DDRF |=  (1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_on(void)      { DDRF |=  (1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_on(void)            { DDRF |=  (1<<7); PORTF &= ~(1<<7); }
+
+inline void gh60_caps_led_off(void)     { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_off(void)   { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_off(void)      { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_off(void)     { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_off(void)           { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
+*/
+
+/* JD40 MKII keymap definition macro
+ */
+#define KEYMAP( \
+    K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
+       K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, \
+       K24, K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, \
+       K35, K36, K37, K38, K39, K40, K41, K42, K43, K44 \
+) { \
+    { KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K10, KC_##K11, KC_##K12 }, \
+    { KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_NO    }, \
+    { KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO    }, \
+    { KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_NO,    KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_NO    }  \
+}
+
+#endif
diff --git a/keyboards/jd40/keymaps/default/keymap.c b/keyboards/jd40/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..79ac146
--- /dev/null
@@ -0,0 +1,164 @@
+#include "jd40.h"
+#include "action_layer.h"
+
+#define _BL 0
+#define _AL 1
+#define _FL 2
+#define _UL 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [_BL] = KEYMAP(
+  F12,  Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,   BSPC,
+  TAB,  A,    S,    D,    F,    G,    H,    J,    K,    L,    ENT,
+  LSFT, Z,    X,    C,    V,    B,    N,    M,    COMM, UP, DOT,
+  LCTL, LGUI, LALT, FN0,  SPC,  SPC,  FN0,  LEFT,  DOWN, RIGHT ),
+  
+       [_AL] = KEYMAP(
+  GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  DEL,
+  CAPS, 1,    2,    3,    4,    5,    6,    7,    8,    9,    0,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT,
+  TRNS, TRNS, TRNS, TRNS, FN3,  FN3,  TRNS, HOME, PGDN, END ),
+
+       [_FL] = KEYMAP(
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ),
+   
+       [_UL] = KEYMAP(
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+  TRNS, FN4,  FN5,  FN11, FN10, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ),
+};
+
+enum function_id {
+    RGBLED_TOGGLE,
+    RGBLED_STEP_MODE,
+    RGBLED_INCREASE_HUE,
+    RGBLED_DECREASE_HUE,
+    RGBLED_INCREASE_SAT,
+    RGBLED_DECREASE_SAT,
+    RGBLED_INCREASE_VAL,
+    RGBLED_DECREASE_VAL,
+    SHIFT_ESC, 
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0]  = ACTION_LAYER_MOMENTARY(1),  // Momentary Fn overlay
+    [1]  = ACTION_LAYER_TOGGLE(2),     // Toggle Arrow Layer overlay
+    [2]  = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
+    [3]  = ACTION_LAYER_TOGGLE(3),     // Toggle Underglow Layer overlay
+    [4]  = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
+    [5]  = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
+    [6]  = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+    [7]  = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+    [8]  = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+    [9]  = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+    [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+    [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+    [12] = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function 
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+// Layer LED indicators
+// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
+    uint32_t layer = layer_state;
+    if (layer & (1<<1)) {
+        //gh60_wasd_leds_on();
+    } else {
+        //gh60_wasd_leds_off();
+    }
+
+    if (layer & (1<<2)) {
+        //gh60_esc_led_on();
+    } else {
+        //gh60_esc_led_off();
+    }
+};
+
+#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  switch (id) {
+    case RGBLED_TOGGLE:
+      //led operations
+      if (record->event.pressed) {
+        rgblight_toggle();
+        }
+        break;
+    case RGBLED_INCREASE_HUE:
+      if (record->event.pressed) {
+        rgblight_increase_hue();
+        }
+        break;
+    case RGBLED_DECREASE_HUE:
+      if (record->event.pressed) {
+        rgblight_decrease_hue();
+        }
+        break;
+    case RGBLED_INCREASE_SAT:
+      if (record->event.pressed) {
+        rgblight_increase_sat();
+        }
+        break;
+    case RGBLED_DECREASE_SAT:
+      if (record->event.pressed) {
+        rgblight_decrease_sat();
+        }
+        break;
+    case RGBLED_INCREASE_VAL:
+        if (record->event.pressed) {
+          rgblight_increase_val();
+        }
+        break;
+    case RGBLED_DECREASE_VAL:
+        if (record->event.pressed) {
+          rgblight_decrease_val();
+        }
+        break;
+    case RGBLED_STEP_MODE:
+        if (record->event.pressed) {
+          rgblight_step();
+        }
+        break;
+    static uint8_t shift_esc_shift_mask;
+    // Shift + ESC = ~
+    case SHIFT_ESC:
+      shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+      if (record->event.pressed) {
+        if (shift_esc_shift_mask) {
+          add_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          add_key(KC_ESC);
+          send_keyboard_report();
+        }
+      } else {
+        if (shift_esc_shift_mask) {
+          del_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          del_key(KC_ESC);
+          send_keyboard_report();
+        }
+      }
+      break;
+    }
+};
diff --git a/keyboards/jd40/readme.md b/keyboards/jd40/readme.md
new file mode 100644 (file)
index 0000000..7daa098
--- /dev/null
@@ -0,0 +1,17 @@
+## jd40 mkii keyboard firmware
+
+    Pins:
+    MATRIX_ROW_PINS { F0, F1, F5, B4 }
+    MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2 }
+    RGB_DI_PIN D3      
+       
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/jd40 folder. 
+Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Amtel Flip to program your .hex file. 
diff --git a/keyboards/jd40/rules.mk b/keyboards/jd40/rules.mk
new file mode 100644 (file)
index 0000000..2f18fdf
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)
+# CONSOLE_ENABLE ?= yes                # Console for debug(+400)
+# COMMAND_ENABLE ?= yes                # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes                     # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES                   # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= yes          # Enable RGB Underglow
\ No newline at end of file
index 75d544f16aa8e07d059adef8c5c75aa8f321b797..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,71 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
-# NKRO_ENABLE ?= yes           # USB Nkey Rollover - not yet supported in LUFA
-BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
-MIDI_ENABLE ?= YES             # MIDI controls
-# UNICODE_ENABLE ?= YES                # Unicode
-BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
+endif
\ No newline at end of file
diff --git a/keyboards/jd45/keymaps/jeebak/config.h b/keyboards/jd45/keymaps/jeebak/config.h
new file mode 100644 (file)
index 0000000..53a1f0a
--- /dev/null
@@ -0,0 +1,16 @@
+#include "../../config.h"
+
+/**
+ *JD45 keymap definition macro
+ */
+#define KEYMAP_JD45( \
+    K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
+    K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \
+    K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \
+    K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \
+) { \
+    { K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   K10,   K11,   K12,   K13   }, \
+    { K14,   K15,   K16,   K17,   K18,   K19,   K20,   K21,   K22,   K23,   K24,   K25,   KC_NO }, \
+    { K26,   K27,   K28,   K29,   K30,   K31,   K32,   K33,   K34,   K35,   K36,   K37,   KC_NO }, \
+    { K38,   K39,   K40,   K41,   K42, KC_NO,   K43, KC_NO,   K44,   K45,   K46,   K47,   KC_NO }  \
+}
diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c
new file mode 100644 (file)
index 0000000..8d26cbd
--- /dev/null
@@ -0,0 +1,423 @@
+#include "jd45.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV
+};
+
+enum macro_keycodes {
+  KC_ALT_TAB,
+  KC_CMD_TAB,
+  KC_CTL_TAB,
+  KC_CMD_SLSH,
+  KC_AG_FIND,
+  KC_AG_AGAIN,
+  KC_AG_UNDO,
+  KC_AG_CUT,
+  KC_AG_COPY,
+  KC_AG_PASTE,
+  KC_AG_DESK_L,
+  KC_AG_DESK_R,
+  KC_AG_TAB_C,
+  KC_AG_TAB_N,
+  KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC     CTL_T(KC_ESC)               // Tap for Esc, hold for Ctrl
+#define SFT_ENT     SFT_T(KC_ENT)               // Tap for Enter, hold for Shift
+#define HPR_TAB     ALL_T(KC_TAB)               // Tap for Tab, hold for Hyper
+#define GUI_SEM     GUI_T(KC_SCLN)              // Tap for Semicolon, hold for GUI
+#define ALT_QUO     ALT_T(KC_QUOT)              // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC       LT(_TOUCHCURSOR, KC_SPC)    // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc)   LT(_MOUSECURSOR, kc)        // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB     M(KC_ALT_TAB)               // Macro for Alt-Tab
+#define CMD_TAB     M(KC_CMD_TAB)               // Macro for Cmd-Tab
+#define CTL_TAB     M(KC_CTL_TAB)               // Macro for Ctl-Tab
+#define CMD_SLSH    M(KC_CMD_SLSH)              // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND     M(KC_AG_FIND)               // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN    M(KC_AG_AGAIN)
+#define AG_UNDO     M(KC_AG_UNDO)
+#define AG_CUT      M(KC_AG_CUT)
+#define AG_COPY     M(KC_AG_COPY)
+#define AG_PASTE    M(KC_AG_PASTE)
+#define AG_D_L      M(KC_AG_DESK_L)             // For Virtual Desktop Switching: Left, and
+#define AG_D_R      M(KC_AG_DESK_R)             //                                Right
+#define AG_T_C      M(KC_AG_TAB_C)              // For Chrome, etc. Tab Close,
+#define AG_T_N      M(KC_AG_TAB_N)              //                  Tab New, and
+#define AG_T_R      M(KC_AG_TAB_R)              //                  Tab Reopen Closed
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    HPR_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    CTL_ESC ,   KC_A, KC_S,LT_MC(KC_D),    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, GUI_SEM,    ALT_QUO     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  ,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   R  | MC/S |   T  |   D  |   H  |   N  |   E  |   I  |   O  |    "       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_COLEMAK] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    HPR_TAB,   KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    CTL_ESC ,   KC_A, KC_R,LT_MC(KC_S),    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  ,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   O  | MC/E |   U  |   I  |   D  |   H  |   T  |   N  |   S  |    /       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_DVORAK] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    HPR_TAB,KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    CTL_ESC ,   KC_A,    KC_O,LT_MC(KC_E), KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  , KC_SCLN,   KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_LOWER] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    KC_TILD,KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    KC_LBRC ,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,    KC_PIPE     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_RBRC  ,  KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12, KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC,    KC_BSLS    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    BACKLIT  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_RAISE] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    KC_0   ,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    KC_DLR  ,   KC_4,    KC_5,    KC_6,  KC_DOT, KC_PLUS,  KC_DOT,    KC_4,    KC_5,    KC_6, KC_ASTR,    KC_PIPE     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_EQL   ,   KC_7,    KC_8,    KC_9,    KC_0, KC_MINS,  KC_DOT,    KC_1,    KC_2,    KC_3, KC_SLSH,    KC_BSLS    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    BACKLIT  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD,  KC_INS, KC_HOME,   KC_UP,  KC_END, KC_BSPC, _______, _______,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    _______ ,KC_LALT,  KC_SPC,  AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT,  AG_D_L,    AG_D_R      ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,AG_UNDO,  AG_CUT, AG_COPY,AG_PASTE,  KC_GRV, KC_PGDN,  KC_DEL,  AG_T_N,  AG_T_R,CMD_SLSH,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______  ,    _______,    _______,    _______, _______   , _______   ,    _______,    _______,    _______, _______),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+[_MOUSECURSOR] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4,    KC_BTN5     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______  ,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______, _______),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |      #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |         |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |     D       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut    |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |    Z      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit   |       |   A   |   O   |          |          |    E    |   U    |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+[_PLOVER] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    KC_1   ,   KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,  KC_1  ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    XXXXXXX ,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    XXXXXXX  ,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,    KC_QUOT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    EXT_PLV  ,    XXXXXXX,       KC_C,       KC_V,  XXXXXXX  ,  XXXXXXX  ,       KC_N,       KC_M,    XXXXXXX, XXXXXXX),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |      |      |      |      |      |      |      |      |      |      | Del  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|            |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       |      |      |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |  Reset   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_ADJUST] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+    _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP,  QWERTY, COLEMAK,  DVORAK,  PLOVER,    _______     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    _______,    _______,  RESET)
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+
+    bool use_cmd = true;    // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+    // quantum/quantum.c
+    if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+      use_cmd = false;      // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+    }
+
+    switch (id) {
+      case KC_ALT_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+      case KC_CMD_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+
+      case KC_CTL_TAB:
+        return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+      case KC_CMD_SLSH:
+        return (record->event.pressed ? MACRO( D(LGUI),  D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+      case KC_AG_FIND:
+        return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+      case KC_AG_AGAIN:
+        return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+      case KC_AG_UNDO:
+        return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+      case KC_AG_CUT:
+        return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+      case KC_AG_COPY:
+        return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+      case KC_AG_PASTE:
+        return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+      case KC_AG_DESK_L:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+      case KC_AG_DESK_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+      case KC_AG_TAB_C:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(W), END ) : MACRODOWN( D(LCTRL),            T(W), END );
+      case KC_AG_TAB_N:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(T), END ) : MACRODOWN( D(LCTRL),            T(T), END );
+      case KC_AG_TAB_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+    }
+
+    return MACRO_NONE;
+}
diff --git a/keyboards/jd45/keymaps/jeebak/readme.md b/keyboards/jd45/keymaps/jeebak/readme.md
new file mode 100644 (file)
index 0000000..2e45a46
--- /dev/null
@@ -0,0 +1,129 @@
+jeebak's JD45 layout
+=======================
+NOTE: This is a port of jeebak's planck layout, for jd45.
+
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB     M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |   [  | Bksp |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      | Bksp |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      | Bksp |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |      |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |        |       |       |       |          |          |         |        |        |          |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+  |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
+  |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+  |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |        |       |       |       |          |          |         |        |        |          |
+   `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md
new file mode 100644 (file)
index 0000000..2822666
--- /dev/null
@@ -0,0 +1,4 @@
+JD45 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/jd45/rules.mk b/keyboards/jd45/rules.mk
new file mode 100644 (file)
index 0000000..2f1e266
--- /dev/null
@@ -0,0 +1,67 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes           # USB Nkey Rollover - not yet supported in LUFA
+BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
+MIDI_ENABLE ?= YES             # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
\ No newline at end of file
index b00a488b9162c89a9ce0d6f13d4c617ec475fb7c..57b2ef62e5f3a43b7338f789a5d4800c577b763d 100644 (file)
@@ -1,76 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes        # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-KEYBOARD_LOCK_ENABLE ?= yes  # Allow locking of keyboard via magic key
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= no            # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no            # MIDI controls
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no           # Audio output on port C6
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
-
index c4a9b9ff82de09de25d5d22051c0f82a5c5de303..29695d0b9d74a93eecca350d12e12cd3db5ad2a0 100644 (file)
@@ -62,7 +62,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //#define MATRIX_HAS_GHOST
 
 /* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_LEVELS 5
 
 /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 #define LOCKING_SUPPORT_ENABLE
index 34eab4b2a06a7f4ca29d67c62eb3df8e2fc97fa3..c3a0165c092cd5d638df2ae0e6d8c80a769bd4f6 100644 (file)
@@ -3,21 +3,92 @@
 
 #include "quantum.h"
 
+// K49 key is for the key at row 1 and column 15 when you split the backspace in 2 1U key.
+
 // This a shortcut to help you visually see your layout.
 // The first section contains all of the arguements
 // The second converts the arguments into a multi-dimensional array
+/*
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K49 |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3D       | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
 #define KEYMAP( \
     K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
     K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
     K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
     K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
-    K40, K41, K42,           K45,                     K4A, K4B, K4C, K4D  \
+    K40, K41, K42,           K45,                K49, K4A, K4B, K4C, K4D  \
     ) { \
-  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D  },  \
+  {  K00,  K01,  K02,  K03,    K04,    K05,  K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D,  },  \
   {  K10,  K11,  K12,  K13,    K14,    K15,  K16,    K17,    K18,    K19,  K1A,  K1B,  K1C,  K1D  },  \
   {  K20,  K21,  K22,  K23,    K24,    K25,  K26,    K27,    K28,    K29,  K2A,  K2B,  K2C,  K2D  },  \
   {  K30,  K31,  K32,  K33,    K34,    K35,  K36,    K37,    K38,    K39,  K3A,  K3B,  K3C,  K3D  },  \
-  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  KC_NO,K4A,  K4B,  K4C,  K4D  }   \
+  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  K49,  K4A,  K4B,  K4C,  K4D  }   \
 }
 
 #endif
+
+/* Default layout
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C             |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Lshift
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30   |K31| K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C             |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Rshift
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C         |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | K3D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Enter
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D       |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10    | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D    |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20     | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | K2D   |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30       | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C             |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40   | K41   | K42   | K45                             | K4A   | K4B   | K4C   | K4D   |
+ * `-----------------------------------------------------------------------------------------'
+ */
\ No newline at end of file
diff --git a/keyboards/kc60/keymaps/dbroqua/keymap.c b/keyboards/kc60/keymaps/dbroqua/keymap.c
new file mode 100644 (file)
index 0000000..8b5efd0
--- /dev/null
@@ -0,0 +1,103 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "kc60.h"
+
+#define _QWERTY 0
+#define _FNCAPS 1
+#define _FNRIGHTSHIFT 2
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define S_LED   FUNC(0)
+#define S_LEDI  FUNC(1)
+#define S_LEDD  FUNC(2)
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_BACKLIGHT_TOGGLE(),
+       [1] = ACTION_BACKLIGHT_INCREASE(),
+       [2] = ACTION_BACKLIGHT_DECREASE()
+ };
+
+/*
+ * |     |     |
+ * |       |   |
+ * |        |  |
+ * |         | |
+ * |           |
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  \  |  `  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |  Bksp  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps/FN1|  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift     |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |     Up    | FN2 |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl  | Gui   | Alt   |               Space             | AltGr | Left  | Down  | Right |
+ * `-----------------------------------------------------------------------------------------'
+ */
+  [0] = KEYMAP( /* Basic QWERTY */
+      KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSLS,  \
+      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSPC,  \
+      LT(_FNCAPS, KC_CAPS),  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
+      KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  MO(_FNRIGHTSHIFT),  KC_UP,  \
+      KC_LCTL,  KC_LGUI,  KC_LALT,  KC_SPC,  KC_GRV,  KC_RALT,  KC_LEFT, KC_DOWN, KC_RIGHT \
+      ),
+
+/* Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * |     | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * |        |     |     |     |     |     |     |     |     |     |     |     |     |        |
+ * |-----------------------------------------------------------------------------------------+
+ * |         |     |     |     |     |     |     | Psc |     |     |     |     |             |
+ * |-----------------------------------------------------------------------------------------+
+ * |           | Led | Led+| Led-|     | Mute| Vol+| Vol-|     |     |     |    Play   |     |
+ * |-----------------------------------------------------------------------------------------+
+ * |       |       |       |                                 |       | Prev  | Stop  | Next  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+  [_FNCAPS] = KEYMAP( /* Layer 1 */
+      ______,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_INS,  \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,  \
+      ______,   ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______,   \
+      ______,   ______,  S_LED,  S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY,  \
+      ______,   ______, ______,                 ______,         KC_DEL,         ______, KC_MPRV,    KC_MSTP,    KC_MNXT \
+      ),
+
+/* Layer 2
+ * ,-----------------------------------------------------------------------------------------.
+ * |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
+ * |-----------------------------------------------------------------------------------------+
+ * |        |     |     |     |     |     |     |     |     |     |     |     |     |        |
+ * |-----------------------------------------------------------------------------------------+
+ * |         |     |     |     |     |     |     |     |     |     |     |     |             |
+ * |-----------------------------------------------------------------------------------------+
+ * |           |     |     |     |     |     |     |     |     |     |     |   PgUp    |     |
+ * |-----------------------------------------------------------------------------------------+
+ * |       |       |       |                                 |       | Home  | PgDown| End   |
+ * `-----------------------------------------------------------------------------------------'
+ */
+  [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,  \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,  \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,   \
+      ______,   ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP,  \
+      ______,   ______, ______,                 ______,         ______,                 ______, KC_HOME,KC_PGDN,KC_END \
+      ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  return MACRO_NONE;
+};
diff --git a/keyboards/kc60/keymaps/dbroqua/readme.md b/keyboards/kc60/keymaps/dbroqua/readme.md
new file mode 100644 (file)
index 0000000..b71d10a
--- /dev/null
@@ -0,0 +1,11 @@
+# Dbroqua Layout
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/24fa7821d4955ec3c76037c8e159a199
+* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37
+* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+```
\ No newline at end of file
diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c
new file mode 100644 (file)
index 0000000..5d7c7f3
--- /dev/null
@@ -0,0 +1,73 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "kc60.h"
+
+#define _QWERTY 0
+#define _FN 1
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define S_LED   FUNC(0)
+#define S_LEDI  FUNC(1)
+#define S_LEDD  FUNC(2)
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_BACKLIGHT_TOGGLE(),
+       [1] = ACTION_BACKLIGHT_INCREASE(),
+       [2] = ACTION_BACKLIGHT_DECREASE()
+ };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  \  |  `  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |  Bksp  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl    |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift     |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  | RShift    | FN  |
+ * |-----------------------------------------------------------------------------------------+
+ *         | LGUI  | LAlt  |               Space             | RAlt  | RGUI  |
+ *         `-----------------------------------------------------------------'
+ */
+  [0] = KEYMAP( /* Basic QWERTY */
+      KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSLS,  \
+      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSPC,  \
+      KC_LCTL,  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
+      KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  MO(_FN),  KC_RSFT,  \
+      ______,  KC_LGUI,  KC_LALT,  KC_SPC,  KC_GRV,  KC_RALT,  KC_RGUI, ______, ______ \
+      ),
+
+/* Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * |     | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * |        | Led | Led-| Led+|     |     |     |     | Psc | Slck| Paus| Up  |     |        |
+ * |-----------------------------------------------------------------------------------------+
+ * |         | Vol-| Vol+| Mute|     |     | *   | /   | Home| PgUp| Left|Right|             |
+ * |-----------------------------------------------------------------------------------------+
+ * |           | Prev| Play| Next|     |     | +   | -   | End  |PgDn| Down|           |     |
+ * |-----------------------------------------------------------------------------------------+
+ *         |       |       |                                 | Stop  |       |
+ *         `-----------------------------------------------------------------'
+ */
+  [_FN] = KEYMAP( /* Layer 1 */
+      ______,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_INS,  \
+      ______,   S_LED, S_LEDI, S_LEDD, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______,  \
+      ______,   KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, ______,   \
+      ______,   ______,  KC_MPRV,  KC_MPLY, KC_MNXT,______,______,KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______,______,  \
+      ______,   ______, ______,                 ______,         KC_DEL,         KC_MSTP, ______,    ______,    ______ \
+      )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  return MACRO_NONE;
+};
diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md
new file mode 100644 (file)
index 0000000..be99a3b
--- /dev/null
@@ -0,0 +1,9 @@
+# Dbroqua HHKB like Layout
+
+Like the HHKB but with a KC60 PCB :D.
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua_hhkb make dfu
+```
\ No newline at end of file
index 6f8352c6951e0592cd4c7b640c525151ba61d838..293ff3ab4649d6ad5b8b0993801ccb643ff68af3 100644 (file)
@@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
       KC_CAPS,  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,  \
-      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                                       KC_RGUI,  KC_RALT,  KC_RCTL,  RESET \
+      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                             KC_NO,    KC_RGUI,  KC_RALT,  KC_RCTL,  RESET \
       ),
 };
 
index 99e95c23260aa6ef12da44a42f87e91f22758f8d..3192b25142643c2c20312018e347d8a5680be851 100644 (file)
@@ -13,21 +13,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TAB,   KC_Q,     KC_W,     KC_F,    KC_P,     KC_G,     KC_J,     KC_L,  KC_U,  KC_Y,     KC_SCLN,  KC_LBRC,  KC_RBRC,  KC_BSLS,  \
       MO(2),    KC_A,     KC_R,     KC_S,    KC_T,     KC_D,     KC_H,     KC_N,  KC_E,  KC_I,     KC_O,     KC_QUOT,  KC_NO,    KC_ENT,   \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_K,  KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,  \
-      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                                     KC_RGUI,  KC_RALT,  KC_RCTL,  DF(1)  \
+      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                           KC_NO,    KC_RGUI,  KC_RALT,  KC_RCTL,  DF(1)  \
       ),
   [1] = KEYMAP( /* Basic QWERTY */
       KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  \
       KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,  \
       MO(2),    KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,   \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,  \
-      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                                       KC_RGUI,  KC_RALT,  KC_RCTL,  DF(0) \
+      KC_LCTL,  KC_LALT,  KC_LGUI,                     KC_SPC,                             KC_NO,    KC_RGUI,  KC_RALT,  KC_RCTL,  DF(0) \
       ),
   [2] = KEYMAP( /* KBP v60-like arrows, media keys, etc */
       KC_GRV,   KC_F1,    KC_F2,    KC_F3,     KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,    KC_F12,  KC_DEL,   \
       KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_UP,    BL_INC,    BL_DEC,  BL_STEP,  \
       KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  KC_NO,   KC_TRNS,  \
       KC_TRNS,  KC_NO,    KC_MPRV,  KC_MPLY,   KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_NO,   KC_TRNS,  \
-      KC_TRNS,  KC_TRNS,  KC_TRNS,                       KC_SPC,                                           DEBUG,    RESET,     KC_TRNS, KC_NO     \
+      KC_TRNS,  KC_TRNS,  KC_TRNS,                       KC_SPC,                                 KC_NO,    DEBUG,    RESET,     KC_TRNS, KC_NO     \
       ),
 };
 
index 057c73bf4d7f118cc5f386182bd4ec2813c4062b..212fa88bd003dd1947ac62c405e9cba82492975f 100644 (file)
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TAB,           KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,  KC_RBRC,  KC_BSLS, \
   LT(_FL, KC_CAPS), KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,  KC_NO,    KC_ENT,  \
   KC_LSFT, KC_NO,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,  MO(_FL),  KC_UP,   \
-  KC_LCTL, KC_LALT, KC_LGUI,                KC_SPC,                                 KC_RGUI,KC_LEFT,  KC_DOWN,  KC_RGHT),
+  KC_LCTL, KC_LALT, KC_LGUI,                KC_SPC,                         KC_NO,  KC_RGUI,KC_LEFT,  KC_DOWN,  KC_RGHT),
 
 // Function layer
 [_FL] = KEYMAP(
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_NO,  KC_MPRV,KC_UP,  KC_MNXT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_PSCR,KC_SLCK,  KC_PAUS,  KC_INS, \
   KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO,  \
   KC_TRNS,KC_NO,  KC_MUTE,KC_VOLD,KC_VOLU,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_TRNS,  LT(_RGBL, KC_PGUP),\
-  KC_TRNS,KC_TRNS,KC_TRNS,                KC_MPLY,                                KC_TRNS,KC_HOME,  KC_PGDN,  KC_END),
+  KC_TRNS,KC_TRNS,KC_TRNS,                KC_MPLY,                        KC_NO,  KC_TRNS,KC_HOME,  KC_PGDN,  KC_END),
 
 // RGB Layer
 [_RGBL] = KEYMAP(
@@ -39,13 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO, \
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO,  \
   KC_TRNS,KC_NO,  RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,BL_STEP,BL_TOGG,  KC_TRNS,  KC_TRNS,\
-  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                                KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
+  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                        KC_NO,  KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
   #else
   RESET,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO, \
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO, \
   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,    KC_NO,    KC_NO,  \
   KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  BL_STEP,BL_TOGG,  KC_TRNS,  KC_TRNS,\
-  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                                KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
+  KC_TRNS,KC_TRNS,KC_TRNS,                KC_TRNS,                        KC_NO,  KC_TRNS,KC_TRNS,  KC_TRNS,  KC_TRNS),
   #endif
 };
 
index 50b1d0f981c517221860edb1cf3ac9135a9c48a7..dca2826eb1b9e77c6d8d53ed68ea91384c2bab7c 100644 (file)
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,   \
       KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_NO,    KC_ENT,    \
       KC_LSFT,  KC_NO,    KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_NO,    KC_RSFT,   \
-      KC_LCTL,  KC_LGUI,  KC_LALT,                      KC_SPC,                                           KC_RALT,  MO(1),    KC_RGUI,  KC_RCTL    \
+      KC_LCTL,  KC_LGUI,  KC_LALT,                      KC_SPC,                                 KC_NO,    KC_RALT,  MO(1),    KC_RGUI,  KC_RCTL    \
       ),
                
    /*
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_TRNS,  KC_TRNS,  KC_TRNS,   \
       KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_TRNS,  BL_DEC,   BL_INC,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   \
       KC_TRNS,  KC_TRNS,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_END,   KC_TRNS,  KC_TRNS,  KC_TRNS,   \
-      RESET,    KC_TRNS,  KC_TRNS,                      BL_TOGG,                                          KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS    \
+      RESET,    KC_TRNS,  KC_TRNS,                      BL_TOGG,                                KC_NO,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS    \
       ),
 };
 
diff --git a/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png b/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png
new file mode 100644 (file)
index 0000000..cc6a630
Binary files /dev/null and b/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png differ
diff --git a/keyboards/kc60/keymaps/workman-dead/keymap.c b/keyboards/kc60/keymaps/workman-dead/keymap.c
new file mode 100644 (file)
index 0000000..9e3b9bb
--- /dev/null
@@ -0,0 +1,183 @@
+#include "kc60.h"
+
+#define _WM 0
+#define _QW 1
+#define _DK 2
+#define _FUN 3
+#define _MS 4
+
+#define _______ KC_NO
+#define XXXXXXX KC_TRNS
+
+#define _DK_ACT 0
+#define _DK_REL 1
+#define _KC_COMS 2
+#define _KC_CENT 3
+
+#define DK_ACT  M(_DK_ACT)       // activate dead key layer
+#define DK_REL  M(_DK_REL)       // release dead key layer
+#define KC_COMS M(_KC_COMS)      // comma + space
+#define KC_CENT M(_KC_CENT)      // comma + enter
+#define KC_TABM LT(_MS, KC_TAB)  // press for tab, hold for mouse layer
+#define KC_SPFN LT(_FUN, KC_SPC) // press for space, hold for function layer (aka spacefn)
+#define KC_DFQW DF(_QW)          // set default layer to qwerty
+#define KC_DFWM DF(_WM)          // set default layer to workman
+#define KC_CMDQ LGUI(KC_Q)       // command + q
+#define KC_CMDD LGUI(KC_D)       // command + d
+#define KC_CMDA LGUI(KC_A)       // command + a
+#define KC_CMDS LGUI(KC_S)       // command + s
+#define KC_CMDZ LGUI(KC_Z)       // command + z
+#define KC_CMDX LGUI(KC_X)       // command + x
+#define KC_CMDC LGUI(KC_C)       // command + c
+#define KC_CMDV LGUI(KC_V)       // command + v
+#define KC_CSTB S(RCTL(KC_TAB))  // shift + control + tab
+#define KC_C_TB RCTL(KC_TAB)     // control + tab
+#define KC_C_LF RCTL(KC_LEFT)    // control + left
+#define KC_C_RT RCTL(KC_RGHT)    // control + right
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Workman
+/*
+* ,-----------------------------------------------------------.
+* |Esc | 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =| Bsp   |
+* |-----------------------------------------------------------|
+* |Tab/M|  Q|  D|  R|  W|  B|  J|  F|  U|  P|  ;|  [|  ]|  \  |
+* |-----------------------------------------------------------|
+* |Ctrl  |  A|  S|  H|  T|  G|  Y|  N|  E|  O|  I|  '| Return |
+* |-----------------------------------------------------------|
+* |Shift   |  Z|  X|  M|  C|  V|  K|  L|  ,|  .|  /| Shift    |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI |  Space/FN   | Alt | GUI | Ctrl | qwerty |
+* `-----------------------------------------------------------'
+*/
+[_WM] = KEYMAP( /* Workman */
+  KC_ESC,           KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
+  KC_TABM,          KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
+  KC_LCTL,          KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT, _______, KC_ENT,  \
+  KC_LSFT, _______, KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    DK_ACT,  KC_DOT,  KC_SLSH,          _______, KC_RSFT, \
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPFN,          _______, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW),
+
+// QWERTY
+/*
+* ,-----------------------------------------------------------.
+* |Esc | 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =| Bsp   |
+* |-----------------------------------------------------------|
+* |Tab/M|  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |
+* |-----------------------------------------------------------|
+* |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '| Return |
+* |-----------------------------------------------------------|
+* |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /| Shift    |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI |  Space/FN  | Alt | GUI | Ctrl | workman |
+* `-----------------------------------------------------------'
+*/
+[_QW] = KEYMAP( /* QWERTY */
+  KC_ESC,           KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
+  KC_TABM,          KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, \
+  KC_LCTL,          KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, _______, KC_ENT,  \
+  KC_LSFT, _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    DK_ACT,  KC_DOT,  KC_SLSH,          _______, KC_RSFT, \
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_SPFN,          _______, KC_RALT, KC_RGUI, KC_RCTL, KC_DFWM),
+
+// dead key layer
+/*
+* ,-----------------------------------------------------------.
+* |    |  |   |   |   |   |   |   |   |   |   |   |   | Bsp   |
+* |-----------------------------------------------------------|
+* |     |  %|  &|  ?|  +|  @|  $|  _|  [|  ]|  !|   ~|  ^|    |
+* |-----------------------------------------------------------|
+* |      |  #|  (|  =|  0|  {|  }|  1|  *|  )|  -|  `| Return |
+* |-----------------------------------------------------------|
+* |        |  6|  7|  8|  9|  ||  \|  2|  3|  4|  5|          |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI |       ,       | Alt | GUI | Ctrl |      |
+* `-----------------------------------------------------------'
+*/
+[_DK] = KEYMAP( /* dead key layer */
+  XXXXXXX,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, \
+  XXXXXXX,          KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT,   KC_DLR,  KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \
+  _______,          KC_HASH, KC_LPRN, KC_EQL,  KC_0,    KC_LCBR, KC_RCBR, KC_1,    KC_ASTR, KC_RPRN, KC_MINS, KC_GRV,  _______, KC_CENT, \
+  _______, _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_PIPE, KC_BSLS, KC_2,    DK_REL,  KC_4,    KC_5,             _______, _______, \
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_COMS,          _______, KC_RALT, KC_RGUI, KC_RCTL, _______),
+
+// function layer
+/*
+* ,-----------------------------------------------------------.
+* |   | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|Del |
+* |-----------------------------------------------------------|
+* |Esc  | Cq| Cd|cstb|ctb|   |   |pgd| up|pgu|   |   |   |ins |
+* |-----------------------------------------------------------|
+* |Shift | Ca| Cs|clt|crt|   |   | lt| dw| rt|home|end| Bsp   |
+* |-----------------------------------------------------------|
+* |Shift  | Cz|  Cx|   | Cc| Cv| V-| V+|mute|   |   |         |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI |              | Alt | GUI | Ctrl | Reset |
+* `-----------------------------------------------------------'
+*/
+[_FUN] = KEYMAP( /* function layer */
+  KC_TRNS,          KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+  KC_ESC,           KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP,   KC_PGUP, _______, _______, _______, KC_INS,  \
+  KC_LSFT,          KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END,  _______, KC_BSPC, \
+  KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______,          _______, _______, \
+  KC_LCTL, KC_LALT, KC_LGUI,                   KC_TRNS,          _______, KC_RALT, KC_RGUI, KC_RCTL, RESET),
+
+// mouse layer
+/*
+* ,-----------------------------------------------------------.
+* |    |  |   |   |   |   |   |   |   |   |   |   |   |       |
+* |-----------------------------------------------------------|
+* |    |fast|med|slow|   |   |   |   | up|   |   |   |   |    |
+* |-----------------------------------------------------------|
+* |      |   |   |   |   |   |   | lt| dw| rt| rc|   |        |
+* |-----------------------------------------------------------|
+* |        |   |   |   |   |   |   |   |   |   |   |          |
+* |-----------------------------------------------------------|
+* |     |     |     |      lc       |     |     |      |      |
+* `-----------------------------------------------------------'
+*/
+[_MS] = KEYMAP( /* mouse layer */
+  XXXXXXX,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  XXXXXXX,          KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \
+  _______,          _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \
+  _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______,                   KC_BTN1,          _______, _______, _______, _______, _______),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  switch(id) {
+    case _KC_COMS:
+      if (record->event.pressed) {
+        return MACRO(T(COMM), T(SPC), END); // comma + space
+      }
+      break;
+    case _KC_CENT:
+      if (record->event.pressed) {
+        return MACRO(T(COMM), T(ENT), END); // comma + enter
+      }
+      break;
+    case _DK_ACT:
+      if (record->event.pressed) {
+        if (keyboard_report->mods & MOD_BIT(KC_LSFT) || keyboard_report->mods & MOD_BIT(KC_RSFT)) { // act as comma when shift is pressed (eg <)
+          register_code(KC_COMM);
+        } else { // activate oneshot dead key layer otherwise
+          layer_on(_DK);
+          set_oneshot_layer(_DK, ONESHOT_START);
+        }
+      } else { // make sure to deactive dead key layer on key release
+        clear_oneshot_layer_state(ONESHOT_PRESSED);
+        unregister_code(KC_COMM);
+      }
+      break;
+    case _DK_REL:
+      if (record->event.pressed) { // act as 3 on keypress
+        register_code(KC_3);
+      } else { // make sure to deactive dead key layer on key release
+        clear_oneshot_layer_state(ONESHOT_PRESSED);
+        unregister_code(KC_3);
+      }
+      break;
+  }
+
+  return MACRO_NONE;
+};
diff --git a/keyboards/kc60/keymaps/workman-dead/readme.md b/keyboards/kc60/keymaps/workman-dead/readme.md
new file mode 100644 (file)
index 0000000..f1fcdc9
--- /dev/null
@@ -0,0 +1,17 @@
+# Workman dead with spacefn (kc60 @ QMK)
+
+## Layout reference
+![workman dead with spacefn](./kc60-wm-dead.png)
+
+## Build
+
+To build this keymap, simply run `make KEYMAP=workman-dead`.
+
+## Notes
+
+* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though)
+* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference)
+* hold `space` to access the `function` layer (marked blue in the reference)
+* hold `tab` to activate the mouse layer
+* the `function` layer contains mostly osx specific shortcuts
+* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout
index 2f39ea8e55ecb607d2c7dc24ec1099a25986fad0..43abf6228effe0de1cb093711fd465b745e95e76 100644 (file)
@@ -2,7 +2,7 @@
 
 /* WS2812B RGB Underglow LED */
 #define RGB_DI_PIN F5   // Based on wiring depicted in ws2812_wiring.jpg
-#define RGBLIGHT_TIMER       
+#define RGBLIGHT_ANIMATIONS       
 #define RGBLED_NUM 16         // Number of LEDs. Change this to match your use case.
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
index 1c0574df09304525c1e447e44332e22c3b296ad9..ae11ebf91c543563023b5e1cbc55f371e938346b 100644 (file)
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TAB,  KC_Q,    KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,  KC_RBRC, KC_BSLS, \
   KC_CAPS, KC_A,    KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,  KC_NO,   KC_ENT,  \
   KC_LSFT, KC_NO,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,  KC_NO,   KC_RSFT, \
-  KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                                 KC_RALT,KC_RGUI, MO(_FL), KC_RCTL),
+  KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                         KC_NO,  KC_RALT,KC_RGUI, MO(_FL), KC_RCTL),
 
   /* Keymap _FL: Function Layer
    * ,-----------------------------------------------------------.
@@ -53,13 +53,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
   KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
   KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS, RESET),
+  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS, RESET),
   #else
   KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
   KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
   KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS, RESET),
+  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS, RESET),
   #endif
 };
 
diff --git a/keyboards/kc60/led.c b/keyboards/kc60/led.c
new file mode 100644 (file)
index 0000000..50659d7
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include "stdint.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        // output low
+        DDRB |= (1<<2);
+        PORTB &= ~(1<<2);
+    } else {
+        // Hi-Z
+        DDRB &= ~(1<<2);
+        PORTB &= ~(1<<2);
+    }
+}
\ No newline at end of file
index acc0df68dc4d17e3679c8ac7d34b06377ddedb87..da84f6159afef6516686c6e319a9e17d08213a06 100644 (file)
@@ -10,18 +10,27 @@ Download or clone the whole firmware and navigate to the keyboards/kc60 folder.
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
+
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
 
 ## WS2812 Support
 ![Image of KC60 with RGB Underglow](keymaps/ws2812/ws2812_example.jpg)
 
-Build with WS2812 Support by running `make KEYMAP=ws2812`.
+Build with WS2812 Support by running `make ws2812`.
+
+## Warning
+For those who want to use 2x1U instead of classic backspace you need to use K0D and K49 like this:
+* K0D represents the key at the right of =.
+* K49 represents the last key of the row (is wired at the right of the space key on the PCB)
+
+In kc60.h I've put several definitions' examples of possible layouts proposed by online editor (http://123.57.250.164:9128/).
diff --git a/keyboards/kc60/rules.mk b/keyboards/kc60/rules.mk
new file mode 100644 (file)
index 0000000..a935ed1
--- /dev/null
@@ -0,0 +1,71 @@
+# project specific files
+SRC = led.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+KEYBOARD_LOCK_ENABLE ?= yes  # Allow locking of keyboard via magic key
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h
new file mode 100644 (file)
index 0000000..8f1fdbd
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    You
+#define PRODUCT         kinesis-advantage
+#define DESCRIPTION     A custom keyboard
+
+// Mouse
+#define MOUSEKEY_DELAY          20
+#define MOUSEKEY_INTERVAL       20
+#define MOUSEKEY_MAX_SPEED      4
+#define MOUSEKEY_TIME_TO_MAX    20
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_DELTA 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 1
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS  8 
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+//Passed through the port multipler, so 4 pins =16
+#define MATRIX_ROW_PINS { F0,F1, F2, F3  }
+
+// May be upside down. 
+#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/kinesis/docs/kicad/kinesis-cache.lib b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
new file mode 100644 (file)
index 0000000..f798d39
--- /dev/null
@@ -0,0 +1,232 @@
+EESchema-LIBRARY Version 2.3  Date: Wednesday, November 12, 2014 'pmt' 10:15:19 pm
+#encoding utf-8
+#
+# AT90S4414-P
+#
+DEF AT90S4414-P IC 0 40 Y Y 1 F N
+F0 "IC" -850 1880 40 H V L BNN
+F1 "AT90S4414-P" 450 -1950 40 H V L BNN
+F2 "DIL40" 0 0 30 H V C CIN
+F3 "~" 0 0 60 H V C CNN
+ALIAS AT90S8515-P
+$FPLIST
+ 40DIP-ELL600
+ 40dip600
+$ENDFPLIST
+DRAW
+S -850 1850 850 -1850 0 1 10 f
+X (T0)PB0 1 1000 700 150 L 40 40 1 1 B
+X (T1)PB1 2 1000 600 150 L 40 40 1 1 B
+X (AIN0)PB2 3 1000 500 150 L 40 40 1 1 B
+X (AIN1)PB3 4 1000 400 150 L 40 40 1 1 B
+X (~SS~)PB4 5 1000 300 150 L 40 40 1 1 B
+X (MOSI)PB5 6 1000 200 150 L 40 40 1 1 B
+X (MISO)PB6 7 1000 100 150 L 40 40 1 1 B
+X (SCK)PB7 8 1000 0 150 L 40 40 1 1 B
+X ~RESET 9 -1000 1700 150 R 40 40 1 1 I
+X (RXD)PD0 10 1000 -1000 150 L 40 40 1 1 B
+X GND 20 0 -2000 150 U 40 40 1 1 W
+X ALE 30 1000 850 150 L 40 40 1 1 O
+X VCC 40 0 2000 150 D 40 40 1 1 W
+X (TXD)PD1 11 1000 -1100 150 L 40 40 1 1 B
+X (A8)PC0 21 1000 -150 150 L 40 40 1 1 B
+X ICP 31 -1000 -1400 150 R 40 40 1 1 I
+X (INT0)PD2 12 1000 -1200 150 L 40 40 1 1 B
+X (A9)PC1 22 1000 -250 150 L 40 40 1 1 B
+X (AD7)PA7 32 1000 1000 150 L 40 40 1 1 B
+X (INT1)PD3 13 1000 -1300 150 L 40 40 1 1 B
+X (A10)PC2 23 1000 -350 150 L 40 40 1 1 B
+X (AD6)PA6 33 1000 1100 150 L 40 40 1 1 B
+X PD4 14 1000 -1400 150 L 40 40 1 1 B
+X (A11)PC3 24 1000 -450 150 L 40 40 1 1 B
+X (AD5)PA5 34 1000 1200 150 L 40 40 1 1 B
+X (OC1A)PD5 15 1000 -1500 150 L 40 40 1 1 B
+X (A12)PC4 25 1000 -550 150 L 40 40 1 1 B
+X (AD4)PA4 35 1000 1300 150 L 40 40 1 1 B
+X (~WR~)PD6 16 1000 -1600 150 L 40 40 1 1 B
+X (A13)PC5 26 1000 -650 150 L 40 40 1 1 B
+X (AD3)PA3 36 1000 1400 150 L 40 40 1 1 B
+X (~RD~)PD7 17 1000 -1700 150 L 40 40 1 1 B
+X (A14)PC6 27 1000 -750 150 L 40 40 1 1 B
+X (AD2)PA2 37 1000 1500 150 L 40 40 1 1 B
+X XTAL2 18 -1000 1200 150 R 40 40 1 1 B
+X (A15)PC7 28 1000 -850 150 L 40 40 1 1 B
+X (AD1)PA1 38 1000 1600 150 L 40 40 1 1 B
+X XTAL1 19 -1000 800 150 R 40 40 1 1 B
+X OC1B 29 -1000 -1500 150 R 40 40 1 1 W
+X (AD0)PA0 39 1000 1700 150 L 40 40 1 1 B
+ENDDRAW
+ENDDEF
+#
+# ATMEGA16U4-A
+#
+DEF ATMEGA16U4-A U 0 40 Y Y 1 F N
+F0 "U" -950 1700 40 H V C CNN
+F1 "ATMEGA16U4-A" 700 -1500 40 H V C CNN
+F2 "TQFP44" 0 0 35 H V C CIN
+F3 "~" 1100 1100 60 H V C CNN
+ALIAS ATMEGA16U4RC-A ATMEGA32U4-A ATMEGA32U4RC-A
+$FPLIST
+ TQFP44
+$ENDFPLIST
+DRAW
+S -1000 1650 950 -1450 0 1 10 f
+X (INT6/AIN0)PE6 1 1100 -650 150 L 40 40 1 1 B
+X UVCC 2 -450 1800 150 D 40 40 1 1 W
+X D- 3 -1150 100 150 R 40 40 1 1 B
+X D+ 4 -1150 200 150 R 40 40 1 1 B
+X UGND 5 -400 -1600 150 U 40 40 1 1 P
+X UCAP 6 -1150 -50 150 R 40 40 1 1 P
+X VBUS 7 -1150 350 150 R 40 40 1 1 P
+X (SS/PCINT0)PB0 8 1100 1550 150 L 40 40 1 1 B
+X (SCLK/PCINT1)PB1 9 1100 1450 150 L 40 40 1 1 B
+X (PDI/MOSI/PCINT2)PB2 10 1100 1350 150 L 40 40 1 1 B
+X (RXD/INT2)PD2 20 1100 150 150 L 40 40 1 1 B
+X (ADC13/OC1B/OC4B/PCINT13)PB6 30 1100 950 150 L 40 40 1 1 B
+X (ADC1)PF1 40 1100 -950 150 L 40 40 1 1 B
+X (PDO/MISO/PCINT3)PB3 11 1100 1250 150 L 40 40 1 1 B
+X (TXD/INT3)PD3 21 1100 50 150 L 40 40 1 1 B
+X (OC3A/~OC4A~)PC6 31 1100 650 150 L 40 40 1 1 B
+X (ADC0)PF0 41 1100 -850 150 L 40 40 1 1 B
+X (OC0A/OC1C/~RTS~/PCINT7)PB7 12 1100 850 150 L 40 40 1 1 B
+X (XCK1/~CTS~)PD5 22 1100 -150 150 L 40 40 1 1 B
+X (ICP3/CLK0/OC4A)PC7 32 1100 550 150 L 40 40 1 1 B
+X AREF 42 -1150 -850 150 R 40 40 1 1 P
+X ~RESET~ 13 -1150 1550 150 R 40 40 1 1 I
+X GND 23 -50 -1600 150 U 40 40 1 1 W
+X (~HWB~)PE2 33 1100 -550 150 L 40 40 1 1 B
+X GND 43 150 -1600 150 U 40 40 1 1 W
+X VCC 14 -200 1800 150 D 40 40 1 1 W
+X AVCC 24 150 1800 150 D 40 40 1 1 W
+X VCC 34 -100 1800 150 D 40 40 1 1 W
+X AVCC 44 250 1800 150 D 40 40 1 1 W
+X GND 15 -150 -1600 150 U 40 40 1 1 W
+X (ICP2/ADC8)PD4 25 1100 -50 150 L 40 40 1 1 B
+X GND 35 50 -1600 150 U 40 40 1 1 W
+X XTAL2 16 -1150 950 150 R 40 40 1 1 O
+X (T1/~OC4D~/ADC9)PD6 26 1100 -250 150 L 40 40 1 1 B
+X (ADC7/TDI)PF7 36 1100 -1350 150 L 40 40 1 1 B
+X XTAL1 17 -1150 1150 150 R 40 40 1 1 I
+X (T0/OC4D/ADC10)PD7 27 1100 -350 150 L 40 40 1 1 B
+X (ADC6/TDO)PF6 37 1100 -1250 150 L 40 40 1 1 B
+X (OC0B/SCL/INT0)PD0 18 1100 350 150 L 40 40 1 1 B
+X (ADC11/PCINT4)PB4 28 1100 1150 150 L 40 40 1 1 B
+X (ADC5/TMS)PF5 38 1100 -1150 150 L 40 40 1 1 B
+X (SDA/INT1)PD1 19 1100 250 150 L 40 40 1 1 B
+X (ADC12/OC1A/~OC4B~/PCINT12)PB5 29 1100 1050 150 L 40 40 1 1 B
+X (ADC4/TCK)PF4 39 1100 -1050 150 L 40 40 1 1 B
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "~" 38 -150 30 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20  -80 -30  80 -30 N
+P 2 0 1 20  -80 30  80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_7
+#
+DEF CONN_7 P 0 40 Y N 1 F N
+F0 "P" -30 0 60 V V C CNN
+F1 "CONN_7" 70 0 60 V V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+S -100 350 150 -350 0 1 0 N
+X P1 1 -350 300 250 R 50 50 1 1 P I
+X P2 2 -350 200 250 R 50 50 1 1 P I
+X P3 3 -350 100 250 R 50 50 1 1 P I
+X P4 4 -350 0 250 R 50 50 1 1 P I
+X P5 5 -350 -100 250 R 50 50 1 1 P I
+X P6 6 -350 -200 250 R 50 50 1 1 P I
+X P7 7 -350 -300 250 R 50 50 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0  -50 0  0 -50  50 0  -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "~" -70 0 30 V V C CNN
+F3 "~" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# USB-MINI-B
+#
+DEF USB-MINI-B CON 0 40 Y Y 1 F N
+F0 "CON" -250 450 60 H V C CNN
+F1 "USB-MINI-B" -50 -500 60 H V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+$FPLIST
+ USB-Mini-B-Jack
+$ENDFPLIST
+DRAW
+S -350 400 350 -400 0 1 0 N
+X VBUS 1 -550 300 200 R 50 50 1 1 W
+X D- 2 -550 150 200 R 50 50 1 1 B
+X D+ 3 -550 0 200 R 50 50 1 1 B
+X ID 4 -550 -150 200 R 50 50 1 1 B
+X GND 5 -550 -300 200 R 50 50 1 1 W
+X SHELL1 6 550 300 200 L 50 50 1 1 B
+X SHELL2 7 550 150 200 L 50 50 1 1 B
+X SHELL3 8 550 -150 200 L 50 50 1 1 B
+X SHELL4 9 550 -300 200 L 50 50 1 1 B
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0  0 0  0 30  0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/keyboards/kinesis/docs/kicad/kinesis.pro b/keyboards/kinesis/docs/kicad/kinesis.pro
new file mode 100644 (file)
index 0000000..9f130b5
--- /dev/null
@@ -0,0 +1,83 @@
+update=Wednesday, November 05, 2014 'pmt' 12:08:47 pm
+version=1
+last_client=pcbnew
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[eeschema]
+version=1
+PageLayoutDescrFile=
+SubpartIdSeparator=0
+SubpartFirstId=65
+LibDir=../../../lib/kicad/library
+NetFmtName=
+RptD_X=0
+RptD_Y=100
+RptLab=1
+LabSize=60
+[eeschema/libraries]
+LibName1=power
+LibName2=device
+LibName3=transistors
+LibName4=conn
+LibName5=linear
+LibName6=regul
+LibName7=74xx
+LibName8=cmos4000
+LibName9=adc-dac
+LibName10=memory
+LibName11=xilinx
+LibName12=special
+LibName13=microcontrollers
+LibName14=dsp
+LibName15=microchip
+LibName16=analog_switches
+LibName17=motorola
+LibName18=texas
+LibName19=intel
+LibName20=audio
+LibName21=interface
+LibName22=digital-audio
+LibName23=philips
+LibName24=display
+LibName25=cypress
+LibName26=siliconi
+LibName27=opto
+LibName28=atmel
+LibName29=contrib
+LibName30=valves
+LibName31=custom
+[pcbnew]
+version=1
+LastNetListRead=
+UseCmpFile=1
+PadDrill=1.016000000000
+PadDrillOvalY=1.016000000000
+PadSizeH=1.524000000000
+PadSizeV=1.524000000000
+PcbTextSizeV=1.500000000000
+PcbTextSizeH=1.500000000000
+PcbTextThickness=0.300000000000
+ModuleTextSizeV=1.000000000000
+ModuleTextSizeH=1.000000000000
+ModuleTextSizeThickness=0.150000000000
+SolderMaskClearance=0.000000000000
+SolderMaskMinWidth=0.000000000000
+DrawSegmentWidth=0.200000000000
+BoardOutlineThickness=0.100000000000
+ModuleOutlineThickness=0.150000000000
+[pcbnew/libraries]
+LibDir=../../../lib/kicad/modules
+LibName1=custom
+LibName2=Sockets
+LibName3=Connect
+LibName4=Discret
+LibName5=Divers
+LibName6=Display
+LibName7=LEDs
+LibName8=SMD_Packages
+LibName9=Sockets_DIP
diff --git a/keyboards/kinesis/docs/kicad/kinesis.sch b/keyboards/kinesis/docs/kicad/kinesis.sch
new file mode 100644 (file)
index 0000000..f75335a
--- /dev/null
@@ -0,0 +1,634 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:dsp
+LIBS:microchip
+LIBS:analog_switches
+LIBS:motorola
+LIBS:texas
+LIBS:intel
+LIBS:audio
+LIBS:interface
+LIBS:digital-audio
+LIBS:philips
+LIBS:display
+LIBS:cypress
+LIBS:siliconi
+LIBS:opto
+LIBS:atmel
+LIBS:contrib
+LIBS:valves
+LIBS:custom
+LIBS:kinesis-cache
+EELAYER 27 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date "13 nov 2014"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L C C4
+U 1 1 545804FB
+P 2850 4250
+F 0 "C4" H 2850 4350 40  0000 L CNN
+F 1 "1uF" H 2856 4165 40  0000 L CNN
+F 2 "~" H 2888 4100 30  0000 C CNN
+F 3 "~" H 2850 4250 60  0000 C CNN
+       1    2850 4250
+       -1   0    0    1   
+$EndComp
+$Comp
+L R R3
+U 1 1 545805E8
+P 2500 4000
+F 0 "R3" V 2580 4000 40  0000 C CNN
+F 1 "22" V 2507 4001 40  0000 C CNN
+F 2 "~" V 2430 4000 30  0000 C CNN
+F 3 "~" H 2500 4000 30  0000 C CNN
+       1    2500 4000
+       0    -1   -1   0   
+$EndComp
+$Comp
+L R R2
+U 1 1 545805FA
+P 2500 3800
+F 0 "R2" V 2580 3800 40  0000 C CNN
+F 1 "22" V 2507 3801 40  0000 C CNN
+F 2 "~" V 2430 3800 30  0000 C CNN
+F 3 "~" H 2500 3800 30  0000 C CNN
+       1    2500 3800
+       0    -1   -1   0   
+$EndComp
+Entry Wire Line
+       6450 2450 6550 2550
+Entry Wire Line
+       6450 2550 6550 2650
+Entry Wire Line
+       6450 2650 6550 2750
+Entry Wire Line
+       6450 2750 6550 2850
+Entry Wire Line
+       6450 2950 6550 3050
+Entry Wire Line
+       6450 3050 6550 3150
+Entry Wire Line
+       6450 2850 6550 2950
+Entry Wire Line
+       6450 3150 6550 3250
+Wire Wire Line
+       10250 1800 10750 1800
+Entry Wire Line
+       10750 1800 10850 1900
+Entry Wire Line
+       10750 1900 10850 2000
+Entry Wire Line
+       10750 2000 10850 2100
+Entry Wire Line
+       10750 2800 10850 2900
+Entry Wire Line
+       10750 2900 10850 3000
+Entry Wire Line
+       10750 3000 10850 3100
+Entry Wire Line
+       10750 3100 10850 3200
+Entry Wire Line
+       10750 3200 10850 3300
+Entry Wire Line
+       10750 3300 10850 3400
+$Comp
+L AT90S8515-P IC2
+U 1 1 545A62EA
+P 9250 3500
+F 0 "IC2" H 8400 5380 40  0000 L BNN
+F 1 "AT90S8515-P" H 9700 1550 40  0000 L BNN
+F 2 "DIL40" H 9250 3500 30  0000 C CIN
+F 3 "" H 9250 3500 60  0000 C CNN
+       1    9250 3500
+       1    0    0    -1  
+$EndComp
+NoConn ~ 10250 2650
+Entry Wire Line
+       10750 3650 10850 3750
+Entry Wire Line
+       10750 3750 10850 3850
+Entry Wire Line
+       10750 3850 10850 3950
+Entry Wire Line
+       10750 3950 10850 4050
+Entry Wire Line
+       10750 4050 10850 4150
+Entry Wire Line
+       10750 4150 10850 4250
+Entry Wire Line
+       10750 4350 10850 4450
+Entry Wire Line
+       10750 4250 10850 4350
+NoConn ~ 8250 4900
+NoConn ~ 8250 5000
+NoConn ~ 8250 1800
+Wire Wire Line
+       10250 1900 10750 1900
+Wire Wire Line
+       10250 2000 10750 2000
+Wire Wire Line
+       10250 2100 10750 2100
+Wire Wire Line
+       10250 2200 10750 2200
+Wire Wire Line
+       10250 2300 10750 2300
+Wire Wire Line
+       10250 2400 10750 2400
+Wire Wire Line
+       10250 2500 10750 2500
+Text Label 10350 1800 0    60   ~ 0
+A
+Text Label 10350 1900 0    60   ~ 0
+B
+Text Label 10350 2000 0    60   ~ 0
+C
+Text Label 10350 2100 0    60   ~ 0
+G
+Wire Wire Line
+       10250 2800 10750 2800
+Wire Wire Line
+       10250 2900 10750 2900
+Wire Wire Line
+       10250 3000 10750 3000
+Wire Wire Line
+       10250 3100 10750 3100
+Wire Wire Line
+       10250 3200 10750 3200
+Wire Wire Line
+       10250 3300 10750 3300
+Wire Wire Line
+       10250 3400 10750 3400
+Wire Wire Line
+       10250 3500 10750 3500
+Text Label 10350 2800 0    60   ~ 0
+DL2
+Text Label 10350 2900 0    60   ~ 0
+DR1
+Text Label 10350 3000 0    60   ~ 0
+DR2
+Text Label 10350 3100 0    60   ~ 0
+DL1
+Text Label 10350 3400 0    60   ~ 0
+SCL
+Text Label 10350 3500 0    60   ~ 0
+SDA
+Wire Wire Line
+       10250 3650 10750 3650
+Wire Wire Line
+       10250 3750 10750 3750
+Wire Wire Line
+       10250 3850 10750 3850
+Wire Wire Line
+       10250 3950 10750 3950
+Wire Wire Line
+       10250 4050 10750 4050
+Wire Wire Line
+       10250 4150 10750 4150
+Wire Wire Line
+       10250 4250 10750 4250
+Wire Wire Line
+       10250 4350 10750 4350
+Text Label 10350 3650 0    60   ~ 0
+R1
+Text Label 10350 3750 0    60   ~ 0
+R2
+Text Label 10350 3850 0    60   ~ 0
+R3
+Text Label 10350 3950 0    60   ~ 0
+R4
+Text Label 10350 4050 0    60   ~ 0
+R5
+Text Label 10350 4150 0    60   ~ 0
+R6
+Text Label 10350 4250 0    60   ~ 0
+R7
+Text Label 10350 4350 0    60   ~ 0
+R8
+Wire Wire Line
+       10250 4500 10750 4500
+Wire Wire Line
+       10250 4600 10750 4600
+Wire Wire Line
+       10250 4700 10750 4700
+Wire Wire Line
+       10250 4800 10750 4800
+Wire Wire Line
+       10250 4900 10750 4900
+Wire Wire Line
+       10250 5000 10750 5000
+Wire Wire Line
+       10250 5100 10750 5100
+Wire Wire Line
+       10250 5200 10750 5200
+Text Label 10350 4600 0    60   ~ 0
+FS1
+Text Label 10350 5000 0    60   ~ 0
+FS3
+Text Label 10350 5200 0    60   ~ 0
+FS2
+$Comp
+L GND #PWR01
+U 1 1 545A7377
+P 9250 5600
+F 0 "#PWR01" H 9250 5600 30  0001 C CNN
+F 1 "GND" H 9250 5530 30  0001 C CNN
+F 2 "" H 9250 5600 60  0000 C CNN
+F 3 "" H 9250 5600 60  0000 C CNN
+       1    9250 5600
+       1    0    0    -1  
+$EndComp
+Wire Wire Line
+       9250 5500 9250 5600
+Text Label 10350 4700 0    60   ~ 0
+CLOCK
+Text Label 10350 4800 0    60   ~ 0
+DATA
+NoConn ~ 10750 4700
+NoConn ~ 10750 4800
+Text Label 10350 3200 0    60   ~ 0
+KP
+Text Label 10350 3300 0    60   ~ 0
+PGM
+Text Label 10350 2500 0    60   ~ 0
+BUZZ
+NoConn ~ 8250 2300
+NoConn ~ 8250 2700
+$Comp
+L GND #PWR02
+U 1 1 545A7565
+P 4750 5700
+F 0 "#PWR02" H 4750 5700 30  0001 C CNN
+F 1 "GND" H 4750 5630 30  0001 C CNN
+F 2 "" H 4750 5700 60  0000 C CNN
+F 3 "" H 4750 5700 60  0000 C CNN
+       1    4750 5700
+       1    0    0    -1  
+$EndComp
+Entry Wire Line
+       6450 3650 6550 3750
+Entry Wire Line
+       6450 3750 6550 3850
+Entry Wire Line
+       6450 4150 6550 4250
+Entry Wire Line
+       6450 4250 6550 4350
+Entry Wire Line
+       6450 4050 6550 4150
+Entry Wire Line
+       6450 4350 6550 4450
+NoConn ~ 3750 2850
+Wire Wire Line
+       1200 2000 6450 2000
+NoConn ~ 3750 3050
+Wire Wire Line
+       2750 3800 3750 3800
+Wire Wire Line
+       2750 3900 3750 3900
+Wire Wire Line
+       2750 3900 2750 4000
+Wire Bus Line
+       6550 2100 6550 6050
+Wire Bus Line
+       10850 1600 10850 6050
+Text Label 6050 4350 0    60   ~ 0
+DL1
+Text Label 6050 4250 0    60   ~ 0
+DR2
+Text Label 6050 4150 0    60   ~ 0
+DR1
+Text Label 6050 4050 0    60   ~ 0
+DL2
+Text Label 6050 2450 0    60   ~ 0
+R1
+Text Label 6050 2550 0    60   ~ 0
+R2
+Text Label 6050 2650 0    60   ~ 0
+R3
+Text Label 6050 2750 0    60   ~ 0
+R4
+Text Label 6050 2850 0    60   ~ 0
+R5
+Text Label 6050 2950 0    60   ~ 0
+R6
+Text Label 6050 3050 0    60   ~ 0
+R7
+Text Label 6050 3150 0    60   ~ 0
+R8
+Text Label 6050 5050 0    60   ~ 0
+A
+Text Label 6050 5150 0    60   ~ 0
+B
+Text Label 6050 5250 0    60   ~ 0
+C
+Text Label 6050 5350 0    60   ~ 0
+G
+Text Label 1300 3800 0    60   ~ 0
+D+
+Text Label 1300 4000 0    60   ~ 0
+D-
+NoConn ~ 10750 2200
+NoConn ~ 10750 2300
+NoConn ~ 10750 2400
+Text Label 10350 4500 0    60   ~ 0
+GND
+NoConn ~ 10750 4900
+NoConn ~ 10750 5100
+Text Label 6050 3450 0    60   ~ 0
+KP
+Text Label 6050 3350 0    60   ~ 0
+PGM
+$Comp
+L ATMEGA32U4-A U1
+U 1 1 5462E0B1
+P 4900 4000
+F 0 "U1" H 3950 5700 40  0000 C CNN
+F 1 "ATMEGA32U4-A" H 5600 2500 40  0000 C CNN
+F 2 "TQFP44" H 4900 4000 35  0000 C CIN
+F 3 "" H 6000 5100 60  0000 C CNN
+       1    4900 4000
+       1    0    0    -1  
+$EndComp
+Wire Wire Line
+       3750 4850 3750 5600
+Wire Wire Line
+       4450 2200 5150 2200
+Connection ~ 4700 2200
+Connection ~ 4800 2200
+Connection ~ 5050 2200
+Connection ~ 4800 2000
+Wire Wire Line
+       6000 2450 6450 2450
+Wire Wire Line
+       6000 2550 6450 2550
+Wire Wire Line
+       6000 2650 6450 2650
+Wire Wire Line
+       6000 2750 6450 2750
+Wire Wire Line
+       6000 2850 6450 2850
+Wire Wire Line
+       6000 2950 6450 2950
+Wire Wire Line
+       6000 3050 6450 3050
+Wire Wire Line
+       6000 3150 6450 3150
+Wire Wire Line
+       6000 5050 6450 5050
+Wire Wire Line
+       6000 5150 6450 5150
+Wire Wire Line
+       6000 5250 6450 5250
+Wire Wire Line
+       6000 4050 6450 4050
+Wire Wire Line
+       6000 4150 6450 4150
+Wire Wire Line
+       6000 4250 6450 4250
+Wire Wire Line
+       6000 4350 6450 4350
+Wire Wire Line
+       6000 4550 6450 4550
+Entry Wire Line
+       6450 3350 6550 3450
+Entry Wire Line
+       6450 3450 6550 3550
+Entry Wire Line
+       6450 5050 6550 5150
+Entry Wire Line
+       6450 5150 6550 5250
+Entry Wire Line
+       6450 5250 6550 5350
+Entry Wire Line
+       6450 5350 6550 5450
+Entry Wire Line
+       6450 4650 6550 4750
+Wire Wire Line
+       6000 3350 6450 3350
+Wire Wire Line
+       6000 3450 6450 3450
+Wire Wire Line
+       1200 5600 6450 5600
+Connection ~ 4950 5600
+Connection ~ 4850 5600
+Wire Wire Line
+       4750 5600 4750 5700
+Connection ~ 4750 5600
+Connection ~ 4500 5600
+Text Label 6050 4550 0    60   ~ 0
+HWB
+Wire Wire Line
+       6000 5350 6450 5350
+Wire Wire Line
+       6000 3650 6450 3650
+Wire Wire Line
+       6000 3750 6450 3750
+Text Label 6050 3650 0    60   ~ 0
+SCL
+Text Label 6050 3750 0    60   ~ 0
+SDA
+Wire Wire Line
+       6000 3850 6450 3850
+Wire Wire Line
+       6000 3950 6450 3950
+Wire Wire Line
+       6000 4650 6450 4650
+Text Label 6050 4650 0    60   ~ 0
+BUZZ
+NoConn ~ 10750 4600
+NoConn ~ 10750 5000
+NoConn ~ 10750 5200
+Entry Wire Line
+       10750 3400 10850 3500
+Entry Wire Line
+       10750 3500 10850 3600
+Entry Wire Line
+       10750 4500 10850 4600
+Wire Wire Line
+       2850 4050 3750 4050
+Text Label 2950 4050 0    60   ~ 0
+UCAP
+Wire Wire Line
+       6000 4850 6450 4850
+Wire Wire Line
+       6000 4950 6450 4950
+NoConn ~ 6450 4850
+NoConn ~ 6450 4950
+NoConn ~ 6450 4550
+$Comp
+L USB-MINI-B CON1
+U 1 1 546431C1
+P 2100 5050
+F 0 "CON1" H 1850 5500 60  0000 C CNN
+F 1 "USB-MINI-B" H 2050 4550 60  0000 C CNN
+F 2 "" H 2100 5050 60  0000 C CNN
+F 3 "" H 2100 5050 60  0000 C CNN
+       1    2100 5050
+       0    1    1    0   
+$EndComp
+$Comp
+L VCC #PWR03
+U 1 1 54643698
+P 2400 4400
+F 0 "#PWR03" H 2400 4500 30  0001 C CNN
+F 1 "VCC" H 2400 4500 30  0000 C CNN
+F 2 "" H 2400 4400 60  0000 C CNN
+F 3 "" H 2400 4400 60  0000 C CNN
+       1    2400 4400
+       1    0    0    -1  
+$EndComp
+Text Notes 2600 2750 0    60   ~ 0
+Teensy 2.0\n(not fully drawn)
+$Comp
+L CONN_7 B7K-PH-K-S1
+U 1 1 54643939
+P 1950 6900
+F 0 "B7K-PH-K-S1" V 1920 6900 60  0000 C CNN
+F 1 "CONN_7" V 2020 6900 60  0000 C CNN
+F 2 "" H 1950 6900 60  0000 C CNN
+F 3 "" H 1950 6900 60  0000 C CNN
+       1    1950 6900
+       1    0    0    -1  
+$EndComp
+Connection ~ 3750 5600
+Connection ~ 2400 5600
+Connection ~ 2250 5600
+Connection ~ 1950 5600
+Wire Wire Line
+       2400 4400 2400 4500
+Wire Wire Line
+       2250 4000 2250 4500
+Wire Wire Line
+       1200 3800 2250 3800
+Wire Wire Line
+       2100 3800 2100 4500
+Wire Wire Line
+       2850 4450 2850 5600
+Connection ~ 2850 5600
+Entry Wire Line
+       1100 6800 1200 6900
+Entry Wire Line
+       1100 6900 1200 7000
+Entry Wire Line
+       1100 7000 1200 7100
+Entry Wire Line
+       1100 6700 1200 6800
+Wire Wire Line
+       1200 6600 1600 6600
+Wire Wire Line
+       1200 6700 1600 6700
+Wire Wire Line
+       1200 6800 1600 6800
+Wire Wire Line
+       1200 6900 1600 6900
+Wire Wire Line
+       1200 7000 1600 7000
+Wire Wire Line
+       1200 7100 1600 7100
+Wire Wire Line
+       1200 7200 1600 7200
+Text Label 1300 6600 0    60   ~ 0
+FS2
+Text Label 1300 6700 0    60   ~ 0
+FS1
+Text Label 1300 6800 0    60   ~ 0
+VCC
+Text Label 1300 6900 0    60   ~ 0
+D-
+Text Label 1300 7000 0    60   ~ 0
+D+
+Text Label 1300 7100 0    60   ~ 0
+GND
+Text Label 1300 7200 0    60   ~ 0
+FS3
+NoConn ~ 3750 2450
+Wire Wire Line
+       3600 2000 3600 3650
+Wire Wire Line
+       3600 3650 3750 3650
+NoConn ~ 1950 4500
+Wire Bus Line
+       1100 1900 1100 7100
+NoConn ~ 1200 6600
+NoConn ~ 1200 6700
+NoConn ~ 1200 7200
+Connection ~ 2100 3800
+Wire Wire Line
+       1200 4000 2250 4000
+Entry Wire Line
+       1100 3700 1200 3800
+Entry Wire Line
+       1100 3900 1200 4000
+Text Label 10350 1500 0    60   ~ 0
+VCC
+Entry Wire Line
+       1100 1900 1200 2000
+Text Label 1250 2000 0    60   ~ 0
+VCC
+Entry Wire Line
+       1100 5500 1200 5600
+Connection ~ 1800 5600
+Text Label 1300 5600 0    60   ~ 0
+GND
+Wire Wire Line
+       9250 5500 10750 5500
+Entry Wire Line
+       10750 5500 10850 5600
+Text Label 10350 5500 0    60   ~ 0
+GND
+Wire Wire Line
+       9250 1500 10750 1500
+Entry Wire Line
+       10750 1500 10850 1600
+Connection ~ 3600 2000
+Wire Wire Line
+       4800 2000 4800 2200
+Entry Wire Line
+       6450 2000 6550 2100
+Text Label 6050 2000 0    60   ~ 0
+VCC
+Connection ~ 5050 5600
+Entry Wire Line
+       6450 5600 6550 5700
+Text Label 6050 5600 0    60   ~ 0
+GND
+NoConn ~ 6450 3850
+NoConn ~ 6450 3950
+Wire Wire Line
+       1800 4500 1500 4500
+Wire Wire Line
+       1500 4500 1500 5600
+Connection ~ 1500 5600
+Entry Wire Line
+       10750 2500 10850 2600
+Entry Wire Line
+       10750 2100 10850 2200
+Text Notes 1000 5300 1    60   ~ 0
+Sacrificial USB cable from header to Teensy
+Text Notes 7850 5950 0    60   ~ 0
+Ribbon cable between Teensy pins and socket
+Wire Bus Line
+       10850 6050 6550 6050
+$EndSCHEMATC
diff --git a/keyboards/kinesis/docs/photos/P1050573.jpg b/keyboards/kinesis/docs/photos/P1050573.jpg
new file mode 100644 (file)
index 0000000..027ab9e
Binary files /dev/null and b/keyboards/kinesis/docs/photos/P1050573.jpg differ
diff --git a/keyboards/kinesis/docs/photos/P1050574.jpg b/keyboards/kinesis/docs/photos/P1050574.jpg
new file mode 100644 (file)
index 0000000..d49c492
Binary files /dev/null and b/keyboards/kinesis/docs/photos/P1050574.jpg differ
diff --git a/keyboards/kinesis/docs/photos/P1050575.jpg b/keyboards/kinesis/docs/photos/P1050575.jpg
new file mode 100644 (file)
index 0000000..50cc989
Binary files /dev/null and b/keyboards/kinesis/docs/photos/P1050575.jpg differ
diff --git a/keyboards/kinesis/docs/readme.txt b/keyboards/kinesis/docs/readme.txt
new file mode 100644 (file)
index 0000000..af33ac4
--- /dev/null
@@ -0,0 +1,52 @@
+This directory of documentation  was copied from https://github.com/wjanssens/tmk_keyboard/tree/master/keyboard/kinesis
+and is probably Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+and probably released under GPL v2, which may be recovered at <http://www.gnu.org/licenses/>.
+
+Row configuration
+PF0    A
+PF1    B
+PF2    C
+PF3    G       0 = U4, 1 = U5
+
+Column configuration
+                       4y0     4y1     4y2     4y3     4y4     4y5     4y6     4y7     5y0     5y1     5y2     5y3     5y4     5y5     5y6     5y7     
+                       r1      r2       r3 r4  r5      r6      r7      r8      r9      r10     r11     r12     r13     r14     r15     r16     
+PB0    21      c1      f6      f8      f7      5       4       3       2       1       =+                                                              
+PB1    22      c2      f3      f5      f4      t       r       e       w       q       TAB                                                             
+PB2    23      c3      ESC     f2      f1      g       f       d       s       a       CL                                                              
+PB3    24      c4      f9      f11     f10     b       v       c       x       z       LS      UP              DN              [{      ]}              
+PB4    25      c5      f12     SL      PS      RT              LT      §±    `~              6       7       8               9       0       -_      
+PB5    26      c6      PB      PGM     KPD                                                     y       u       i               o       p       \       
+PB6    27      c7                      LC      DL      BS      RC      EN      SP      h       j       k               l       ;:      '"      
+PB7    28      c8                                      RA              PU              PD      n       m       ,<              .>      /?      RS      
+ */
+
+
+40 pin connector
+
+   DL2 1       40      VCC
+   DR1 2       39      A
+   DR2 3       38      B
+   DL1 4       37      C
+   KPD 5       36      G
+   PGM 6       35
+   SCL 7       34
+   SDA 8       33
+   RST 9       32      BUZZ
+    WP 10      31      EA
+   FS1 11      30      ALE
+ CLOCK 12      29      PSEN
+  DATA 13      28      r8
+       14      27      r7
+   FS3 15      26      r6
+       16      25      r5
+   FS2 17      24      r4
+ XTAL1 18      23      r3
+ XTAL2 19      22      r2
+   GND 20      21      r1
+
+
+references:
+https://github.com/chrisandreae/keyboard-firmware
+
+
diff --git a/keyboards/kinesis/docs/schematic.png b/keyboards/kinesis/docs/schematic.png
new file mode 100644 (file)
index 0000000..fa9405a
Binary files /dev/null and b/keyboards/kinesis/docs/schematic.png differ
diff --git a/keyboards/kinesis/keymaps/default/Makefile b/keyboards/kinesis/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..9d3df59
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/kinesis/keymaps/default/config.h b/keyboards/kinesis/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..8893d12
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..3bf8069
--- /dev/null
@@ -0,0 +1,116 @@
+#include "kinesis.h"
+#include "action_layer.h"
+
+#define QWERTY 0 // Base qerty
+#define SYMB 1// Symbol layer
+
+// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2. 
+
+
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Esc    |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F8  |  F9  |  F10 |  F12 | PSCR | SLCK | PAUS |  FN0 |  BOOT  |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+     |  1!  |  2@  |  3#  |  4$  |  5%  |                           |  6^  |  7&  |  8*  |  9(  |  0)  | -_     |
+* |--------+------+------+------+------+------|                           +------+------+------+------+------+--------|
+* | Tab    |   Q  |   W  |   E  |   R  |   T  |                           |   Y  |   U  |   I  |   O  |   P  | \|     |
+* |--------+------+------+------+------+------|                           |------+------+------+------+------+--------|
+* | Caps   |   A  |   S  |   D  |   F  |   G  |                           |   H  |   J  |   K  |   L  |  ;:  | '"     |
+* |--------+------+------+------+------+------|                           |------+------+------+------+------+--------|
+* | Shift  |   Z  |   X  |   C  |   V  |   B  |                           |   N  |   M  |  ,.  |  .>  |  /?  | Shift  |
+* `--------+------+------+------+------+-------                           `------+------+------+------+------+--------'
+*          | `~   | INS  | Left | Right|                                         | Up   | Down |  [{  |  ]}  |
+*          `---------------------------'                                         `---------------------------'
+*                                        ,-------------.         ,-------------.
+*                                        | Ctrl | Alt  |         | Gui  | Ctrl |
+*                                 ,------|------|------|         |------+------+------.
+*                                 |      |      | Home |         | PgUp |      |      |
+*                                 | BkSp | Del  |------|         |------|Return| Space|
+*                                 |      |      | End  |         | PgDn |      |      |
+*                                 `--------------------'         `--------------------'
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[QWERTY] = KEYMAP(
+           KC_ESC, KC_F1  ,KC_F2  ,KC_F3  ,KC_F4  ,KC_F5  ,KC_F6  ,KC_F7  ,KC_F8,
+           KC_EQL, KC_1   ,KC_2   ,KC_3   ,KC_4   ,KC_5   ,
+           KC_TAB, KC_Q   ,KC_W   ,KC_E   ,KC_R   ,KC_T   ,
+           KC_CAPS,KC_A   ,KC_S   ,KC_D   ,KC_F   ,KC_G   ,
+           KC_LSFT,KC_Z   ,KC_X   ,KC_C   ,KC_V   ,KC_B   ,
+                   KC_GRV ,KC_INS ,KC_LEFT,KC_RGHT,
+                          KC_LCTL,KC_LALT,
+                                    KC_HOME,
+                           KC_BSPC,KC_DEL ,KC_END ,
+        KC_F9  ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK  ,KC_PAUS, KC_FN0, KC_1,
+       KC_6   ,KC_7   ,KC_8   ,KC_9   ,KC_0   ,KC_MINS,
+       KC_Y   ,KC_U   ,KC_I   ,KC_O   ,KC_P   ,KC_BSLS,
+       KC_H   ,KC_J   ,KC_K   ,KC_L   ,KC_SCLN,KC_QUOT,
+       KC_N   ,KC_M   ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+               KC_UP  ,KC_DOWN,KC_LBRC,KC_RBRC,
+           KC_RGUI,KC_RCTL,
+           KC_PGUP,
+           KC_PGDN,KC_ENTER ,KC_SPC
+    ),
+[SYMB] = KEYMAP( 
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                            KC_TRNS,  KC_TRNS,
+                                      KC_TRNS,
+                   KC_TRNS, KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_FN0, RESET,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+        KC_TRNS,  KC_TRNS,
+        KC_TRNS,
+        KC_TRNS,  KC_TRNS,  KC_TRNS
+    )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+   [0] = ACTION_LAYER_TAP_TOGGLE(SYMB) ,               // FN1 - Momentary Layer 1 (Symbols)
+
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/default/readme.md b/keyboards/kinesis/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..da033be
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for kinesis-advantage
diff --git a/keyboards/kinesis/keymaps/programmer/Makefile b/keyboards/kinesis/keymaps/programmer/Makefile
new file mode 100644 (file)
index 0000000..9d3df59
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/kinesis/keymaps/programmer/config.h b/keyboards/kinesis/keymaps/programmer/config.h
new file mode 100644 (file)
index 0000000..8893d12
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/programmer/keymap.c b/keyboards/kinesis/keymaps/programmer/keymap.c
new file mode 100644 (file)
index 0000000..83fb7bd
--- /dev/null
@@ -0,0 +1,245 @@
+#include "kinesis.h"
+#include "action_layer.h"
+#include "mousekey.h"
+
+#define QWERTY 0 // Base qerty
+#define SYMB 1// Symbol layer
+#define MOUSE 2//
+
+
+
+
+/* Macros */
+enum {
+  NONE = 0,
+  // Diagonal mouse movement
+  A_MUL,
+  A_MUR,
+  A_MDL,
+  A_MDR,
+};
+
+
+// Borrowing very heavily from 
+// https://github.com/alvicstep/tmk_keyboard 
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Esc    |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F8  |  F9  |  F10 |  F12 |  FN0 |  FN1 |  FN2 |      |  bOOT  |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+     |  1!  |  2@  |  3#  |  4$  |  5%  |                           |  6^  |  7&  |  8*  |  9(  |  0)  | -_     |
+* |--------+------+------+------+------+------|                           +------+------+------+------+------+--------|
+* | Tab    |   Q  |   W  |   E  |   R  |   T  |                           |   Y  |   U  |   I  |   O  |   P  | \|     |
+* |--------+------+------+------+------+------|                           |------+------+------+------+------+--------|
+* |MouseFN1|   A  |   S  |   D  |   F  |   G  |                           |   H  |   J  |   K  |   L  |  ;:  | '"     |
+* |--------+------+------+------+------+------|                           |------+------+------+------+------+--------|
+* | Shift  |   Z  |   X  |   C  |   V  |   B  |                           |   N  |   M  |  ,.  |  .>  |  /?  | Shift  |
+* `--------+------+------+------+------+-------                           `------+------+------+------+------+--------'
+*          | `~   | ESC  |MOUSE1|MOUSE2|                                         | [{   |  ]}  | ESC  | GUI  |
+*          `---------------------------'                                         `---------------------------'
+*                                        ,-------------.         ,-------------.
+*                                        | Ctrl | Alt  |         | Gui  | Ctrl |
+*                                 ,------|------|------|         |------+------+------.
+*                                 |      |      | Home |         | PgUp |      |      |
+*                                 | BkSp | Del  |------|         |------|Return| Space|
+*                                 |      |      | End  |         | PgDn |      |      |
+*                                 `--------------------'         `--------------------'
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[QWERTY] = KEYMAP(
+           KC_ESC, KC_F1  ,KC_F2  ,KC_F3  ,KC_F4  ,KC_F5  ,KC_F6  ,KC_F7  ,KC_F8,
+           KC_EQL, KC_1   ,KC_2   ,KC_3   ,KC_4   ,KC_5   ,
+           KC_TAB, KC_Q   ,KC_W   ,KC_E   ,KC_R   ,KC_T   ,
+           KC_FN1 ,KC_A   ,KC_S   ,KC_D   ,KC_F   ,KC_G   ,
+           KC_LSFT,KC_Z   ,KC_X   ,KC_C   ,KC_V   ,KC_B   ,
+               KC_GRV  ,KC_ESC,  KC_BTN1,KC_BTN2,
+                          KC_LCTL,KC_LALT,
+                          KC_HOME,
+                           KC_BSPC,KC_DEL ,KC_FN0 ,
+        KC_F9  ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1  ,KC_FN2, KC_NO, RESET,
+       KC_6   ,KC_7   ,KC_8   ,KC_9   ,KC_0   ,KC_MINS,
+       KC_Y   ,KC_U   ,KC_I   ,KC_O   ,KC_P   ,KC_BSLS,
+       KC_H   ,KC_J   ,KC_K   ,KC_L   ,KC_SCLN,KC_QUOT,
+       KC_N   ,KC_M   ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+               KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI,
+           KC_RGUI,KC_RCTL,
+           KC_PGUP,
+           KC_PGDN,KC_ENTER ,KC_SPC
+    ),
+[SYMB] = KEYMAP( 
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                             KC_TRNS,  KC_TRNS,
+                                       KC_TRNS,
+                    KC_TRNS, KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_FN0, KC_2,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+                   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,
+         KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS
+    ),
+/* Keymap: Movement and function layer
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Caps   |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F8  |  F9  |  F10 |  F12 |  FN0 |  FN1 |  FN2 |  Tada |  bOOT  |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+     |  !   |   @  |   #  |   $  |   %  |                           |  ^   |   &  |   *  |  (   |   )  |MS Fast |
+* |--------+------+------+------+------+------|                           +------+------+------+------+------+--------|
+* | Tab    |      |      | Up   |      |PgUp  |                           | MwU  |MS_UL | MS_U |MS_UR |      | Ms Norm| 
+* |--------+------+------+------+------+------|                           |------+------+------+------+------+--------|
+* |MouseFN1| C^A  | Left | Down |Right | C^E  |                           |      | MS_L |Mouse1| MS_R |      |MS Slow |
+* |--------+------+------+------+------+------|                           |------+------+------+------+------+--------|
+* |        | GuiZ | GUI X| GUI C| GUI_V|PgDown|                           | MWD  | MDown|MS Dwn|MS_DR  |  ?  |        |
+* `--------+------+------+------+------+-------                           `------+------+------+------+------+--------'
+*          | `~   | ESC  |   <  |   >  |                                         |  {   |   }  | ESC  |      |
+*          `---------------------------'                                         `---------------------------'
+*                                        ,-------------.         ,-------------.
+*                                        | Ctrl | Alt  |         | Gui  | Ctrl |
+*                                 ,------|------|------|         |------+------+------.
+*                                 |      |      | Home |         | PgUp |      |      |
+*                                 | BkSp | Del  |------|         |------|Mouse1|Mouse2|
+*                                 |      |      | End  |         | PgDn |LClick|Rclick|
+*                                 `--------------------'         `--------------------'
+*/
+
+
+[MOUSE] = KEYMAP(
+         KC_CAPS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+         KC_TRNS,  KC_EXLM  ,KC_AT,    KC_HASH,  KC_DLR   ,KC_PERC   ,
+         KC_TRNS,  KC_NO,    KC_NO,    KC_UP,    KC_NO,    KC_PGUP,
+         KC_FN1,  LCTL(KC_A),KC_LEFT,  KC_DOWN,  KC_RIGHT, LCTL(KC_E),
+         KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN,
+                   KC_TRNS,  KC_TRNS,  KC_LABK,  KC_RABK,
+                             KC_TRNS,  KC_TRNS,
+                                       KC_TRNS,
+                    KC_TRNS, KC_TRNS,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_FN0,RESET, 
+         KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN,  KC_ACL2,  
+         KC_WH_U,  M(A_MUL), KC_MS_U,  M(A_MUR), KC_NO,  KC_ACL1,
+         KC_NO,    KC_MS_L,  KC_MS_D,  KC_MS_R,  KC_NO,  KC_ACL0,
+         KC_WH_D,  M(A_MDL), KC_MS_D,  M(A_MDR), KC_TRNS, KC_TRNS,
+                   KC_LCBR,  KC_RCBR,  KC_ESC,  KC_TRNS,
+         KC_TRNS,  KC_TRNS,
+         KC_TRNS,
+         KC_TRNS,  KC_BTN1,  KC_BTN2
+    ),
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+   [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) ,               // FN1 - Momentary Layer 1 (Symbols)
+   [1] = ACTION_LAYER_TOGGLE(MOUSE) ,               // FN1 - Momentary Layer 1 (Symbols)
+   [2] = ACTION_LAYER_TAP_TOGGLE(SYMB) ,               // FN1 - Momentary Layer 1 (Symbols)
+
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+
+       // from  algernon's ErgoDox EZ layout, 
+       case A_MUL:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_UP);
+          mousekey_on(KC_MS_LEFT);
+        } else {
+          mousekey_off(KC_MS_UP);
+          mousekey_off(KC_MS_LEFT);
+        }
+        mousekey_send();
+        break;
+
+      case A_MUR:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_UP);
+          mousekey_on(KC_MS_RIGHT);
+        } else {
+          mousekey_off(KC_MS_UP);
+          mousekey_off(KC_MS_RIGHT);
+        }
+        mousekey_send();
+        break;
+
+      case A_MDL:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_DOWN);
+          mousekey_on(KC_MS_LEFT);
+        } else {
+          mousekey_off(KC_MS_DOWN);
+          mousekey_off(KC_MS_LEFT);
+        }
+        mousekey_send();
+        break;
+
+      case A_MDR:
+        if (record->event.pressed) {
+          mousekey_on(KC_MS_DOWN);
+          mousekey_on(KC_MS_RIGHT);
+        } else {
+          mousekey_off(KC_MS_DOWN);
+          mousekey_off(KC_MS_RIGHT);
+        }
+        mousekey_send();
+        break;
+     } 
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+
+}
+
+void matrix_scan_user(void) {
+ int8_t layer = biton32(layer_state);
+
+        switch (layer) {
+        case 1:
+                all_led_off();
+                break;
+        case 2:
+                if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
+                        all_led_off();
+                        caps_lock_led_on();
+                }
+                break;
+        case 0:
+                all_led_off();
+                num_lock_led_on();
+                break;
+        default:
+                break;
+        }
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/programmer/readme.md b/keyboards/kinesis/keymaps/programmer/readme.md
new file mode 100644 (file)
index 0000000..76356a6
--- /dev/null
@@ -0,0 +1,2 @@
+# a programmer friendly keymap for the kinesis-advantage
+# not really baked yet. 
diff --git a/keyboards/kinesis/kinesis.c b/keyboards/kinesis/kinesis.c
new file mode 100644 (file)
index 0000000..1fee90e
--- /dev/null
@@ -0,0 +1,106 @@
+#include "kinesis.h"
+
+// begin section origin  https://github.com/alvicstep/tmk_keyboard 
+
+
+void all_led_off(void)
+{
+        PORTD = 0b11111111;
+}
+
+void all_led_on(void)
+{
+        PORTD = 0b00000000;
+}
+void num_lock_led_on(void)
+{
+        PORTD = 0b11101111;
+}
+
+void caps_lock_led_on(void)
+{
+        PORTD = 0b01111111;
+}
+
+void scroll_lock_led_on(void)
+{
+        PORTD = 0b11011111;
+}
+void keypad_led_on(void)
+{
+        PORTD = 0b10111111;
+}
+void blink_all_leds(void)
+{
+        all_led_on();
+        _delay_ms(500);
+
+        all_led_off();
+        _delay_ms(100);
+
+        caps_lock_led_on();
+        _delay_ms(100);
+
+        num_lock_led_on();
+        _delay_ms(100);
+
+        scroll_lock_led_on();
+        _delay_ms(100);
+
+         keypad_led_on();
+        _delay_ms(100);
+
+        //back
+
+        scroll_lock_led_on();
+        _delay_ms(100);
+
+        num_lock_led_on();
+        _delay_ms(100);
+
+        caps_lock_led_on();
+        _delay_ms(100);
+
+        all_led_off();
+}
+
+// End section origin  https://github.com/alvicstep/tmk_keyboard 
+
+ void matrix_init_kb(void) {
+         blink_all_leds();
+         matrix_init_user();
+}
+
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+       
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+   uint8_t leds = 0xF0;
+    if (usb_led & 1 << USB_LED_NUM_LOCK)
+        leds &= ~0x10;
+    if (usb_led & 1 << USB_LED_CAPS_LOCK)
+        leds &= ~0x80;
+    if (usb_led & 1 << USB_LED_SCROLL_LOCK)
+        leds &= ~0x20;
+    PORTD = (PORTD & 0x0F) | leds;
+
+       led_set_user(usb_led);
+
+}
+
+
diff --git a/keyboards/kinesis/kinesis.h b/keyboards/kinesis/kinesis.h
new file mode 100644 (file)
index 0000000..c04fbda
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef KINESIS_H
+#define KINESIS_H
+
+#include "quantum.h"
+
+
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP(                           \
+    k02,k22,k12,k01,k21,k11,k00,k20,k10,  \
+    k80,k70,k60,k50,k40,k30,              \
+    k81,k71,k61,k51,k41,k31,              \
+    k82,k72,k62,k52,k42,k32,              \
+    k83,k73,k63,k53,k43,k33,              \
+        k74,k64,k54,k34,                  \
+                        k36,k35,          \
+                            k55,          \
+                    k56,k46,k75,          \
+    k03,k23,k13,k04,k24,k14,k05,k85,k84,  \
+        k94,kA4,kB4,kD4,kE4,kF4,          \
+        k95,kA5,kB5,kD5,kE5,kF5,          \
+        k96,kA6,kB6,kD6,kE6,kF6,          \
+        k97,kA7,kB7,kD7,kE7,kF7,          \
+            k93,kB3,kD3,kE3,              \
+    k47,k66,                              \
+    k67,                                  \
+    k87,k76,k86                           \
+) {                                       \
+        { k00,    k01,    k02,    k03,    k04,    k05,    KC_NO,   KC_NO   }, \
+        { k10,    k11,    k12,    k13,    k14,    KC_NO,  KC_NO,   KC_NO   }, \
+        { k20,    k21,    k22,    k23,    k24,    KC_NO,  KC_NO,   KC_NO   }, \
+        { k30,    k31,    k32,    k33,    k34,    k35,    k36,     KC_NO   }, \
+        { k40,    k41,    k42,    k43,    KC_NO,  KC_NO,  k46,     k47     }, \
+        { k50,    k51,    k52,    k53,    k54,    k55,    k56,     KC_NO   }, \
+        { k60,    k61,    k62,    k63,    k64,    KC_NO,  k66,     k67     }, \
+        { k70,    k71,    k72,    k73,    k74,    k75,    k76,     KC_NO   }, \
+        { k80,    k81,    k82,    k83,    KC_NO  ,KC_NO,  k86,     k87}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,k93,    k94,    k95,    k96,     k97}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,KC_NO,  kA4,    kA5,    kA6,     kA7}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,kB3,    kB4,    kB5,    kB6,     kB7}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,KC_NO,  KC_NO,  KC_NO,  k84,     k85}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,kD3,    kD4,    kD5,    kD6,     kD7}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,kE3,    kE4,    kE5,    kE6,     kE7}, \
+        { KC_NO,  KC_NO  ,KC_NO  ,KC_NO,  kF4,    kF5,    kF6,     kF7} \
+}
+
+
+/*    4y0   A  4y1   B  4y2      4y3   D  4y4   E  4y5   F  4y6   G  4y7   H  5y0   I  5y1   J  5y2   K  5y3   L  5y4   M  5y5   N  5y6   O  5y7  P  */
+
+/*
+                                       0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F
+                                        A       B       C       D       E       F       G       H       I       J       K       L       M       N       O       P
+                                        4y0     4y1     4y2     4y3     4y4     4y5     4y6     4y7     5y0     5y1     5y2     5y3     5y4     5y5     5y6     5y7
+                                        r0      r1      r2       r3 r4  r5      r6      r7      r8      r9      r10     r11     r12     r13     r14     r15
+0       PB0             21      c0      f6      f8      f7      5       4       3       2       1       =+
+1       PB1             22      c1      f3      f5      f4      t       r       e       w       q       TAB
+2       PB2             23      c2      ESC     f2      f1      g       f       d       s       a       CL
+3       PB3             24      c3      f9      f11     f10     b       v       c       x       z       LS      UP              DN              [{      ]}
+4       PB4             25      c4  f12 SL      PS      RT              LT      §±      `~              6       7       8               9       0       -_
+5       PB5             26      c5      PB      PGM     KPD     LA              HM              END             y       u       i               o       p       \
+6       PB6             27      c6                      LC      DEL     BS      RC      ENT     SP      h       j       k               l       ;:      '"
+7       PB7             28      c7                                      RA              PU              PD      n       m       ,<              .>      /?      RS
+*/
+
+
+#endif
diff --git a/keyboards/kinesis/matrix.c b/keyboards/kinesis/matrix.c
new file mode 100644 (file)
index 0000000..cb0d5ad
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "led.h"
+#include "config.h"
+
+#ifndef DEBOUNCE
+#   define DEBOUNCE    5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* matrix state(1:on, 0:off) */
+static uint8_t matrix[MATRIX_ROWS];
+static uint8_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_row(uint8_t row);
+static void unselect_rows(void);
+static void select_rows(uint8_t row);
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+    matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+    matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+    matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+    matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+    return MATRIX_ROWS;
+}
+
+
+inline
+uint8_t matrix_cols(void)
+{
+    return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+    //debug_enable = true;
+    
+    //dprint("matrix_init"); dprintln();
+    // output high (leds)
+    DDRD    = 0xFF;
+    PORTD   = 0xFF;
+    
+    // output low (multiplexers)
+    DDRF    = 0xFF;
+    PORTF   = 0x00;
+    
+    // input with pullup (matrix)
+    DDRB    = 0x00;
+    PORTB   = 0xFF;
+    
+    // input with pullup (program and keypad buttons)
+    DDRC    = 0x00;
+    PORTC   = 0xFF;
+    
+    // initialize row and col
+    unselect_rows();
+
+    // initialize matrix state: all keys off
+    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+        matrix[i] = 0;
+        matrix_debouncing[i] = 0;
+    }
+       
+}
+
+uint8_t matrix_scan(void)
+{
+
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        select_rows(i);
+        uint8_t row = read_row(i);
+        if (matrix_debouncing[i] != row) {
+            matrix_debouncing[i] = row;
+            if (debouncing) {
+                debug("bounce!: "); debug_hex(debouncing); debug("\n");
+            }
+            debouncing = DEBOUNCE;
+        }
+        unselect_rows();
+    }
+
+    if (debouncing) {
+        if (--debouncing) {
+            _delay_ms(1);
+        } else {
+            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+                matrix[i] = matrix_debouncing[i];
+            }
+        }
+    }
+    matrix_scan_quantum();
+    return 1;
+}
+
+bool matrix_is_modified(void)
+{
+    if (debouncing) return false;
+    return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+    return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+    return matrix[row];
+}
+
+void matrix_print(void)
+{
+    print("\nr/c 01234567\n");
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+        phex(row); print(": ");
+        pbin_reverse(matrix_get_row(row));
+        print("\n");
+    }
+}
+
+uint8_t matrix_key_count(void)
+{
+    uint8_t count = 0;
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        count += bitpop16(matrix[i]);
+    }
+    return count;
+}
+
+static matrix_row_t read_row(uint8_t row)
+{
+       _delay_us(30);  // without this wait read unstable value.
+
+       //keypad and program buttons
+       if (row == 12)
+       {
+               return ~(PINC | 0b00111111);
+       }
+       return ~PINB;
+}
+
+static void unselect_rows(void)
+{
+    // set A,B,C,G to 0 (F4 - F7)
+    PORTF &= 0x0F;
+}
+
+static void select_rows(uint8_t row)
+{
+    // set A,B,C,G to row value
+    PORTF |= row << 4;
+}
+
+
+/* Row pin configuration
+PF0            A
+PF1            B
+PF2            C
+PF3            G       0 = U4, 1 = U5
+
+                               4y0     4y1     4y2     4y3     4y4     4y5     4y6     4y7     5y0     5y1     5y2     5y3     5y4     5y5     5y6     5y7     
+                               r1      r2       r3 r4  r5      r6      r7      r8      r9      r10     r11     r12     r13     r14     r15     r16     
+PB0            21      c1      f6      f8      f7      5       4       3       2       1       =+                                                              
+PB1            22      c2      f3      f5      f4      t       r       e       w       q       TAB                                                             
+PB2            23      c3      ESC     f2      f1      g       f       d       s       a       CL                                                              
+PB3            24      c4      f9      f11     f10     b       v       c       x       z       LS      UP              DN              [{      ]}              
+PB4            25      c5  f12 SL      PS      RT              LT      §±    `~              6       7       8               9       0       -_      
+PB5            26      c6      PB      PGM     KPD                                                     y       u       i               o       p       \       
+PB6            27      c7                      LC      DL      BS      RC      EN      SP      h       j       k               l       ;:      '"      
+PB7            28      c8                                      RA              PU              PD      n       m       ,<              .>      /?      RS      
+ */
+
+
diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md
new file mode 100644 (file)
index 0000000..79c8658
--- /dev/null
@@ -0,0 +1,42 @@
+kinesis-advantage keyboard firmware
+======================
+
+## Kinesis specific information
+This is a port of https://github.com/alvicstep/tmk_keyboard, 
+which is a fork of https://github.com/wjanssens/tmk_keyboard, 
+which is based on work from https://github.com/chrisandreae/keyboard-firmware
+
+If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK. 
+I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead. 
+
+Not yet implemented: 
+- Kinesis EEProm reading or writing
+- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
+
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/kinesis-advantage folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make default`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/kinesis/rules.mk b/keyboards/kinesis/rules.mk
new file mode 100644 (file)
index 0000000..a4a2b7d
--- /dev/null
@@ -0,0 +1,73 @@
+
+## Project specific files
+
+SRC=  matrix.c 
+
+# MCU name
+MCU = at90usb1286
+#MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=1024
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no        # Console for debug(+400)
+COMMAND_ENABLE ?= no
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output should be port E6, current quantum library hardcodes C6, which we use for programming
+CUSTOM_MATRIX=yes # need to do our own thing with the matrix
diff --git a/keyboards/kitten_paw/Makefile b/keyboards/kitten_paw/Makefile
new file mode 100644 (file)
index 0000000..57b2ef6
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
diff --git a/keyboards/kitten_paw/config.h b/keyboards/kitten_paw/config.h
new file mode 100644 (file)
index 0000000..d708973
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6050
+#define DEVICE_VER      0x0104
+#define MANUFACTURER    Costar
+#define PRODUCT         Majestouch
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+//#define MATRIX_ROW_PINS { D0, D5 }
+//#define MATRIX_COL_PINS { F1, F0, B0 }
+//#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/kitten_paw/keymaps/default/keymap.c b/keyboards/kitten_paw/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..64aa672
--- /dev/null
@@ -0,0 +1,51 @@
+#include "kitten_paw.h"
+
+enum layers {
+    DEFAULT,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [DEFAULT] = KEYMAP(\
+       KC_ESC,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9, KC_F10, KC_F11, KC_F12,          KC_PSCR,KC_SLCK,KC_PAUS,                        \
+       KC_GRV,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,KC_MINS, KC_EQL,KC_BSPC,   KC_INS,KC_HOME,KC_PGUP,  KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
+       KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,KC_LBRC,KC_RBRC,KC_BSLS,   KC_DEL, KC_END,KC_PGDN,    KC_P7,  KC_P8,  KC_P9,KC_PPLS, \
+      KC_CAPS,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,KC_SCLN,KC_QUOT,         KC_ENT,                              KC_P4,  KC_P5,  KC_P6,      \
+      KC_LSFT,KC_NUBS,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,KC_COMM, KC_DOT,KC_SLSH,        KC_RSFT,            KC_UP,            KC_P1,  KC_P2,  KC_P3,KC_PENT, \
+      KC_LCTL,KC_LGUI,KC_LALT,                 KC_SPC,                                KC_RALT,KC_RGUI, KC_APP,KC_RCTL,  KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,KC_PDOT)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
\ No newline at end of file
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/config.h b/keyboards/kitten_paw/keymaps/ickerwx/config.h
new file mode 100644 (file)
index 0000000..04a2d25
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#undef MOUSEKEY_MOVE_MAX
+#define MOUSEKEY_MOVE_MAX       127
+#undef MOUSEKEY_WHEEL_MAX
+#define MOUSEKEY_WHEEL_MAX      110
+#undef MOUSEKEY_MOVE_DELTA
+#define MOUSEKEY_MOVE_DELTA     5
+#undef MOUSEKEY_WHEEL_DELTA
+#define MOUSEKEY_WHEEL_DELTA    1
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 50
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 20
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 4
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 30
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 3
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 1000
+#undef ONESHOT_TIMEOUT
+#define ONESHOT_TIMEOUT 500
+#undef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 2
+
+#endif
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c
new file mode 100644 (file)
index 0000000..9a00c80
--- /dev/null
@@ -0,0 +1,242 @@
+#include "kitten_paw.h"
+#include "mousekey.h"
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define  C(kc) LCTL(KC_##kc)
+#define RA(kc) RALT(KC_##kc)
+#define KC_SLCT KC_SELECT
+#define MEDAPP LT(MEDIA, KC_APP)
+#undef S
+#define S(kc) LSFT(KC_##kc)
+
+uint8_t current_layer_global = 255;
+
+enum layers {
+    DEFAULT,
+    PROG1,
+    PROG2,
+    MEDIA,
+    MOUSE1,
+    MOUSE2,
+    MISC,
+};
+
+enum function_id {
+    LSHFT_PAREN,
+    RSHFT_PAREN,
+    LCTRL_BRACKET,
+    RCTRL_BRACKET,
+    LALT_CURLY,
+    RALT_CURLY,
+    CTRL_CLICK
+};
+
+enum macro_id {
+    GRV,
+    CFLEX
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [DEFAULT] = KEYMAP(\
+          KC_ESC,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9, KC_F10, KC_F11, KC_F12,           KC_PSCR,KC_SLCK,KC_PAUS,                                   \
+          KC_GRV,   KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,KC_MINS, KC_EQL,KC_BSPC,    KC_INS,KC_HOME,KC_PGUP,  KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
+          KC_TAB,   KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,KC_LBRC,KC_RBRC,KC_BSLS,    KC_DEL, KC_END,KC_PGDN,    KC_P7,  KC_P8,  KC_P9,KC_PPLS, \
+            F(0),   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,KC_SCLN,KC_QUOT,         KC_ENT,                               KC_P4,  KC_P5,  KC_P6,         \
+            F(8),KC_NUBS,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,KC_COMM, KC_DOT,KC_SLSH,           F(9),             KC_UP,            KC_P1,  KC_P2,  KC_P3,KC_PENT, \
+            F(1),KC_LGUI,   F(3),              LT(MISC,  KC_SPC),                           F(4),   F(5), MEDAPP,   F(2),   KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,KC_PDOT),
+  /* Layer 1: Programming Layer 1, emulating US l ayout */
+  [PROG1] = KEYMAP(\
+          KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+          M(GRV),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH,   S(0),_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,   KC_Z,_______,_______,_______,_______,  RA(8),  RA(9),RA(MINS),  _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(COMM),S(BSLS),        _______,                             _______,_______,_______,         \
+       MO(PROG2),_______,   KC_Y,_______,_______,_______,_______,_______,_______,_______,_______,   S(7),      MO(PROG2),           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+    /* Layer 2: programming layer 2
+       all keys that are not FN keys are sent as LSFT+key on this layer
+    */
+  [PROG2] = KEYMAP(\
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+        RA(RBRC),_______,  RA(Q),KC_BSLS,_______,_______,M(CFLEX),  S(6),S(RBRC),   S(8),   S(9),S(SLSH),KC_RBRC,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  RA(7),  RA(0),RA(NUBS),  _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, S(DOT),   S(2),        _______,                             _______,_______,_______,         \
+         _______,S(NUBS),_______,_______,_______,_______,_______,_______,_______,KC_NUBS,S(NUBS),S(MINS),        _______,           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+    /* Layer 3: media layer */
+  [MEDIA] = KEYMAP(\ 
+          KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,           XXXXXXX,XXXXXXX,XXXXXXX,                                   \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,   KC_MPRV,KC_MPLY,KC_MNXT,  XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,   KC_VOLD,KC_MUTE,KC_VOLU,  XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,        XXXXXXX,                             XXXXXXX,XXXXXXX,XXXXXXX,         \
+         XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,        XXXXXXX,           KC_EJCT,          XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+         XXXXXXX,XXXXXXX,XXXXXXX,                        XXXXXXX,                        XXXXXXX,XXXXXXX,_______,XXXXXXX,   KC_MRWD,KC_MSTP,KC_MFFD,  XXXXXXX,XXXXXXX),
+    /* Layer 4: Mouse layer */
+  [MOUSE1] = KEYMAP(\
+            F(6),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+         _______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,KC_BTN4,KC_WH_D,KC_MS_U,KC_WH_U,_______,   C(Z),_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,KC_BTN5,KC_MS_L,KC_MS_D,KC_MS_R,   F(7),KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,_______,_______,        _______,                             _______,_______,_______,         \
+      MO(MOUSE2),_______,   C(Y),   C(X),   C(C),   C(V),_______,KC_BTN2,KC_BTN3,C(PGUP),C(PGDN),_______,        KC_RSFT,           _______,          _______,_______,_______,_______, \
+         KC_LCTL,_______,KC_LALT,                        KC_BTN1,                        KC_RALT,KC_RGUI, KC_APP,KC_RCTL,   _______,_______,_______,  _______,_______),
+    /* Layer 5: Mouse layer 2*/
+  [MOUSE2] = KEYMAP(\
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,           _______,_______,_______,                                   \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,KC_BTN2,KC_WH_U,KC_BTN3,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,KC_WH_L,KC_WH_D,KC_WH_R,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,        _______,                             _______,_______,_______,         \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+    /* Layer 6: Misc layer */
+  [MISC] = KEYMAP(\
+         _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,           _______,_______,_______,                                   \
+         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,KC_SLCT,   C(W),  KC_UP,_______,_______,_______,_______,KC_BSPC, KC_DEL,_______,_______,_______,_______,   _______,_______,_______,  _______,_______,_______,_______, \
+         _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,KC_HOME,KC_PGDN,KC_PGUP,_______,_______,_______,        _______,                             _______,_______,_______,         \
+         KC_LSFT,_______,   C(Y),   C(X),   C(C),   C(V), KC_SPC, KC_END,_______,C(PGUP),C(PGDN),_______,        _______,           _______,          _______,_______,_______,_______, \
+         _______,_______,_______,               LT(MISC, KC_SPC),                        _______,_______,_______,_______,   _______,_______,_______,  _______,_______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE1),      // tap-toggle mouse layer (4)
+    [1] = ACTION_FUNCTION_TAP(LCTRL_BRACKET),   // tap to print [
+    [2] = ACTION_FUNCTION_TAP(RCTRL_BRACKET),   // tap to print ]
+    [3] = ACTION_FUNCTION_TAP(LALT_CURLY),      // tap to print {
+    [4] = ACTION_FUNCTION_TAP(RALT_CURLY),      // tap to print }
+    [5] = ACTION_LAYER_TAP_TOGGLE(PROG1),       // tap-toggle programming layer 1
+    [6] = ACTION_LAYER_SET_CLEAR(DEFAULT),
+    [7] = ACTION_FUNCTION_TAP(CTRL_CLICK),
+    [8] = ACTION_FUNCTION_TAP(LSHFT_PAREN),     // tap to print (
+    [9] = ACTION_FUNCTION_TAP(RSHFT_PAREN),     // tap to print )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case GRV: // macro to print accent grave
+            return (record->event.pressed ?
+                    MACRO( D(LSFT), T(EQL), U(RALT), T(SPC), END) :
+                    MACRO_NONE );
+        case CFLEX: // print accent circonflex
+            return (record->event.pressed ?
+                    MACRO( T(GRV), T(SPC), END ) :
+                    MACRO_NONE );
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+    uint8_t layer;
+    layer = biton32(layer_state);
+
+    if (current_layer_global != layer) {
+        current_layer_global = layer;
+
+        // unset CAPSLOCK and SCROLL LOCK LEDs
+        led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_CAPS_LOCK));
+        led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_SCROLL_LOCK));
+        // set SCROLL LOCK LED when the mouse layer is active, CAPS LOCK when PROG layer is active
+        if (layer == MOUSE1 || layer == MOUSE2) {
+          led_set_kb(host_keyboard_leds() | (1<<USB_LED_SCROLL_LOCK));
+        } else if (layer == PROG1 || layer == PROG2) {
+          led_set_kb(host_keyboard_leds() | (1<<USB_LED_CAPS_LOCK));
+        }
+    }
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+void tap_helper(keyrecord_t *record, uint16_t orig_mod, uint16_t macro_mod, uint16_t macro_kc ) {
+  if (record->event.pressed) {
+      if (record->tap.count > 0 && !record->tap.interrupted) {
+          if (record->tap.interrupted) {
+              register_mods(MOD_BIT(orig_mod));
+          }
+      } else {
+          register_mods(MOD_BIT(orig_mod));
+      }
+  } else {
+      if (record->tap.count > 0 && !(record->tap.interrupted)) {
+          add_weak_mods(MOD_BIT(macro_mod));
+          send_keyboard_report();
+          register_code(macro_kc);
+          unregister_code(macro_kc);
+          del_weak_mods(MOD_BIT(macro_mod));
+          send_keyboard_report();
+          record->tap.count = 0;  // ad hoc: cancel tap
+      } else {
+          unregister_mods(MOD_BIT(orig_mod));
+      }
+  }
+}
+
+/* if LCTRL is tabbed, print (, or ) if RCTRL is tabbed, same for LALT/RALT and [/] */
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+    // The code is copied from keymap_hasu.c in the tmk keyboards hhkb folder
+    switch (id) {
+        case LCTRL_BRACKET:
+            tap_helper(record, KC_LCTL, KC_RALT, KC_8);
+            break;
+        case RCTRL_BRACKET:
+            tap_helper(record, KC_RCTL, KC_RALT, KC_9);
+            break;
+        case LALT_CURLY:
+            tap_helper(record, KC_LALT, KC_RALT, KC_7);
+            break;
+        case RALT_CURLY:
+            tap_helper(record, KC_RALT, KC_RALT, KC_0);
+            break;
+        case LSHFT_PAREN:
+            tap_helper(record, KC_LSFT, KC_LSFT, KC_8);
+            break;
+        case RSHFT_PAREN:
+            tap_helper(record, KC_RSFT, KC_LSFT, KC_9);
+            break;
+        case CTRL_CLICK:
+            if (record->event.pressed) {
+                mousekey_clear();
+                register_mods(MOD_BIT(KC_LCTL));
+                send_keyboard_report();
+                wait_ms(5);
+                mousekey_on(KC_BTN1);
+                mousekey_send();
+                wait_ms(10);
+                mousekey_off(KC_BTN1);
+                mousekey_send();
+                wait_ms(5);
+                unregister_mods(MOD_BIT(KC_LCTL));
+                send_keyboard_report();
+            }
+            break;
+    }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    uint8_t layer;
+    layer = biton32(layer_state);
+    if (layer == PROG2) {
+         if (keycode >= KC_A && keycode <= KC_EXSEL && \
+             !(  // do not send LSFT + these keycodes, they are needed for emulating the US layout
+                 keycode == KC_NONUS_BSLASH ||
+                 keycode == KC_RBRC ||
+                 keycode == KC_BSLS ||
+                 keycode == KC_GRV
+            )) {
+              // LSFT is the modifier for this layer, so we set LSFT for every key to get the expected behavior
+              if (record->event.pressed) {
+                  register_mods(MOD_LSFT);
+              } else {
+                  unregister_mods(MOD_LSFT);
+              }
+         }
+    }
+    return true;
+}
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/readme.md b/keyboards/kitten_paw/keymaps/ickerwx/readme.md
new file mode 100644 (file)
index 0000000..0d23be4
--- /dev/null
@@ -0,0 +1,18 @@
+# My personal keymap for the Kitten Paw controller
+
+This keymap only works correctly when you have your OS configured with a German keymap. Use the keymap however you like. It's most likely a living thing that will never be quite finished.
+
+## Description of the layers
+Layer 0 (DEFAULT) works just like you would expect a keyboard to work, mostly, except:
+Caps Lock switches to the mouse layer, RGUI and APP are switches to the programming layer and media layer.
+Mouse and programming layer switches can be held or double-tapped to lock.
+Holding space switches to the MISC layer where I currently accumulate useful shortcuts.
+Tapping left and right Shift, Ctrl and Alt will send (), [] and {} respectively.
+
+Layers 1 and 2 (PROG1 and PROG2) emulate the US layout while still using a German OS keymap setting. I was annoyed of having to change the OS settings every time I wanted to use the US layout for coding, so I made these layers to behave just like the US layout even though the OS still uses German. The shift keys were a bit tricky, I had to use them as MO(PROG2) switches, so to get the actual expected behavior I enable LSFT for almost every keypress on PROG2 in ```process_record_user```. Since the shift keys are MO() function keys, they do not print () at the moment, which sucks. I'm working on it.
+
+Layer 3 (MEDIA) just has a couple of media keys on it, mainly around the cursor keys and nav key cluster.
+
+Layers 4 and 5 (MOUSE1 and MOUSE2) are mouse layers. Move the cursor using ESDF, scroll using HJKL, Space for left click, N and M for right and middle click. There's more, look at the keymap.
+
+Layer 6 is a layer I don't have a good name for, so I call it MISC. You'll find cursor keys at ESDF, other navigation keys around the HJKL cluster and F12 to F24 on the F-keys. For now.
\ No newline at end of file
diff --git a/keyboards/kitten_paw/kitten_paw.c b/keyboards/kitten_paw/kitten_paw.c
new file mode 100644 (file)
index 0000000..92f64b0
--- /dev/null
@@ -0,0 +1,43 @@
+#include "kitten_paw.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+    matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+    CONFIG_LED_IO;
+    CONFIG_LED_IO;
+    print_dec(usb_led);
+    if (usb_led & (1<<USB_LED_CAPS_LOCK))
+        USB_LED_CAPS_LOCK_ON;
+    else
+        USB_LED_CAPS_LOCK_OFF;
+
+    if (usb_led & (1<<USB_LED_NUM_LOCK))
+        USB_LED_NUM_LOCK_ON;
+    else
+        USB_LED_NUM_LOCK_OFF;
+    if (usb_led & (1<<USB_LED_SCROLL_LOCK))
+        USB_LED_SCROLL_LOCK_ON;
+    else
+        USB_LED_SCROLL_LOCK_OFF;
+       led_set_user(usb_led);
+}
diff --git a/keyboards/kitten_paw/kitten_paw.h b/keyboards/kitten_paw/kitten_paw.h
new file mode 100644 (file)
index 0000000..189b721
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef KITTEN_PAW_H
+#define KITTEN_PAW_H
+
+#include "quantum.h"
+
+#define CONFIG_LED_IO \
+  DDRB |= (1<<7); \
+  DDRC |= (1<<5) | (1<<6);
+
+#define USB_LED_CAPS_LOCK_ON    PORTC &= ~(1<<6)
+#define USB_LED_CAPS_LOCK_OFF   PORTC |=  (1<<6)
+#define USB_LED_NUM_LOCK_ON     PORTB &= ~(1<<7)
+#define USB_LED_NUM_LOCK_OFF    PORTB |=  (1<<7)
+#define USB_LED_SCROLL_LOCK_ON  PORTC &= ~(1<<5)
+#define USB_LED_SCROLL_LOCK_OFF PORTC |=  (1<<5)
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+/*
+  Matrix col/row mapping
+  
+  ,----.    ,-------------------. ,-------------------. ,-------------------. ,--------------.
+  | J6 |    | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
+  `----'    `-------------------' `-------------------' `-------------------' `--------------'
+  ,-------------------------------------------------------------------------. ,--------------. ,-------------------.
+  | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 |     B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 |
+  |-------------------------------------------------------------------------| |--------------| |-------------------|
+  | J2   | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 |   B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 |
+  |-------------------------------------------------------------------------| '--------------' |--------------     |
+  | O5    | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 |       B1 |                  | K2 | L2 | Q2 |    |
+  |-------------------------------------------------------------------------|      ,----.      |-------------------|
+  | N2      | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 |          N3 |      | O6 |      | K3 | L3 | Q3 | O3 |
+  |-------------------------------------------------------------------------| ,--------------. |--------------     |
+  | A4 | P2 | C6 |                  K6                  | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6      | Q6 |    |
+  `-------------------------------------------------------------------------' `--------------' `-------------------'
+*/
+
+#define KEYMAP( \
+  KJ6,      KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0,   KC7, KC5, KA5,                       \
+  KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2,   KL4, KO4, KQ4,   KK1, KL1, KQ1, KQ0, \
+  KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3,   KK4, KO7, KQ7,   KK5, KL5, KQ5, KO5, \
+  KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6,      KB1,                    KK2, KL2, KQ2,      \
+  KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        KO6,        KK3, KL3, KQ3, KO3, \
+  KA4, KP2, KC6,                KK6,                KC0, KM3, KD0, KA1,   KO0, KK0, KL0,   KL6,      KQ6       \
+) \
+{ \
+    {KC_NO,  KB0,  KC0,  KD0,KC_NO,  KF0,  KG0,KC_NO,KC_NO,KC_NO,  KK0,  KL0,KC_NO,KC_NO,  KO0,KC_NO,  KQ0,  KR0}, \
+    {  KA1,  KB1,KC_NO,  KD1,  KE1,  KF1,  KG1,  KH1,  KI1,  KJ1,  KK1,  KL1,KC_NO,KC_NO,KC_NO,KC_NO,  KQ1,KC_NO}, \
+    {KC_NO,  KB2,KC_NO,  KD2,  KE2,  KF2,  KG2,  KH2,  KI2,  KJ2,  KK2,  KL2,KC_NO,  KN2,KC_NO,  KP2,  KQ2,  KR2}, \
+    {KC_NO,  KB3,KC_NO,  KD3,  KE3,  KF3,  KG3,  KH3,  KI3,  KJ3,  KK3,  KL3,  KM3,  KN3,  KO3,KC_NO,  KQ3,  KR3}, \
+    {  KA4,  KB4,KC_NO,  KD4,  KE4,  KF4,  KG4,  KH4,  KI4,  KJ4,  KK4,  KL4,KC_NO,KC_NO,  KO4,KC_NO,  KQ4,  KR4}, \
+    {  KA5,KC_NO,  KC5,  KD5,  KE5,  KF5,  KG5,  KH5,  KI5,  KJ5,  KK5,  KL5,KC_NO,KC_NO,  KO5,KC_NO,  KQ5,  KR5}, \
+    {KC_NO,  KB6,  KC6,KC_NO,  KE6,  KF6,  KG6,  KH6,  KI6,  KJ6,  KK6,  KL6,KC_NO,KC_NO,  KO6,KC_NO,  KQ6,  KR6}, \
+    {  KA7,  KB7,  KC7,  KD7,  KE7,  KF7,  KG7,  KH7,  KI7,  KJ7,KC_NO,KC_NO,KC_NO,KC_NO,  KO7,KC_NO,  KQ7,  KR7} \
+}
+
+#endif
diff --git a/keyboards/kitten_paw/matrix.c b/keyboards/kitten_paw/matrix.c
new file mode 100644 (file)
index 0000000..d436ad5
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+  Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+#ifndef DEBOUNCING_DELAY
+#   define DEBOUNCING_DELAY 5
+#endif
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static uint8_t read_rows(void);
+static void select_col(uint8_t col);
+
+inline uint8_t matrix_rows(void) {
+  return MATRIX_ROWS;
+}
+
+inline uint8_t matrix_cols(void) {
+  return MATRIX_COLS;
+}
+
+/* Column pin configuration
+ *
+ * col: 0    1    2    3    4    5    6    7
+ * pin: PC7  PD5  PD3  PD1  PC2  PD6  PD4  PD2
+ *
+ * Rrr pin configuration 
+ *
+ * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low
+ * active), together with 2 rrrs driven directly from the micro
+ * controller, to control the 18 rrrs. The rrrs are driven from
+ * pins B6,5,4,3,2,1,0.
+ */
+void matrix_init(void) {
+  DDRC  &= ~0b10000100;  // Row input pins
+  DDRD  &= ~0b01111110;
+  PORTC |=  0b10000100;
+  PORTD |=  0b01111110;
+
+  DDRB  |=  0b01111111;  // Column output pins
+
+  for (uint8_t i=0; i < MATRIX_ROWS; i++)  {
+    matrix[i] = 0;
+    matrix_debouncing[i] = 0;
+  }
+  matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+  for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+    select_col(col);
+    _delay_us(3);
+    uint8_t rows = read_rows();
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+      bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+      bool curr_bit = rows & (1<<row);
+      if (prev_bit != curr_bit) {
+        matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+        debouncing = DEBOUNCING_DELAY;
+      }
+    }
+  }
+  
+  if (debouncing) {
+    if (--debouncing) {
+      _delay_ms(1);
+    }
+    else {
+      for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        matrix[i] = matrix_debouncing[i];
+      }
+    }
+  }
+  matrix_scan_quantum();
+  return 1;
+}
+
+bool matrix_is_modified(void) {
+  if (debouncing)
+    return false;
+  else
+    return true;
+}
+
+inline bool matrix_is_on(uint8_t row, uint8_t col) {
+  return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+  return matrix[row];
+}
+
+void matrix_print(void) {
+  print("\nr/c 0123456789ABCDEF\n");
+  for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+    xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
+  }
+}
+
+uint8_t matrix_key_count(void) {
+  uint8_t count = 0;
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    count += bitpop32(matrix[i]);
+  }
+  return count;
+}
+
+static uint8_t read_rows(void) {
+  return
+    (PINC&(1<<7) ? 0 : (1<<0)) |
+    (PIND&(1<<5) ? 0 : (1<<1)) |
+    (PIND&(1<<3) ? 0 : (1<<2)) |
+    (PIND&(1<<1) ? 0 : (1<<3)) |
+    (PINC&(1<<2) ? 0 : (1<<4)) |
+    (PIND&(1<<2) ? 0 : (1<<5)) |
+    (PIND&(1<<4) ? 0 : (1<<6)) |
+    (PIND&(1<<6) ? 0 : (1<<7));
+}
+
+static void select_col(uint8_t col) {
+  switch (col) {
+  case  0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break;
+  case  1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break;
+  case  2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break;
+  case  3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break;
+  case  4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break;
+  case  5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break;
+  case  6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break;
+  case  7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break;
+  case  8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break;
+  case  9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break;
+  case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break;
+  case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break;
+  case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break;
+  case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break;
+  case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break;
+  case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break;
+  case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break;
+  case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break;
+  }
+}
diff --git a/keyboards/kitten_paw/readme.md b/keyboards/kitten_paw/readme.md
new file mode 100644 (file)
index 0000000..a6ef2a0
--- /dev/null
@@ -0,0 +1,32 @@
+kitten_paw keyboard firmware
+======================
+This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies.
+Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies).
+
+NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/kitten_paw folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+
+```
+$ make keymap=[default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/kitten_paw/rules.mk b/keyboards/kitten_paw/rules.mk
new file mode 100644 (file)
index 0000000..b0c909d
--- /dev/null
@@ -0,0 +1,72 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u2
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+       OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
+
+CUSTOM_MATRIX = yes
+SRC += matrix.c
index b9f07636be0c25186f1fd745e46c040003b31e8d..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,78 +1,3 @@
-SRC += matrix.c \
-          i2c.c \
-          split_util.c \
-          serial.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no         # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no      # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no            # MIDI controls
-AUDIO_ENABLE ?= yes           # Audio output on port C6
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
-
-CUSTOM_MATRIX = yes
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 833818ce60edb32b647e84605b807038fc6c4ce9..4db45ab0b3f0a02b118ffa56ce590559243a92f6 100644 (file)
@@ -28,24 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PRODUCT         Lets Split
 #define DESCRIPTION     A split keyboard for the cheap makers
 
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 6
-
-// wiring of each half
-#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
-#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
-
-#define CATERINA_BOOTLOADER
-
-// #define USE_I2C
-
-// #define EE_HANDS
-
-#define I2C_MASTER_LEFT
-// #define I2C_MASTER_RIGHT
-
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION COL2ROW
 
@@ -68,24 +50,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
 )
 
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D2
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 28     // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
 /* disable debug print */
-// #define NO_DEBUG
+//#define NO_DEBUG
 
 /* disable print */
-// #define NO_PRINT
+//#define NO_PRINT
 
 /* disable action features */
 //#define NO_ACTION_LAYER
@@ -94,4 +63,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //#define NO_ACTION_MACRO
 //#define NO_ACTION_FUNCTION
 
-#endif
\ No newline at end of file
+#ifdef SUBPROJECT_rev1
+    #include "rev1/config.h"
+#endif
+#ifdef SUBPROJECT_rev2
+    #include "rev2/config.h"
+#endif
+#endif
index c72789403e558eb7288b1852d6a96ff47842910f..084c890c405fa6f7ebfc1be7a699e3d120e5c482 100644 (file)
@@ -6,6 +6,8 @@
 #include <stdbool.h>
 #include "i2c.h"
 
+#ifdef USE_I2C
+
 // Limits the amount of we wait for any one i2c transaction.
 // Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
 // 9 bits, a single transaction will take around 90μs to complete.
@@ -157,3 +159,4 @@ ISR(TWI_vect) {
   // Reset everything, so we are ready for the next TWI interrupt
   TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
 }
+#endif
diff --git a/keyboards/lets_split/imgs/letssplitv2.svg b/keyboards/lets_split/imgs/letssplitv2.svg
new file mode 100644 (file)
index 0000000..ce80db7
--- /dev/null
@@ -0,0 +1,5817 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="541.41699pt"
+   height="541.41602pt"
+   viewBox="0 0 541.417 541.416"
+   xml:space="preserve"
+   id="svg2242"
+   sodipodi:version="0.32"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="letssplitv2.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1"
+   style="display:inline"><metadata
+     id="metadata2286"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+     id="defs2284"><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective37556" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective16301" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective12409" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective9337" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective8562" /><inkscape:perspective
+       id="perspective3083"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective23419"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective27913"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective27913-5" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective23419-6" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective3083-3" /><inkscape:perspective
+       id="perspective8562-2"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective9337-7"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective12409-1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective16301-9"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective37556-9"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective5074"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective5377"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective5377-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective6033"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective2989"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective3039"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective51596"
+       inkscape:persp3d-origin="1417.3237 : 465.35417 : 1"
+       inkscape:vp_z="2834.6475 : 698.03125 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 698.03125 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective51446"
+       inkscape:persp3d-origin="270.70999 : 180.47333 : 1"
+       inkscape:vp_z="541.41998 : 270.70999 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.70999 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective37556-1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective16301-3"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective12409-3"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective9337-3"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective8562-08"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective3083-9" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective23419-4" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective27913-9" /><inkscape:perspective
+       id="perspective27913-5-1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective23419-6-7"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective3083-3-75"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective8562-2-1" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective9337-7-1" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective12409-1-4" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective16301-9-00" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective37556-9-7" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 698.03125 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1396.0651 : 698.03125 : 1"
+       inkscape:persp3d-origin="698.03253 : 465.35417 : 1"
+       id="perspective46224" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.70999 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41998 : 270.70999 : 1"
+       inkscape:persp3d-origin="270.70999 : 180.47333 : 1"
+       id="perspective56159" /><inkscape:perspective
+       id="perspective37556-9-4"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective16301-9-0"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective12409-1-3"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective9337-7-4"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective8562-2-3"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective3083-3-7" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective23419-6-5" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective27913-5-6" /><inkscape:perspective
+       id="perspective27913-0"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective23419-8"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective3083-7"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective8562-6" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective9337-5" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective12409-0" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective16301-0" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective37556-7" /><inkscape:perspective
+       id="perspective37556-9-49"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective16301-9-2"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective12409-1-9"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective9337-7-40"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective8562-2-0"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective3083-3-6" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective23419-6-3" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective27913-5-8" /><inkscape:perspective
+       id="perspective27913-3"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective23419-0"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       id="perspective3083-30"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective8562-0" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective9337-1" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 270.7085 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="541.41699 : 270.7085 : 1"
+       inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+       id="perspective12409-00" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective16301-7" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 338.38501 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="676.77124 : 338.38501 : 1"
+       inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+       id="perspective37556-3" /><inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       id="perspective3083-79" /><marker
+       orient="auto"
+       id="DistanceX"
+       style="overflow:visible"
+       refX="0.0"
+       refY="0.0"><path
+         id="path9"
+         d="M 3,-3 L -3,3 M 0,-5 L  0,5"
+         style="stroke:#000000; stroke-width:0.5" /></marker><pattern
+       id="Hatch"
+       x="0"
+       y="0"
+       patternUnits="userSpaceOnUse"
+       width="8"
+       height="8"><path
+         id="path12"
+         d="M8 4 l-4,4"
+         stroke-width="0.25"
+         stroke="#000000"
+         linecap="square" /><path
+         id="path14"
+         d="M6 2 l-4,4"
+         stroke-width="0.25"
+         stroke="#000000"
+         linecap="square" /><path
+         id="path16"
+         d="M4 0 l-4,4"
+         stroke-width="0.25"
+         stroke="#000000"
+         linecap="square" /></pattern><symbol
+       id="*Model_Space" /><symbol
+       id="*Paper_Space" /><symbol
+       id="*Paper_Space0" /><marker
+       orient="auto"
+       id="DistanceX-8"
+       style="overflow:visible"
+       refX="0.0"
+       refY="0.0"><path
+         id="path9-7"
+         d="M 3,-3 L -3,3 M 0,-5 L  0,5"
+         style="stroke:#000000; stroke-width:0.5" /></marker><pattern
+       id="Hatch-9"
+       x="0"
+       y="0"
+       patternUnits="userSpaceOnUse"
+       width="8"
+       height="8"><path
+         id="path12-5"
+         d="M8 4 l-4,4"
+         stroke-width="0.25"
+         stroke="#000000"
+         linecap="square" /><path
+         id="path14-5"
+         d="M6 2 l-4,4"
+         stroke-width="0.25"
+         stroke="#000000"
+         linecap="square" /><path
+         id="path16-2"
+         d="M4 0 l-4,4"
+         stroke-width="0.25"
+         stroke="#000000"
+         linecap="square" /></pattern><symbol
+       id="*Model_Space-0" /><symbol
+       id="*Paper_Space-5" /><symbol
+       id="*Paper_Space0-0" /></defs><sodipodi:namedview
+     inkscape:window-height="1019"
+     inkscape:window-width="1920"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="1.1519406"
+     inkscape:cx="274.80199"
+     inkscape:cy="339.22443"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:current-layer="g21-5"
+     showgrid="false"
+     inkscape:window-maximized="1"
+     inkscape:document-units="mm"
+     units="mm" /><g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="Design Template"
+     style="display:inline"
+     sodipodi:insensitive="true"><g
+       id="layer7-8"
+       inkscape:label="Design Template"
+       transform="translate(0.7799525,0.1277278)" /><g
+       id="layer6"
+       inkscape:label="Design Template"
+       transform="translate(0.5338379,0.419927)" /><g
+       id="Layer_x0020_1-6"
+       style="fill:#f6921e;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
+       transform="translate(681.42836,-160.06815)"><g
+         id="g4698-5"
+         transform="translate(-46.145191,-43.270487)" /></g><rect
+       id="rect21823"
+       height="541.41736"
+       width="541.41736"
+       x="0.89512694"
+       y="0.57997072"
+       style="fill:#f6921e" /><rect
+       id="rect21825"
+       height="513.0722"
+       width="513.07129"
+       y="14.753002"
+       x="15.068135"
+       style="fill:#ffffff" /><g
+       id="layer5"
+       inkscape:label="Your Design"
+       transform="translate(681.42836,-160.06815)" /><g
+       id="layer9-1"
+       inkscape:label="Your Design"
+       transform="translate(0.7799525,0.1277278)" /><g
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.19999981px;line-height:164.99999762%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1"
+       id="text4741"><path
+         d="m 570.64175,344.07065 1.80469,0 0,-6.22891 -1.96329,0.39375 0,-1.00625 1.95235,-0.39375 1.10469,0 0,7.23516 1.80468,0 0,0.92969 -4.70312,0 0,-0.92969"
+         id="path3154"
+         inkscape:connector-curvature="0" /><path
+         d="m 577.28081,336.5019 0.875,0 c 0.54687,0.86042 0.95521,1.70261 1.225,2.52656 0.27343,0.82396 0.41015,1.64245 0.41016,2.45547 -10e-6,0.81667 -0.13673,1.6388 -0.41016,2.46641 -0.26979,0.8276 -0.67813,1.66979 -1.225,2.52656 l -0.875,0 c 0.48489,-0.8349 0.84583,-1.66432 1.08281,-2.48828 0.24063,-0.82761 0.36094,-1.6625 0.36094,-2.50469 0,-0.84218 -0.12031,-1.67343 -0.36094,-2.49375 -0.23698,-0.82031 -0.59792,-1.64973 -1.08281,-2.48828"
+         id="path3156"
+         inkscape:connector-curvature="0" /><path
+         d="m 586.52847,337.7433 0,6.34922 1.33437,0 c 1.12656,0 1.95052,-0.2552 2.47188,-0.76562 0.52499,-0.51042 0.78749,-1.31614 0.7875,-2.41719 -10e-6,-1.09374 -0.26251,-1.894 -0.7875,-2.40078 -0.52136,-0.51041 -1.34532,-0.76562 -2.47188,-0.76563 l -1.33437,0 m -1.10469,-0.90781 2.26953,0 c 1.58229,1e-5 2.74348,0.32996 3.48359,0.98985 0.7401,0.65625 1.11015,1.68438 1.11016,3.08437 -10e-6,1.4073 -0.37188,2.44089 -1.11562,3.10078 -0.74376,0.6599 -1.90313,0.98985 -3.47813,0.98985 l -2.26953,0 0,-8.16485"
+         id="path3158"
+         inkscape:connector-curvature="0" /><path
+         d="m 599.23784,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.54141 1.56406,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72186,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3160"
+         inkscape:connector-curvature="0" /><path
+         d="m 600.8894,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         id="path3162"
+         inkscape:connector-curvature="0" /><path
+         d="m 609.23472,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76016,-0.0474 1.1211,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.2698,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19218,-0.49219 -0.56147,10e-6 -1.01173,0.1586 -1.35079,0.47579 -0.33541,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+         id="path3164"
+         inkscape:connector-curvature="0" /><path
+         d="m 611.88159,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13853,0.14219 0.41744,0.21328 0.83671,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         id="path3166"
+         inkscape:connector-curvature="0" /><path
+         d="m 620.52222,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76015,-0.0474 1.1211,-0.14218 0.36457,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+         id="path3168"
+         inkscape:connector-curvature="0" /><path
+         d="m 626.73471,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60782,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44296,-1.58593 l 0,-3.325 -0.73829,0 0,-0.78203 0.73829,0 0,-1.73907 1.01171,0"
+         id="path3170"
+         inkscape:connector-curvature="0" /><path
+         d="m 635.22769,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33907,-1.30156 -0.22604,-0.28801 -0.56511,-0.43203 -1.01718,-0.43203 -0.54324,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47032,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-8.50938 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70365,10e-6 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         id="path3172"
+         inkscape:connector-curvature="0" /><path
+         d="m 642.48472,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76016,-0.0474 1.1211,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.2698,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19218,-0.49219 -0.56147,10e-6 -1.01173,0.1586 -1.35079,0.47579 -0.33541,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+         id="path3174"
+         inkscape:connector-curvature="0" /><path
+         d="m 652.94097,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47474,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3176"
+         inkscape:connector-curvature="0" /><path
+         d="m 659.49799,338.87534 -2.21484,2.98046 2.32969,3.14454 -1.18672,0 -1.78281,-2.40625 -1.78282,2.40625 -1.18671,0 2.3789,-3.20469 -2.17656,-2.92031 1.18672,0 1.62422,2.18203 1.62422,-2.18203 1.18671,0"
+         id="path3178"
+         inkscape:connector-curvature="0" /><path
+         d="m 663.82925,341.92143 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47032,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08906"
+         id="path3180"
+         inkscape:connector-curvature="0" /><path
+         d="m 672.68315,340.05112 c 0.25156,-0.45208 0.55234,-0.78567 0.90234,-1.00078 0.35,-0.2151 0.76198,-0.32265 1.23594,-0.32266 0.63801,10e-6 1.1302,0.22422 1.47656,0.67266 0.34635,0.44479 0.51953,1.07917 0.51954,1.90312 l 0,3.69688 -1.01172,0 0,-3.66407 c -10e-6,-0.58697 -0.10392,-1.02265 -0.31172,-1.30703 -0.20782,-0.28437 -0.52501,-0.42656 -0.95156,-0.42656 -0.52137,0 -0.93334,0.17318 -1.23594,0.51953 -0.30261,0.34636 -0.45391,0.81849 -0.45391,1.41641 l 0,3.46172 -1.01172,0 0,-3.66407 c 0,-0.59062 -0.10391,-1.02629 -0.31172,-1.30703 -0.20781,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.51406,0 -0.92239,0.175 -1.225,0.525 -0.3026,0.34636 -0.4539,0.81667 -0.4539,1.41094 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.22968,-0.37552 0.50494,-0.6526 0.82578,-0.83125 0.32083,-0.17864 0.70182,-0.26796 1.14297,-0.26797 0.44479,10e-6 0.82213,0.11303 1.13203,0.33906 0.31354,0.22605 0.54505,0.55417 0.69453,0.98438"
+         id="path3182"
+         inkscape:connector-curvature="0" /><path
+         d="m 679.80347,344.08159 0,3.24843 -1.01172,0 0,-8.45468 1.01172,0 0,0.92968 c 0.21145,-0.36457 0.4776,-0.63437 0.79843,-0.80937 0.32448,-0.17864 0.71094,-0.26796 1.15938,-0.26797 0.74374,10e-6 1.34713,0.29532 1.81015,0.88594 0.46666,0.59063 0.7,1.36719 0.7,2.32968 0,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46302,0.59063 -1.06641,0.88594 -1.81015,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15938,-0.2625 -0.32083,-0.17865 -0.58698,-0.45026 -0.79843,-0.81484 m 3.42343,-2.13829 c 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30261,-0.42291 -0.72006,-0.63437 -1.25235,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.3026,0.41928 -0.45391,0.99896 -0.4539,1.73906 -10e-6,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25781,0.6289 0.53229,0 0.94974,-0.20963 1.25235,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74454"
+         id="path3184"
+         inkscape:connector-curvature="0" /><path
+         d="m 685.9394,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         id="path3186"
+         inkscape:connector-curvature="0" /><path
+         d="m 694.28471,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3188"
+         inkscape:connector-curvature="0" /><path
+         d="m 703.89879,341.9433 c -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30261,-0.42291 -0.72006,-0.63437 -1.25234,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906 0,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25782,0.6289 0.53228,0 0.94973,-0.20963 1.25234,-0.6289 0.30625,-0.42292 0.45937,-1.00443 0.45938,-1.74454 m -3.42344,-2.13828 c 0.21145,-0.36457 0.4776,-0.63437 0.79844,-0.80937 0.32447,-0.17864 0.71093,-0.26796 1.15937,-0.26797 0.74375,10e-6 1.34713,0.29532 1.81016,0.88594 0.46666,0.59063 0.69999,1.36719 0.7,2.32968 -10e-6,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46303,0.59063 -1.06641,0.88594 -1.81016,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15937,-0.2625 -0.32084,-0.17865 -0.58699,-0.45026 -0.79844,-0.81484 l 0,0.91875 -1.01172,0 0,-8.50938 1.01172,0 0,3.31406"
+         id="path3190"
+         inkscape:connector-curvature="0" /><path
+         d="m 706.61129,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3192"
+         inkscape:connector-curvature="0" /><path
+         d="m 713.26675,339.81596 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00626,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17681,0.02 0.2789,0.0383 l 0.005,1.03359"
+         id="path3194"
+         inkscape:connector-curvature="0" /><path
+         d="m 718.17769,339.80502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.63619 -0.80391,0.81484 -0.32084,0.175 -0.70729,0.2625 -1.15937,0.2625 -0.74011,0 -1.34349,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46667,-0.59062 1.07005,-0.88593 1.81016,-0.88594 0.45208,10e-6 0.83853,0.0893 1.15937,0.26797 0.32448,0.175 0.59245,0.4448 0.80391,0.80937 m -3.42891,2.13828 c 0,0.74011 0.1513,1.32162 0.45391,1.74454 0.30625,0.41927 0.72552,0.6289 1.25781,0.6289 0.53229,0 0.95156,-0.20963 1.25781,-0.6289 0.30625,-0.42292 0.45937,-1.00443 0.45938,-1.74454 -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30625,-0.42291 -0.72552,-0.63437 -1.25781,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.30261,0.41928 -0.45391,0.99896 -0.45391,1.73906"
+         id="path3196"
+         inkscape:connector-curvature="0" /><path
+         d="m 728.86362,339.80502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21147,0.36458 -0.47943,0.63619 -0.80391,0.81484 -0.32084,0.175 -0.70729,0.2625 -1.15937,0.2625 -0.74011,0 -1.3435,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88593 1.81016,-0.88594 0.45208,10e-6 0.83853,0.0893 1.15937,0.26797 0.32448,0.175 0.59244,0.4448 0.80391,0.80937 m -3.42891,2.13828 c 0,0.74011 0.1513,1.32162 0.45391,1.74454 0.30624,0.41927 0.72551,0.6289 1.25781,0.6289 0.53229,0 0.95156,-0.20963 1.25781,-0.6289 0.30625,-0.42292 0.45937,-1.00443 0.45938,-1.74454 -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30625,-0.42291 -0.72552,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25781,0.63437 -0.30261,0.41928 -0.45391,0.99896 -0.45391,1.73906"
+         id="path3198"
+         inkscape:connector-curvature="0" /><path
+         d="m 737.18159,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76015,-0.0474 1.1211,-0.14218 0.36457,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+         id="path3200"
+         inkscape:connector-curvature="0" /><path
+         d="m 742.73784,339.0558 0,0.95157 c -0.28438,-0.14583 -0.5797,-0.25521 -0.88594,-0.32813 -0.30626,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49949,0 -0.87501,0.0766 -1.12657,0.22968 -0.24792,0.15313 -0.37187,0.38282 -0.37187,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17864,0.13125 0.53775,0.25704 1.07734,0.37734 l 0.34453,0.0766 c 0.71458,0.15313 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.45391,0.66537 0.45391,1.16484 0,0.56875 -0.22605,1.01901 -0.67812,1.35078 -0.44845,0.33177 -1.06641,0.49766 -1.85391,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35364,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71823,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16406 0.38281,-0.39375 0.38282,-0.68907 -10e-6,-0.27343 -0.093,-0.48307 -0.27891,-0.6289 -0.18229,-0.14583 -0.58516,-0.2862 -1.20859,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33176 -1.35078,-0.60156 -0.27709,-0.27343 -0.41563,-0.64713 -0.41563,-1.12109 0,-0.57604 0.20417,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73906,-0.47031 0.37187,1e-5 0.72187,0.0273 1.05,0.082 0.32812,0.0547 0.63073,0.13673 0.90782,0.24609"
+         id="path3202"
+         inkscape:connector-curvature="0" /><path
+         d="m 744.67379,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3204"
+         inkscape:connector-curvature="0" /><path
+         d="m 751.8105,341.86674 c 0,-0.72916 -0.15131,-1.29426 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60156 -0.53958,0 -0.96068,0.20052 -1.26328,0.60156 -0.29896,0.40105 -0.44844,0.96615 -0.44844,1.69531 0,0.72553 0.14948,1.28881 0.44844,1.68985 0.3026,0.40104 0.7237,0.60156 1.26328,0.60156 0.54323,0 0.96432,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.45391,-0.96432 0.45391,-1.68985 m 1.00625,2.37344 c -10e-6,1.04271 -0.23152,1.81745 -0.69453,2.32422 -0.46303,0.51041 -1.17214,0.76562 -2.12734,0.76562 -0.35365,0 -0.68725,-0.0273 -1.00079,-0.082 -0.31354,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16042 0.58698,0.27891 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17318 1.48203,-0.51953 0.32812,-0.34271 0.49219,-0.86224 0.49219,-1.55859 l 0,-0.49766 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80938 -0.32448,0.17864 -0.71276,0.26797 -1.16484,0.26797 -0.75104,0 -1.35625,-0.2862 -1.81563,-0.8586 -0.45937,-0.57239 -0.68906,-1.33072 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06459,-0.85858 1.81563,-0.85859 0.45208,10e-6 0.84036,0.0893 1.16484,0.26797 0.32448,0.17865 0.59062,0.44844 0.79844,0.80937 l 0,-0.92968 1.00625,0 0,5.36484"
+         id="path3206"
+         inkscape:connector-curvature="0" /><path
+         d="m 759.98081,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46172 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.24063,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+         id="path3208"
+         inkscape:connector-curvature="0" /><path
+         d="m 765.56441,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         id="path3210"
+         inkscape:connector-curvature="0" /><path
+         d="m 771.45425,341.92143 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47032,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08906"
+         id="path3212"
+         inkscape:connector-curvature="0" /><path
+         d="m 778.08784,345.56909 c -0.28438,0.72916 -0.56146,1.20494 -0.83125,1.42734 -0.2698,0.22239 -0.63073,0.33359 -1.08281,0.33359 l -0.80391,0 0,-0.84218 0.59062,0 c 0.27709,-1e-5 0.49219,-0.0656 0.64532,-0.19688 0.15312,-0.13125 0.32265,-0.44115 0.50859,-0.92969 l 0.18047,-0.45937 -2.47734,-6.02656 1.0664,0 1.91406,4.79062 1.91407,-4.79062 1.0664,0 -2.69062,6.69375"
+         id="path3214"
+         inkscape:connector-curvature="0" /><path
+         d="m 787.40659,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.54141 1.56406,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3216"
+         inkscape:connector-curvature="0" /><path
+         d="m 792.60737,339.81596 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.02 0.2789,0.0383 l 0.005,1.03359"
+         id="path3218"
+         inkscape:connector-curvature="0" /><path
+         d="m 800.34018,336.49096 0,0.83672 -0.9625,0 c -0.36094,1e-5 -0.6125,0.0729 -0.75469,0.21875 -0.13854,0.14584 -0.20781,0.40834 -0.20781,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.15859,-1.17759 0.47578,-1.4875 0.31719,-0.31353 0.82031,-0.4703 1.50938,-0.47031 l 0.95156,0"
+         id="path3220"
+         inkscape:connector-curvature="0" /><path
+         d="m 804.72612,339.81596 c -0.11303,-0.0656 -0.23699,-0.11301 -0.37188,-0.14219 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.3026,0.36823 -0.45391,0.8987 -0.4539,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75103,-0.27343 1.23593,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.02 0.27891,0.0383 l 0.005,1.03359"
+         id="path3222"
+         inkscape:connector-curvature="0" /><path
+         d="m 807.93628,339.5808 c -0.53959,10e-6 -0.96615,0.21147 -1.27969,0.63438 -0.31354,0.41927 -0.47032,0.99532 -0.47031,1.72812 -10e-6,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63985 m 0,-0.85312 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85311 2.06719,-0.85312"
+         id="path3224"
+         inkscape:connector-curvature="0" /><path
+         d="m 817.18941,340.05112 c 0.25155,-0.45208 0.55233,-0.78567 0.90234,-1.00078 0.34999,-0.2151 0.76197,-0.32265 1.23594,-0.32266 0.63801,10e-6 1.1302,0.22422 1.47656,0.67266 0.34635,0.44479 0.51952,1.07917 0.51953,1.90312 l 0,3.69688 -1.01172,0 0,-3.66407 c -10e-6,-0.58697 -0.10391,-1.02265 -0.31172,-1.30703 -0.20782,-0.28437 -0.525,-0.42656 -0.95156,-0.42656 -0.52136,0 -0.93334,0.17318 -1.23594,0.51953 -0.30261,0.34636 -0.45391,0.81849 -0.4539,1.41641 l 0,3.46172 -1.01172,0 0,-3.66407 c -10e-6,-0.59062 -0.10391,-1.02629 -0.31172,-1.30703 -0.20782,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.51406,0 -0.9224,0.175 -1.225,0.525 -0.30261,0.34636 -0.45391,0.81667 -0.45391,1.41094 l 0,3.46172 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.22969,-0.37552 0.50495,-0.6526 0.82579,-0.83125 0.32083,-0.17864 0.70182,-0.26796 1.14296,-0.26797 0.44479,10e-6 0.82214,0.11303 1.13204,0.33906 0.31353,0.22605 0.54504,0.55417 0.69453,0.98438"
+         id="path3226"
+         inkscape:connector-curvature="0" /><path
+         d="m 827.89722,337.13627 0,1.73907 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c -10e-6,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29532,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         id="path3228"
+         inkscape:connector-curvature="0" /><path
+         d="m 836.39019,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46172 -1.01172,0 0,-8.50938 1.01172,0 0,3.33594 c 0.24063,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+         id="path3230"
+         inkscape:connector-curvature="0" /><path
+         d="m 838.40816,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3232"
+         inkscape:connector-curvature="0" /><path
+         d="m 845.41908,339.0558 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88594,-0.32813 -0.30625,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37188,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17864,0.13125 0.53776,0.25704 1.07734,0.37734 l 0.34454,0.0766 c 0.71458,0.15313 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66537 0.4539,1.16484 0,0.56875 -0.22604,1.01901 -0.67812,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.85391,0.49766 -0.32812,0 -0.67083,-0.0328 -1.02812,-0.0984 -0.35365,-0.062 -0.72735,-0.15677 -1.1211,-0.28437 l 0,-1.03907 c 0.37188,0.19323 0.73828,0.33907 1.09922,0.4375 0.36094,0.0948 0.71823,0.14219 1.07188,0.14219 0.47395,0 0.83854,-0.0802 1.09375,-0.24062 0.2552,-0.16406 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.27891,-0.6289 -0.18229,-0.14583 -0.58516,-0.2862 -1.20859,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33176 -1.35078,-0.60156 -0.27708,-0.27343 -0.41563,-0.64713 -0.41563,-1.12109 0,-0.57604 0.20417,-1.02083 0.6125,-1.33438 0.40834,-0.31353 0.98802,-0.4703 1.73907,-0.47031 0.37187,1e-5 0.72187,0.0273 1.05,0.082 0.32812,0.0547 0.63072,0.13673 0.90781,0.24609"
+         id="path3234"
+         inkscape:connector-curvature="0" /><path
+         d="m 854.02142,336.49096 0,0.83672 -0.9625,0 c -0.36094,1e-5 -0.6125,0.0729 -0.75468,0.21875 -0.13855,0.14584 -0.20782,0.40834 -0.20782,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.1586,-1.17759 0.47579,-1.4875 0.31718,-0.31353 0.82031,-0.4703 1.50937,-0.47031 l 0.95156,0"
+         id="path3236"
+         inkscape:connector-curvature="0" /><path
+         d="m 854.85814,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3238"
+         inkscape:connector-curvature="0" /><path
+         d="m 857.9644,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         id="path3240"
+         inkscape:connector-curvature="0" /><path
+         d="m 866.30973,341.68627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3242"
+         inkscape:connector-curvature="0" /><path
+         d="m 872.52222,337.13627 0,1.73907 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c -10e-6,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29532,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         id="path3244"
+         inkscape:connector-curvature="0" /><path
+         d="m 878.29722,339.5808 c -0.53958,10e-6 -0.96615,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.62891 1.28515,0.6289 0.53594,1e-5 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74922,2.3625 -10e-6,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74376,-1.35989 -0.74375,-2.3625 -1e-5,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18853,-0.85311 2.06718,-0.85312"
+         id="path3246"
+         inkscape:connector-curvature="0" /><path
+         d="m 889.11985,341.92143 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11666,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.5086,-1.58047 l 0,-0.22422 -1.00079,0 m 2.00704,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.2297,0.37187 -0.51589,0.64713 -0.8586,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -10e-6,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69088,0.0419 -1.02265,0.12579 -0.33178,0.0839 -0.65079,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36822,-0.14218 0.72551,-0.24791 1.07187,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+         id="path3248"
+         inkscape:connector-curvature="0" /><path
+         d="m 892.48316,338.87534 1.06641,0 1.91406,5.14062 1.91406,-5.14062 1.06641,0 -2.29688,6.125 -1.36718,0 -2.29688,-6.125"
+         id="path3250"
+         inkscape:connector-curvature="0" /><path
+         d="m 902.20659,339.5808 c -0.53959,10e-6 -0.96615,0.21147 -1.27969,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47031,1.72812 -10e-6,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63985 m 0,-0.85312 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85311 2.06719,-0.85312"
+         id="path3252"
+         inkscape:connector-curvature="0" /><path
+         d="m 906.68001,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3254"
+         inkscape:connector-curvature="0" /><path
+         d="m 913.81674,339.80502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.63619 -0.8039,0.81484 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.74011,0 -1.34349,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46667,-0.59062 1.07005,-0.88593 1.81016,-0.88594 0.45208,10e-6 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.4448 0.8039,0.80937 m -3.4289,2.13828 c -10e-6,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25781,0.6289 0.53229,0 0.95156,-0.20963 1.25782,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74454 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30626,-0.42291 -0.72553,-0.63437 -1.25782,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.3026,0.41928 -0.45391,0.99896 -0.4539,1.73906"
+         id="path3256"
+         inkscape:connector-curvature="0" /><path
+         d="m 921.45657,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.31251,-0.14401 -1.60782,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         id="path3258"
+         inkscape:connector-curvature="0" /><path
+         d="m 929.94955,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-8.50938 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         id="path3260"
+         inkscape:connector-curvature="0" /><path
+         d="m 937.20658,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47474,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3262"
+         inkscape:connector-curvature="0" /><path
+         d="m 946.8316,339.11049 0,0.94063 c -0.28438,-0.15677 -0.57058,-0.27344 -0.8586,-0.35 -0.28438,-0.0802 -0.5724,-0.12031 -0.86406,-0.12032 -0.65261,10e-6 -1.15938,0.20782 -1.52031,0.62344 -0.36094,0.41199 -0.54141,0.99167 -0.54141,1.73906 0,0.7474 0.18047,1.32891 0.54141,1.74454 0.36093,0.41198 0.8677,0.61797 1.52031,0.61796 0.29166,1e-5 0.57968,-0.0383 0.86406,-0.11484 0.28802,-0.0802 0.57422,-0.1987 0.8586,-0.35547 l 0,0.92969 c -0.28074,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.9224,0 -1.65521,-0.28984 -2.19844,-0.86953 -0.54323,-0.57969 -0.81485,-1.36172 -0.81484,-2.3461 -1e-5,-0.99895 0.27343,-1.78463 0.82031,-2.35703 0.55052,-0.57239 1.30338,-0.85858 2.25859,-0.85859 0.30989,10e-6 0.6125,0.0328 0.90781,0.0984 0.29531,0.062 0.58151,0.15677 0.8586,0.28437"
+         id="path3264"
+         inkscape:connector-curvature="0" /><path
+         d="m 950.96595,339.5808 c -0.53958,10e-6 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.62891 1.28515,0.6289 0.53594,1e-5 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -1e-5,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85311 2.06718,-0.85312"
+         id="path3266"
+         inkscape:connector-curvature="0" /><path
+         d="m 959.3441,339.0558 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88594,-0.32813 -0.30625,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37188,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17864,0.13125 0.53776,0.25704 1.07734,0.37734 l 0.34453,0.0766 c 0.71458,0.15313 1.22135,0.37005 1.52032,0.65078 0.3026,0.27708 0.4539,0.66537 0.4539,1.16484 0,0.56875 -0.22604,1.01901 -0.67812,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.85391,0.49766 -0.32813,0 -0.67083,-0.0328 -1.02812,-0.0984 -0.35365,-0.062 -0.72735,-0.15677 -1.1211,-0.28437 l 0,-1.03907 c 0.37188,0.19323 0.73828,0.33907 1.09922,0.4375 0.36094,0.0948 0.71823,0.14219 1.07188,0.14219 0.47395,0 0.83853,-0.0802 1.09375,-0.24062 0.2552,-0.16406 0.3828,-0.39375 0.38281,-0.68907 -1e-5,-0.27343 -0.093,-0.48307 -0.27891,-0.6289 -0.18229,-0.14583 -0.58516,-0.2862 -1.20859,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33176 -1.35078,-0.60156 -0.27709,-0.27343 -0.41563,-0.64713 -0.41563,-1.12109 0,-0.57604 0.20417,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73907,-0.47031 0.37187,1e-5 0.72187,0.0273 1.05,0.082 0.32812,0.0547 0.63072,0.13673 0.90781,0.24609"
+         id="path3268"
+         inkscape:connector-curvature="0" /><path
+         d="m 962.27533,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         id="path3270"
+         inkscape:connector-curvature="0" /><path
+         d="m 972.34329,336.49096 0,0.83672 -0.9625,0 c -0.36094,1e-5 -0.6125,0.0729 -0.75469,0.21875 -0.13854,0.14584 -0.20781,0.40834 -0.20781,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.1586,-1.17759 0.47578,-1.4875 0.31719,-0.31353 0.82031,-0.4703 1.50938,-0.47031 l 0.95156,0"
+         id="path3272"
+         inkscape:connector-curvature="0" /><path
+         d="m 975.55345,339.5808 c -0.53959,10e-6 -0.96615,0.21147 -1.27969,0.63438 -0.31354,0.41927 -0.47031,0.99532 -0.47031,1.72812 0,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74193,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27422,-0.63437 0.31353,-0.42292 0.4703,-0.99896 0.47031,-1.72813 -1e-5,-0.72551 -0.15678,-1.29973 -0.47031,-1.72265 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.87499,10e-6 1.56223,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74922,2.3625 -10e-6,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49949,0.56875 -1.18673,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49583,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24792,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85311 2.06719,-0.85312"
+         id="path3274"
+         inkscape:connector-curvature="0" /><path
+         d="m 983.57612,339.81596 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.02 0.2789,0.0383 l 0.005,1.03359"
+         id="path3276"
+         inkscape:connector-curvature="0" /><path
+         d="m 988.20815,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3278"
+         inkscape:connector-curvature="0" /><path
+         d="m 992.30972,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.31251,-0.14401 -1.60782,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         id="path3280"
+         inkscape:connector-curvature="0" /><path
+         d="m 995.85345,343.61127 1.1539,0 0,1.38907 -1.1539,0 0,-1.38907"
+         id="path3282"
+         inkscape:connector-curvature="0" /><path
+         d="m 571.4019,362.55065 3.85547,0 0,0.92969 -5.18437,0 0,-0.92969 c 0.41927,-0.43386 0.98984,-1.01536 1.71172,-1.74453 0.72551,-0.73281 1.18124,-1.20495 1.36718,-1.41641 0.35365,-0.39739 0.59974,-0.73281 0.73829,-1.00625 0.14218,-0.27708 0.21327,-0.54869 0.21328,-0.81484 -10e-6,-0.43385 -0.15313,-0.7875 -0.45938,-1.06094 -0.30261,-0.27343 -0.69818,-0.41015 -1.18672,-0.41016 -0.34635,1e-5 -0.71276,0.0602 -1.09922,0.18047 -0.38281,0.12032 -0.79297,0.30261 -1.23046,0.54688 l 0,-1.11563 c 0.44479,-0.17864 0.86041,-0.31353 1.24687,-0.40469 0.38646,-0.0911 0.7401,-0.13671 1.06094,-0.13671 0.84583,0 1.52031,0.21146 2.02344,0.63437 0.50311,0.42292 0.75468,0.98803 0.75468,1.69531 0,0.33543 -0.0638,0.65444 -0.1914,0.95703 -0.12397,0.29897 -0.35183,0.65261 -0.6836,1.06094 -0.0911,0.10573 -0.38099,0.41198 -0.86953,0.91875 -0.48854,0.50313 -1.17761,1.2086 -2.06719,2.11641"
+         id="path3284"
+         inkscape:connector-curvature="0" /><path
+         d="m 577.28081,354.9819 0.875,0 c 0.54687,0.86042 0.95521,1.70261 1.225,2.52656 0.27343,0.82396 0.41015,1.64245 0.41016,2.45547 -10e-6,0.81667 -0.13673,1.6388 -0.41016,2.46641 -0.26979,0.8276 -0.67813,1.66979 -1.225,2.52656 l -0.875,0 c 0.48489,-0.8349 0.84583,-1.66433 1.08281,-2.48828 0.24063,-0.82761 0.36094,-1.6625 0.36094,-2.50469 0,-0.84218 -0.12031,-1.67343 -0.36094,-2.49375 -0.23698,-0.82031 -0.59792,-1.64973 -1.08281,-2.48828"
+         id="path3286"
+         inkscape:connector-curvature="0" /><path
+         d="m 590.31831,355.58346 0,1.07734 c -0.41928,-0.20051 -0.81485,-0.34999 -1.18672,-0.44843 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11667 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99531 0,0.36095 0.10755,0.63438 0.32265,0.82032 0.21875,0.18229 0.63073,0.32995 1.23594,0.44296 l 0.66719,0.13672 c 0.82395,0.15678 1.43098,0.43386 1.82109,0.83125 0.39375,0.39376 0.59062,0.9224 0.59063,1.58594 -1e-5,0.79115 -0.26615,1.39089 -0.79844,1.79922 -0.52865,0.40833 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21693 -1.35079,-0.38828 l 0,-1.1375 c 0.44844,0.25156 0.88776,0.44114 1.31797,0.56875 0.43021,0.1276 0.85312,0.1914 1.26875,0.1914 0.63073,0 1.11745,-0.12395 1.46016,-0.37187 0.3427,-0.24792 0.51406,-0.60156 0.51406,-1.06094 0,-0.40104 -0.12396,-0.71458 -0.37187,-0.94062 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.5086 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.77109 -0.36823,-0.35 -0.55235,-0.83671 -0.55235,-1.46016 0,-0.72187 0.25339,-1.29061 0.76016,-1.70625 0.51041,-0.41561 1.21223,-0.62343 2.10547,-0.62343 0.3828,0 0.77291,0.0346 1.17031,0.1039 0.39739,0.0693 0.8039,0.17319 1.21953,0.31172"
+         id="path3288"
+         inkscape:connector-curvature="0" /><path
+         d="m 595.273,360.40143 c -0.81303,0 -1.37631,0.093 -1.68985,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33985,-0.59062 0.33905,-0.3974 0.50858,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34272,0.175 -0.76199,0.2625 -1.25782,0.2625 -0.62708,0 -1.12656,-0.175 -1.49843,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -10e-6,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.3026,-0.25521 -0.72917,-0.38281 -1.27968,-0.38282 -0.35001,1e-5 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0838 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07187,-0.31719 0.34636,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88594,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+         id="path3290"
+         inkscape:connector-curvature="0" /><path
+         d="m 598.63628,357.35534 1.0664,0 1.91407,5.14062 1.91406,-5.14062 1.06641,0 -2.29688,6.125 -1.36719,0 -2.29687,-6.125"
+         id="path3292"
+         inkscape:connector-curvature="0" /><path
+         d="m 611.22534,360.16627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,1e-5 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72186,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3294"
+         inkscape:connector-curvature="0" /><path
+         d="m 618.99097,364.04909 c -0.28438,0.72916 -0.56146,1.20494 -0.83125,1.42734 -0.2698,0.22239 -0.63073,0.33359 -1.08281,0.33359 l -0.80391,0 0,-0.84218 0.59062,0 c 0.27709,-1e-5 0.49219,-0.0656 0.64532,-0.19688 0.15312,-0.13125 0.32265,-0.44115 0.50859,-0.92969 l 0.18047,-0.45937 -2.47734,-6.02656 1.0664,0 1.91406,4.79062 1.91407,-4.79062 1.0664,0 -2.69062,6.69375"
+         id="path3296"
+         inkscape:connector-curvature="0" /><path
+         d="m 625.44409,358.0608 c -0.53958,1e-5 -0.96615,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74376,-1.35989 -0.74375,-2.3625 -10e-6,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18853,-0.85311 2.06718,-0.85312"
+         id="path3298"
+         inkscape:connector-curvature="0" /><path
+         d="m 629.81362,361.06315 0,-3.70781 1.00625,0 0,3.66953 c 0,0.57969 0.11302,1.01536 0.33907,1.30703 0.22603,0.28802 0.5651,0.43203 1.01718,0.43203 0.54323,0 0.97161,-0.17318 1.28516,-0.51953 0.31718,-0.34635 0.47578,-0.81849 0.47578,-1.41641 l 0,-3.47265 1.00625,0 0,6.125 -1.00625,0 0,-0.94063 c -0.24428,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.1211,0.26797 -0.70365,0 -1.23776,-0.21875 -1.60234,-0.65625 -0.36459,-0.4375 -0.54688,-1.07734 -0.54688,-1.91953"
+         id="path3300"
+         inkscape:connector-curvature="0" /><path
+         d="m 640.57612,358.29596 c -0.11302,-0.0656 -0.23698,-0.11302 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,1e-5 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.0201 0.2789,0.0383 l 0.005,1.03359"
+         id="path3302"
+         inkscape:connector-curvature="0" /><path
+         d="m 649.23862,358.28502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.63619 -0.8039,0.81484 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88593 1.81015,-0.88594 0.45208,1e-5 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 m -3.4289,2.13828 c 0,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25782,0.6289 0.53228,0 0.95156,-0.20963 1.25781,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74454 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30625,-0.42291 -0.72553,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906"
+         id="path3304"
+         inkscape:connector-curvature="0" /><path
+         d="m 657.55659,360.16627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32421,-0.85313 -0.56876,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88593 2.19296,-0.88594 0.82396,1e-5 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3306"
+         inkscape:connector-curvature="0" /><path
+         d="m 663.11284,357.5358 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88593,-0.32813 -0.30626,-0.0729 -0.62345,-0.10937 -0.95157,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37187,0.68907 -1e-5,0.23333 0.0893,0.41745 0.26796,0.55234 0.17865,0.13125 0.53776,0.25704 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62343,-0.13124 -1.07369,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73906,-0.47031 0.37187,10e-6 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63073,0.13673 0.90781,0.24609"
+         id="path3308"
+         inkscape:connector-curvature="0" /><path
+         d="m 665.04878,357.35534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3310"
+         inkscape:connector-curvature="0" /><path
+         d="m 672.18549,360.34674 c 0,-0.72916 -0.1513,-1.29426 -0.4539,-1.69531 -0.29897,-0.40104 -0.72006,-0.60156 -1.26328,-0.60156 -0.53959,0 -0.96068,0.20052 -1.26329,0.60156 -0.29896,0.40105 -0.44843,0.96615 -0.44843,1.69531 0,0.72552 0.14947,1.28881 0.44843,1.68985 0.30261,0.40104 0.7237,0.60156 1.26329,0.60156 0.54322,0 0.96431,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96433 0.4539,-1.68985 m 1.00625,2.37344 c 0,1.04271 -0.23151,1.81745 -0.69453,2.32422 -0.46302,0.51041 -1.17214,0.76562 -2.12734,0.76562 -0.35365,0 -0.68724,-0.0273 -1.00078,-0.082 -0.31355,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16042 0.58697,0.27891 0.875,0.35547 0.28801,0.0766 0.5815,0.11484 0.88046,0.11484 0.6599,0 1.15391,-0.17318 1.48204,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49218,-1.55859 l 0,-0.49766 c -0.20781,0.36094 -0.47396,0.63073 -0.79843,0.80938 -0.32449,0.17864 -0.71277,0.26797 -1.16485,0.26797 -0.75104,0 -1.35625,-0.2862 -1.81562,-0.8586 -0.45938,-0.57239 -0.68907,-1.33073 -0.68907,-2.275 0,-0.94791 0.22969,-1.70807 0.68907,-2.28047 0.45937,-0.57239 1.06458,-0.85858 1.81562,-0.85859 0.45208,10e-6 0.84036,0.0893 1.16485,0.26797 0.32447,0.17865 0.59062,0.44844 0.79843,0.80937 l 0,-0.92968 1.00625,0 0,5.36484"
+         id="path3312"
+         inkscape:connector-curvature="0" /><path
+         d="m 680.35581,359.78346 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33907,-1.30156 -0.22604,-0.28802 -0.56511,-0.43203 -1.01718,-0.43203 -0.54324,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32813,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70365,1e-5 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         id="path3314"
+         inkscape:connector-curvature="0" /><path
+         d="m 688.723,360.40143 c -0.81303,0 -1.37631,0.093 -1.68985,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.5086,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.8586,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62708,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -1e-5,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27968,-0.38282 -0.35001,1e-5 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0838 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07187,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+         id="path3316"
+         inkscape:connector-curvature="0" /><path
+         d="m 696.71284,357.5358 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88594,-0.32813 -0.30625,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37188,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17865,0.13125 0.53776,0.25704 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.2552,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73906,-0.47031 0.37187,10e-6 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63072,0.13673 0.90781,0.24609"
+         id="path3318"
+         inkscape:connector-curvature="0" /><path
+         d="m 704.998,360.40143 c -0.81303,0 -1.37631,0.093 -1.68985,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33985,-0.59062 0.33905,-0.3974 0.50858,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34272,0.175 -0.76199,0.2625 -1.25782,0.2625 -0.62708,0 -1.12656,-0.175 -1.49843,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15209,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -10e-6,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.3026,-0.25521 -0.72917,-0.38281 -1.27968,-0.38282 -0.35001,1e-5 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0838 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07187,-0.31719 0.34636,-0.0729 0.6836,-0.10936 1.01172,-0.10937 0.88594,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+         id="path3320"
+         inkscape:connector-curvature="0" /><path
+         d="m 714.17455,359.78346 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22604,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,1e-5 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+         id="path3322"
+         inkscape:connector-curvature="0" /><path
+         d="m 724.69643,355.58346 0,1.07734 c -0.41927,-0.20051 -0.81485,-0.34999 -1.18672,-0.44843 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11667 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99531 0,0.36095 0.10755,0.63438 0.32266,0.82032 0.21874,0.18229 0.63072,0.32995 1.23593,0.44296 l 0.66719,0.13672 c 0.82395,0.15678 1.43099,0.43386 1.82109,0.83125 0.39375,0.39376 0.59062,0.9224 0.59063,1.58594 -10e-6,0.79115 -0.26615,1.39089 -0.79844,1.79922 -0.52865,0.40833 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21693 -1.35078,-0.38828 l 0,-1.1375 c 0.44843,0.25156 0.88775,0.44114 1.31796,0.56875 0.43021,0.1276 0.85313,0.1914 1.26875,0.1914 0.63073,0 1.11745,-0.12395 1.46016,-0.37187 0.3427,-0.24792 0.51406,-0.60156 0.51406,-1.06094 0,-0.40104 -0.12396,-0.71458 -0.37187,-0.94062 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.5086 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.77109 -0.36823,-0.35 -0.55235,-0.83671 -0.55235,-1.46016 0,-0.72187 0.25339,-1.29061 0.76016,-1.70625 0.51041,-0.41561 1.21224,-0.62343 2.10547,-0.62343 0.38281,0 0.77291,0.0346 1.17031,0.1039 0.39739,0.0693 0.8039,0.17319 1.21953,0.31172"
+         id="path3324"
+         inkscape:connector-curvature="0" /><path
+         d="m 729.01674,363.48034 -3.11718,-8.16485 1.1539,0 2.58672,6.87422 2.59219,-6.87422 1.14844,0 -3.11172,8.16485 -1.25235,0"
+         id="path3326"
+         inkscape:connector-curvature="0" /><path
+         d="m 740.13471,362.31549 0,-2.19297 -1.80468,0 0,-0.90781 2.89843,0 0,3.50547 c -0.42657,0.3026 -0.89688,0.53229 -1.41093,0.68906 -0.51407,0.15313 -1.06277,0.22969 -1.6461,0.22969 -1.27604,0 -2.275,-0.37188 -2.99687,-1.11563 -0.71823,-0.74739 -1.07735,-1.78645 -1.07735,-3.11718 0,-1.33437 0.35912,-2.37343 1.07735,-3.11719 0.72187,-0.74739 1.72083,-1.12109 2.99687,-1.12109 0.53229,0 1.03724,0.0656 1.51485,0.19687 0.48124,0.13126 0.92421,0.32449 1.3289,0.57969 l 0,1.17578 c -0.40834,-0.34635 -0.84219,-0.60703 -1.30156,-0.78203 -0.45938,-0.17499 -0.94245,-0.26249 -1.44922,-0.2625 -0.99896,1e-5 -1.75,0.27891 -2.25312,0.83672 -0.49948,0.55781 -0.74922,1.38906 -0.74922,2.49375 0,1.10104 0.24974,1.93047 0.74922,2.48828 0.50312,0.55781 1.25416,0.83672 2.25312,0.83672 0.3901,0 0.73828,-0.0328 1.04453,-0.0984 0.30625,-0.0693 0.58151,-0.175 0.82578,-0.31719"
+         id="path3328"
+         inkscape:connector-curvature="0" /><path
+         d="m 749.87456,354.97096 0,0.83672 -0.9625,0 c -0.36094,10e-6 -0.61251,0.0729 -0.75469,0.21875 -0.13854,0.14584 -0.20781,0.40834 -0.20781,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.15859,-1.17759 0.47578,-1.4875 0.31719,-0.31353 0.82031,-0.4703 1.50937,-0.47031 l 0.95157,0"
+         id="path3330"
+         inkscape:connector-curvature="0" /><path
+         d="m 750.71128,357.35534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3332"
+         inkscape:connector-curvature="0" /><path
+         d="m 753.81752,354.97096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         id="path3334"
+         inkscape:connector-curvature="0" /><path
+         d="m 762.16285,360.16627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.5414 1.56407,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,1e-5 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         id="path3336"
+         inkscape:connector-curvature="0" /><path
+         d="m 763.9566,362.09127 1.1539,0 0,1.38907 -1.1539,0 0,-1.38907"
+         id="path3338"
+         inkscape:connector-curvature="0" /><path
+         d="m 573.79722,377.55799 c 0.52864,0.11303 0.94062,0.34818 1.23593,0.70547 0.29896,0.35729 0.44844,0.79844 0.44844,1.32344 0,0.80573 -0.27709,1.42916 -0.83125,1.87031 -0.55417,0.44115 -1.34167,0.66172 -2.3625,0.66172 -0.34271,0 -0.69635,-0.0346 -1.06094,-0.10391 -0.36093,-0.0656 -0.73463,-0.16588 -1.12109,-0.30078 l 0,-1.06641 c 0.30625,0.17865 0.64167,0.31355 1.00625,0.40469 0.36458,0.0911 0.74557,0.13672 1.14297,0.13672 0.6927,0 1.21953,-0.13672 1.58047,-0.41016 0.36458,-0.27343 0.54687,-0.67083 0.54687,-1.19218 0,-0.48125 -0.16953,-0.85677 -0.50859,-1.12657 -0.33542,-0.27343 -0.80391,-0.41015 -1.40547,-0.41015 l -0.95156,0 0,-0.90781 0.99531,0 c 0.54323,0 0.95885,-0.10755 1.24688,-0.32266 0.28801,-0.21875 0.43202,-0.53229 0.43203,-0.94063 -10e-6,-0.41926 -0.14949,-0.74009 -0.44844,-0.9625 -0.29532,-0.22603 -0.72006,-0.33905 -1.27422,-0.33906 -0.30261,1e-5 -0.62709,0.0328 -0.97344,0.0984 -0.34635,0.0656 -0.72734,0.16772 -1.14297,0.30625 l 0,-0.98438 c 0.41927,-0.11665 0.8112,-0.20415 1.17579,-0.2625 0.36822,-0.0583 0.71458,-0.0875 1.03906,-0.0875 0.83854,1e-5 1.50208,0.19142 1.99062,0.57422 0.48854,0.37918 0.73281,0.89324 0.73282,1.54219 -1e-5,0.45209 -0.12944,0.8349 -0.38829,1.14844 -0.25886,0.3099 -0.62708,0.525 -1.10468,0.64531"
+         id="path3340"
+         inkscape:connector-curvature="0" /><path
+         d="m 577.28081,373.4619 0.875,0 c 0.54687,0.86042 0.95521,1.70261 1.225,2.52656 0.27343,0.82396 0.41015,1.64245 0.41016,2.45547 -10e-6,0.81667 -0.13673,1.6388 -0.41016,2.4664 -0.26979,0.82761 -0.67813,1.6698 -1.225,2.52657 l -0.875,0 c 0.48489,-0.8349 0.84583,-1.66433 1.08281,-2.48828 0.24063,-0.82761 0.36094,-1.6625 0.36094,-2.50469 0,-0.84218 -0.12031,-1.67343 -0.36094,-2.49375 -0.23698,-0.82031 -0.59792,-1.64973 -1.08281,-2.48828"
+         id="path3342"
+         inkscape:connector-curvature="0" /><path
+         d="m 585.298,373.79549 1.11015,0 0,4.96016 c 0,0.875 0.1586,1.50573 0.47579,1.89218 0.31718,0.38282 0.83124,0.57422 1.54218,0.57422 0.70729,0 1.21953,-0.1914 1.53672,-0.57422 0.31718,-0.38645 0.47578,-1.01718 0.47578,-1.89218 l 0,-4.96016 1.11016,0 0,5.09688 c -10e-6,1.06458 -0.26433,1.86849 -0.79297,2.41171 -0.52501,0.54323 -1.30157,0.81485 -2.32969,0.81485 -1.03177,0 -1.81198,-0.27162 -2.34062,-0.81485 -0.525,-0.54322 -0.7875,-1.34713 -0.7875,-2.41171 l 0,-5.09688"
+         id="path3344"
+         inkscape:connector-curvature="0" /><path
+         d="m 594.55659,381.04158 0,3.24844 -1.01172,0 0,-8.45469 1.01172,0 0,0.92969 c 0.21146,-0.36458 0.4776,-0.63437 0.79844,-0.80937 0.32447,-0.17864 0.71093,-0.26797 1.15937,-0.26797 0.74375,0 1.34713,0.29532 1.81016,0.88594 0.46666,0.59063 0.69999,1.36719 0.7,2.32968 -10e-6,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46303,0.59063 -1.06641,0.88594 -1.81016,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15937,-0.2625 -0.32084,-0.17865 -0.58698,-0.45026 -0.79844,-0.81485 m 3.42344,-2.13828 c -1e-5,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30261,-0.42291 -0.72005,-0.63437 -1.25234,-0.63437 -0.53229,0 -0.95157,0.21146 -1.25781,0.63437 -0.30261,0.41928 -0.45391,0.99896 -0.45391,1.73906 0,0.74011 0.1513,1.32162 0.45391,1.74453 0.30624,0.41928 0.72552,0.62891 1.25781,0.62891 0.53229,0 0.94973,-0.20963 1.25234,-0.62891 0.30625,-0.42291 0.45937,-1.00442 0.45938,-1.74453"
+         id="path3346"
+         inkscape:connector-curvature="0" /><path
+         d="m 600.69253,373.45096 1.00625,0 0,8.50937 -1.00625,0 0,-8.50937"
+         id="path3348"
+         inkscape:connector-curvature="0" /><path
+         d="m 606.17222,376.5408 c -0.53959,1e-5 -0.96615,0.21147 -1.27969,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47031,1.72812 -1e-5,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.6289 1.28516,0.6289 0.53593,0 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63985 m 0,-0.85312 c 0.87499,0 1.56223,0.28438 2.06171,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85312 2.06719,-0.85312"
+         id="path3350"
+         inkscape:connector-curvature="0" /><path
+         d="m 613.42925,378.88143 c -0.81302,0 -1.37631,0.093 -1.68984,0.2789 -0.31355,0.18594 -0.47032,0.50313 -0.47032,0.95157 0,0.35729 0.11667,0.64166 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33905,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49453 -1.00625,0 0,-0.92968 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76199,0.2625 -1.25782,0.2625 -0.62708,0 -1.12656,-0.175 -1.49843,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46301,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46302 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69089,0.0419 -1.02266,0.12578 -0.33177,0.0839 -0.65078,0.20965 -0.95703,0.37735 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31719 0.34635,-0.0729 0.68359,-0.10937 1.01171,-0.10937 0.88594,0 1.54766,0.22969 1.98516,0.68906 0.4375,0.45938 0.65624,1.15573 0.65625,2.08906"
+         id="path3352"
+         inkscape:connector-curvature="0" /><path
+         d="m 621.54487,376.76502 0,-3.31406 1.00625,0 0,8.50937 -1.00625,0 0,-0.91875 c -0.21146,0.36459 -0.47943,0.6362 -0.8039,0.81485 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.74011,0 -1.34349,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46667,-0.59062 1.07005,-0.88594 1.81016,-0.88594 0.45208,0 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 m -3.4289,2.13828 c -10e-6,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25781,0.62891 0.53229,0 0.95156,-0.20963 1.25782,-0.62891 0.30624,-0.42291 0.45937,-1.00442 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30626,-0.42291 -0.72553,-0.63437 -1.25782,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.3026,0.41928 -0.45391,0.99896 -0.4539,1.73906"
+         id="path3354"
+         inkscape:connector-curvature="0" /><path
+         d="m 629.18472,374.09627 0,1.73906 2.07265,0 0,0.78204 -2.07265,0 0,3.325 c -10e-6,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14218 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84218 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29532,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78204 0.73828,0 0,-1.73906 1.01172,0"
+         id="path3356"
+         inkscape:connector-curvature="0" /><path
+         d="m 637.67769,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33907,-1.30156 -0.22604,-0.28802 -0.5651,-0.43203 -1.01718,-0.43203 -0.54324,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46171 -1.01172,0 0,-8.50937 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32813,-0.18229 0.70547,-0.27344 1.13203,-0.27344 0.70365,0 1.23594,0.21875 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         id="path3358"
+         inkscape:connector-curvature="0" /><path
+         d="m 639.69565,375.83533 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3360"
+         inkscape:connector-curvature="0" /><path
+         d="m 646.70659,376.0158 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88593,-0.32813 -0.30626,-0.0729 -0.62345,-0.10937 -0.95157,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37187,0.68907 -1e-5,0.23333 0.0893,0.41745 0.26796,0.55234 0.17865,0.13125 0.53776,0.25703 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62343,-0.13125 -1.07369,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.47031 1.73906,-0.47031 0.37187,0 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63073,0.13672 0.90781,0.24609"
+         id="path3362"
+         inkscape:connector-curvature="0" /><path
+         d="m 656.23862,376.76502 0,-3.31406 1.00625,0 0,8.50937 -1.00625,0 0,-0.91875 c -0.21146,0.36459 -0.47943,0.6362 -0.8039,0.81485 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88594 1.81015,-0.88594 0.45208,0 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 m -3.4289,2.13828 c 0,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25782,0.62891 0.53228,0 0.95156,-0.20963 1.25781,-0.62891 0.30624,-0.42291 0.45937,-1.00442 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30625,-0.42291 -0.72553,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906"
+         id="path3364"
+         inkscape:connector-curvature="0" /><path
+         d="m 664.55659,378.64627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32421,-0.85313 -0.56876,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88594 2.19296,-0.88594 0.82396,0 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+         id="path3366"
+         inkscape:connector-curvature="0" /><path
+         d="m 670.11284,376.0158 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88593,-0.32813 -0.30626,-0.0729 -0.62345,-0.10937 -0.95157,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37187,0.68907 -1e-5,0.23333 0.0893,0.41745 0.26796,0.55234 0.17865,0.13125 0.53776,0.25703 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62343,-0.13125 -1.07369,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.47031 1.73906,-0.47031 0.37187,0 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63073,0.13672 0.90781,0.24609"
+         id="path3368"
+         inkscape:connector-curvature="0" /><path
+         d="m 672.04878,375.83533 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         id="path3370"
+         inkscape:connector-curvature="0" /><path
+         d="m 679.1855,378.82674 c 0,-0.72916 -0.15131,-1.29427 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60156 -0.53958,0 -0.96068,0.20052 -1.26328,0.60156 -0.29896,0.40104 -0.44844,0.96615 -0.44844,1.69531 0,0.72552 0.14948,1.2888 0.44844,1.68984 0.3026,0.40105 0.7237,0.60157 1.26328,0.60157 0.54323,0 0.96432,-0.20052 1.26328,-0.60157 0.3026,-0.40104 0.45391,-0.96432 0.45391,-1.68984 m 1.00625,2.37344 c -10e-6,1.04271 -0.23152,1.81745 -0.69453,2.32422 -0.46303,0.51041 -1.17214,0.76562 -2.12734,0.76562 -0.35365,0 -0.68725,-0.0273 -1.00079,-0.082 -0.31354,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16041 0.58698,0.2789 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17318 1.48203,-0.51953 0.32812,-0.34271 0.49219,-0.86224 0.49219,-1.55859 l 0,-0.49766 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80938 -0.32448,0.17864 -0.71276,0.26796 -1.16484,0.26796 -0.75104,0 -1.35625,-0.28619 -1.81563,-0.85859 -0.45937,-0.57239 -0.68906,-1.33073 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06459,-0.85859 1.81563,-0.85859 0.45208,0 0.84036,0.0893 1.16484,0.26797 0.32448,0.17865 0.59062,0.44844 0.79844,0.80937 l 0,-0.92969 1.00625,0 0,5.36485"
+         id="path3372"
+         inkscape:connector-curvature="0" /><path
+         d="m 687.35581,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46171 -1.01171,0 0,-6.125 1.01171,0 0,0.95157 c 0.24063,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70547,-0.27344 1.13203,-0.27344 0.70364,0 1.23593,0.21875 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+         id="path3374"
+         inkscape:connector-curvature="0" /><path
+         d="m 698.03081,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46171 -1.01172,0 0,-8.50937 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27344 1.13203,-0.27344 0.70364,0 1.23593,0.21875 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         id="path3376"
+         inkscape:connector-curvature="0" /><path
+         d="m 705.28785,378.64627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.5414 1.56407,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88594 2.19297,-0.88594 0.82395,0 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+         id="path3378"
+         inkscape:connector-curvature="0" /><path
+         d="m 710.48863,376.77596 c -0.11303,-0.0656 -0.23698,-0.11302 -0.37188,-0.14219 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,1e-5 -1.00625,0.18595 -1.3125,0.55782 -0.3026,0.36823 -0.4539,0.8987 -0.4539,1.5914 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95157 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27344 1.23594,-0.27344 0.0693,0 0.14583,0.005 0.22968,0.0164 0.0838,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+         id="path3380"
+         inkscape:connector-curvature="0" /><path
+         d="m 716.5644,378.64627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.5414 1.56407,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88594 2.19297,-0.88594 0.82395,0 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+         id="path3382"
+         inkscape:connector-curvature="0" /><path
+         d="m 718.48393,380.57127 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         id="path3384"
+         inkscape:connector-curvature="0" /><path
+         d="m 724.99175,375.83533 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18672,0 1.25781,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+         id="path3386"
+         inkscape:connector-curvature="0" /><path
+         d="m 734.15737,375.83533 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18671,0 1.25782,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+         id="path3388"
+         inkscape:connector-curvature="0" /><path
+         d="m 743.32299,375.83533 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18671,0 1.25782,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+         id="path3390"
+         inkscape:connector-curvature="0" /><path
+         d="m 752.19877,380.57127 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         id="path3392"
+         inkscape:connector-curvature="0" /><path
+         d="m 756.60659,381.04158 0,3.24844 -1.01172,0 0,-8.45469 1.01172,0 0,0.92969 c 0.21145,-0.36458 0.4776,-0.63437 0.79844,-0.80937 0.32447,-0.17864 0.71093,-0.26797 1.15937,-0.26797 0.74375,0 1.34713,0.29532 1.81016,0.88594 0.46666,0.59063 0.69999,1.36719 0.7,2.32968 -10e-6,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46303,0.59063 -1.06641,0.88594 -1.81016,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15937,-0.2625 -0.32084,-0.17865 -0.58699,-0.45026 -0.79844,-0.81485 m 3.42344,-2.13828 c -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30261,-0.42291 -0.72006,-0.63437 -1.25234,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906 0,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25782,0.62891 0.53228,0 0.94973,-0.20963 1.25234,-0.62891 0.30625,-0.42291 0.45937,-1.00442 0.45938,-1.74453"
+         id="path3394"
+         inkscape:connector-curvature="0" /><path
+         d="m 765.11596,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+         id="path3396"
+         inkscape:connector-curvature="0" /><path
+         d="m 774.68081,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c 0,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46171 -1.01172,0 0,-6.125 1.01172,0 0,0.95157 c 0.24062,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27344 1.13203,-0.27344 0.70364,0 1.23593,0.21875 1.59687,0.65625 0.36094,0.43386 0.5414,1.0737 0.54141,1.91953"
+         id="path3398"
+         inkscape:connector-curvature="0" /><path
+         d="m 779.07222,376.5408 c -0.53959,1e-5 -0.96615,0.21147 -1.27969,0.63438 -0.31354,0.41927 -0.47031,0.99531 -0.47031,1.72812 0,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.6289 1.28516,0.6289 0.53593,0 0.96067,-0.21145 1.27422,-0.63437 0.31353,-0.42292 0.4703,-0.99896 0.47031,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47031,-1.72265 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.87499,0 1.56223,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74921,2.3625 0,1.00261 -0.24974,1.79011 -0.74921,2.3625 -0.49949,0.56875 -1.18673,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49583,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24792,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85312 2.06719,-0.85312"
+         id="path3400"
+         inkscape:connector-curvature="0" /><path
+         d="m 783.50738,373.45096 1.01171,0 0,5.02578 3.00235,-2.64141 1.28515,0 -3.24843,2.86563 3.38515,3.25937 -1.3125,0 -3.11172,-2.9914 0,2.9914 -1.01171,0 0,-8.50937"
+         id="path3402"
+         inkscape:connector-curvature="0" /><path
+         d="m 792.02221,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+         id="path3404"
+         inkscape:connector-curvature="0" /><path
+         d="m 796.4519,380.57127 1.1539,0 0,1.38906 -1.1539,0 0,-1.38906"
+         id="path3406"
+         inkscape:connector-curvature="0" /><path
+         d="m 804.29409,376.07049 0,0.94063 c -0.28438,-0.15677 -0.57058,-0.27344 -0.85859,-0.35 -0.28438,-0.0802 -0.5724,-0.12031 -0.86406,-0.12032 -0.65261,1e-5 -1.15938,0.20782 -1.52032,0.62344 -0.36094,0.41198 -0.5414,0.99167 -0.5414,1.73906 0,0.7474 0.18046,1.32891 0.5414,1.74453 0.36094,0.41198 0.86771,0.61797 1.52032,0.61797 0.29166,0 0.57968,-0.0383 0.86406,-0.11484 0.28801,-0.0802 0.57421,-0.1987 0.85859,-0.35547 l 0,0.92969 c -0.28073,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.9224,0 -1.65521,-0.28985 -2.19844,-0.86953 -0.54323,-0.57969 -0.81484,-1.36172 -0.81484,-2.3461 0,-0.99895 0.27344,-1.78463 0.82031,-2.35703 0.55052,-0.57239 1.30338,-0.85859 2.2586,-0.85859 0.30989,0 0.61249,0.0328 0.90781,0.0984 0.29531,0.062 0.5815,0.15677 0.85859,0.28437"
+         id="path3408"
+         inkscape:connector-curvature="0" /><path
+         d="m 808.42846,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+         id="path3410"
+         inkscape:connector-curvature="0" /><path
+         d="m 817.67065,377.01112 c 0.25156,-0.45208 0.55234,-0.78568 0.90235,-1.00079 0.34999,-0.21509 0.76197,-0.32265 1.23594,-0.32265 0.63801,0 1.13019,0.22422 1.47656,0.67265 0.34634,0.4448 0.51952,1.07918 0.51953,1.90313 l 0,3.69687 -1.01172,0 0,-3.66406 c -10e-6,-0.58697 -0.10391,-1.02265 -0.31172,-1.30703 -0.20782,-0.28437 -0.52501,-0.42656 -0.95156,-0.42656 -0.52136,0 -0.93334,0.17318 -1.23594,0.51953 -0.30261,0.34636 -0.45391,0.81849 -0.4539,1.41641 l 0,3.46171 -1.01172,0 0,-3.66406 c -1e-5,-0.59062 -0.10391,-1.0263 -0.31172,-1.30703 -0.20782,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.51407,0 -0.9224,0.175 -1.225,0.525 -0.30261,0.34636 -0.45391,0.81667 -0.45391,1.41094 l 0,3.46171 -1.01172,0 0,-6.125 1.01172,0 0,0.95157 c 0.22969,-0.37552 0.50495,-0.6526 0.82578,-0.83125 0.32083,-0.17864 0.70182,-0.26797 1.14297,-0.26797 0.44479,0 0.82213,0.11303 1.13203,0.33906 0.31354,0.22605 0.54505,0.55417 0.69453,0.98438"
+         id="path3412"
+         inkscape:connector-curvature="0" /><path
+         d="m 825.6058,373.79549 0.92969,0 -2.84375,9.20391 -0.92969,0 2.84375,-9.20391"
+         id="path3414"
+         inkscape:connector-curvature="0" /><path
+         d="m 828.20345,378.9033 c 0,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25782,0.62891 0.53228,0 0.95156,-0.20963 1.25781,-0.62891 0.30624,-0.42291 0.45937,-1.00442 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30625,-0.42291 -0.72553,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906 m 3.4289,2.13828 c -0.21146,0.36459 -0.47943,0.6362 -0.8039,0.81485 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88594 1.81015,-0.88594 0.45208,0 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 l 0,-0.92969 1.00625,0 0,8.45469 -1.00625,0 0,-3.24844"
+         id="path3416"
+         inkscape:connector-curvature="0" /><path
+         d="m 834.60735,379.54315 0,-3.70782 1.00625,0 0,3.66954 c 0,0.57969 0.11302,1.01536 0.33907,1.30703 0.22604,0.28802 0.5651,0.43203 1.01718,0.43203 0.54323,0 0.97161,-0.17318 1.28516,-0.51953 0.31718,-0.34636 0.47578,-0.81849 0.47578,-1.41641 l 0,-3.47266 1.00625,0 0,6.125 -1.00625,0 0,-0.94062 c -0.24427,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.1211,0.26797 -0.70364,0 -1.23776,-0.21875 -1.60234,-0.65625 -0.36458,-0.4375 -0.54688,-1.07734 -0.54688,-1.91953"
+         id="path3418"
+         inkscape:connector-curvature="0" /><path
+         d="m 844.19407,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -10e-6,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+         id="path3420"
+         inkscape:connector-curvature="0" /><path
+         d="m 849.66284,374.09627 0,1.73906 2.07266,0 0,0.78204 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13853,0.14218 0.41744,0.21328 0.83671,0.21328 l 1.0336,0 0,0.84218 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78204 0.73828,0 0,-1.73906 1.01172,0"
+         id="path3422"
+         inkscape:connector-curvature="0" /><path
+         d="m 858.30347,378.64627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32421,-0.85313 -0.56876,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88594 2.19296,-0.88594 0.82396,0 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+         id="path3424"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+       id="text4751"><path
+         d="m 574.46167,302.28942 c -0.73282,1.25783 -1.27696,2.50197 -1.63242,3.73242 -0.35547,1.23048 -0.53321,2.47735 -0.5332,3.74063 -1e-5,1.26328 0.17773,2.51563 0.5332,3.75703 0.36093,1.23594 0.90507,2.48008 1.63242,3.73242 l -1.3125,0 c -0.82032,-1.28515 -1.43555,-2.54843 -1.8457,-3.78984 -0.40469,-1.2414 -0.60704,-2.47461 -0.60703,-3.69961 -1e-5,-1.21953 0.20234,-2.44726 0.60703,-3.6832 0.40468,-1.23593 1.01992,-2.49921 1.8457,-3.78985 l 1.3125,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3427"
+         inkscape:connector-curvature="0" /><path
+         d="m 582.63198,308.43356 c 0.79296,0.16954 1.41093,0.52227 1.85391,1.05821 0.44843,0.53594 0.67265,1.19766 0.67266,1.98515 -10e-6,1.2086 -0.41564,2.14375 -1.24688,2.80547 -0.83126,0.66172 -2.01251,0.99258 -3.54375,0.99258 -0.51407,0 -1.04453,-0.0519 -1.59141,-0.15586 -0.5414,-0.0984 -1.10195,-0.24883 -1.68164,-0.45117 l 0,-1.59961 c 0.45938,0.26797 0.9625,0.47031 1.50938,0.60703 0.54687,0.13672 1.11835,0.20508 1.71445,0.20508 1.03906,0 1.82929,-0.20508 2.37071,-0.61524 0.54686,-0.41015 0.8203,-1.00624 0.82031,-1.78828 -10e-6,-0.72187 -0.25431,-1.28515 -0.76289,-1.68984 -0.50313,-0.41015 -1.20587,-0.61523 -2.10821,-0.61524 l -1.42734,0 0,-1.36171 1.49297,0 c 0.81484,0 1.43827,-0.16133 1.87031,-0.48399 0.43203,-0.32812 0.64804,-0.79843 0.64805,-1.41094 -10e-6,-0.62889 -0.22423,-1.11014 -0.67266,-1.44375 -0.44297,-0.33905 -1.08008,-0.50858 -1.91133,-0.50859 -0.45391,1e-5 -0.94063,0.0492 -1.46015,0.14766 -0.51954,0.0984 -1.09102,0.25157 -1.71446,0.45937 l 0,-1.47656 c 0.62891,-0.17499 1.2168,-0.30624 1.76368,-0.39375 0.55234,-0.0875 1.07187,-0.13124 1.55859,-0.13125 1.25781,10e-6 2.25312,0.28712 2.98594,0.86133 0.7328,0.56876 1.09921,1.33985 1.09922,2.31328 -10e-6,0.67813 -0.19415,1.25235 -0.58243,1.72265 -0.38828,0.46485 -0.94063,0.78751 -1.65703,0.96797"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3429"
+         inkscape:connector-curvature="0" /><path
+         d="m 587.85737,302.28942 1.3125,0 c 0.82031,1.29064 1.43281,2.55392 1.8375,3.78985 0.41016,1.23594 0.61523,2.46367 0.61524,3.6832 -10e-6,1.225 -0.20508,2.45821 -0.61524,3.69961 -0.40469,1.24141 -1.01719,2.50469 -1.8375,3.78984 l -1.3125,0 c 0.72735,-1.25234 1.26875,-2.49648 1.62422,-3.73242 0.36094,-1.2414 0.54141,-2.49375 0.54141,-3.75703 0,-1.26328 -0.18047,-2.51015 -0.54141,-3.74063 -0.35547,-1.23045 -0.89687,-2.47459 -1.62422,-3.73242"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3431"
+         inkscape:connector-curvature="0" /><path
+         d="m 608.42261,313.28981 0,-3.28945 -2.70703,0 0,-1.36172 4.34766,0 0,5.2582 c -0.63986,0.45391 -1.34533,0.79844 -2.11641,1.0336 -0.7711,0.22969 -1.59415,0.34453 -2.46914,0.34453 -1.91407,0 -3.41251,-0.55781 -4.49531,-1.67344 -1.07735,-1.12109 -1.61602,-2.67968 -1.61602,-4.67578 0,-2.00155 0.53867,-3.56015 1.61602,-4.67578 1.0828,-1.12108 2.58124,-1.68163 4.49531,-1.68164 0.79843,10e-6 1.55585,0.0985 2.27226,0.29531 0.72187,0.19689 1.38632,0.48673 1.99336,0.86953 l 0,1.76367 c -0.61251,-0.51952 -1.26329,-0.91053 -1.95234,-1.17304 -0.68907,-0.26249 -1.41368,-0.39374 -2.17383,-0.39375 -1.49844,1e-5 -2.625,0.41837 -3.37969,1.25508 -0.74922,0.83672 -1.12383,2.0836 -1.12382,3.74062 -10e-6,1.65157 0.3746,2.89571 1.12382,3.73242 0.75469,0.83672 1.88125,1.25508 3.37969,1.25508 0.58515,0 1.10742,-0.0492 1.5668,-0.14766 0.45936,-0.1039 0.87225,-0.26249 1.23867,-0.47578"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3433"
+         inkscape:connector-curvature="0" /><path
+         d="m 620.89136,310.06598 0,0.73829 -6.93984,0 c 0.0656,1.03906 0.37734,1.83203 0.93515,2.3789 0.56328,0.54141 1.34531,0.81211 2.3461,0.81211 0.57968,0 1.14022,-0.0711 1.68164,-0.21328 0.54686,-0.14219 1.08827,-0.35547 1.62422,-0.63984 l 0,1.42734 c -0.54142,0.22969 -1.0965,0.40469 -1.66524,0.525 -0.56876,0.12031 -1.14571,0.18047 -1.73086,0.18047 -1.46563,0 -2.62774,-0.42656 -3.48633,-1.27969 -0.85312,-0.85312 -1.27969,-2.00703 -1.27968,-3.46172 -10e-6,-1.5039 0.40468,-2.69608 1.21406,-3.57656 0.81484,-0.88593 1.91132,-1.3289 3.28945,-1.32891 1.23593,1e-5 2.2121,0.39923 2.92852,1.19766 0.72186,0.79298 1.0828,1.87305 1.08281,3.24023 m -1.50938,-0.44296 c -0.0109,-0.82578 -0.24336,-1.48476 -0.69726,-1.97696 -0.44845,-0.49218 -1.04454,-0.73827 -1.78828,-0.73828 -0.84219,10e-6 -1.51758,0.2379 -2.02617,0.71367 -0.50313,0.47579 -0.79298,1.14571 -0.86954,2.00977 l 5.38125,-0.008"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3435"
+         inkscape:connector-curvature="0" /><path
+         d="m 624.86168,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c -10e-6,0.74922 0.10116,1.23047 0.30351,1.44375 0.20781,0.21328 0.62617,0.31992 1.25508,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16485,0 -1.96875,-0.21602 -2.41172,-0.64805 -0.44297,-0.4375 -0.66445,-1.23047 -0.66445,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3437"
+         inkscape:connector-curvature="0" /><path
+         d="m 639.48785,310.41872 c -1.21954,0 -2.06446,0.13946 -2.53477,0.41836 -0.47031,0.27891 -0.70547,0.75469 -0.70546,1.42734 -10e-6,0.53594 0.17499,0.9625 0.525,1.27969 0.35546,0.31172 0.83671,0.46758 1.44375,0.46758 0.83671,0 1.50663,-0.29531 2.00976,-0.88594 0.50859,-0.59609 0.76288,-1.38632 0.76289,-2.3707 l 0,-0.33633 -1.50117,0 m 3.01055,-0.62344 0,5.2418 -1.50938,0 0,-1.39453 c -0.34454,0.55781 -0.77383,0.9707 -1.28789,1.23867 -0.51407,0.2625 -1.14297,0.39375 -1.88672,0.39375 -0.94063,0 -1.68984,-0.2625 -2.24765,-0.7875 -0.55235,-0.53047 -0.82852,-1.23867 -0.82852,-2.12461 0,-1.03359 0.34453,-1.81289 1.03359,-2.33789 0.69453,-0.525 1.72813,-0.7875 3.10079,-0.7875 l 2.1164,0 0,-0.14766 c -10e-6,-0.69452 -0.22969,-1.23046 -0.68906,-1.60781 -0.45391,-0.3828 -1.09376,-0.57421 -1.91953,-0.57422 -0.52501,10e-6 -1.03633,0.0629 -1.53399,0.18867 -0.49766,0.12579 -0.97617,0.31446 -1.43554,0.56602 l 0,-1.39453 c 0.55234,-0.21327 1.08827,-0.37187 1.60781,-0.47578 0.51953,-0.10937 1.02539,-0.16406 1.51758,-0.16407 1.3289,1e-5 2.32147,0.34454 2.97773,1.0336 0.65624,0.68907 0.98437,1.7336 0.98438,3.13359"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3439"
+         inkscape:connector-curvature="0" /><path
+         d="m 653.25269,309.49177 0,5.54531 -1.50937,0 0,-5.4961 c -1e-5,-0.86952 -0.16954,-1.5203 -0.5086,-1.95234 -0.33907,-0.43202 -0.84766,-0.64804 -1.52578,-0.64805 -0.81485,1e-5 -1.45742,0.25978 -1.92773,0.7793 -0.47032,0.51954 -0.70547,1.22774 -0.70547,2.12461 l 0,5.19258 -1.51758,0 0,-9.1875 1.51758,0 0,1.42734 c 0.36093,-0.55233 0.78476,-0.96522 1.27148,-1.23867 0.49219,-0.27343 1.0582,-0.41015 1.69805,-0.41016 1.05546,1e-5 1.8539,0.32814 2.39531,0.98438 0.5414,0.65079 0.8121,1.61055 0.81211,2.8793"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3441"
+         inkscape:connector-curvature="0" /><path
+         d="m 661.6937,302.78981 1.65704,0 0,12.24727 -1.65704,0 0,-12.24727"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3443"
+         inkscape:connector-curvature="0" /><path
+         d="m 674.21988,309.49177 0,5.54531 -1.50938,0 0,-5.4961 c 0,-0.86952 -0.16954,-1.5203 -0.50859,-1.95234 -0.33907,-0.43202 -0.84766,-0.64804 -1.52578,-0.64805 -0.81485,1e-5 -1.45743,0.25978 -1.92774,0.7793 -0.47031,0.51954 -0.70547,1.22774 -0.70547,2.12461 l 0,5.19258 -1.51757,0 0,-9.1875 1.51757,0 0,1.42734 c 0.36094,-0.55233 0.78477,-0.96522 1.27149,-1.23867 0.49218,-0.27343 1.0582,-0.41015 1.69805,-0.41016 1.05546,1e-5 1.85389,0.32814 2.39531,0.98438 0.5414,0.65079 0.8121,1.61055 0.81211,2.8793"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3445"
+         inkscape:connector-curvature="0" /><path
+         d="m 683.10386,306.12028 0,1.42735 c -0.42657,-0.21875 -0.86954,-0.38281 -1.3289,-0.49219 -0.45938,-0.10937 -0.93517,-0.16406 -1.42735,-0.16406 -0.74922,0 -1.3125,0.11485 -1.68984,0.34453 -0.37188,0.22969 -0.55782,0.57422 -0.55781,1.03359 -10e-6,0.35001 0.13398,0.62618 0.40195,0.82852 0.26796,0.19688 0.80664,0.38555 1.61601,0.56601 l 0.5168,0.11485 c 1.07187,0.22969 1.83203,0.55508 2.28047,0.97617 0.4539,0.41563 0.68085,0.99805 0.68086,1.74726 -10e-6,0.85313 -0.33907,1.52852 -1.01719,2.02618 -0.67266,0.49765 -1.59961,0.74648 -2.78086,0.74648 -0.49219,0 -1.00625,-0.0492 -1.54218,-0.14766 -0.53048,-0.093 -1.09102,-0.23515 -1.68165,-0.42656 l 0,-1.55859 c 0.55782,0.28984 1.10742,0.50859 1.64883,0.65625 0.54141,0.14219 1.07734,0.21328 1.60782,0.21328 0.71093,0 1.2578,-0.12031 1.64062,-0.36094 0.38281,-0.24609 0.57421,-0.59062 0.57422,-1.03359 -10e-6,-0.41016 -0.13946,-0.72461 -0.41836,-0.94336 -0.27344,-0.21875 -0.87774,-0.4293 -1.81289,-0.63164 l -0.525,-0.12305 c -0.93516,-0.19687 -1.61055,-0.49765 -2.02617,-0.90234 -0.41563,-0.41015 -0.62344,-0.9707 -0.62344,-1.68164 0,-0.86406 0.30625,-1.53125 0.91875,-2.00157 0.6125,-0.4703 1.48203,-0.70546 2.60859,-0.70547 0.55781,1e-5 1.08281,0.041 1.575,0.12305 0.49218,0.082 0.94609,0.20509 1.36172,0.36914"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3447"
+         inkscape:connector-curvature="0" /><path
+         d="m 687.50074,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c 0,0.74922 0.10117,1.23047 0.30352,1.44375 0.2078,0.21328 0.62616,0.31992 1.25507,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16484,0 -1.96875,-0.21602 -2.41171,-0.64805 -0.44298,-0.4375 -0.66446,-1.23047 -0.66446,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3449"
+         inkscape:connector-curvature="0" /><path
+         d="m 696.77848,310.41872 c -1.21954,0 -2.06446,0.13946 -2.53477,0.41836 -0.47031,0.27891 -0.70547,0.75469 -0.70547,1.42734 0,0.53594 0.175,0.9625 0.525,1.27969 0.35547,0.31172 0.83672,0.46758 1.44375,0.46758 0.83672,0 1.50664,-0.29531 2.00977,-0.88594 0.50858,-0.59609 0.76288,-1.38632 0.76289,-2.3707 l 0,-0.33633 -1.50117,0 m 3.01054,-0.62344 0,5.2418 -1.50937,0 0,-1.39453 c -0.34454,0.55781 -0.77384,0.9707 -1.28789,1.23867 -0.51407,0.2625 -1.14298,0.39375 -1.88672,0.39375 -0.94063,0 -1.68985,-0.2625 -2.24766,-0.7875 -0.55234,-0.53047 -0.82851,-1.23867 -0.82851,-2.12461 0,-1.03359 0.34453,-1.81289 1.03359,-2.33789 0.69453,-0.525 1.72812,-0.7875 3.10078,-0.7875 l 2.11641,0 0,-0.14766 c -10e-6,-0.69452 -0.2297,-1.23046 -0.68906,-1.60781 -0.45392,-0.3828 -1.09376,-0.57421 -1.91954,-0.57422 -0.525,10e-6 -1.03633,0.0629 -1.53398,0.18867 -0.49766,0.12579 -0.97617,0.31446 -1.43555,0.56602 l 0,-1.39453 c 0.55234,-0.21327 1.08828,-0.37187 1.60782,-0.47578 0.51952,-0.10937 1.02538,-0.16406 1.51757,-0.16407 1.3289,1e-5 2.32148,0.34454 2.97774,1.0336 0.65624,0.68907 0.98436,1.7336 0.98437,3.13359"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3451"
+         inkscape:connector-curvature="0" /><path
+         d="m 710.54333,309.49177 0,5.54531 -1.50938,0 0,-5.4961 c -10e-6,-0.86952 -0.16954,-1.5203 -0.50859,-1.95234 -0.33907,-0.43202 -0.84767,-0.64804 -1.52578,-0.64805 -0.81485,1e-5 -1.45743,0.25978 -1.92774,0.7793 -0.47031,0.51954 -0.70547,1.22774 -0.70547,2.12461 l 0,5.19258 -1.51758,0 0,-9.1875 1.51758,0 0,1.42734 c 0.36094,-0.55233 0.78476,-0.96522 1.27149,-1.23867 0.49218,-0.27343 1.0582,-0.41015 1.69804,-0.41016 1.05547,1e-5 1.8539,0.32814 2.39532,0.98438 0.54139,0.65079 0.8121,1.61055 0.81211,2.8793"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3453"
+         inkscape:connector-curvature="0" /><path
+         d="m 715.06325,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c -1e-5,0.74922 0.10117,1.23047 0.30351,1.44375 0.20781,0.21328 0.62617,0.31992 1.25508,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16485,0 -1.96875,-0.21602 -2.41172,-0.64805 -0.44297,-0.4375 -0.66445,-1.23047 -0.66445,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3455"
+         inkscape:connector-curvature="0" /><path
+         d="m 730.55074,303.91364 c -1.20313,1e-5 -2.16016,0.44845 -2.87109,1.34531 -0.70548,0.89689 -1.05821,2.11915 -1.05821,3.6668 0,1.54219 0.35273,2.76172 1.05821,3.65859 0.71093,0.89688 1.66796,1.34532 2.87109,1.34532 1.20312,0 2.15468,-0.44844 2.85469,-1.34532 0.70546,-0.89687 1.05819,-2.1164 1.0582,-3.65859 -10e-6,-1.54765 -0.35274,-2.76991 -1.0582,-3.6668 -0.70001,-0.89686 -1.65157,-1.3453 -2.85469,-1.34531 m 2.32148,10.90195 2.18203,2.38711 -2.00156,0 -1.81289,-1.96054 c -0.18047,0.0109 -0.31993,0.0191 -0.41836,0.0246 -0.093,0.005 -0.18321,0.008 -0.2707,0.008 -1.72266,0 -3.10079,-0.57422 -4.13438,-1.72266 -1.02812,-1.1539 -1.54218,-2.69609 -1.54218,-4.62656 0,-1.93593 0.51406,-3.47812 1.54218,-4.62656 1.03359,-1.1539 2.41172,-1.73085 4.13438,-1.73086 1.71718,10e-6 3.08983,0.57696 4.11797,1.73086 1.02811,1.14844 1.54217,2.69063 1.54219,4.62656 -2e-5,1.42188 -0.28713,2.63868 -0.86133,3.65039 -0.56876,1.01172 -1.39454,1.75821 -2.47735,2.23945"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3457"
+         inkscape:connector-curvature="0" /><path
+         d="m 738.58161,311.4113 0,-5.56172 1.50938,0 0,5.5043 c -1e-5,0.86953 0.16952,1.52304 0.50859,1.96054 0.33906,0.43204 0.84765,0.64805 1.52578,0.64805 0.81484,0 1.45742,-0.25976 1.92773,-0.7793 0.47578,-0.51953 0.71367,-1.22773 0.71368,-2.12461 l 0,-5.20898 1.50937,0 0,9.1875 -1.50937,0 0,-1.41094 c -0.36642,0.55781 -0.79298,0.97344 -1.27969,1.24688 -0.48126,0.26797 -1.0418,0.40195 -1.68164,0.40195 -1.05547,0 -1.85664,-0.32813 -2.40352,-0.98438 -0.54687,-0.65624 -0.82031,-1.61601 -0.82031,-2.87929"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3459"
+         inkscape:connector-curvature="0" /><path
+         d="m 752.96169,306.90778 c -0.80938,10e-6 -1.44922,0.3172 -1.91953,0.95156 -0.47032,0.62892 -0.70547,1.49298 -0.70547,2.59219 0,1.09922 0.23242,1.96602 0.69726,2.60039 0.47031,0.62891 1.11289,0.94336 1.92774,0.94336 0.8039,0 1.44101,-0.31718 1.91133,-0.95156 0.4703,-0.63437 0.70546,-1.49843 0.70547,-2.59219 -10e-6,-1.08827 -0.23517,-1.9496 -0.70547,-2.58398 -0.47032,-0.63984 -1.10743,-0.95976 -1.91133,-0.95977 m 0,-1.27969 c 1.31249,1e-5 2.34335,0.42658 3.09258,1.27969 0.74921,0.85313 1.12382,2.03438 1.12383,3.54375 -10e-6,1.50391 -0.37462,2.68516 -1.12383,3.54375 -0.74923,0.85313 -1.78009,1.27969 -3.09258,1.27969 -1.31797,0 -2.35157,-0.42656 -3.10078,-1.27969 -0.74375,-0.85859 -1.11563,-2.03984 -1.11563,-3.54375 0,-1.50937 0.37188,-2.69062 1.11563,-3.54375 0.74921,-0.85311 1.78281,-1.27968 3.10078,-1.27969"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3461"
+         inkscape:connector-curvature="0" /><path
+         d="m 761.16481,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c 0,0.74922 0.10117,1.23047 0.30352,1.44375 0.2078,0.21328 0.62616,0.31992 1.25507,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16484,0 -1.96875,-0.21602 -2.41171,-0.64805 -0.44298,-0.4375 -0.66446,-1.23047 -0.66446,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3463"
+         inkscape:connector-curvature="0" /><path
+         d="m 774.12574,310.06598 0,0.73829 -6.93984,0 c 0.0656,1.03906 0.37734,1.83203 0.93515,2.3789 0.56328,0.54141 1.34531,0.81211 2.3461,0.81211 0.57968,0 1.14023,-0.0711 1.68164,-0.21328 0.54687,-0.14219 1.08827,-0.35547 1.62422,-0.63984 l 0,1.42734 c -0.54142,0.22969 -1.09649,0.40469 -1.66524,0.525 -0.56875,0.12031 -1.14571,0.18047 -1.73086,0.18047 -1.46563,0 -2.62773,-0.42656 -3.48632,-1.27969 -0.85313,-0.85312 -1.27969,-2.00703 -1.27969,-3.46172 0,-1.5039 0.40468,-2.69608 1.21406,-3.57656 0.81484,-0.88593 1.91132,-1.3289 3.28945,-1.32891 1.23593,1e-5 2.21211,0.39923 2.92852,1.19766 0.72187,0.79298 1.0828,1.87305 1.08281,3.24023 m -1.50937,-0.44296 c -0.0109,-0.82578 -0.24337,-1.48476 -0.69727,-1.97696 -0.44844,-0.49218 -1.04454,-0.73827 -1.78828,-0.73828 -0.84219,10e-6 -1.51758,0.2379 -2.02617,0.71367 -0.50313,0.47579 -0.79297,1.14571 -0.86953,2.00977 l 5.38125,-0.008"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path3465"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+       id="text4803"><path
+         d="m 574.46167,3.1534802 c -0.73282,1.2578241 -1.27696,2.5019636 -1.63242,3.7324222 -0.35547,1.2304766 -0.53321,2.4773504 -0.5332,3.7406256 -1e-5,1.263285 0.17773,2.515628 0.5332,3.757031 0.36093,1.235938 0.90507,2.480077 1.63242,3.732422 l -1.3125,0 c -0.82032,-1.285157 -1.43555,-2.548437 -1.8457,-3.789844 -0.40469,-1.241403 -0.60704,-2.474605 -0.60703,-3.699609 -1e-5,-1.2195252 0.20234,-2.4472585 0.60703,-3.6832038 0.40468,-1.2359273 1.01992,-2.4992074 1.8457,-3.789844 l 1.3125,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4445"
+         inkscape:connector-curvature="0" /><path
+         d="m 579.03901,14.506606 5.78321,0 0,1.394531 -7.77657,0 0,-1.394531 c 0.62891,-0.650779 1.48477,-1.523044 2.56758,-2.616797 1.08828,-1.099214 1.77187,-1.807416 2.05078,-2.1246096 0.53047,-0.596087 0.89961,-1.0992116 1.10743,-1.5093751 0.21327,-0.4156169 0.31991,-0.8230384 0.31992,-1.2222657 -10e-6,-0.6507718 -0.2297,-1.18124 -0.68906,-1.5914063 -0.45392,-0.4101454 -1.04728,-0.6152234 -1.78008,-0.6152345 -0.51954,1.11e-5 -1.06915,0.090245 -1.64883,0.2707032 -0.57422,0.1804794 -1.18946,0.4539166 -1.8457,0.8203125 l 0,-1.6734376 c 0.66718,-0.2679568 1.29062,-0.4703004 1.87031,-0.6070313 0.57968,-0.1367063 1.11015,-0.2050656 1.59141,-0.2050781 1.26874,1.25e-5 2.28046,0.3171997 3.03515,0.9515626 0.75468,0.6343859 1.13202,1.4820414 1.13203,2.5429689 -10e-6,0.5031335 -0.0957,0.9816487 -0.28711,1.435547 -0.18594,0.4484446 -0.52774,0.9789128 -1.02539,1.5914063 -0.13672,0.1585997 -0.57149,0.6179737 -1.30429,1.3781247 -0.73282,0.754692 -1.76642,1.812894 -3.10079,3.17461"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4447"
+         inkscape:connector-curvature="0" /><path
+         d="m 587.85737,3.1534802 1.3125,0 c 0.82031,1.2906366 1.43281,2.5539167 1.8375,3.789844 0.41016,1.2359453 0.61523,2.4636786 0.61524,3.6832038 -10e-6,1.225004 -0.20508,2.458206 -0.61524,3.699609 -0.40469,1.241407 -1.01719,2.504687 -1.8375,3.789844 l -1.3125,0 c 0.72735,-1.252345 1.26875,-2.496484 1.62422,-3.732422 0.36094,-1.241403 0.54141,-2.493746 0.54141,-3.757031 0,-1.2632752 -0.18047,-2.510149 -0.54141,-3.7406256 -0.35547,-1.2304586 -0.89687,-2.4745981 -1.62422,-3.7324222"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4449"
+         inkscape:connector-curvature="0" /><path
+         d="m 601.72886,5.0155897 0,4.6019535 2.08359,0 c 0.77109,6.3e-6 1.36718,-0.1996029 1.78829,-0.5988282 0.42108,-0.3992115 0.63163,-0.967961 0.63164,-1.7062501 -1e-5,-0.7328032 -0.21056,-1.2988183 -0.63164,-1.698047 -0.42111,-0.3992081 -1.0172,-0.5988173 -1.78829,-0.5988282 l -2.08359,0 m -1.65703,-1.3617188 3.74062,0 c 1.37265,1.22e-5 2.40898,0.3117307 3.10899,0.9351563 0.70546,0.6179795 1.05819,1.5257911 1.0582,2.7234377 -10e-6,1.2086012 -0.35274,2.1218816 -1.0582,2.7398441 -0.70001,0.617974 -1.73634,0.926958 -3.10899,0.926953 l -2.08359,0 0,4.921875 -1.65703,0 0,-12.2472661"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4451"
+         inkscape:connector-curvature="0" /><path
+         d="m 615.19019,8.1245743 c -0.16954,-0.09843 -0.35548,-0.1695233 -0.55781,-0.2132812 -0.19688,-0.049211 -0.41563,-0.07382 -0.65625,-0.073828 -0.85313,8.1e-6 -1.50938,0.2789141 -1.96875,0.8367188 -0.45391,0.5523505 -0.68087,1.3480531 -0.68086,2.3871091 l 0,4.839844 -1.51758,0 0,-9.1875001 1.51758,0 0,1.4273439 c 0.31718,-0.5578042 0.73007,-0.9706945 1.23867,-1.238672 0.50859,-0.2734282 1.12656,-0.4101469 1.85391,-0.4101563 0.1039,9.4e-6 0.21874,0.00821 0.34453,0.024609 0.12577,0.010947 0.26522,0.030087 0.41836,0.057422 l 0.008,1.5503907"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4453"
+         inkscape:connector-curvature="0" /><path
+         d="m 624.28745,10.930043 0,0.738282 -6.93984,0 c 0.0656,1.039065 0.37734,1.832033 0.93516,2.378906 0.56327,0.541408 1.3453,0.81211 2.34609,0.812109 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08827,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404688 -1.66523,0.525 -0.56876,0.120313 -1.14571,0.180469 -1.73086,0.180469 -1.46563,0 -2.62774,-0.426562 -3.48633,-1.279688 -0.85313,-0.853123 -1.27969,-2.007028 -1.27969,-3.461719 0,-1.5038999 0.40469,-2.6960863 1.21406,-3.5765623 0.81484,-0.8859286 1.91133,-1.328897 3.28946,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.08281,1.8730533 1.08281,3.2402343 m -1.50937,-0.442969 c -0.011,-0.8257746 -0.24337,-1.4847583 -0.69727,-1.9769528 -0.44844,-0.4921796 -1.04453,-0.7382731 -1.78828,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.7136719 -0.50313,0.4757883 -0.79297,1.1457095 -0.86953,2.0097662 l 5.38125,-0.0082"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4455"
+         inkscape:connector-curvature="0" /><path
+         d="m 626.01831,10.626528 4.42149,0 0,1.345312 -4.42149,0 0,-1.345312"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4457"
+         inkscape:connector-curvature="0" /><path
+         d="m 638.52808,4.7776991 c -1.20313,1.11e-5 -2.16016,0.4484482 -2.87109,1.3453126 -0.70548,0.8968839 -1.05821,2.1191484 -1.05821,3.6667971 0,1.5421922 0.35273,2.7617222 1.05821,3.6585942 0.71093,0.896876 1.66796,1.345314 2.87109,1.345312 1.20312,2e-6 2.15468,-0.448436 2.85469,-1.345312 0.70546,-0.896872 1.05819,-2.116402 1.0582,-3.6585942 -10e-6,-1.5476487 -0.35274,-2.7699132 -1.0582,-3.6667971 -0.70001,-0.8968644 -1.65157,-1.3453015 -2.85469,-1.3453126 m 2.32148,10.9019539 2.18204,2.387109 -2.00157,0 -1.81289,-1.960547 c -0.18047,0.01094 -0.31993,0.01914 -0.41836,0.02461 -0.093,0.0055 -0.18321,0.0082 -0.2707,0.0082 -1.72266,0 -3.10079,-0.574218 -4.13438,-1.722656 -1.02812,-1.153904 -1.54218,-2.69609 -1.54218,-4.6265632 0,-1.9359296 0.51406,-3.4781156 1.54218,-4.6265628 1.03359,-1.1538944 2.41172,-1.730847 4.13438,-1.7308595 1.71718,1.25e-5 3.08983,0.5769651 4.11797,1.7308595 1.02811,1.1484472 1.54217,2.6906332 1.54219,4.6265628 -2e-5,1.4218802 -0.28713,2.6386752 -0.86133,3.6503912 -0.56876,1.01172 -1.39454,1.758204 -2.47735,2.239453"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4459"
+         inkscape:connector-curvature="0" /><path
+         d="m 646.57535,12.275356 0,-5.5617193 1.50937,0 0,5.5042973 c 0,0.869534 0.16953,1.523049 0.5086,1.960547 0.33905,0.432033 0.84765,0.648048 1.52578,0.648047 0.81483,1e-6 1.45741,-0.259764 1.92773,-0.779297 0.47578,-0.519529 0.71367,-1.227731 0.71367,-2.12461 l 0,-5.2089843 1.50938,0 0,9.1875003 -1.50938,0 0,-1.410937 c -0.36641,0.557813 -0.79297,0.973438 -1.27968,1.246875 -0.48126,0.267969 -1.04181,0.401953 -1.68165,0.401953 -1.05547,0 -1.85664,-0.328125 -2.40351,-0.984375 -0.54688,-0.656249 -0.82031,-1.616013 -0.82031,-2.879297"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4461"
+         inkscape:connector-curvature="0" /><path
+         d="m 660.95542,7.7718399 c -0.80937,8.2e-6 -1.44922,0.3171954 -1.91953,0.9515626 -0.47031,0.6289128 -0.70547,1.4929745 -0.70547,2.5921875 0,1.099222 0.23242,1.966019 0.69727,2.600391 0.47031,0.628908 1.11289,0.94336 1.92773,0.943359 0.80391,1e-6 1.44101,-0.317186 1.91133,-0.951562 0.47031,-0.634373 0.70546,-1.498434 0.70547,-2.592188 -10e-6,-1.088275 -0.23516,-1.9496028 -0.70547,-2.5839844 -0.47032,-0.639836 -1.10742,-0.9597575 -1.91133,-0.9597657 m 0,-1.2796876 c 1.3125,9.4e-6 2.34336,0.4265715 3.09258,1.2796876 0.74921,0.8531324 1.12382,2.0343813 1.12383,3.5437501 -10e-6,1.50391 -0.37462,2.685158 -1.12383,3.54375 -0.74922,0.853126 -1.78008,1.279688 -3.09258,1.279688 -1.31797,0 -2.35156,-0.426562 -3.10078,-1.279688 -0.74375,-0.858592 -1.11562,-2.03984 -1.11562,-3.54375 0,-1.5093688 0.37187,-2.6906177 1.11562,-3.5437501 0.74922,-0.8531161 1.78281,-1.2796782 3.10078,-1.2796876"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4463"
+         inkscape:connector-curvature="0" /><path
+         d="m 669.15855,4.1050428 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.749221 0.10117,1.230471 0.30352,1.44375 0.20781,0.213283 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96875,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66446,-1.230467 -0.66445,-2.378906 l 0,-4.9875003 -1.10743,0 0,-1.173047 1.10743,0 0,-2.6085939 1.51757,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4465"
+         inkscape:connector-curvature="0" /><path
+         d="m 682.11949,10.930043 0,0.738282 -6.93984,0 c 0.0656,1.039065 0.37734,1.832033 0.93516,2.378906 0.56327,0.541408 1.3453,0.81211 2.34609,0.812109 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08827,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54142,0.229688 -1.09649,0.404688 -1.66524,0.525 -0.56875,0.120313 -1.1457,0.180469 -1.73085,0.180469 -1.46563,0 -2.62774,-0.426562 -3.48633,-1.279688 -0.85313,-0.853123 -1.27969,-2.007028 -1.27969,-3.461719 0,-1.5038999 0.40469,-2.6960863 1.21406,-3.5765623 0.81484,-0.8859286 1.91133,-1.328897 3.28946,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.0828,1.8730533 1.08281,3.2402343 m -1.50937,-0.442969 c -0.011,-0.8257746 -0.24337,-1.4847583 -0.69727,-1.9769528 -0.44844,-0.4921796 -1.04453,-0.7382731 -1.78828,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.7136719 -0.50313,0.4757883 -0.79297,1.1457095 -0.86953,2.0097662 l 5.38125,-0.0082"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4467"
+         inkscape:connector-curvature="0" /><path
+         d="m 699.18199,4.5972303 0,1.7472658 c -0.55782,-0.5195212 -1.15392,-0.9078021 -1.78828,-1.1648439 -0.62892,-0.2570202 -1.29884,-0.3855357 -2.00977,-0.3855469 -1.4,1.12e-5 -2.47188,0.4293076 -3.21562,1.2878908 -0.74375,0.853134 -1.11563,2.0890703 -1.11563,3.7078127 0,1.6132862 0.37188,2.8492222 1.11563,3.7078132 0.74374,0.853126 1.81562,1.279688 3.21562,1.279687 0.71093,10e-7 1.38085,-0.128514 2.00977,-0.385547 0.63436,-0.257029 1.23046,-0.64531 1.78828,-1.164844 l 0,1.73086 c -0.5797,0.39375 -1.19493,0.689063 -1.8457,0.885937 -0.64532,0.196875 -1.32892,0.295313 -2.05078,0.295313 -1.85392,0 -3.31407,-0.566015 -4.38047,-1.698047 -1.06641,-1.137497 -1.59961,-2.687887 -1.59961,-4.6511722 0,-1.968742 0.5332,-3.5191312 1.59961,-4.6511722 1.0664,-1.1374882 2.52655,-1.7062376 4.38047,-1.7062501 0.7328,1.25e-5 1.42186,0.09845 2.06718,0.2953125 0.65078,0.1914183 1.26054,0.4812617 1.8293,0.8695313"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4469"
+         inkscape:connector-curvature="0" /><path
+         d="m 709.32926,10.355824 0,5.545313 -1.50937,0 0,-5.496094 c -10e-6,-0.8695247 -0.16954,-1.5203054 -0.5086,-1.9523437 -0.33907,-0.4320234 -0.84766,-0.6480388 -1.52578,-0.6480469 -0.81485,8.1e-6 -1.45743,0.2597735 -1.92773,0.779297 -0.47032,0.519538 -0.70548,1.2277405 -0.70547,2.1246096 l 0,5.192578 -1.51758,0 0,-12.764063 1.51758,0 0,5.0039066 c 0.36093,-0.5523355 0.78476,-0.9652257 1.27148,-1.238672 0.49218,-0.2734282 1.0582,-0.4101469 1.69805,-0.4101563 1.05546,9.4e-6 1.8539,0.3281341 2.39531,0.9843751 0.5414,0.6507891 0.8121,1.6105538 0.81211,2.8792966"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4471"
+         inkscape:connector-curvature="0" /><path
+         d="m 720.21481,10.930043 0,0.738282 -6.93985,0 c 0.0656,1.039065 0.37734,1.832033 0.93516,2.378906 0.56328,0.541408 1.34531,0.81211 2.34609,0.812109 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08828,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404688 -1.66523,0.525 -0.56876,0.120313 -1.14571,0.180469 -1.73086,0.180469 -1.46563,0 -2.62774,-0.426562 -3.48633,-1.279688 -0.85313,-0.853123 -1.27969,-2.007028 -1.27969,-3.461719 0,-1.5038999 0.40469,-2.6960863 1.21407,-3.5765623 0.81484,-0.8859286 1.91132,-1.328897 3.28945,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92852,1.1976564 0.72186,0.7929762 1.0828,1.8730533 1.08281,3.2402343 m -1.50938,-0.442969 c -0.0109,-0.8257746 -0.24336,-1.4847583 -0.69726,-1.9769528 -0.44845,-0.4921796 -1.04454,-0.7382731 -1.78828,-0.7382813 -0.8422,8.2e-6 -1.51759,0.2378986 -2.02618,0.7136719 -0.50312,0.4757883 -0.79297,1.1457095 -0.86953,2.0097662 l 5.38125,-0.0082"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4473"
+         inkscape:connector-curvature="0" /><path
+         d="m 729.30387,7.0663711 0,1.4109376 c -0.42657,-0.2351486 -0.85587,-0.4101484 -1.28789,-0.525 -0.42657,-0.1203045 -0.8586,-0.1804606 -1.29609,-0.1804688 -0.97892,8.2e-6 -1.73907,0.3117266 -2.28047,0.9351563 -0.54141,0.6179754 -0.81212,1.4875058 -0.81211,2.6085938 -10e-6,1.121097 0.2707,1.993362 0.81211,2.616797 0.5414,0.61797 1.30155,0.926954 2.28047,0.926953 0.43749,1e-6 0.86952,-0.05742 1.29609,-0.172265 0.43202,-0.120311 0.86132,-0.298046 1.28789,-0.533203 l 0,1.394531 c -0.4211,0.196875 -0.8586,0.344531 -1.3125,0.442969 -0.44844,0.09844 -0.92696,0.147656 -1.43555,0.147656 -1.38359,0 -2.48281,-0.434765 -3.29765,-1.304297 -0.81485,-0.869529 -1.22227,-2.042575 -1.22227,-3.519141 0,-1.4984314 0.41016,-2.6769459 1.23047,-3.535547 0.82578,-0.8585848 1.95507,-1.2878813 3.38789,-1.2878907 0.46484,9.4e-6 0.91874,0.049228 1.36172,0.1476563 0.44296,0.092978 0.87226,0.2351653 1.28789,0.4265625"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4475"
+         inkscape:connector-curvature="0" /><path
+         d="m 731.88786,3.137074 1.51758,0 0,7.538672 4.50351,-3.9621093 1.92774,0 -4.87266,4.2984383 5.07773,4.889062 -1.96875,0 -4.66757,-4.487109 0,4.487109 -1.51758,0 0,-12.764063"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4477"
+         inkscape:connector-curvature="0" /><path
+         d="m 741.69059,3.137074 1.50938,0 0,12.764063 -1.50938,0 0,-12.764063"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4479"
+         inkscape:connector-curvature="0" /><path
+         d="m 746.34996,6.7136367 1.50937,0 0,9.1875003 -1.50937,0 0,-9.1875003 m 0,-3.5765627 1.50937,0 0,1.9113282 -1.50937,0 0,-1.9113282"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4481"
+         inkscape:connector-curvature="0" /><path
+         d="m 756.86637,6.9843399 0,1.4273438 c -0.42657,-0.2187423 -0.86954,-0.3828046 -1.32891,-0.4921875 -0.45938,-0.1093669 -0.93516,-0.1640544 -1.42734,-0.1640625 -0.74923,8.1e-6 -1.31251,0.1148518 -1.68985,0.3445312 -0.37187,0.2296951 -0.55781,0.5742261 -0.55781,1.0335939 0,0.3500064 0.13398,0.626178 0.40195,0.8285156 0.26797,0.1968806 0.80664,0.3855526 1.61602,0.5660156 l 0.5168,0.114844 c 1.07187,0.229692 1.83202,0.555083 2.28047,0.976172 0.45389,0.415629 0.68085,0.99805 0.68085,1.747266 0,0.853126 -0.33907,1.528516 -1.01718,2.026172 -0.67267,0.497656 -1.59962,0.746484 -2.78086,0.746484 -0.49219,0 -1.00626,-0.04922 -1.54219,-0.147656 -0.53047,-0.09297 -1.09102,-0.235156 -1.68164,-0.426563 l 0,-1.558594 c 0.55781,0.289846 1.10742,0.508596 1.64883,0.65625 0.5414,0.142189 1.07734,0.213283 1.60781,0.213282 0.71093,10e-7 1.25781,-0.120312 1.64063,-0.360938 0.3828,-0.246092 0.57421,-0.590623 0.57421,-1.033594 0,-0.410153 -0.13946,-0.724606 -0.41836,-0.943359 -0.27344,-0.218747 -0.87774,-0.429293 -1.81289,-0.631641 l -0.525,-0.123047 c -0.93516,-0.19687 -1.61055,-0.497651 -2.02617,-0.902343 -0.41562,-0.410151 -0.62344,-0.9706977 -0.62344,-1.6816412 0,-0.864055 0.30625,-1.5312419 0.91875,-2.0015627 0.6125,-0.4703033 1.48203,-0.7054594 2.6086,-0.7054688 0.55781,9.4e-6 1.08281,0.041025 1.575,0.1230469 0.49218,0.08204 0.94609,0.2050872 1.36172,0.3691407"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4483"
+         inkscape:connector-curvature="0" /><path
+         d="m 761.26324,4.1050428 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.749221 0.10117,1.230471 0.30352,1.44375 0.20781,0.213283 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96875,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66445,-1.230467 -0.66445,-2.378906 l 0,-4.9875003 -1.10743,0 0,-1.173047 1.10743,0 0,-2.6085939 1.51757,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4485"
+         inkscape:connector-curvature="0" /></g><g
+       transform="matrix(0.80000001,0,0,0.80000001,118.01204,0.26753544)"
+       id="g4805"><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,55.710999 12.757,0 0,12.755999 -12.757,0 z"
+         id="rect4807"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,78.594002 12.757,0 0,12.755999 -12.757,0 z"
+         id="rect4809"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,101.477 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4811"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,124.359 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4813"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,147.242 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4815"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,170.12399 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4817"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,193.007 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4819"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,215.89 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4821"
+         inkscape:connector-curvature="0" /><path
+         style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+         d="m 564.05103,238.772 12.757,0 0,12.756 -12.757,0 z"
+         id="rect4825"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:9.60000038px"
+       id="text4831-2"><path
+         d="m -204.23171,331.74354 6.90703,0 0,0.92969 -2.89844,0 0,7.23516 -1.11015,0 0,-7.23516 -2.89844,0 0,-0.92969"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4499"
+         inkscape:connector-curvature="0" /><path
+         d="m -195.8153,334.48886 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31067 0.46484,1.73359 0.31354,0.41927 0.74192,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42291 0.47031,-0.99896 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63984 m 0,-0.85313 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.0026 -0.24974,1.7901 -0.74922,2.36249 -0.49948,0.56876 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.36249 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4501"
+         inkscape:connector-curvature="0" /><path
+         d="m -187.72155,331.74354 5.1625,0 0,0.92969 -4.05782,0 0,2.41719 3.88828,0 0,0.92969 -3.88828,0 0,2.95859 4.15625,0 0,0.92969 -5.26093,0 0,-8.16485"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4503"
+         inkscape:connector-curvature="0" /><path
+         d="m -175.5864,336.21151 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43202 -1.01719,-0.43203 -0.54323,10e-6 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24063,-0.36822 0.52318,-0.64348 0.84766,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4505"
+         inkscape:connector-curvature="0" /><path
+         d="m -169.53796,336.77479 c -1e-5,-0.72916 -0.15131,-1.29426 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60156 -0.53958,0 -0.96068,0.20052 -1.26328,0.60156 -0.29896,0.40105 -0.44844,0.96615 -0.44844,1.69531 0,0.72553 0.14948,1.28881 0.44844,1.68985 0.3026,0.40104 0.7237,0.60156 1.26328,0.60156 0.54323,0 0.96432,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96432 0.45391,-1.68985 m 1.00625,2.37344 c -1e-5,1.04271 -0.23152,1.81745 -0.69453,2.32422 -0.46303,0.51041 -1.17214,0.76562 -2.12735,0.76562 -0.35364,0 -0.68724,-0.0273 -1.00078,-0.082 -0.31354,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16042 0.58698,0.27891 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17317 1.48203,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49219,-1.55859 l 0,-0.49766 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80938 -0.32448,0.17864 -0.71276,0.26797 -1.16484,0.26797 -0.75105,0 -1.35625,-0.2862 -1.81563,-0.8586 -0.45937,-0.57239 -0.68906,-1.33072 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06458,-0.85858 1.81563,-0.85859 0.45208,10e-6 0.84036,0.0893 1.16484,0.26797 0.32448,0.17865 0.59062,0.44844 0.79844,0.80937 l 0,-0.92968 1.00625,0 0,5.36484"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4507"
+         inkscape:connector-curvature="0" /><path
+         d="m -162.90984,334.72401 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4509"
+         inkscape:connector-curvature="0" /><path
+         d="m -159.05984,336.82948 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11666,0.64167 0.35,0.85312 0.23697,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41562 0,3.49453 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22968,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41093,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38281 -0.35,0 -0.69089,0.0419 -1.02265,0.12578 -0.33178,0.0839 -0.65079,0.20964 -0.95704,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31718 0.34635,-0.0729 0.68359,-0.10937 1.01172,-0.10938 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4511"
+         inkscape:connector-curvature="0" /><path
+         d="m -155.69655,333.78339 1.0664,0 1.91406,5.14062 1.91407,-5.14062 1.0664,0 -2.29687,6.125 -1.36719,0 -2.29687,-6.125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4513"
+         inkscape:connector-curvature="0" /><path
+         d="m -143.10749,336.59432 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49218 -0.56146,0 -1.01172,0.15859 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4515"
+         inkscape:connector-curvature="0" /><path
+         d="m -135.10671,336.82948 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47031,0.95156 -1e-5,0.35729 0.11666,0.64167 0.35,0.85312 0.23697,0.20782 0.55781,0.31172 0.9625,0.31172 0.5578,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41562 0,3.49453 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22968,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41093,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38281 -0.35,0 -0.69089,0.0419 -1.02266,0.12578 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31718 0.34635,-0.0729 0.68359,-0.10937 1.01172,-0.10938 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4517"
+         inkscape:connector-curvature="0" /><path
+         d="m -127.41218,331.74354 1.10469,0 0,7.23516 3.97578,0 0,0.92969 -5.08047,0 0,-8.16485"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4519"
+         inkscape:connector-curvature="0" /><path
+         d="m -121.22155,333.78339 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4521"
+         inkscape:connector-curvature="0" /><path
+         d="m -113.0239,336.21151 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43202 -1.01719,-0.43203 -0.54323,10e-6 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36822 0.52317,-0.64348 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4523"
+         inkscape:connector-curvature="0" /><path
+         d="m -105.76687,336.59432 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28437 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47474,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49218 -0.56146,0 -1.01172,0.15859 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4525"
+         inkscape:connector-curvature="0" /><path
+         d="m -103.85828,338.51932 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4527"
+         inkscape:connector-curvature="0" /><path
+         d="m -198.20515,345.45151 0,1.07735 c -0.41927,-0.20052 -0.81485,-0.35 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11668 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99532 0,0.36094 0.10755,0.63438 0.32266,0.82031 0.21874,0.1823 0.63072,0.32995 1.23593,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43385 1.82109,0.83125 0.39375,0.39375 0.59062,0.92239 0.59063,1.58593 -1e-5,0.79115 -0.26615,1.39089 -0.79844,1.79922 -0.52865,0.40834 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21692 -1.35078,-0.38828 l 0,-1.1375 c 0.44843,0.25156 0.88775,0.44115 1.31796,0.56875 0.43021,0.12761 0.85313,0.19141 1.26875,0.19141 0.63073,0 1.11745,-0.12396 1.46016,-0.37188 0.3427,-0.24791 0.51406,-0.60156 0.51406,-1.06094 0,-0.40103 -0.12396,-0.71458 -0.37187,-0.94062 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.50859 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.7711 -0.36823,-0.34999 -0.55235,-0.83671 -0.55235,-1.46015 0,-0.72187 0.25339,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21224,-0.62343 2.10547,-0.62344 0.38281,1e-5 0.77291,0.0346 1.17031,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31171"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4529"
+         inkscape:connector-curvature="0" /><path
+         d="m -195.03874,345.48433 0,1.73906 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29532,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4531"
+         inkscape:connector-curvature="0" /><path
+         d="m -188.08796,348.16401 c -0.11303,-0.0656 -0.23698,-0.11301 -0.37188,-0.14218 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.3026,0.36823 -0.4539,0.8987 -0.4539,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22968,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4533"
+         inkscape:connector-curvature="0" /><path
+         d="m -184.87781,347.92886 c -0.53958,0 -0.96614,0.21146 -1.27968,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96068,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.0026 -0.24974,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87864,0 -1.56771,-0.28437 -2.06718,-0.85312 -0.49584,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49947,-0.56875 1.18854,-0.85312 2.06718,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4535"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.43171,344.83901 1.01172,0 0,5.02578 3.00234,-2.6414 1.28516,0 -3.24844,2.86562 3.38516,3.25938 -1.3125,0 -3.11172,-2.99141 0,2.99141 -1.01172,0 0,-8.50938"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4537"
+         inkscape:connector-curvature="0" /><path
+         d="m -169.05124,350.03433 0,0.49218 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76016,-0.0474 1.1211,-0.14219 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30782 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16225,-0.98984 -0.46485,-1.31796 -0.29896,-0.32812 -0.69635,-0.49219 -1.19218,-0.49219 -0.56147,0 -1.01173,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4539"
+         inkscape:connector-curvature="0" /><path
+         d="m -159.42624,347.45855 0,0.94062 c -0.28438,-0.15677 -0.57058,-0.27343 -0.8586,-0.35 -0.28437,-0.0802 -0.57239,-0.12031 -0.86406,-0.12031 -0.6526,0 -1.15938,0.20782 -1.52031,0.62344 -0.36094,0.41198 -0.54141,0.99167 -0.54141,1.73906 0,0.7474 0.18047,1.32891 0.54141,1.74453 0.36093,0.41198 0.86771,0.61797 1.52031,0.61797 0.29167,0 0.57969,-0.0383 0.86406,-0.11485 0.28802,-0.0802 0.57422,-0.19869 0.8586,-0.35547 l 0,0.92969 c -0.28074,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.9224,0 -1.65521,-0.28984 -2.19844,-0.86953 -0.54323,-0.57969 -0.81484,-1.36172 -0.81484,-2.34609 0,-0.99896 0.27343,-1.78463 0.82031,-2.35703 0.55052,-0.57239 1.30338,-0.85859 2.25859,-0.8586 0.30989,10e-6 0.6125,0.0328 0.90781,0.0984 0.29531,0.062 0.58151,0.15678 0.8586,0.28438"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4541"
+         inkscape:connector-curvature="0" /><path
+         d="m -155.29187,347.92886 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31068 0.46484,1.73359 0.31354,0.41927 0.74193,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -1e-5,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4543"
+         inkscape:connector-curvature="0" /><path
+         d="m -150.81843,344.83901 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4545"
+         inkscape:connector-curvature="0" /><path
+         d="m -145.33874,347.92886 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41927 0.74192,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27421,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63984 m 0,-0.85313 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.0026 -0.24974,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06171,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49584,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4547"
+         inkscape:connector-curvature="0" /><path
+         d="m -137.31609,348.16401 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14218 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,0 -1.00626,0.18594 -1.3125,0.55781 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17681,0.0201 0.2789,0.0383 l 0.005,1.03359"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4549"
+         inkscape:connector-curvature="0" /><path
+         d="m -136.17859,351.95933 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40235 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4551"
+         inkscape:connector-curvature="0" /><path
+         d="m -125.15906,349.52026 c 0.23698,0.0802 0.46667,0.25157 0.68907,0.51407 0.22603,0.2625 0.45207,0.62344 0.67812,1.08281 l 1.1211,2.23125 -1.18672,0 -1.04453,-2.09453 c -0.2698,-0.54687 -0.5323,-0.90963 -0.7875,-1.08828 -0.25157,-0.17865 -0.5961,-0.26797 -1.0336,-0.26797 l -1.20312,0 0,3.45078 -1.10469,0 0,-8.16484 2.49375,0 c 0.93333,0 1.62968,0.19506 2.08906,0.58515 0.45937,0.39011 0.68906,0.97891 0.68906,1.76641 0,0.51407 -0.12031,0.94063 -0.36093,1.27968 -0.23699,0.33907 -0.58334,0.57423 -1.03907,0.70547 m -2.76718,-3.4289 0,2.89843 1.38906,0 c 0.53229,10e-6 0.93333,-0.12213 1.20312,-0.3664 0.27344,-0.24791 0.41015,-0.61067 0.41016,-1.08828 -1e-5,-0.4776 -0.13672,-0.83671 -0.41016,-1.07735 -0.26979,-0.24426 -0.67083,-0.3664 -1.20312,-0.3664 l -1.38906,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4553"
+         inkscape:connector-curvature="0" /><path
+         d="m -116.54031,350.03433 0,0.49218 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30782 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16224,-0.98984 -0.46484,-1.31796 -0.29896,-0.32812 -0.69636,-0.49219 -1.19219,-0.49219 -0.56146,0 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4555"
+         inkscape:connector-curvature="0" /><path
+         d="m -110.84734,348.15308 0,-3.31407 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.6362 -0.8039,0.81484 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46303,-0.59062 -0.69454,-1.36718 -0.69453,-2.32968 -1e-5,-0.9625 0.2315,-1.73906 0.69453,-2.32969 0.46666,-0.59062 1.07005,-0.88593 1.81015,-0.88594 0.45208,10e-6 0.83854,0.0893 1.15938,0.26797 0.32447,0.17501 0.59244,0.4448 0.8039,0.80938 m -3.4289,2.13828 c 0,0.7401 0.1513,1.32161 0.4539,1.74453 0.30625,0.41927 0.72552,0.62891 1.25782,0.6289 0.53228,1e-5 0.95155,-0.20963 1.25781,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31979 -0.45937,-1.73906 -0.30626,-0.42292 -0.72553,-0.63437 -1.25781,-0.63438 -0.5323,1e-5 -0.95157,0.21146 -1.25782,0.63438 -0.3026,0.41927 -0.4539,0.99896 -0.4539,1.73906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4557"
+         inkscape:connector-curvature="0" /><path
+         d="m -104.7114,349.83198 2.94765,0 0,0.89688 -2.94765,0 0,-0.89688"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4559"
+         inkscape:connector-curvature="0" /><path
+         d="m -92.674681,349.52026 c 0.236974,0.0802 0.466661,0.25157 0.689062,0.51407 0.226036,0.2625 0.452078,0.62344 0.678125,1.08281 l 1.121094,2.23125 -1.186719,0 -1.044531,-2.09453 c -0.269797,-0.54687 -0.532296,-0.90963 -0.7875,-1.08828 -0.251567,-0.17865 -0.596098,-0.26797 -1.033594,-0.26797 l -1.203125,0 0,3.45078 -1.104687,0 0,-8.16484 2.49375,0 c 0.933329,0 1.629682,0.19506 2.089062,0.58515 0.459369,0.39011 0.689056,0.97891 0.689063,1.76641 -7e-6,0.51407 -0.120319,0.94063 -0.360938,1.27968 -0.236985,0.33907 -0.583338,0.57423 -1.039062,0.70547 m -2.767188,-3.4289 0,2.89843 1.389063,0 c 0.532287,10e-6 0.933329,-0.12213 1.203125,-0.3664 0.273432,-0.24791 0.410151,-0.61067 0.410156,-1.08828 -5e-6,-0.4776 -0.136724,-0.83671 -0.410156,-1.07735 -0.269796,-0.24426 -0.670838,-0.3664 -1.203125,-0.3664 l -1.389063,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4561"
+         inkscape:connector-curvature="0" /><path
+         d="m -88.895775,351.95933 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4563"
+         inkscape:connector-curvature="0" /><path
+         d="m -84.274686,352.4187 3.855469,0 0,0.92969 -5.184375,0 0,-0.92969 c 0.41927,-0.43385 0.989842,-1.01536 1.711719,-1.74453 0.725517,-0.73281 1.181246,-1.20494 1.367187,-1.41641 0.353642,-0.39739 0.599735,-0.7328 0.738282,-1.00625 0.142182,-0.27707 0.213276,-0.54869 0.213281,-0.81484 -5e-6,-0.43385 -0.15313,-0.78749 -0.459375,-1.06094 -0.302608,-0.27343 -0.698181,-0.41015 -1.186719,-0.41015 -0.346357,0 -0.712763,0.0602 -1.099219,0.18047 -0.382814,0.12031 -0.79297,0.30261 -1.230468,0.54687 l 0,-1.11562 c 0.44479,-0.17864 0.860414,-0.31354 1.246875,-0.40469 0.386455,-0.0911 0.740101,-0.13671 1.060937,-0.13672 0.845829,1e-5 1.520308,0.21147 2.023437,0.63437 0.50312,0.42293 0.754682,0.98803 0.754688,1.69532 -6e-6,0.33542 -0.06381,0.65443 -0.191406,0.95703 -0.123964,0.29896 -0.351829,0.65261 -0.683594,1.06093 -0.09115,0.10574 -0.380994,0.41199 -0.869531,0.91875 -0.488546,0.50313 -1.177607,1.2086 -2.067188,2.11641"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4565"
+         inkscape:connector-curvature="0" /><path
+         d="m -78.084055,345.18355 4.336719,0 0,0.92968 -3.325,0 0,2.00157 c 0.160414,-0.0547 0.320831,-0.0948 0.48125,-0.12032 0.160414,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,10e-6 1.633329,0.24975 2.165625,0.74922 0.532286,0.49948 0.798431,1.17579 0.798438,2.02891 -7e-6,0.87865 -0.273444,1.56224 -0.820313,2.05078 -0.54688,0.48489 -1.317973,0.72734 -2.313281,0.72734 -0.342711,0 -0.692711,-0.0292 -1.05,-0.0875 -0.353648,-0.0583 -0.720053,-0.14583 -1.099219,-0.2625 l 0,-1.11015 c 0.328124,0.17864 0.667186,0.31172 1.017188,0.39921 0.349997,0.0875 0.720049,0.13126 1.110156,0.13125 0.630725,1e-5 1.130204,-0.16588 1.498437,-0.49765 0.368225,-0.33177 0.552339,-0.78203 0.552344,-1.35078 -5e-6,-0.56875 -0.184119,-1.01901 -0.552344,-1.35078 -0.368233,-0.33177 -0.867712,-0.49766 -1.498437,-0.49766 -0.295315,0 -0.590628,0.0328 -0.885938,0.0984 -0.291668,0.0656 -0.590626,0.16771 -0.896875,0.30625 l 0,-4.10156"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4567"
+         inkscape:connector-curvature="0" /><path
+         d="m -70.952814,345.18355 4.336719,0 0,0.92968 -3.325,0 0,2.00157 c 0.160414,-0.0547 0.320831,-0.0948 0.48125,-0.12032 0.160414,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,10e-6 1.633328,0.24975 2.165625,0.74922 0.532286,0.49948 0.798431,1.17579 0.798437,2.02891 -6e-6,0.87865 -0.273443,1.56224 -0.820312,2.05078 -0.54688,0.48489 -1.317973,0.72734 -2.313281,0.72734 -0.342711,0 -0.692711,-0.0292 -1.05,-0.0875 -0.353648,-0.0583 -0.720054,-0.14583 -1.099219,-0.2625 l 0,-1.11015 c 0.328124,0.17864 0.667186,0.31172 1.017187,0.39921 0.349998,0.0875 0.72005,0.13126 1.110157,0.13125 0.630725,1e-5 1.130204,-0.16588 1.498437,-0.49765 0.368225,-0.33177 0.552339,-0.78203 0.552344,-1.35078 -5e-6,-0.56875 -0.184119,-1.01901 -0.552344,-1.35078 -0.368233,-0.33177 -0.867712,-0.49766 -1.498437,-0.49766 -0.295315,0 -0.590628,0.0328 -0.885938,0.0984 -0.291668,0.0656 -0.590626,0.16771 -0.896875,0.30625 l 0,-4.10156"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4569"
+         inkscape:connector-curvature="0" /><path
+         d="m -54.798117,352.18354 0,-2.19296 -1.804688,0 0,-0.90782 2.898438,0 0,3.50547 c -0.42657,0.30261 -0.896882,0.53229 -1.410938,0.68906 -0.514068,0.15313 -1.062765,0.22969 -1.646093,0.22969 -1.276045,0 -2.275003,-0.37187 -2.996875,-1.11562 -0.71823,-0.7474 -1.077345,-1.78646 -1.077344,-3.11719 -10e-7,-1.33437 0.359114,-2.37343 1.077344,-3.11719 0.721872,-0.74739 1.72083,-1.12108 2.996875,-1.12109 0.532286,1e-5 1.037233,0.0656 1.514843,0.19687 0.481244,0.13126 0.924212,0.32449 1.328907,0.57969 l 0,1.17578 c -0.408341,-0.34634 -0.842195,-0.60702 -1.301563,-0.78203 -0.459381,-0.17499 -0.942453,-0.26249 -1.449219,-0.2625 -0.998962,1e-5 -1.750003,0.27891 -2.253125,0.83672 -0.499481,0.55782 -0.74922,1.38907 -0.749218,2.49375 -2e-6,1.10104 0.249737,1.93047 0.749218,2.48828 0.503122,0.55781 1.254163,0.83672 2.253125,0.83672 0.390099,0 0.738276,-0.0328 1.044532,-0.0984 0.306243,-0.0693 0.581504,-0.175 0.825781,-0.31719"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4571"
+         inkscape:connector-curvature="0" /><path
+         d="m -51.467651,351.95933 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4573"
+         inkscape:connector-curvature="0" /><path
+         d="m -45.435617,345.91089 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55781 -0.426565,1.39818 -0.426563,2.52109 -2e-6,1.11927 0.142186,1.95964 0.426563,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144015,-1.96328 -0.432031,-2.52109 -0.284379,-0.56145 -0.712764,-0.84218 -1.285156,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094531,1.08828 0.48489,0.72188 0.727337,1.77188 0.727344,3.15 -7e-6,1.37448 -0.242454,2.42448 -0.727344,3.15 -0.481255,0.72188 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.77552 -0.721875,-3.15 -10e-7,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184893,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4575"
+         inkscape:connector-curvature="0" /><path
+         d="m -36.094998,349.44917 0,2.99141 1.771875,0 c 0.594266,0 1.033588,-0.12214 1.317968,-0.36641 0.288016,-0.24792 0.432026,-0.62526 0.432032,-1.13203 -6e-6,-0.51042 -0.144016,-0.88594 -0.432032,-1.12656 -0.28438,-0.24427 -0.723702,-0.36641 -1.317968,-0.36641 l -1.771875,0 m 0,-3.35781 0,2.46094 1.635156,0 c 0.539579,0 0.94062,-0.10026 1.203125,-0.30079 0.266141,-0.20416 0.399213,-0.51405 0.399219,-0.92968 -6e-6,-0.41198 -0.133078,-0.72005 -0.399219,-0.92422 -0.262505,-0.20416 -0.663546,-0.30625 -1.203125,-0.30625 l -1.635156,0 m -1.104688,-0.90781 2.821875,0 c 0.842183,0 1.491141,0.175 1.946875,0.525 0.455723,0.35 0.683587,0.84766 0.683594,1.49296 -7e-6,0.49949 -0.116673,0.89688 -0.35,1.19219 -0.233339,0.29532 -0.576047,0.47943 -1.028125,0.55234 0.543223,0.11668 0.964317,0.36095 1.263281,0.73282 0.302598,0.36823 0.4539,0.82943 0.453906,1.38359 -6e-6,0.72917 -0.247923,1.29245 -0.74375,1.68984 -0.495838,0.3974 -1.201307,0.5961 -2.116406,0.5961 l -2.93125,0 0,-8.16484"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4577"
+         inkscape:connector-curvature="0" /><path
+         d="m -29.308273,351.95933 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4579"
+         inkscape:connector-curvature="0" /><path
+         d="m -23.276239,345.91089 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55781 -0.426565,1.39818 -0.426563,2.52109 -2e-6,1.11927 0.142186,1.95964 0.426563,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144015,-1.96328 -0.432031,-2.52109 -0.284379,-0.56145 -0.712764,-0.84218 -1.285156,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094531,1.08828 0.48489,0.72188 0.727337,1.77188 0.727344,3.15 -7e-6,1.37448 -0.242454,2.42448 -0.727344,3.15 -0.481255,0.72188 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.77552 -0.721875,-3.15 -1e-6,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184893,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4581"
+         inkscape:connector-curvature="0" /><path
+         d="m -198.20515,358.89152 0,1.07734 c -0.41927,-0.20051 -0.81485,-0.34999 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14765 -0.60157,0 -1.06641,0.11667 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99531 0,0.36094 0.10755,0.63438 0.32266,0.82031 0.21874,0.1823 0.63072,0.32995 1.23593,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43386 1.82109,0.83125 0.39375,0.39375 0.59062,0.9224 0.59063,1.58594 -1e-5,0.79114 -0.26615,1.39088 -0.79844,1.79921 -0.52865,0.40834 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21692 -1.35078,-0.38828 l 0,-1.1375 c 0.44843,0.25157 0.88775,0.44115 1.31796,0.56875 0.43021,0.12761 0.85313,0.19141 1.26875,0.19141 0.63073,0 1.11745,-0.12396 1.46016,-0.37188 0.3427,-0.24791 0.51406,-0.60156 0.51406,-1.06093 0,-0.40104 -0.12396,-0.71458 -0.37187,-0.94063 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.50859 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.7711 -0.36823,-0.34999 -0.55235,-0.83671 -0.55235,-1.46015 0,-0.72187 0.25339,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21224,-0.62343 2.10547,-0.62344 0.38281,1e-5 0.77291,0.0346 1.17031,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31172"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4583"
+         inkscape:connector-curvature="0" /><path
+         d="m -195.03874,358.92433 0,1.73906 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c 0,0.49948 0.0674,0.82032 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29532,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4585"
+         inkscape:connector-curvature="0" /><path
+         d="m -188.08796,361.60402 c -0.11303,-0.0656 -0.23698,-0.11302 -0.37188,-0.14219 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,1e-5 -1.00625,0.18594 -1.3125,0.55781 -0.3026,0.36824 -0.4539,0.8987 -0.4539,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18228 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22968,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.0336"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4587"
+         inkscape:connector-curvature="0" /><path
+         d="m -184.87781,361.36886 c -0.53958,1e-5 -0.96614,0.21146 -1.27968,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41928 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96068,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42655 -0.73828,-0.63983 -1.27422,-0.63984 m 0,-0.85313 c 0.875,10e-6 1.56224,0.28439 2.06172,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87864,0 -1.56771,-0.28437 -2.06718,-0.85312 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4589"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.43171,358.27902 1.01172,0 0,5.02578 3.00234,-2.64141 1.28516,0 -3.24844,2.86563 3.38516,3.25937 -1.3125,0 -3.11172,-2.99141 0,2.99141 -1.01172,0 0,-8.50937"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4591"
+         inkscape:connector-curvature="0" /><path
+         d="m -169.05124,363.47433 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62343,1.58593 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76016,-0.0474 1.1211,-0.14219 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26616 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56147,1e-5 -1.01173,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4593"
+         inkscape:connector-curvature="0" /><path
+         d="m -164.41921,360.66339 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18671,0 1.25782,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4595"
+         inkscape:connector-curvature="0" /><path
+         d="m -149.42937,363.47433 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62344,1.58593 0.37551,0.36094 0.89687,0.54141 1.56406,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26616 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4597"
+         inkscape:connector-curvature="0" /><path
+         d="m -147.77781,360.66339 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27421 -1.00625,0 0,-1.27421"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4599"
+         inkscape:connector-curvature="0" /><path
+         d="m -140.64109,363.6548 c 0,-0.72917 -0.1513,-1.29427 -0.4539,-1.69532 -0.29897,-0.40103 -0.72006,-0.60155 -1.26328,-0.60156 -0.53959,1e-5 -0.96068,0.20053 -1.26329,0.60156 -0.29896,0.40105 -0.44843,0.96615 -0.44843,1.69532 0,0.72552 0.14947,1.2888 0.44843,1.68984 0.30261,0.40104 0.7237,0.60156 1.26329,0.60156 0.54322,0 0.96431,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96432 0.4539,-1.68984 m 1.00625,2.37343 c 0,1.04271 -0.23151,1.81745 -0.69453,2.32422 -0.46302,0.51042 -1.17214,0.76563 -2.12734,0.76563 -0.35365,0 -0.68724,-0.0274 -1.00078,-0.082 -0.31355,-0.051 -0.61797,-0.13125 -0.91328,-0.24063 l 0,-0.9789 c 0.29531,0.16041 0.58697,0.2789 0.875,0.35546 0.28801,0.0766 0.5815,0.11485 0.88046,0.11485 0.6599,0 1.15391,-0.17318 1.48204,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49218,-1.5586 l 0,-0.49765 c -0.20781,0.36094 -0.47396,0.63073 -0.79843,0.80937 -0.32449,0.17865 -0.71277,0.26797 -1.16485,0.26797 -0.75104,0 -1.35625,-0.2862 -1.81562,-0.85859 -0.45938,-0.5724 -0.68907,-1.33073 -0.68907,-2.275 0,-0.94792 0.22969,-1.70807 0.68907,-2.28047 0.45937,-0.57239 1.06458,-0.85859 1.81562,-0.8586 0.45208,10e-6 0.84036,0.0893 1.16485,0.26797 0.32447,0.17866 0.59062,0.44845 0.79843,0.80938 l 0,-0.92969 1.00625,0 0,5.36484"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4601"
+         inkscape:connector-curvature="0" /><path
+         d="m -132.47078,363.09152 0,3.69687 -1.00625,0 0,-3.66406 c 0,-0.57968 -0.11302,-1.01354 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43204 -0.54323,10e-6 -0.97162,0.17319 -1.28515,0.51954 -0.31355,0.34635 -0.47032,0.81849 -0.47032,1.4164 l 0,3.46172 -1.01172,0 0,-8.50937 1.01172,0 0,3.33593 c 0.24063,-0.36822 0.52318,-0.64348 0.84766,-0.82578 0.32812,-0.18228 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.07371 0.5414,1.91954"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4603"
+         inkscape:connector-curvature="0" /><path
+         d="m -129.4575,358.92433 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82032 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.31251,-0.14401 -1.60782,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4605"
+         inkscape:connector-curvature="0" /><path
+         d="m -125.7989,365.39933 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40235 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4607"
+         inkscape:connector-curvature="0" /><path
+         d="m -116.20124,359.35089 c -0.56876,1e-5 -0.99714,0.28074 -1.28516,0.84219 -0.28438,0.55782 -0.42656,1.39818 -0.42656,2.52109 0,1.11928 0.14218,1.95964 0.42656,2.5211 0.28802,0.55781 0.7164,0.83672 1.28516,0.83671 0.57239,1e-5 1.00077,-0.2789 1.28515,-0.83671 0.28802,-0.56146 0.43203,-1.40182 0.43204,-2.5211 -1e-5,-1.12291 -0.14402,-1.96327 -0.43204,-2.52109 -0.28438,-0.56145 -0.71276,-0.84218 -1.28515,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61327,0.36277 2.09453,1.08828 0.48489,0.72188 0.72734,1.77188 0.72734,3.15 0,1.37448 -0.24245,2.42448 -0.72734,3.15 -0.48126,0.72188 -1.17943,1.08281 -2.09453,1.08281 -0.91511,0 -1.61511,-0.36093 -2.1,-1.08281 -0.48125,-0.72552 -0.72188,-1.77552 -0.72188,-3.15 0,-1.37812 0.24063,-2.42812 0.72188,-3.15 0.48489,-0.72551 1.18489,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4609"
+         inkscape:connector-curvature="0" /><path
+         d="m -111.43249,365.39933 1.1539,0 0,1.38906 -1.1539,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4611"
+         inkscape:connector-curvature="0" /><path
+         d="m -105.50437,359.35089 c -0.56875,1e-5 -0.99713,0.28074 -1.28515,0.84219 -0.28438,0.55782 -0.42657,1.39818 -0.42656,2.52109 -10e-6,1.11928 0.14218,1.95964 0.42656,2.5211 0.28802,0.55781 0.7164,0.83672 1.28515,0.83671 0.5724,1e-5 1.00078,-0.2789 1.28516,-0.83671 0.28802,-0.56146 0.43203,-1.40182 0.43203,-2.5211 0,-1.12291 -0.14401,-1.96327 -0.43203,-2.52109 -0.28438,-0.56145 -0.71276,-0.84218 -1.28516,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61328,0.36277 2.09454,1.08828 0.48489,0.72188 0.72733,1.77188 0.72734,3.15 -1e-5,1.37448 -0.24245,2.42448 -0.72734,3.15 -0.48126,0.72188 -1.17944,1.08281 -2.09454,1.08281 -0.9151,0 -1.6151,-0.36093 -2.1,-1.08281 -0.48125,-0.72552 -0.72187,-1.77552 -0.72187,-3.15 0,-1.37812 0.24062,-2.42812 0.72187,-3.15 0.4849,-0.72551 1.1849,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4613"
+         inkscape:connector-curvature="0" /><path
+         d="m -100.54421,365.8587 1.804687,0 0,-6.2289 -1.963277,0.39375 0,-1.00625 1.952339,-0.39375 1.104688,0 0,7.23515 1.804687,0 0,0.92969 -4.703124,0 0,-0.92969"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4615"
+         inkscape:connector-curvature="0" /><path
+         d="m -88.977806,361.83917 c 0.251556,-0.45208 0.552337,-0.78567 0.902344,-1.00078 0.349992,-0.2151 0.761971,-0.32265 1.235937,-0.32266 0.638012,10e-6 1.130199,0.22423 1.476562,0.67266 0.346345,0.4448 0.519522,1.07917 0.519532,1.90313 l 0,3.69687 -1.011719,0 0,-3.66406 c -9e-6,-0.58698 -0.103915,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951562,-0.42657 -0.521362,10e-6 -0.93334,0.17319 -1.235938,0.51954 -0.30261,0.34635 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311718,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42657 -0.514066,10e-6 -0.922399,0.17501 -1.225,0.525 -0.302607,0.34636 -0.453909,0.81668 -0.453907,1.41094 l 0,3.46172 -1.011718,0 0,-6.125 1.011718,0 0,0.95156 c 0.229686,-0.37551 0.504946,-0.65259 0.825782,-0.83125 0.32083,-0.17864 0.701819,-0.26796 1.142968,-0.26797 0.444788,10e-6 0.822131,0.11303 1.132032,0.33907 0.313536,0.22604 0.545046,0.55417 0.694531,0.98437"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4617"
+         inkscape:connector-curvature="0" /><path
+         d="m -78.06218,361.83917 c 0.251557,-0.45208 0.552338,-0.78567 0.902344,-1.00078 0.349993,-0.2151 0.761972,-0.32265 1.235938,-0.32266 0.638012,10e-6 1.130199,0.22423 1.476562,0.67266 0.346344,0.4448 0.519521,1.07917 0.519531,1.90313 l 0,3.69687 -1.011718,0 0,-3.66406 c -9e-6,-0.58698 -0.103916,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951563,-0.42657 -0.521361,10e-6 -0.93334,0.17319 -1.235937,0.51954 -0.30261,0.34635 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311719,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42657 -0.514066,10e-6 -0.922398,0.17501 -1.225,0.525 -0.302606,0.34636 -0.453908,0.81668 -0.453906,1.41094 l 0,3.46172 -1.011719,0 0,-6.125 1.011719,0 0,0.95156 c 0.229685,-0.37551 0.504945,-0.65259 0.825781,-0.83125 0.32083,-0.17864 0.701819,-0.26796 1.142969,-0.26797 0.444787,10e-6 0.82213,0.11303 1.132031,0.33907 0.313536,0.22604 0.545046,0.55417 0.694531,0.98437"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4619"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:9.60000038px"
+       id="text4841-4"><path
+         d="m -204.2325,201.04194 6.90703,0 0,0.92969 -2.89844,0 0,7.23516 -1.11016,0 0,-7.23516 -2.89843,0 0,-0.92969"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4622"
+         inkscape:connector-curvature="0" /><path
+         d="m -195.8161,203.78726 c -0.53958,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31067 0.46485,1.73359 0.31353,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99896 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -1e-5,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4624"
+         inkscape:connector-curvature="0" /><path
+         d="m -181.60829,201.67085 0,1.16484 c -0.37188,-0.34634 -0.76927,-0.6052 -1.19218,-0.77656 -0.41928,-0.17135 -0.86589,-0.25702 -1.33985,-0.25703 -0.93333,1e-5 -1.64792,0.2862 -2.14375,0.85859 -0.49583,0.56876 -0.74375,1.39272 -0.74375,2.47188 0,1.07552 0.24792,1.89948 0.74375,2.47187 0.49583,0.56875 1.21042,0.85313 2.14375,0.85313 0.47396,0 0.92057,-0.0857 1.33985,-0.25703 0.42291,-0.17136 0.8203,-0.43021 1.19218,-0.77657 l 0,1.15391 c -0.38646,0.2625 -0.79662,0.45938 -1.23046,0.59063 -0.43022,0.13125 -0.88595,0.19687 -1.36719,0.19687 -1.23594,0 -2.20938,-0.37734 -2.92031,-1.13203 -0.71094,-0.75833 -1.06641,-1.79192 -1.06641,-3.10078 0,-1.3125 0.35547,-2.34609 1.06641,-3.10078 0.71093,-0.75833 1.68437,-1.13749 2.92031,-1.1375 0.48853,10e-6 0.94791,0.0656 1.37812,0.19687 0.43385,0.12761 0.84036,0.32084 1.21953,0.57969"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4626"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.03875,206.7896 0,-3.70781 1.00625,0 0,3.66953 c -1e-5,0.57969 0.11301,1.01536 0.33906,1.30703 0.22604,0.28802 0.5651,0.43203 1.01719,0.43203 0.54322,0 0.97161,-0.17318 1.28515,-0.51953 0.31718,-0.34635 0.47578,-0.81849 0.47578,-1.41641 l 0,-3.47265 1.00625,0 0,6.125 -1.00625,0 0,-0.94063 c -0.24427,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.1211,0.26797 -0.70364,0 -1.23776,-0.21875 -1.60234,-0.65625 -0.36458,-0.4375 -0.54687,-1.07734 -0.54687,-1.91953"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4628"
+         inkscape:connector-curvature="0" /><path
+         d="m -171.83016,201.34272 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29531,-0.29167 -0.44297,-0.82032 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4630"
+         inkscape:connector-curvature="0" /><path
+         d="m -162.07938,206.12788 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47032,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41562 0,3.49453 -1.00625,0 0,-0.92969 c -0.22969,0.37188 -0.51589,0.64714 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35364 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.8203 -0.45937,-1.07187 -0.30261,-0.2552 -0.72917,-0.38281 -1.27969,-0.38281 -0.35,0 -0.69089,0.0419 -1.02266,0.12578 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31718 0.34635,-0.0729 0.68359,-0.10937 1.01172,-0.10938 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4632"
+         inkscape:connector-curvature="0" /><path
+         d="m -154.38485,201.04194 1.10469,0 0,7.23516 3.97578,0 0,0.92969 -5.08047,0 0,-8.16485"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4634"
+         inkscape:connector-curvature="0" /><path
+         d="m -148.19422,203.08179 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4636"
+         inkscape:connector-curvature="0" /><path
+         d="m -139.99657,205.50991 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22604,-0.28801 -0.56511,-0.43202 -1.01719,-0.43203 -0.54323,1e-5 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.8185 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36822 0.52317,-0.64348 0.84765,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,1e-5 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4638"
+         inkscape:connector-curvature="0" /><path
+         d="m -132.73953,205.89272 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76016,-0.0474 1.1211,-0.14219 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85313,-2.30782 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,1e-5 1.47473,0.26615 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55051 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49218 -0.56146,0 -1.01172,0.15859 -1.35078,0.47578 -0.33542,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4640"
+         inkscape:connector-curvature="0" /><path
+         d="m -130.83094,207.81772 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4642"
+         inkscape:connector-curvature="0" /><path
+         d="m -198.20594,214.74991 0,1.07735 c -0.41928,-0.20052 -0.81485,-0.34999 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11668 -1.39454,0.35 -0.32448,0.23334 -0.48672,0.56512 -0.48671,0.99532 -1e-5,0.36094 0.10755,0.63438 0.32265,0.82031 0.21875,0.1823 0.63073,0.32995 1.23594,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43386 1.82109,0.83125 0.39374,0.39375 0.59062,0.9224 0.59063,1.58593 -1e-5,0.79115 -0.26616,1.39089 -0.79844,1.79922 -0.52865,0.40834 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0438 -1.23594,-0.13125 -0.43385,-0.0875 -0.88411,-0.21692 -1.35078,-0.38828 l 0,-1.1375 c 0.44844,0.25157 0.88776,0.44115 1.31797,0.56875 0.43021,0.12761 0.85312,0.19141 1.26875,0.19141 0.63073,0 1.11744,-0.12396 1.46016,-0.37188 0.3427,-0.24791 0.51405,-0.60156 0.51406,-1.06093 -1e-5,-0.40104 -0.12396,-0.71458 -0.37188,-0.94063 -0.24427,-0.22604 -0.64714,-0.39557 -1.20859,-0.50859 l -0.67266,-0.13125 c -0.82396,-0.16406 -1.42005,-0.42109 -1.78828,-0.7711 -0.36823,-0.34999 -0.55234,-0.83671 -0.55234,-1.46015 0,-0.72187 0.25338,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21223,-0.62343 2.10546,-0.62344 0.38281,1e-5 0.77292,0.0346 1.17032,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31171"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4644"
+         inkscape:connector-curvature="0" /><path
+         d="m -195.03954,214.78273 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60782,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44296,-1.58594 l 0,-3.325 -0.73829,0 0,-0.78203 0.73829,0 0,-1.73906 1.01171,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4646"
+         inkscape:connector-curvature="0" /><path
+         d="m -188.08875,217.46241 c -0.11303,-0.0656 -0.23699,-0.11301 -0.37188,-0.14218 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.59141 l 0,3.22656 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82579,-0.82578 0.33906,-0.18228 0.75103,-0.27343 1.23593,-0.27344 0.0693,1e-5 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4648"
+         inkscape:connector-curvature="0" /><path
+         d="m -184.8786,217.22726 c -0.53958,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31068 0.46485,1.73359 0.31353,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -1e-5,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4650"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.4325,214.13741 1.01171,0 0,5.02579 3.00235,-2.64141 1.28515,0 -3.24843,2.86562 3.38515,3.25938 -1.3125,0 -3.11172,-2.99141 0,2.99141 -1.01171,0 0,-8.50938"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4652"
+         inkscape:connector-curvature="0" /><path
+         d="m -169.05204,219.33273 0,0.49218 -4.62656,0 c 0.0437,0.69272 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76015,-0.0474 1.1211,-0.14219 0.36457,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.7974 0.80938,-2.38438 0.54322,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,1e-5 1.47473,0.26616 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16224,-0.98983 -0.46484,-1.31796 -0.29896,-0.32812 -0.69636,-0.49219 -1.19219,-0.49219 -0.56146,0 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4654"
+         inkscape:connector-curvature="0" /><path
+         d="m -159.42703,216.75695 0,0.94062 c -0.28439,-0.15676 -0.57058,-0.27343 -0.8586,-0.35 -0.28438,-0.0802 -0.5724,-0.12031 -0.86406,-0.12031 -0.65261,0 -1.15938,0.20782 -1.52031,0.62344 -0.36094,0.41198 -0.54141,0.99167 -0.54141,1.73906 0,0.7474 0.18047,1.32891 0.54141,1.74453 0.36093,0.41198 0.8677,0.61797 1.52031,0.61797 0.29166,0 0.57968,-0.0383 0.86406,-0.11485 0.28802,-0.0802 0.57421,-0.19869 0.8586,-0.35546 l 0,0.92968 c -0.28074,0.13125 -0.57241,0.22969 -0.875,0.29532 -0.29897,0.0656 -0.61798,0.0984 -0.95704,0.0984 -0.92239,0 -1.65521,-0.28984 -2.19843,-0.86953 -0.54323,-0.57968 -0.81485,-1.36171 -0.81485,-2.34609 0,-0.99896 0.27344,-1.78463 0.82032,-2.35703 0.55051,-0.57239 1.30338,-0.85859 2.25859,-0.8586 0.30989,1e-5 0.61249,0.0328 0.90781,0.0984 0.29531,0.062 0.58151,0.15678 0.8586,0.28438"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4656"
+         inkscape:connector-curvature="0" /><path
+         d="m -155.29266,217.22726 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41927 0.74193,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27422,-0.63438 0.31353,-0.42291 0.4703,-0.99895 0.47031,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.87499,1e-5 1.56223,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74921,2.3625 0,1.0026 -0.24974,1.7901 -0.74921,2.3625 -0.49949,0.56875 -1.18673,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4658"
+         inkscape:connector-curvature="0" /><path
+         d="m -150.81923,214.13741 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4660"
+         inkscape:connector-curvature="0" /><path
+         d="m -145.33954,217.22726 c -0.53958,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31068 0.46485,1.73359 0.31354,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -10e-6,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4662"
+         inkscape:connector-curvature="0" /><path
+         d="m -137.31688,217.46241 c -0.11303,-0.0656 -0.23699,-0.11301 -0.37188,-0.14218 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.3026,0.36823 -0.45391,0.8987 -0.4539,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18228 0.75104,-0.27343 1.23594,-0.27344 0.0693,1e-5 0.14582,0.005 0.22968,0.0164 0.0838,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4664"
+         inkscape:connector-curvature="0" /><path
+         d="m -136.17938,221.25773 1.1539,0 0,1.38906 -1.1539,0 0,-1.38906 m 0,-4.40235 1.1539,0 0,1.38907 -1.1539,0 0,-1.38907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4666"
+         inkscape:connector-curvature="0" /><path
+         d="m -127.92704,218.74757 0,2.99141 1.77188,0 c 0.59426,0 1.03359,-0.12214 1.31797,-0.36641 0.28801,-0.24791 0.43202,-0.62526 0.43203,-1.13203 -1e-5,-0.51041 -0.14402,-0.88593 -0.43203,-1.12656 -0.28438,-0.24427 -0.72371,-0.36641 -1.31797,-0.36641 l -1.77188,0 m 0,-3.35781 0,2.46094 1.63516,0 c 0.53958,0 0.94062,-0.10026 1.20312,-0.30079 0.26614,-0.20416 0.39922,-0.51405 0.39922,-0.92968 0,-0.41198 -0.13308,-0.72005 -0.39922,-0.92422 -0.2625,-0.20416 -0.66354,-0.30624 -1.20312,-0.30625 l -1.63516,0 m -1.10468,-0.90781 2.82187,0 c 0.84218,0 1.49114,0.175 1.94688,0.525 0.45572,0.35 0.68358,0.84766 0.68359,1.49296 -1e-5,0.49949 -0.11667,0.89688 -0.35,1.19219 -0.23334,0.29532 -0.57605,0.47943 -1.02813,0.55235 0.54323,0.11667 0.96432,0.36094 1.26329,0.73281 0.30259,0.36823 0.45389,0.82943 0.4539,1.38359 -1e-5,0.72917 -0.24792,1.29245 -0.74375,1.68985 -0.49584,0.39739 -1.20131,0.59609 -2.1164,0.59609 l -2.93125,0 0,-8.16484"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4668"
+         inkscape:connector-curvature="0" /><path
+         d="m -121.39735,214.13741 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4670"
+         inkscape:connector-curvature="0" /><path
+         d="m -118.395,220.2296 0,-3.70781 1.00625,0 0,3.66953 c 0,0.57969 0.11302,1.01537 0.33906,1.30703 0.22604,0.28802 0.5651,0.43203 1.01719,0.43203 0.54322,0 0.97161,-0.17317 1.28515,-0.51953 0.31719,-0.34635 0.47578,-0.81849 0.47578,-1.4164 l 0,-3.47266 1.00625,0 0,6.125 -1.00625,0 0,-0.94063 c -0.24427,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.12109,0.26797 -0.70365,0 -1.23777,-0.21875 -1.60235,-0.65625 -0.36458,-0.4375 -0.54687,-1.07734 -0.54687,-1.91953"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4672"
+         inkscape:connector-curvature="0" /><path
+         d="m -105.94266,219.33273 0,0.49218 -4.62656,0 c 0.0438,0.69272 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.54141 1.56406,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30781 0,-1.0026 0.26979,-1.7974 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,1e-5 1.47474,0.26616 1.95235,0.79844 0.48124,0.52865 0.72186,1.2487 0.72187,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16224,-0.98983 -0.46484,-1.31796 -0.29897,-0.32812 -0.69636,-0.49219 -1.19219,-0.49219 -0.56146,0 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4674"
+         inkscape:connector-curvature="0" /><path
+         d="m -101.23407,219.13038 2.947656,0 0,0.89688 -2.947656,0 0,-0.89688"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4676"
+         inkscape:connector-curvature="0" /><path
+         d="m -89.197348,218.81866 c 0.236974,0.0802 0.466661,0.25157 0.689062,0.51407 0.226036,0.2625 0.452078,0.62344 0.678125,1.08281 l 1.121094,2.23125 -1.186719,0 -1.044531,-2.09453 c -0.269796,-0.54687 -0.532296,-0.90963 -0.7875,-1.08828 -0.251567,-0.17865 -0.596097,-0.26797 -1.033594,-0.26797 l -1.203125,0 0,3.45078 -1.104687,0 0,-8.16484 2.49375,0 c 0.933329,0 1.629682,0.19506 2.089062,0.58515 0.459369,0.39011 0.689056,0.97892 0.689063,1.76641 -7e-6,0.51407 -0.120319,0.94063 -0.360938,1.27969 -0.236985,0.33906 -0.583338,0.57422 -1.039062,0.70546 m -2.767188,-3.4289 0,2.89844 1.389063,0 c 0.532287,0 0.933329,-0.12214 1.203125,-0.36641 0.273432,-0.24791 0.410151,-0.61067 0.410156,-1.08828 -5e-6,-0.4776 -0.136724,-0.83671 -0.410156,-1.07735 -0.269796,-0.24426 -0.670838,-0.36639 -1.203125,-0.3664 l -1.389063,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4678"
+         inkscape:connector-curvature="0" /><path
+         d="m -85.418442,221.25773 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4680"
+         inkscape:connector-curvature="0" /><path
+         d="m -79.386415,215.20929 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55782 -0.426565,1.39818 -0.426563,2.52109 -2e-6,1.11927 0.142186,1.95964 0.426563,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144015,-1.96327 -0.432031,-2.52109 -0.284379,-0.56145 -0.712764,-0.84218 -1.285156,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094531,1.08828 0.48489,0.72188 0.727337,1.77188 0.727344,3.15 -7e-6,1.37448 -0.242454,2.42448 -0.727344,3.15 -0.481255,0.72188 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.77552 -0.721875,-3.15 -10e-7,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184893,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4682"
+         inkscape:connector-curvature="0" /><path
+         d="m -65.583289,221.48195 0,-2.19297 -1.804687,0 0,-0.90782 2.898437,0 0,3.50547 c -0.42657,0.30261 -0.896882,0.5323 -1.410937,0.68907 -0.514069,0.15312 -1.062766,0.22968 -1.646094,0.22968 -1.276045,0 -2.275002,-0.37187 -2.996875,-1.11562 -0.71823,-0.7474 -1.077344,-1.78646 -1.077344,-3.11719 0,-1.33437 0.359114,-2.37343 1.077344,-3.11719 0.721873,-0.74738 1.72083,-1.12108 2.996875,-1.12109 0.532287,1e-5 1.037234,0.0656 1.514844,0.19687 0.481243,0.13126 0.924211,0.32449 1.328906,0.57969 l 0,1.17578 c -0.40834,-0.34634 -0.842194,-0.60702 -1.301562,-0.78203 -0.459381,-0.17499 -0.942454,-0.26249 -1.449219,-0.2625 -0.998962,1e-5 -1.750003,0.27892 -2.253125,0.83672 -0.499481,0.55782 -0.749221,1.38907 -0.749219,2.49375 -2e-6,1.10105 0.249738,1.93047 0.749219,2.48828 0.503122,0.55782 1.254163,0.83672 2.253125,0.83672 0.390099,0 0.738276,-0.0328 1.044531,-0.0984 0.306244,-0.0693 0.581504,-0.175 0.825781,-0.31718"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4684"
+         inkscape:connector-curvature="0" /><path
+         d="m -62.252823,221.25773 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4686"
+         inkscape:connector-curvature="0" /><path
+         d="m -56.220789,215.20929 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55782 -0.426564,1.39818 -0.426562,2.52109 -2e-6,1.11927 0.142185,1.95964 0.426562,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285157,-0.83672 0.288015,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144016,-1.96327 -0.432031,-2.52109 -0.28438,-0.56145 -0.712765,-0.84218 -1.285157,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094532,1.08828 0.484889,0.72188 0.727337,1.77188 0.727343,3.15 -6e-6,1.37448 -0.242454,2.42448 -0.727343,3.15 -0.481256,0.72188 -1.179432,1.08281 -2.094532,1.08281 -0.915106,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721875,-1.77552 -0.721875,-3.15 0,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184894,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4688"
+         inkscape:connector-curvature="0" /><path
+         d="m -46.88017,218.74757 0,2.99141 1.771875,0 c 0.594267,0 1.033589,-0.12214 1.317969,-0.36641 0.288015,-0.24791 0.432025,-0.62526 0.432031,-1.13203 -6e-6,-0.51041 -0.144016,-0.88593 -0.432031,-1.12656 -0.28438,-0.24427 -0.723702,-0.36641 -1.317969,-0.36641 l -1.771875,0 m 0,-3.35781 0,2.46094 1.635157,0 c 0.539578,0 0.94062,-0.10026 1.203124,-0.30079 0.266141,-0.20416 0.399214,-0.51405 0.399219,-0.92968 -5e-6,-0.41198 -0.133078,-0.72005 -0.399219,-0.92422 -0.262504,-0.20416 -0.663546,-0.30624 -1.203124,-0.30625 l -1.635157,0 m -1.104687,-0.90781 2.821875,0 c 0.842182,0 1.49114,0.175 1.946875,0.525 0.455723,0.35 0.683587,0.84766 0.683593,1.49296 -6e-6,0.49949 -0.116673,0.89688 -0.35,1.19219 -0.233339,0.29532 -0.576047,0.47943 -1.028125,0.55235 0.543224,0.11667 0.964317,0.36094 1.263282,0.73281 0.302597,0.36823 0.453899,0.82943 0.453906,1.38359 -7e-6,0.72917 -0.247923,1.29245 -0.74375,1.68985 -0.495839,0.39739 -1.201307,0.59609 -2.116406,0.59609 l -2.93125,0 0,-8.16484"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4690"
+         inkscape:connector-curvature="0" /><path
+         d="m -40.093445,221.25773 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4692"
+         inkscape:connector-curvature="0" /><path
+         d="m -35.472348,221.7171 3.855469,0 0,0.92969 -5.184375,0 0,-0.92969 c 0.419269,-0.43385 0.989842,-1.01536 1.711718,-1.74453 0.725518,-0.73281 1.181247,-1.20494 1.367188,-1.41641 0.353641,-0.39739 0.599735,-0.7328 0.738281,-1.00625 0.142183,-0.27707 0.213277,-0.54869 0.213281,-0.81484 -4e-6,-0.43385 -0.153129,-0.78749 -0.459375,-1.06094 -0.302608,-0.27343 -0.69818,-0.41015 -1.186718,-0.41015 -0.346357,0 -0.712763,0.0602 -1.099219,0.18047 -0.382814,0.12032 -0.79297,0.30261 -1.230469,0.54687 l 0,-1.11562 c 0.444791,-0.17864 0.860415,-0.31354 1.246875,-0.40469 0.386456,-0.0911 0.740101,-0.13671 1.060938,-0.13672 0.845829,1e-5 1.520307,0.21147 2.023437,0.63437 0.503119,0.42293 0.754682,0.98803 0.754688,1.69532 -6e-6,0.33542 -0.06381,0.65443 -0.191407,0.95703 -0.123964,0.29896 -0.351828,0.65261 -0.683593,1.06094 -0.09115,0.10573 -0.380995,0.41198 -0.869532,0.91875 -0.488545,0.50312 -1.177607,1.20859 -2.067187,2.1164"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4694"
+         inkscape:connector-curvature="0" /><path
+         d="m -29.281732,214.48195 4.336718,0 0,0.92968 -3.324999,0 0,2.00157 c 0.160414,-0.0547 0.32083,-0.0948 0.48125,-0.12032 0.160413,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,1e-5 1.633328,0.24975 2.165624,0.74922 0.532286,0.49949 0.798432,1.17579 0.798438,2.02891 -6e-6,0.87865 -0.273443,1.56224 -0.820313,2.05078 -0.546879,0.4849 -1.317972,0.72734 -2.313281,0.72734 -0.342711,0 -0.69271,-0.0292 -1.05,-0.0875 -0.353647,-0.0583 -0.720053,-0.14583 -1.099218,-0.2625 l 0,-1.11015 c 0.328123,0.17864 0.667186,0.31172 1.017187,0.39922 0.349998,0.0875 0.72005,0.13125 1.110156,0.13125 0.630726,0 1.130204,-0.16589 1.498438,-0.49766 0.368224,-0.33177 0.552338,-0.78203 0.552343,-1.35078 -5e-6,-0.56875 -0.184119,-1.01901 -0.552343,-1.35078 -0.368234,-0.33177 -0.867712,-0.49765 -1.498438,-0.49766 -0.295315,1e-5 -0.590627,0.0328 -0.885937,0.0984 -0.291669,0.0656 -0.590627,0.16771 -0.896875,0.30625 l 0,-4.10156"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4696"
+         inkscape:connector-curvature="0" /><path
+         d="m -22.150476,214.48195 4.336719,0 0,0.92968 -3.325,0 0,2.00157 c 0.160414,-0.0547 0.32083,-0.0948 0.48125,-0.12032 0.160413,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,1e-5 1.633328,0.24975 2.165625,0.74922 0.532285,0.49949 0.798431,1.17579 0.798437,2.02891 -6e-6,0.87865 -0.273443,1.56224 -0.820312,2.05078 -0.54688,0.4849 -1.317973,0.72734 -2.313282,0.72734 -0.342711,0 -0.69271,-0.0292 -1.05,-0.0875 -0.353647,-0.0583 -0.720053,-0.14583 -1.099218,-0.2625 l 0,-1.11015 c 0.328123,0.17864 0.667186,0.31172 1.017187,0.39922 0.349998,0.0875 0.72005,0.13125 1.110156,0.13125 0.630726,0 1.130205,-0.16589 1.498438,-0.49766 0.368224,-0.33177 0.552339,-0.78203 0.552344,-1.35078 -5e-6,-0.56875 -0.18412,-1.01901 -0.552344,-1.35078 -0.368233,-0.33177 -0.867712,-0.49765 -1.498438,-0.49766 -0.295315,1e-5 -0.590627,0.0328 -0.885937,0.0984 -0.291669,0.0656 -0.590627,0.16771 -0.896875,0.30625 l 0,-4.10156"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4698"
+         inkscape:connector-curvature="0" /><path
+         d="m -198.20594,228.18992 0,1.07734 c -0.41928,-0.20051 -0.81485,-0.34999 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14765 -0.60157,0 -1.06641,0.11667 -1.39454,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48671,0.99531 -1e-5,0.36094 0.10755,0.63438 0.32265,0.82031 0.21875,0.1823 0.63073,0.32995 1.23594,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43386 1.82109,0.83125 0.39374,0.39375 0.59062,0.9224 0.59063,1.58594 -1e-5,0.79114 -0.26616,1.39088 -0.79844,1.79922 -0.52865,0.40833 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23594,-0.13125 -0.43385,-0.0875 -0.88411,-0.21693 -1.35078,-0.38829 l 0,-1.1375 c 0.44844,0.25157 0.88776,0.44115 1.31797,0.56875 0.43021,0.12761 0.85312,0.19141 1.26875,0.19141 0.63073,0 1.11744,-0.12396 1.46016,-0.37187 0.3427,-0.24792 0.51405,-0.60157 0.51406,-1.06094 -1e-5,-0.40104 -0.12396,-0.71458 -0.37188,-0.94063 -0.24427,-0.22604 -0.64714,-0.39557 -1.20859,-0.50859 l -0.67266,-0.13125 c -0.82396,-0.16406 -1.42005,-0.42109 -1.78828,-0.77109 -0.36823,-0.35 -0.55234,-0.83672 -0.55234,-1.46016 0,-0.72187 0.25338,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21223,-0.62343 2.10546,-0.62344 0.38281,1e-5 0.77292,0.0346 1.17032,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31172"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4700"
+         inkscape:connector-curvature="0" /><path
+         d="m -195.03954,228.22273 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82032 0.20235,0.9625 0.13854,0.14219 0.41744,0.21329 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60782,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44296,-1.58594 l 0,-3.325 -0.73829,0 0,-0.78203 0.73829,0 0,-1.73906 1.01171,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4702"
+         inkscape:connector-curvature="0" /><path
+         d="m -188.08875,230.90242 c -0.11303,-0.0656 -0.23699,-0.11302 -0.37188,-0.14219 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,1e-5 -1.00625,0.18594 -1.3125,0.55781 -0.30261,0.36824 -0.45391,0.89871 -0.45391,1.59141 l 0,3.22656 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.21146,-0.37186 0.48672,-0.64713 0.82579,-0.82578 0.33906,-0.18228 0.75103,-0.27343 1.23593,-0.27343 0.0693,0 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.0336"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4704"
+         inkscape:connector-curvature="0" /><path
+         d="m -184.8786,230.66726 c -0.53958,1e-5 -0.96615,0.21146 -1.27969,0.63438 -0.31354,0.41927 -0.47031,0.99531 -0.47031,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.73359 0.31353,0.41928 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72552 -0.15677,-1.29973 -0.47031,-1.72266 -0.31355,-0.42655 -0.73828,-0.63983 -1.27422,-0.63984 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35625 0.74922,2.3625 -1e-5,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49583,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85312 2.06719,-0.85312"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4706"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.4325,227.57742 1.01171,0 0,5.02578 3.00235,-2.64141 1.28515,0 -3.24843,2.86563 3.38515,3.25937 -1.3125,0 -3.11172,-2.9914 0,2.9914 -1.01171,0 0,-8.50937"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4708"
+         inkscape:connector-curvature="0" /><path
+         d="m -169.05204,232.77273 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62344,1.58593 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76015,-0.0474 1.1211,-0.14219 0.36457,-0.0948 0.72551,-0.23697 1.08281,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12032 -1.1539,0.12032 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38438 0.54322,-0.59062 1.27421,-0.88593 2.19297,-0.88593 0.82395,0 1.47473,0.26615 1.95234,0.79843 0.48124,0.52865 0.72187,1.24871 0.72187,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4710"
+         inkscape:connector-curvature="0" /><path
+         d="m -164.42,229.96179 1.00625,0 1.25781,4.77969 1.25234,-4.77969 1.18672,0 1.25781,4.77969 1.25235,-4.77969 1.00625,0 -1.60235,6.125 -1.18671,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4712"
+         inkscape:connector-curvature="0" /><path
+         d="m -149.43016,232.77273 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62343,1.58593 0.37552,0.36094 0.89687,0.54141 1.56407,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72551,-0.23697 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12032 -1.15391,0.12032 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88593 0.82395,0 1.47473,0.26615 1.95234,0.79843 0.48125,0.52865 0.72187,1.24871 0.72188,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4714"
+         inkscape:connector-curvature="0" /><path
+         d="m -147.7786,229.96179 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4716"
+         inkscape:connector-curvature="0" /><path
+         d="m -140.64188,232.9532 c -1e-5,-0.72916 -0.15131,-1.29427 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60157 -0.53958,1e-5 -0.96068,0.20053 -1.26328,0.60157 -0.29896,0.40104 -0.44844,0.96615 -0.44844,1.69531 0,0.72552 0.14948,1.2888 0.44844,1.68984 0.3026,0.40104 0.7237,0.60157 1.26328,0.60156 0.54323,1e-5 0.96432,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96432 0.45391,-1.68984 m 1.00625,2.37344 c -1e-5,1.0427 -0.23152,1.81744 -0.69453,2.32421 -0.46303,0.51042 -1.17214,0.76563 -2.12735,0.76563 -0.35364,0 -0.68724,-0.0274 -1.00078,-0.082 -0.31354,-0.0511 -0.61797,-0.13125 -0.91328,-0.24063 l 0,-0.9789 c 0.29531,0.16041 0.58698,0.2789 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17318 1.48203,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49219,-1.5586 l 0,-0.49765 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80937 -0.32448,0.17865 -0.71276,0.26797 -1.16484,0.26797 -0.75105,0 -1.35625,-0.2862 -1.81563,-0.85859 -0.45937,-0.5724 -0.68906,-1.33073 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06458,-0.85859 1.81563,-0.85859 0.45208,0 0.84036,0.0893 1.16484,0.26796 0.32448,0.17866 0.59062,0.44845 0.79844,0.80938 l 0,-0.92969 1.00625,0 0,5.36485"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4718"
+         inkscape:connector-curvature="0" /><path
+         d="m -132.47157,232.38992 0,3.69687 -1.00625,0 0,-3.66406 c -1e-5,-0.57968 -0.11303,-1.01354 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.4164 l 0,3.46172 -1.01172,0 0,-8.50937 1.01172,0 0,3.33593 c 0.24062,-0.36822 0.52317,-0.64348 0.84766,-0.82578 0.32812,-0.18228 0.70546,-0.27343 1.13203,-0.27343 0.70364,0 1.23593,0.21875 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4720"
+         inkscape:connector-curvature="0" /><path
+         d="m -129.45829,228.22273 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82032 0.20234,0.9625 0.13854,0.14219 0.41745,0.21329 0.83672,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4722"
+         inkscape:connector-curvature="0" /><path
+         d="m -125.79969,234.69773 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4724"
+         inkscape:connector-curvature="0" /><path
+         d="m -116.20204,228.64929 c -0.56875,1e-5 -0.99713,0.28074 -1.28515,0.84219 -0.28438,0.55782 -0.42657,1.39818 -0.42656,2.52109 -1e-5,1.11928 0.14218,1.95964 0.42656,2.5211 0.28802,0.55781 0.7164,0.83672 1.28515,0.83672 0.5724,0 1.00078,-0.27891 1.28516,-0.83672 0.28802,-0.56146 0.43203,-1.40182 0.43203,-2.5211 0,-1.12291 -0.14401,-1.96327 -0.43203,-2.52109 -0.28438,-0.56145 -0.71276,-0.84218 -1.28516,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61328,0.36277 2.09454,1.08828 0.48489,0.72188 0.72733,1.77188 0.72734,3.15 -1e-5,1.37449 -0.24245,2.42448 -0.72734,3.15 -0.48126,0.72188 -1.17944,1.08282 -2.09454,1.08282 -0.9151,0 -1.6151,-0.36094 -2.1,-1.08282 -0.48125,-0.72552 -0.72187,-1.77551 -0.72187,-3.15 0,-1.37812 0.24062,-2.42812 0.72187,-3.15 0.4849,-0.72551 1.1849,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4726"
+         inkscape:connector-curvature="0" /><path
+         d="m -111.43329,234.69773 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4728"
+         inkscape:connector-curvature="0" /><path
+         d="m -105.50516,228.64929 c -0.56875,1e-5 -0.99714,0.28074 -1.28516,0.84219 -0.28437,0.55782 -0.42656,1.39818 -0.42656,2.52109 0,1.11928 0.14219,1.95964 0.42656,2.5211 0.28802,0.55781 0.71641,0.83672 1.28516,0.83672 0.57239,0 1.00078,-0.27891 1.28516,-0.83672 0.28801,-0.56146 0.43202,-1.40182 0.43203,-2.5211 -1e-5,-1.12291 -0.14402,-1.96327 -0.43203,-2.52109 -0.28438,-0.56145 -0.71277,-0.84218 -1.28516,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61328,0.36277 2.09453,1.08828 0.48489,0.72188 0.72734,1.77188 0.72735,3.15 -1e-5,1.37449 -0.24246,2.42448 -0.72735,3.15 -0.48125,0.72188 -1.17943,1.08282 -2.09453,1.08282 -0.91511,0 -1.61511,-0.36094 -2.1,-1.08282 -0.48125,-0.72552 -0.72187,-1.77551 -0.72187,-3.15 0,-1.37812 0.24062,-2.42812 0.72187,-3.15 0.48489,-0.72551 1.18489,-1.08827 2.1,-1.08828"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4730"
+         inkscape:connector-curvature="0" /><path
+         d="m -100.545,235.1571 1.804683,0 0,-6.2289 -1.963283,0.39375 0,-1.00625 1.952346,-0.39375 1.104687,0 0,7.23515 1.804688,0 0,0.92969 -4.703121,0 0,-0.92969"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4732"
+         inkscape:connector-curvature="0" /><path
+         d="m -88.9786,231.13757 c 0.251557,-0.45207 0.552338,-0.78567 0.902344,-1.00078 0.349993,-0.2151 0.761972,-0.32265 1.235938,-0.32265 0.638012,0 1.130199,0.22422 1.476562,0.67265 0.346344,0.4448 0.519521,1.07917 0.519531,1.90313 l 0,3.69687 -1.011718,0 0,-3.66406 c -9e-6,-0.58698 -0.103916,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951563,-0.42656 -0.521361,0 -0.93334,0.17318 -1.235937,0.51953 -0.30261,0.34636 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311719,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.514066,0 -0.922398,0.175 -1.225,0.525 -0.302606,0.34635 -0.453908,0.81667 -0.453906,1.41093 l 0,3.46172 -1.011719,0 0,-6.125 1.011719,0 0,0.95156 c 0.229685,-0.37551 0.504945,-0.65259 0.825781,-0.83125 0.32083,-0.17864 0.70182,-0.26796 1.142969,-0.26796 0.444787,0 0.82213,0.11302 1.132031,0.33906 0.313536,0.22605 0.545047,0.55417 0.694531,0.98437"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4734"
+         inkscape:connector-curvature="0" /><path
+         d="m -78.062973,231.13757 c 0.251556,-0.45207 0.552337,-0.78567 0.902344,-1.00078 0.349993,-0.2151 0.761971,-0.32265 1.235937,-0.32265 0.638012,0 1.130199,0.22422 1.476563,0.67265 0.346344,0.4448 0.519521,1.07917 0.519531,1.90313 l 0,3.69687 -1.011719,0 0,-3.66406 c -9e-6,-0.58698 -0.103915,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951562,-0.42656 -0.521361,0 -0.93334,0.17318 -1.235938,0.51953 -0.30261,0.34636 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311718,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.514066,0 -0.922399,0.175 -1.225,0.525 -0.302607,0.34635 -0.453909,0.81667 -0.453907,1.41093 l 0,3.46172 -1.011718,0 0,-6.125 1.011718,0 0,0.95156 c 0.229686,-0.37551 0.504946,-0.65259 0.825782,-0.83125 0.32083,-0.17864 0.701819,-0.26796 1.142968,-0.26796 0.444788,0 0.822131,0.11302 1.132032,0.33906 0.313536,0.22605 0.545046,0.55417 0.694531,0.98437"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4736"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:9.60000038px"
+       id="text4851-7"><path
+         d="m -209.90514,80.585301 6.90703,0 0,0.929688 -2.89844,0 0,7.235156 -1.11015,0 0,-7.235156 -2.89844,0 0,-0.929688"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4739"
+         inkscape:connector-curvature="0" /><path
+         d="m -201.48874,83.330614 c -0.53958,5e-6 -0.96614,0.211463 -1.27968,0.634375 -0.31355,0.419275 -0.47032,0.995316 -0.47032,1.728125 0,0.732815 0.15495,1.310679 0.46485,1.733593 0.31354,0.419272 0.74192,0.628907 1.28515,0.628907 0.53594,0 0.96068,-0.211458 1.27422,-0.634375 0.31354,-0.422915 0.47031,-0.998956 0.47032,-1.728125 -1e-5,-0.725517 -0.15678,-1.299735 -0.47032,-1.722656 -0.31354,-0.426558 -0.73828,-0.639839 -1.27422,-0.639844 m 0,-0.853125 c 0.875,6e-6 1.56224,0.284381 2.06172,0.853125 0.49948,0.568755 0.74922,1.356254 0.74922,2.3625 0,1.002606 -0.24974,1.790105 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.853125 -2.06172,0.853125 -0.87864,0 -1.56771,-0.284375 -2.06718,-0.853125 -0.49584,-0.572395 -0.74375,-1.359894 -0.74375,-2.3625 0,-1.006246 0.24791,-1.793745 0.74375,-2.3625 0.49947,-0.568744 1.18854,-0.853119 2.06718,-0.853125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4741"
+         inkscape:connector-curvature="0" /><path
+         d="m -193.39499,80.585301 5.1625,0 0,0.929688 -4.05781,0 0,2.417187 3.88828,0 0,0.929688 -3.88828,0 0,2.958593 4.15625,0 0,0.929688 -5.26094,0 0,-8.164844"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4743"
+         inkscape:connector-curvature="0" /><path
+         d="m -181.25983,85.05327 0,3.696875 -1.00625,0 0,-3.664062 c 0,-0.579684 -0.11302,-1.013537 -0.33906,-1.301563 -0.22605,-0.288016 -0.56511,-0.432026 -1.01719,-0.432031 -0.54323,5e-6 -0.97162,0.173182 -1.28516,0.519531 -0.31354,0.346359 -0.47031,0.818494 -0.47031,1.416406 l 0,3.461719 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.24062,-0.368224 0.52318,-0.643484 0.84766,-0.825782 0.32812,-0.182285 0.70546,-0.273431 1.13203,-0.273437 0.70364,6e-6 1.23593,0.218756 1.59687,0.65625 0.36094,0.433859 0.5414,1.073702 0.54141,1.919531"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4745"
+         inkscape:connector-curvature="0" /><path
+         d="m -175.21139,85.616551 c -1e-5,-0.729163 -0.15131,-1.294266 -0.45391,-1.695312 -0.29896,-0.401037 -0.72005,-0.601557 -1.26328,-0.601563 -0.53959,6e-6 -0.96068,0.200526 -1.26328,0.601563 -0.29896,0.401046 -0.44844,0.966149 -0.44844,1.695312 0,0.725523 0.14948,1.288804 0.44844,1.689844 0.3026,0.401043 0.72369,0.601563 1.26328,0.601562 0.54323,10e-7 0.96432,-0.200519 1.26328,-0.601562 0.3026,-0.40104 0.4539,-0.964321 0.45391,-1.689844 m 1.00625,2.373438 c -1e-5,1.042708 -0.23152,1.817447 -0.69453,2.324218 -0.46303,0.510415 -1.17214,0.765623 -2.12735,0.765625 -0.35365,-2e-6 -0.68724,-0.02735 -1.00078,-0.08203 -0.31354,-0.05104 -0.61797,-0.131252 -0.91328,-0.240625 l 0,-0.978906 c 0.29531,0.160415 0.58698,0.278905 0.875,0.355469 0.28802,0.07656 0.58151,0.114842 0.88047,0.114843 0.65989,-10e-7 1.1539,-0.173178 1.48203,-0.519531 0.32812,-0.342709 0.49218,-0.862239 0.49219,-1.558594 l 0,-0.497656 c -0.20782,0.360938 -0.47396,0.63073 -0.79844,0.809375 -0.32448,0.178646 -0.71276,0.267969 -1.16484,0.267969 -0.75105,0 -1.35625,-0.286198 -1.81563,-0.858594 -0.45937,-0.572394 -0.68906,-1.330727 -0.68906,-2.275 0,-0.947912 0.22969,-1.708068 0.68906,-2.280468 0.45938,-0.57239 1.06458,-0.858588 1.81563,-0.858594 0.45208,6e-6 0.84036,0.08933 1.16484,0.267969 0.32448,0.178651 0.59062,0.448443 0.79844,0.809375 l 0,-0.929688 1.00625,0 0,5.364844"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4747"
+         inkscape:connector-curvature="0" /><path
+         d="m -168.58327,83.56577 c -0.11302,-0.06562 -0.23698,-0.113015 -0.37187,-0.142187 -0.13126,-0.03281 -0.27709,-0.04921 -0.4375,-0.04922 -0.56875,5e-6 -1.00625,0.185942 -1.3125,0.557812 -0.30261,0.368234 -0.45391,0.898702 -0.45391,1.591407 l 0,3.226562 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.825782 0.33906,-0.182285 0.75104,-0.273431 1.23594,-0.273437 0.0693,6e-6 0.14583,0.0055 0.22969,0.01641 0.0838,0.0073 0.17682,0.02006 0.2789,0.03828 l 0.005,1.033594"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4749"
+         inkscape:connector-curvature="0" /><path
+         d="m -164.73327,85.671239 c -0.81302,3e-6 -1.3763,0.09297 -1.68984,0.278906 -0.31355,0.18594 -0.47032,0.503127 -0.47031,0.951562 -1e-5,0.357294 0.11666,0.641668 0.35,0.853125 0.23697,0.207814 0.55781,0.31172 0.9625,0.311719 0.5578,10e-7 1.00442,-0.196874 1.33984,-0.590625 0.33906,-0.397394 0.50859,-0.924216 0.50859,-1.580468 l 0,-0.224219 -1.00078,0 m 2.00703,-0.415625 0,3.494531 -1.00625,0 0,-0.929688 c -0.22969,0.371876 -0.51589,0.647136 -0.85859,0.825782 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.353645 -0.55234,-0.82578 -0.55234,-1.416407 0,-0.68906 0.22968,-1.20859 0.68906,-1.558593 0.46302,-0.349997 1.15208,-0.524996 2.06719,-0.525 l 1.41093,0 0,-0.09844 c 0,-0.463016 -0.15313,-0.820307 -0.45937,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382812 -0.35,5e-6 -0.69089,0.04193 -1.02266,0.125781 -0.33177,0.08386 -0.65078,0.209641 -0.95703,0.377344 l 0,-0.929688 c 0.36823,-0.142181 0.72552,-0.24791 1.07188,-0.317187 0.34635,-0.07291 0.68359,-0.109369 1.01172,-0.109375 0.88593,6e-6 1.54765,0.229693 1.98515,0.689062 0.4375,0.45938 0.65625,1.155734 0.65625,2.089063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4751"
+         inkscape:connector-curvature="0" /><path
+         d="m -161.36999,82.625145 1.06641,0 1.91406,5.140625 1.91407,-5.140625 1.0664,0 -2.29687,6.125 -1.36719,0 -2.29688,-6.125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4753"
+         inkscape:connector-curvature="0" /><path
+         d="m -148.78092,85.436083 0,0.492187 -4.62657,0 c 0.0437,0.69271 0.25156,1.221356 0.62344,1.585937 0.37552,0.360939 0.89687,0.541407 1.56406,0.541407 0.38646,0 0.76016,-0.0474 1.1211,-0.142188 0.36458,-0.09479 0.72551,-0.236978 1.08281,-0.426562 l 0,0.951562 c -0.36094,0.153125 -0.73099,0.269792 -1.11016,0.35 -0.37917,0.08021 -0.7638,0.120313 -1.1539,0.120313 -0.97709,0 -1.75183,-0.284375 -2.32422,-0.853125 -0.56875,-0.568749 -0.85313,-1.338019 -0.85313,-2.307813 0,-1.0026 0.26979,-1.797391 0.80938,-2.384375 0.54323,-0.590619 1.27422,-0.885931 2.19297,-0.885937 0.82395,6e-6 1.47473,0.266152 1.95234,0.798437 0.48125,0.528651 0.72187,1.248702 0.72188,2.160157 m -1.00625,-0.295313 c -0.007,-0.550517 -0.16225,-0.989839 -0.46485,-1.317969 -0.29896,-0.328119 -0.69636,-0.492182 -1.19218,-0.492187 -0.56147,5e-6 -1.01173,0.158599 -1.35079,0.475781 -0.33541,0.317192 -0.52864,0.763806 -0.57968,1.339844 l 3.5875,-0.0055"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4755"
+         inkscape:connector-curvature="0" /><path
+         d="m -140.78014,85.671239 c -0.81302,3e-6 -1.3763,0.09297 -1.68984,0.278906 -0.31355,0.18594 -0.47032,0.503127 -0.47032,0.951562 0,0.357294 0.11667,0.641668 0.35,0.853125 0.23698,0.207814 0.55781,0.31172 0.9625,0.311719 0.55781,10e-7 1.00443,-0.196874 1.33985,-0.590625 0.33906,-0.397394 0.50859,-0.924216 0.50859,-1.580468 l 0,-0.224219 -1.00078,0 m 2.00703,-0.415625 0,3.494531 -1.00625,0 0,-0.929688 c -0.22969,0.371876 -0.51589,0.647136 -0.85859,0.825782 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.353645 -0.55235,-0.82578 -0.55235,-1.416407 0,-0.68906 0.22969,-1.20859 0.68907,-1.558593 0.46302,-0.349997 1.15208,-0.524996 2.06718,-0.525 l 1.41094,0 0,-0.09844 c 0,-0.463016 -0.15313,-0.820307 -0.45937,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382812 -0.35,5e-6 -0.69089,0.04193 -1.02266,0.125781 -0.33177,0.08386 -0.65078,0.209641 -0.95703,0.377344 l 0,-0.929688 c 0.36823,-0.142181 0.72552,-0.24791 1.07188,-0.317187 0.34635,-0.07291 0.68359,-0.109369 1.01172,-0.109375 0.88593,6e-6 1.54765,0.229693 1.98515,0.689062 0.4375,0.45938 0.65625,1.155734 0.65625,2.089063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4757"
+         inkscape:connector-curvature="0" /><path
+         d="m -131.60358,85.05327 0,3.696875 -1.00625,0 0,-3.664062 c -1e-5,-0.579684 -0.11303,-1.013537 -0.33907,-1.301563 -0.22604,-0.288016 -0.5651,-0.432026 -1.01718,-0.432031 -0.54324,5e-6 -0.97162,0.173182 -1.28516,0.519531 -0.31354,0.346359 -0.47031,0.818494 -0.47031,1.416406 l 0,3.461719 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.24062,-0.368224 0.52317,-0.643484 0.84765,-0.825782 0.32813,-0.182285 0.70547,-0.273431 1.13204,-0.273437 0.70364,6e-6 1.23593,0.218756 1.59687,0.65625 0.36093,0.433859 0.5414,1.073702 0.54141,1.919531"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4759"
+         inkscape:connector-curvature="0" /><path
+         d="m -123.24733,81.673583 -1.49844,4.063281 3.00235,0 -1.50391,-4.063281 m -0.62344,-1.088282 1.25235,0 3.11172,8.164844 -1.14844,0 -0.74375,-2.094531 -3.68047,0 -0.74375,2.094531 -1.16484,0 3.11718,-8.164844"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4761"
+         inkscape:connector-curvature="0" /><path
+         d="m -114.81452,83.56577 c -0.11302,-0.06562 -0.23698,-0.113015 -0.37187,-0.142187 -0.13126,-0.03281 -0.27709,-0.04921 -0.4375,-0.04922 -0.56876,5e-6 -1.00626,0.185942 -1.3125,0.557812 -0.30261,0.368234 -0.45391,0.898702 -0.45391,1.591407 l 0,3.226562 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.825782 0.33906,-0.182285 0.75104,-0.273431 1.23594,-0.273437 0.0693,6e-6 0.14583,0.0055 0.22969,0.01641 0.0838,0.0073 0.17682,0.02006 0.2789,0.03828 l 0.005,1.033594"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4763"
+         inkscape:connector-curvature="0" /><path
+         d="m -108.73873,85.436083 0,0.492187 -4.62657,0 c 0.0438,0.69271 0.25157,1.221356 0.62344,1.585937 0.37552,0.360939 0.89687,0.541407 1.56406,0.541407 0.38646,0 0.76016,-0.0474 1.1211,-0.142188 0.36458,-0.09479 0.72551,-0.236978 1.08281,-0.426562 l 0,0.951562 c -0.36094,0.153125 -0.73099,0.269792 -1.11016,0.35 -0.37917,0.08021 -0.7638,0.120313 -1.1539,0.120313 -0.97709,0 -1.75183,-0.284375 -2.32422,-0.853125 -0.56875,-0.568749 -0.85313,-1.338019 -0.85313,-2.307813 0,-1.0026 0.2698,-1.797391 0.80938,-2.384375 0.54323,-0.590619 1.27422,-0.885931 2.19297,-0.885937 0.82395,6e-6 1.47473,0.266152 1.95234,0.798437 0.48125,0.528651 0.72187,1.248702 0.72188,2.160157 m -1.00625,-0.295313 c -0.007,-0.550517 -0.16225,-0.989839 -0.46485,-1.317969 -0.29896,-0.328119 -0.69636,-0.492182 -1.19218,-0.492187 -0.56147,5e-6 -1.01173,0.158599 -1.35079,0.475781 -0.33541,0.317192 -0.52864,0.763806 -0.57968,1.339844 l 3.5875,-0.0055"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4765"
+         inkscape:connector-curvature="0" /><path
+         d="m -104.29264,85.671239 c -0.81303,3e-6 -1.37631,0.09297 -1.68985,0.278906 -0.31354,0.18594 -0.47031,0.503127 -0.47031,0.951562 0,0.357294 0.11666,0.641668 0.35,0.853125 0.23698,0.207814 0.55781,0.31172 0.9625,0.311719 0.55781,10e-7 1.00442,-0.196874 1.33984,-0.590625 0.33906,-0.397394 0.50859,-0.924216 0.5086,-1.580468 l 0,-0.224219 -1.00078,0 m 2.00703,-0.415625 0,3.494531 -1.00625,0 0,-0.929688 c -0.22969,0.371876 -0.51589,0.647136 -0.8586,0.825782 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62708,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.353645 -0.55234,-0.82578 -0.55234,-1.416407 0,-0.68906 0.22969,-1.20859 0.68906,-1.558593 0.46302,-0.349997 1.15208,-0.524996 2.06719,-0.525 l 1.41094,0 0,-0.09844 c -1e-5,-0.463016 -0.15313,-0.820307 -0.45938,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382812 -0.35,5e-6 -0.69088,0.04193 -1.02265,0.125781 -0.33177,0.08386 -0.65078,0.209641 -0.95703,0.377344 l 0,-0.929688 c 0.36823,-0.142181 0.72552,-0.24791 1.07187,-0.317187 0.34635,-0.07291 0.68359,-0.109369 1.01172,-0.109375 0.88593,6e-6 1.54765,0.229693 1.98516,0.689062 0.43749,0.45938 0.65624,1.155734 0.65625,2.089063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4767"
+         inkscape:connector-curvature="0" /><path
+         d="m -99.950455,87.361082 1.153906,0 0,1.389063 -1.153906,0 0,-1.389063 m 0,-4.402343 1.153906,0 0,1.389062 -1.153906,0 0,-1.389062"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4769"
+         inkscape:connector-curvature="0" /><path
+         d="m -208.77311,94.025304 4.69219,0 0,0.929687 -3.5875,0 0,2.40625 3.2375,0 0,0.929688 -3.2375,0 0,3.899221 -1.10469,0 0,-8.164846"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4771"
+         inkscape:connector-curvature="0" /><path
+         d="m -203.16217,96.065148 1.00625,0 0,6.125002 -1.00625,0 0,-6.125002 m 0,-2.384375 1.00625,0 0,1.274218 -1.00625,0 0,-1.274218"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4773"
+         inkscape:connector-curvature="0" /><path
+         d="m -200.04499,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4775"
+         inkscape:connector-curvature="0" /><path
+         d="m -196.93874,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4777"
+         inkscape:connector-curvature="0" /><path
+         d="m -184.10905,94.65421 0,1.164844 c -0.37188,-0.346348 -0.76928,-0.605202 -1.19219,-0.776563 -0.41927,-0.171347 -0.86589,-0.257024 -1.33984,-0.257031 -0.93334,7e-6 -1.64792,0.286205 -2.14375,0.858594 -0.49584,0.568756 -0.74375,1.392713 -0.74375,2.471875 0,1.075524 0.24791,1.899481 0.74375,2.471871 0.49583,0.56875 1.21041,0.85313 2.14375,0.85313 0.47395,0 0.92057,-0.0857 1.33984,-0.25703 0.42291,-0.17136 0.82031,-0.43021 1.19219,-0.77657 l 0,1.15391 c -0.38646,0.2625 -0.79662,0.45938 -1.23047,0.59063 -0.43021,0.13125 -0.88594,0.19687 -1.36719,0.19687 -1.23594,0 -2.20937,-0.37734 -2.92031,-1.13203 -0.71094,-0.75833 -1.0664,-1.791924 -1.0664,-3.100781 0,-1.312495 0.35546,-2.346088 1.0664,-3.100781 0.71094,-0.758326 1.68437,-1.137492 2.92031,-1.1375 0.48854,8e-6 0.94792,0.06563 1.37813,0.196875 0.43385,0.127612 0.84036,0.320841 1.21953,0.579687"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4779"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.06218,96.770616 c -0.53958,6e-6 -0.96614,0.211464 -1.27968,0.634375 -0.31355,0.419275 -0.47032,0.995317 -0.47032,1.728125 0,0.732815 0.15495,1.310684 0.46485,1.733594 0.31354,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96068,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.998955 0.47032,-1.728124 -10e-6,-0.725517 -0.15678,-1.299735 -0.47032,-1.722656 -0.31354,-0.426557 -0.73828,-0.639838 -1.27422,-0.639844 m 0,-0.853125 c 0.875,7e-6 1.56224,0.284381 2.06172,0.853125 0.49948,0.568755 0.74922,1.356254 0.74922,2.3625 0,1.002604 -0.24974,1.790104 -0.74922,2.362504 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87864,0 -1.56771,-0.28437 -2.06718,-0.85312 -0.49584,-0.5724 -0.74375,-1.3599 -0.74375,-2.362504 0,-1.006246 0.24791,-1.793745 0.74375,-2.3625 0.49947,-0.568744 1.18854,-0.853118 2.06718,-0.853125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4781"
+         inkscape:connector-curvature="0" /><path
+         d="m -175.58874,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4783"
+         inkscape:connector-curvature="0" /><path
+         d="m -170.10905,96.770616 c -0.53959,6e-6 -0.96615,0.211464 -1.27969,0.634375 -0.31354,0.419275 -0.47031,0.995317 -0.47031,1.728125 0,0.732815 0.15495,1.310684 0.46484,1.733594 0.31354,0.41927 0.74193,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.998955 0.47031,-1.728124 0,-0.725517 -0.15677,-1.299735 -0.47031,-1.722656 -0.31355,-0.426557 -0.73829,-0.639838 -1.27422,-0.639844 m 0,-0.853125 c 0.875,7e-6 1.56223,0.284381 2.06172,0.853125 0.49947,0.568755 0.74921,1.356254 0.74922,2.3625 -1e-5,1.002604 -0.24975,1.790104 -0.74922,2.362504 -0.49949,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.362504 0,-1.006246 0.24792,-1.793745 0.74375,-2.3625 0.49948,-0.568744 1.18854,-0.853118 2.06719,-0.853125"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4785"
+         inkscape:connector-curvature="0" /><path
+         d="m -162.08639,97.005772 c -0.11303,-0.06562 -0.23699,-0.113015 -0.37188,-0.142187 -0.13125,-0.03281 -0.27709,-0.04921 -0.4375,-0.04922 -0.56875,6e-6 -1.00625,0.185943 -1.3125,0.557813 -0.30261,0.368233 -0.45391,0.898702 -0.45391,1.591406 l 0,3.226566 -1.01171,0 0,-6.125003 1.01171,0 0,0.951562 c 0.21146,-0.371869 0.48672,-0.64713 0.82579,-0.825781 0.33905,-0.182286 0.75103,-0.273431 1.23593,-0.273438 0.0693,7e-6 0.14583,0.0055 0.22969,0.01641 0.0838,0.0073 0.17682,0.02006 0.27891,0.03828 l 0.005,1.033593"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4787"
+         inkscape:connector-curvature="0" /><path
+         d="m -157.19733,100.80108 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.402339 1.15391,0 0,1.389063 -1.15391,0 0,-1.389063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4789"
+         inkscape:connector-curvature="0" /><path
+         d="m -148.95593,98.290929 0,2.991401 1.77188,0 c 0.59427,1e-5 1.03359,-0.12213 1.31797,-0.3664 0.28801,-0.24792 0.43202,-0.62526 0.43203,-1.132033 -10e-6,-0.510413 -0.14402,-0.885934 -0.43203,-1.126562 -0.28438,-0.244267 -0.7237,-0.366402 -1.31797,-0.366406 l -1.77188,0 m 0,-3.357813 0,2.460938 1.63516,0 c 0.53958,5e-6 0.94062,-0.100256 1.20313,-0.300782 0.26614,-0.204161 0.39921,-0.514056 0.39921,-0.929687 0,-0.411973 -0.13307,-0.720045 -0.39921,-0.924219 -0.26251,-0.204159 -0.66355,-0.306242 -1.20313,-0.30625 l -1.63516,0 m -1.10468,-0.907812 2.82187,0 c 0.84218,8e-6 1.49114,0.175008 1.94688,0.525 0.45572,0.350007 0.68358,0.847663 0.68359,1.492969 -1e-5,0.499484 -0.11667,0.89688 -0.35,1.192187 -0.23334,0.295317 -0.57605,0.479432 -1.02812,0.552344 0.54322,0.116671 0.96431,0.360941 1.26328,0.732812 0.30259,0.368233 0.4539,0.82943 0.4539,1.383594 0,0.72917 -0.24792,1.29245 -0.74375,1.68984 -0.49584,0.3974 -1.2013,0.5961 -2.1164,0.5961 l -2.93125,0 0,-8.164846"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4791"
+         inkscape:connector-curvature="0" /><path
+         d="m -142.42624,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4793"
+         inkscape:connector-curvature="0" /><path
+         d="m -136.5364,99.111241 c -0.81302,3e-6 -1.3763,0.09297 -1.68984,0.278906 -0.31354,0.185941 -0.47031,0.503128 -0.47031,0.951563 0,0.35729 0.11666,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.924218 0.5086,-1.58047 l 0,-0.224219 -1.00079,0 m 2.00704,-0.415625 0,3.494534 -1.00625,0 0,-0.92969 c -0.2297,0.37188 -0.51589,0.64714 -0.8586,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.35364 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.689055 0.22969,-1.208586 0.68906,-1.558589 0.46302,-0.349996 1.15208,-0.524996 2.06719,-0.525 l 1.41094,0 0,-0.09844 c -1e-5,-0.463017 -0.15313,-0.820308 -0.45938,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382813 -0.35,6e-6 -0.69088,0.04193 -1.02265,0.125781 -0.33178,0.08386 -0.65079,0.209641 -0.95703,0.377344 l 0,-0.929687 c 0.36822,-0.142182 0.72551,-0.247911 1.07187,-0.317188 0.34635,-0.07291 0.68359,-0.109368 1.01172,-0.109375 0.88593,7e-6 1.54765,0.229694 1.98516,0.689063 0.43749,0.45938 0.65624,1.155733 0.65625,2.089062"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4795"
+         inkscape:connector-curvature="0" /><path
+         d="m -128.04343,96.300304 0,0.940625 c -0.28438,-0.156766 -0.57057,-0.273433 -0.85859,-0.35 -0.28438,-0.0802 -0.5724,-0.120307 -0.86406,-0.120313 -0.65261,6e-6 -1.15938,0.207818 -1.52031,0.623438 -0.36094,0.411983 -0.54141,0.99167 -0.54141,1.739062 0,0.747398 0.18047,1.328904 0.54141,1.744534 0.36093,0.41198 0.8677,0.61797 1.52031,0.61797 0.29166,0 0.57968,-0.0383 0.86406,-0.11485 0.28802,-0.0802 0.57421,-0.19869 0.85859,-0.35547 l 0,0.92969 c -0.28073,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.92239,0 -1.65521,-0.28984 -2.19843,-0.86953 -0.54323,-0.57969 -0.81485,-1.36172 -0.81485,-2.346094 0,-0.998954 0.27344,-1.78463 0.82031,-2.357031 0.55052,-0.57239 1.30339,-0.858587 2.2586,-0.858594 0.30989,7e-6 0.61249,0.03282 0.90781,0.09844 0.29531,0.06199 0.58151,0.156777 0.85859,0.284375"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4797"
+         inkscape:connector-curvature="0" /><path
+         d="m -126.32077,93.680773 1.01172,0 0,5.025781 3.00234,-2.641406 1.28516,0 -3.24844,2.865624 3.38516,3.259378 -1.3125,0 -3.11172,-2.991409 0,2.991409 -1.01172,0 0,-8.509377"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4799"
+         inkscape:connector-curvature="0" /><path
+         d="m -116.72858,98.673741 2.94765,0 0,0.896875 -2.94765,0 0,-0.896875"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4801"
+         inkscape:connector-curvature="0" /><path
+         d="m -104.69186,98.362022 c 0.23697,0.08021 0.46666,0.251567 0.68906,0.514063 0.22604,0.262503 0.45208,0.62344 0.67812,1.082812 l 1.1211,2.231253 -1.18672,0 -1.04453,-2.09453 c -0.2698,-0.546876 -0.5323,-0.909636 -0.7875,-1.088285 -0.25157,-0.178643 -0.5961,-0.267965 -1.0336,-0.267969 l -1.20312,0 0,3.450784 -1.10469,0 0,-8.164846 2.49375,0 c 0.93333,8e-6 1.62968,0.19506 2.08906,0.585156 0.45937,0.390111 0.68906,0.978913 0.68907,1.766406 -1e-5,0.514068 -0.12032,0.94063 -0.36094,1.279688 -0.23699,0.339066 -0.58334,0.574222 -1.03906,0.705468 m -2.76719,-3.428906 0,2.898438 1.38906,0 c 0.53229,4e-6 0.93333,-0.122131 1.20313,-0.366407 0.27343,-0.247911 0.41015,-0.610671 0.41015,-1.088281 0,-0.477598 -0.13672,-0.836712 -0.41015,-1.077343 -0.2698,-0.244264 -0.67084,-0.366399 -1.20313,-0.366407 l -1.38906,0"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4803"
+         inkscape:connector-curvature="0" /><path
+         d="m -100.91296,100.80108 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.402339 1.15391,0 0,1.389063 -1.15391,0 0,-1.389063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4805"
+         inkscape:connector-curvature="0" /><path
+         d="m -94.880922,94.752648 c -0.568753,7e-6 -0.997138,0.280736 -1.285156,0.842187 -0.284377,0.557819 -0.426565,1.398182 -0.426563,2.521094 -2e-6,1.119273 0.142186,1.959641 0.426563,2.521091 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.401818 0.432031,-2.521091 -5e-6,-1.122912 -0.144015,-1.963275 -0.432031,-2.521094 -0.284379,-0.561451 -0.712764,-0.84218 -1.285156,-0.842187 m 0,-0.875 c 0.9151,8e-6 1.613276,0.362768 2.094531,1.088281 0.48489,0.721881 0.727338,1.77188 0.727344,3.15 -6e-6,1.374482 -0.242454,2.424481 -0.727344,3.150001 -0.481255,0.72187 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36094 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.775519 -0.721875,-3.150001 -10e-7,-1.37812 0.240624,-2.428119 0.721875,-3.15 0.484894,-0.725513 1.184893,-1.088273 2.1,-1.088281"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4807"
+         inkscape:connector-curvature="0" /><path
+         d="m -81.077803,101.0253 0,-2.192965 -1.804688,0 0,-0.907813 2.898438,0 0,3.505468 c -0.42657,0.30261 -0.896882,0.53229 -1.410938,0.68906 -0.514068,0.15313 -1.062765,0.22969 -1.646093,0.22969 -1.276045,0 -2.275003,-0.37187 -2.996875,-1.11562 -0.71823,-0.7474 -1.077345,-1.786459 -1.077344,-3.117191 -10e-7,-1.33437 0.359114,-2.373431 1.077344,-3.117188 0.721872,-0.747388 1.72083,-1.121085 2.996875,-1.121093 0.532286,8e-6 1.037233,0.06563 1.514843,0.196875 0.481244,0.131258 0.924212,0.324486 1.328907,0.579687 l 0,1.175781 c -0.408341,-0.346347 -0.842195,-0.607024 -1.301563,-0.782031 -0.459381,-0.174993 -0.942453,-0.262493 -1.449219,-0.2625 -0.998962,7e-6 -1.750003,0.278913 -2.253125,0.836719 -0.499481,0.557818 -0.74922,1.389067 -0.749218,2.49375 -2e-6,1.101044 0.249737,1.930471 0.749218,2.488281 0.503122,0.55781 1.254163,0.83672 2.253125,0.83672 0.390099,0 0.738276,-0.0328 1.044532,-0.0984 0.306243,-0.0693 0.581504,-0.175 0.825781,-0.31719"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4809"
+         inkscape:connector-curvature="0" /><path
+         d="m -77.74733,100.80108 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907 m 0,-4.402339 1.153906,0 0,1.389063 -1.153906,0 0,-1.389063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4811"
+         inkscape:connector-curvature="0" /><path
+         d="m -71.715295,94.752648 c -0.568753,7e-6 -0.997138,0.280736 -1.285157,0.842187 -0.284377,0.557819 -0.426564,1.398182 -0.426562,2.521094 -2e-6,1.119273 0.142185,1.959641 0.426562,2.521091 0.288019,0.55782 0.716404,0.83672 1.285157,0.83672 0.572391,0 1.000776,-0.2789 1.285156,-0.83672 0.288015,-0.56145 0.432026,-1.401818 0.432031,-2.521091 -5e-6,-1.122912 -0.144016,-1.963275 -0.432031,-2.521094 -0.28438,-0.561451 -0.712765,-0.84218 -1.285156,-0.842187 m 0,-0.875 c 0.915099,8e-6 1.613276,0.362768 2.094531,1.088281 0.484889,0.721881 0.727337,1.77188 0.727343,3.15 -6e-6,1.374482 -0.242454,2.424481 -0.727343,3.150001 -0.481255,0.72187 -1.179432,1.08281 -2.094531,1.08281 -0.915107,0 -1.615107,-0.36094 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.775519 -0.721875,-3.150001 -10e-7,-1.37812 0.240624,-2.428119 0.721875,-3.15 0.484893,-0.725513 1.184893,-1.088273 2.1,-1.088281"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4813"
+         inkscape:connector-curvature="0" /><path
+         d="m -62.374677,98.290929 0,2.991401 1.771875,0 c 0.594267,1e-5 1.033589,-0.12213 1.317969,-0.3664 0.288015,-0.24792 0.432026,-0.62526 0.432031,-1.132033 -5e-6,-0.510413 -0.144016,-0.885934 -0.432031,-1.126562 -0.28438,-0.244267 -0.723702,-0.366402 -1.317969,-0.366406 l -1.771875,0 m 0,-3.357813 0,2.460938 1.635157,0 c 0.539579,5e-6 0.94062,-0.100256 1.203125,-0.300782 0.26614,-0.204161 0.399213,-0.514056 0.399218,-0.929687 -5e-6,-0.411973 -0.133078,-0.720045 -0.399218,-0.924219 -0.262505,-0.204159 -0.663546,-0.306242 -1.203125,-0.30625 l -1.635157,0 m -1.104687,-0.907812 2.821875,0 c 0.842183,8e-6 1.49114,0.175008 1.946875,0.525 0.455723,0.350007 0.683587,0.847663 0.683594,1.492969 -7e-6,0.499484 -0.116673,0.89688 -0.35,1.192187 -0.23334,0.295317 -0.576048,0.479432 -1.028125,0.552344 0.543223,0.116671 0.964316,0.360941 1.263281,0.732812 0.302597,0.368233 0.453899,0.82943 0.453906,1.383594 -7e-6,0.72917 -0.247923,1.29245 -0.74375,1.68984 -0.495839,0.3974 -1.201307,0.5961 -2.116406,0.5961 l -2.93125,0 0,-8.164846"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4815"
+         inkscape:connector-curvature="0" /><path
+         d="m -55.587952,100.80108 1.153907,0 0,1.38907 -1.153907,0 0,-1.38907 m 0,-4.402339 1.153907,0 0,1.389063 -1.153907,0 0,-1.389063"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4817"
+         inkscape:connector-curvature="0" /><path
+         d="m -49.555933,94.752648 c -0.568753,7e-6 -0.997138,0.280736 -1.285156,0.842187 -0.284377,0.557819 -0.426564,1.398182 -0.426562,2.521094 -2e-6,1.119273 0.142185,1.959641 0.426562,2.521091 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285157,-0.83672 0.288015,-0.56145 0.432026,-1.401818 0.432031,-2.521091 -5e-6,-1.122912 -0.144016,-1.963275 -0.432031,-2.521094 -0.28438,-0.561451 -0.712765,-0.84218 -1.285157,-0.842187 m 0,-0.875 c 0.9151,8e-6 1.613276,0.362768 2.094532,1.088281 0.484889,0.721881 0.727337,1.77188 0.727343,3.15 -6e-6,1.374482 -0.242454,2.424481 -0.727343,3.150001 -0.481256,0.72187 -1.179432,1.08281 -2.094532,1.08281 -0.915106,0 -1.615106,-0.36094 -2.1,-1.08281 -0.481251,-0.72552 -0.721875,-1.775519 -0.721875,-3.150001 0,-1.37812 0.240624,-2.428119 0.721875,-3.15 0.484894,-0.725513 1.184894,-1.088273 2.1,-1.088281"
+         style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+         id="path4819"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+       id="text4859-4"><path
+         d="m -392.7157,-1.0205482 c -0.73281,1.25782411 -1.27696,2.5019636 -1.63242,3.7324222 -0.35547,1.2304766 -0.53321,2.4773504 -0.5332,3.7406252 -10e-6,1.2632854 0.17773,2.515628 0.5332,3.7570318 0.36093,1.235938 0.90507,2.480077 1.63242,3.732422 l -1.3125,0 c -0.82031,-1.285157 -1.43555,-2.548437 -1.8457,-3.789844 -0.40469,-1.2414037 -0.60703,-2.4746056 -0.60703,-3.6996098 0,-1.2195248 0.20234,-2.447258 0.60703,-3.6832034 0.40468,-1.2359273 1.01992,-2.49920742 1.8457,-3.789844 l 1.3125,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4822"
+         inkscape:connector-curvature="0" /><path
+         d="m -389.27859,10.332578 2.70703,0 0,-9.3433604 -2.94492,0.590625 0,-1.50937506 2.92852,-0.59062504 1.65703,0 0,10.8527355 2.70703,0 0,1.394531 -7.05469,0 0,-1.394531"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4824"
+         inkscape:connector-curvature="0" /><path
+         d="m -379.31999,-1.0205482 1.3125,0 c 0.82031,1.29063658 1.43281,2.5539167 1.8375,3.789844 0.41015,1.2359454 0.61523,2.4636786 0.61523,3.6832034 0,1.2250042 -0.20508,2.4582061 -0.61523,3.6996098 -0.40469,1.241407 -1.01719,2.504687 -1.8375,3.789844 l -1.3125,0 c 0.72734,-1.252345 1.26874,-2.496484 1.62422,-3.732422 0.36093,-1.2414038 0.5414,-2.4937464 0.5414,-3.7570318 0,-1.2632748 -0.18047,-2.5101486 -0.5414,-3.7406252 -0.35548,-1.2304586 -0.89688,-2.47459809 -1.62422,-3.7324222"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4826"
+         inkscape:connector-curvature="0" /><path
+         d="m -367.10554,-0.5201575 2.46914,0 3.12539,8.3343756 3.1418,-8.3343756 2.46914,0 0,12.2472665 -1.61602,0 0,-10.75429765 -3.1582,8.40000055 -1.66523,0 -3.15821,-8.40000055 0,10.75429765 -1.60781,0 0,-12.2472665"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4828"
+         inkscape:connector-curvature="0" /><path
+         d="m -348.49265,7.1087493 c -1.21954,4.6e-6 -2.06446,0.1394576 -2.53477,0.4183594 -0.47031,0.2789102 -0.70547,0.754691 -0.70546,1.4273438 -10e-6,0.5359398 0.17499,0.9625019 0.525,1.2796875 0.35546,0.31172 0.83671,0.467579 1.44375,0.467578 0.83671,1e-6 1.50663,-0.295311 2.00976,-0.8859373 0.50859,-0.5960913 0.76289,-1.3863249 0.76289,-2.3707033 l 0,-0.3363281 -1.50117,0 m 3.01055,-0.6234376 0,5.2417973 -1.50938,0 0,-1.394531 c -0.34454,0.557813 -0.77383,0.970703 -1.28789,1.238672 -0.51407,0.262499 -1.14297,0.393749 -1.88672,0.39375 -0.94063,-10e-7 -1.68984,-0.2625 -2.24765,-0.7875 -0.55235,-0.530468 -0.82852,-1.2386706 -0.82852,-2.12461 0,-1.0335901 0.34453,-1.8128862 1.03359,-2.3378908 0.69453,-0.5249945 1.72813,-0.7874942 3.10079,-0.7875 l 2.1164,0 0,-0.1476563 c 0,-0.6945246 -0.22969,-1.2304616 -0.68906,-1.6078126 -0.45391,-0.3828046 -1.09376,-0.5742106 -1.91953,-0.5742188 -0.52501,8.2e-6 -1.03633,0.062899 -1.53399,0.1886719 -0.49765,0.1257891 -0.97617,0.3144608 -1.43554,0.5660157 l 0,-1.3945314 c 0.55234,-0.2132722 1.08828,-0.3718659 1.60781,-0.4757812 0.51953,-0.1093657 1.02539,-0.1640532 1.51758,-0.1640626 1.3289,9.4e-6 2.32148,0.3445404 2.97773,1.0335939 0.65624,0.6890702 0.98437,1.7336005 0.98438,3.1335939"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4830"
+         inkscape:connector-curvature="0" /><path
+         d="m -342.42233,-1.0369544 1.51757,0 0,7.5386724 4.50352,-3.9621097 1.92773,0 -4.87265,4.2984378 5.07773,4.8890629 -1.96875,0 -4.66758,-4.4871097 0,4.4871097 -1.51757,0 0,-12.7640634"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4832"
+         inkscape:connector-curvature="0" /><path
+         d="m -325.35163,6.7560149 0,0.7382813 -6.93985,0 c 0.0656,1.0390657 0.37734,1.8320337 0.93516,2.3789064 0.56328,0.5414074 1.34531,0.8121104 2.34609,0.8121094 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08828,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404687 -1.66523,0.525 -0.56876,0.120312 -1.14571,0.180468 -1.73086,0.180469 -1.46563,-10e-7 -2.62774,-0.426563 -3.48633,-1.279688 -0.85313,-0.8531232 -1.27969,-2.0070283 -1.27969,-3.461719 0,-1.5039003 0.40469,-2.6960867 1.21407,-3.5765627 0.81484,-0.8859286 1.91132,-1.328897 3.28945,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.08281,1.8730533 1.08282,3.2402346 m -1.50938,-0.4429688 c -0.0109,-0.8257751 -0.24336,-1.4847588 -0.69726,-1.9769533 -0.44845,-0.4921796 -1.04454,-0.7382731 -1.78828,-0.7382813 -0.8422,8.2e-6 -1.51759,0.2378986 -2.02618,0.713672 -0.50312,0.4757882 -0.79297,1.1457094 -0.86953,2.0097657 l 5.38125,-0.0082"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4834"
+         inkscape:connector-curvature="0" /><path
+         d="m -315.80319,0.84156134 0,4.60195346 2.08359,0 c 0.77109,6.3e-6 1.36718,-0.1996029 1.78828,-0.5988282 0.42109,-0.3992115 0.63163,-0.967961 0.63164,-1.7062501 -10e-6,-0.7328032 -0.21055,-1.2988183 -0.63164,-1.698047 -0.4211,-0.3992081 -1.01719,-0.59881728 -1.78828,-0.59882816 l -2.08359,0 m -1.65704,-1.36171884 3.74063,0 c 1.37265,1.224e-5 2.40898,0.3117307 3.10898,0.93515631 0.70546,0.61797949 1.0582,1.52579119 1.05821,2.72343769 -10e-6,1.2086012 -0.35275,2.1218816 -1.05821,2.7398439 -0.7,0.6179741 -1.73633,0.9269581 -3.10898,0.9269532 l -2.08359,0 0,4.9218754 -1.65704,0 0,-12.2472665"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4836"
+         inkscape:connector-curvature="0" /><path
+         d="m -302.34186,3.9505459 c -0.16954,-0.09843 -0.35548,-0.1695233 -0.55781,-0.2132812 -0.19689,-0.049211 -0.41564,-0.07382 -0.65625,-0.073828 -0.85313,8.1e-6 -1.50938,0.2789141 -1.96875,0.8367188 -0.45391,0.5523505 -0.68087,1.3480529 -0.68086,2.3871096 l 0,4.8398439 -1.51758,0 0,-9.1875005 1.51758,0 0,1.4273439 c 0.31718,-0.5578042 0.73007,-0.9706945 1.23867,-1.238672 0.50859,-0.2734282 1.12655,-0.4101469 1.8539,-0.4101563 0.1039,9.4e-6 0.21875,0.00821 0.34454,0.024609 0.12577,0.010947 0.26522,0.030088 0.41835,0.057422 l 0.008,1.5503907"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4838"
+         inkscape:connector-curvature="0" /><path
+         d="m -297.54303,3.5978115 c -0.80938,8.2e-6 -1.44923,0.3171954 -1.91954,0.9515626 -0.47031,0.6289128 -0.70547,1.4929745 -0.70546,2.5921877 -1e-5,1.0992223 0.23241,1.9660183 0.69726,2.6003908 0.47031,0.6289074 1.11289,0.9433604 1.92774,0.9433594 0.8039,1e-6 1.44101,-0.317186 1.91132,-0.9515626 0.47031,-0.6343724 0.70547,-1.4984341 0.70547,-2.5921876 0,-1.0882757 -0.23516,-1.949603 -0.70547,-2.5839846 -0.47031,-0.639836 -1.10742,-0.9597575 -1.91132,-0.9597657 m 0,-1.2796876 c 1.31249,9.4e-6 2.34335,0.4265716 3.09257,1.2796876 0.74921,0.8531324 1.12382,2.0343813 1.12383,3.5437503 -10e-6,1.5039094 -0.37462,2.6851583 -1.12383,3.5437502 -0.74922,0.853125 -1.78008,1.279687 -3.09257,1.279688 -1.31798,-10e-7 -2.35157,-0.426563 -3.10079,-1.279688 -0.74375,-0.8585919 -1.11562,-2.0398408 -1.11562,-3.5437502 0,-1.509369 0.37187,-2.6906179 1.11562,-3.5437503 0.74922,-0.853116 1.78281,-1.2796782 3.10079,-1.2796876"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4840"
+         inkscape:connector-curvature="0" /><path
+         d="m -284.77077,3.9341397 0,-4.9710941 1.50938,0 0,12.7640634 -1.50938,0 0,-1.378125 c -0.31719,0.546876 -0.71914,0.954297 -1.20586,1.222266 -0.48125,0.262499 -1.06094,0.393749 -1.73906,0.39375 -1.11016,-10e-7 -2.01524,-0.442969 -2.71523,-1.328907 -0.69454,-0.8859353 -1.0418,-2.050778 -1.0418,-3.4945312 0,-1.4437441 0.34726,-2.6085868 1.0418,-3.4945315 0.69999,-0.8859286 1.60507,-1.328897 2.71523,-1.3289064 0.67812,9.4e-6 1.25781,0.1339937 1.73906,0.4019532 0.48672,0.2625088 0.88867,0.6671959 1.20586,1.2140626 m -5.14336,3.2074221 c 0,1.1101598 0.22695,1.9824246 0.68086,2.616797 0.45937,0.6289072 1.08828,0.9433602 1.88672,0.9433592 0.79843,1e-6 1.42734,-0.314452 1.88672,-0.9433592 0.45937,-0.6343724 0.68906,-1.5066372 0.68906,-2.616797 0,-1.1101507 -0.22969,-1.9796811 -0.68906,-2.608594 -0.45938,-0.6343672 -1.08829,-0.9515544 -1.88672,-0.9515625 -0.79844,8.1e-6 -1.42735,0.3171953 -1.88672,0.9515625 -0.45391,0.6289129 -0.68086,1.4984433 -0.68086,2.608594"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4842"
+         inkscape:connector-curvature="0" /><path
+         d="m -280.30827,8.1013275 0,-5.5617192 1.50938,0 0,5.5042973 c 0,0.8695341 0.16953,1.5230491 0.50859,1.9605474 0.33906,0.432032 0.84765,0.648048 1.52578,0.648047 0.81484,1e-6 1.45742,-0.259765 1.92774,-0.7792974 0.47577,-0.5195289 0.71366,-1.2277314 0.71367,-2.1246095 l 0,-5.2089848 1.50937,0 0,9.1875007 -1.50937,0 0,-1.410938 c -0.36641,0.557814 -0.79298,0.973438 -1.27969,1.246875 -0.48125,0.267969 -1.0418,0.401953 -1.68164,0.401954 -1.05547,-10e-7 -1.85664,-0.328125 -2.40351,-0.984375 -0.54688,-0.656249 -0.82032,-1.6160138 -0.82032,-2.8792975"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4844"
+         inkscape:connector-curvature="0" /><path
+         d="m -262.87663,2.8923427 0,1.4109376 c -0.42657,-0.2351486 -0.85586,-0.4101484 -1.28789,-0.525 -0.42657,-0.1203045 -0.8586,-0.1804606 -1.29609,-0.1804688 -0.97891,8.2e-6 -1.73907,0.3117266 -2.28047,0.9351563 -0.54141,0.6179754 -0.81211,1.4875058 -0.81211,2.608594 0,1.1210973 0.2707,1.9933621 0.81211,2.616797 0.5414,0.6179702 1.30156,0.9269542 2.28047,0.9269532 0.43749,1e-6 0.86952,-0.05742 1.29609,-0.172266 0.43203,-0.120311 0.86132,-0.298045 1.28789,-0.5332028 l 0,1.3945318 c -0.4211,0.196875 -0.8586,0.344531 -1.3125,0.442968 -0.44844,0.09844 -0.92696,0.147656 -1.43554,0.147657 -1.3836,-10e-7 -2.48282,-0.434766 -3.29766,-1.304297 -0.81484,-0.8695297 -1.22227,-2.0425755 -1.22227,-3.5191412 0,-1.4984316 0.41016,-2.6769461 1.23047,-3.5355471 0.82578,-0.8585849 1.95508,-1.2878814 3.38789,-1.2878908 0.46484,9.4e-6 0.91875,0.049228 1.36172,0.1476563 0.44296,0.092978 0.87226,0.2351653 1.28789,0.4265625"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4846"
+         inkscape:connector-curvature="0" /><path
+         d="m -258.74225,-0.0689856 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.7492211 0.10117,1.2304707 0.30352,1.4437504 0.20781,0.213282 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96876,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66446,-1.2304669 -0.66446,-2.3789064 l 0,-4.9875003 -1.10742,0 0,-1.173047 1.10742,0 0,-2.6085939 1.51758,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4848"
+         inkscape:connector-curvature="0" /><path
+         d="m -247.78288,2.8103115 0,1.4273438 c -0.42657,-0.2187423 -0.86954,-0.3828046 -1.32891,-0.4921875 -0.45938,-0.1093669 -0.93516,-0.1640544 -1.42734,-0.1640625 -0.74922,8.1e-6 -1.3125,0.1148518 -1.68984,0.3445312 -0.37188,0.2296951 -0.55782,0.5742261 -0.55782,1.0335939 0,0.3500064 0.13399,0.626178 0.40196,0.8285157 0.26796,0.1968807 0.80663,0.3855524 1.61601,0.5660156 l 0.5168,0.1148438 c 1.07187,0.2296925 1.83202,0.5550828 2.28047,0.9761719 0.4539,0.4156289 0.68085,0.9980502 0.68086,1.7472658 -10e-6,0.8531268 -0.33907,1.5285168 -1.01719,2.0261718 -0.67266,0.497656 -1.59961,0.746484 -2.78086,0.746485 -0.49219,-10e-7 -1.00625,-0.04922 -1.54219,-0.147657 -0.53047,-0.09297 -1.09101,-0.235156 -1.68164,-0.426562 l 0,-1.558594 c 0.55781,0.289845 1.10742,0.508595 1.64883,0.65625 0.5414,0.142189 1.07734,0.213282 1.60781,0.213281 0.71094,1e-6 1.25781,-0.120311 1.64063,-0.360937 0.38281,-0.246092 0.57421,-0.5906233 0.57422,-1.0335941 -1e-5,-0.4101534 -0.13946,-0.7246063 -0.41836,-0.9433594 -0.27344,-0.2187465 -0.87774,-0.4292931 -1.81289,-0.6316407 l -0.525,-0.1230469 c -0.93516,-0.1968707 -1.61055,-0.4976516 -2.02617,-0.9023438 -0.41563,-0.4101508 -0.62344,-0.9706972 -0.62344,-1.6816407 0,-0.864055 0.30625,-1.5312419 0.91875,-2.0015627 0.6125,-0.4703033 1.48203,-0.7054594 2.60859,-0.7054688 0.55781,9.4e-6 1.08281,0.041025 1.575,0.1230469 0.49218,0.08204 0.94609,0.2050872 1.36172,0.3691407"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4850"
+         inkscape:connector-curvature="0" /><path
+         d="m -240.40827,2.5396083 1.50937,0 1.88672,7.1695318 1.87852,-7.1695318 1.78008,0 1.88672,7.1695318 1.87851,-7.1695318 1.50938,0 -2.40352,9.1875007 -1.78008,0 -1.97695,-7.5304693 -1.98516,7.5304693 -1.78007,0 -2.40352,-9.1875007"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4852"
+         inkscape:connector-curvature="0" /><path
+         d="m -225.78209,2.5396083 1.50937,0 0,9.1875007 -1.50937,0 0,-9.1875007 m 0,-3.5765627 1.50937,0 0,1.91132824 -1.50937,0 0,-1.91132824"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4854"
+         inkscape:connector-curvature="0" /><path
+         d="m -219.62975,-0.0689856 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.7492211 0.10117,1.2304707 0.30352,1.4437504 0.20781,0.213282 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96875,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66446,-1.2304669 -0.66445,-2.3789064 l 0,-4.9875003 -1.10743,0 0,-1.173047 1.10743,0 0,-2.6085939 1.51757,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4856"
+         inkscape:connector-curvature="0" /><path
+         d="m -206.8903,6.1817961 0,5.5453129 -1.50937,0 0,-5.4960942 c -1e-5,-0.8695249 -0.16954,-1.5203056 -0.5086,-1.9523439 -0.33907,-0.4320234 -0.84766,-0.6480388 -1.52578,-0.6480469 -0.81485,8.1e-6 -1.45742,0.2597735 -1.92773,0.779297 -0.47032,0.519538 -0.70547,1.2277405 -0.70547,2.1246095 l 0,5.1925785 -1.51758,0 0,-12.7640634 1.51758,0 0,5.0039066 c 0.36093,-0.5523355 0.78476,-0.9652257 1.27148,-1.238672 0.49219,-0.2734282 1.0582,-0.4101469 1.69805,-0.4101563 1.05546,9.4e-6 1.8539,0.3281341 2.39531,0.9843751 0.5414,0.6507891 0.8121,1.6105538 0.81211,2.8792971"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4858"
+         inkscape:connector-curvature="0" /><path
+         d="m -193.28132,5.1235929 c 0.79296,0.1695377 1.41093,0.5222717 1.85391,1.0582032 0.44843,0.5359425 0.67265,1.1976607 0.67266,1.9851564 -1e-5,1.2085961 -0.41564,2.1437515 -1.24688,2.8054685 -0.83126,0.661719 -2.01251,0.992578 -3.54375,0.992579 -0.51407,-10e-7 -1.04453,-0.05195 -1.59141,-0.15586 -0.5414,-0.09844 -1.10195,-0.248828 -1.68164,-0.451172 l 0,-1.5996092 c 0.45938,0.2679702 0.9625,0.4703142 1.50938,0.6070312 0.54687,0.13672 1.11835,0.205079 1.71445,0.205078 1.03906,10e-7 1.82929,-0.205077 2.37071,-0.6152342 0.54686,-0.4101541 0.8203,-1.0062473 0.82031,-1.7882813 -1e-5,-0.7218708 -0.25431,-1.2851515 -0.76289,-1.6898439 -0.50313,-0.4101506 -1.20587,-0.6152286 -2.10821,-0.6152344 l -1.42734,0 0,-1.3617189 1.49297,0 c 0.81484,7.3e-6 1.43827,-0.1613207 1.87031,-0.4839844 0.43203,-0.328117 0.64804,-0.798429 0.64805,-1.4109376 -1e-5,-0.6288965 -0.22423,-1.1101461 -0.67266,-1.4437501 -0.44297,-0.33905158 -1.08008,-0.50858267 -1.91133,-0.50859375 -0.45391,1.108e-5 -0.94063,0.0492298 -1.46015,0.14765626 -0.51954,0.0984483 -1.09102,0.25157319 -1.71446,0.45937499 l 0,-1.47656256 c 0.62891,-0.17498789 1.2168,-0.30623777 1.76368,-0.39375003 0.55234,-0.0874876 1.07187,-0.13123754 1.55859,-0.13125 1.25781,1.246e-5 2.25312,0.28712157 2.98594,0.86132818 0.7328,0.56876108 1.09921,1.33985411 1.09922,2.31328141 -10e-6,0.6781337 -0.19415,1.2523519 -0.58243,1.7226564 -0.38828,0.4648509 -0.94063,0.7875068 -1.65703,0.9679688"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4860"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.74694,0.84156134 0,9.52382866 2.00157,0 c 1.68983,1e-6 2.92577,-0.3828107 3.70781,-1.1484375 0.78749,-0.7656217 1.18124,-1.9742144 1.18125,-3.6257815 -1e-5,-1.6406173 -0.39376,-2.8410068 -1.18125,-3.6011721 -0.78204,-0.7656145 -2.01798,-1.14842668 -3.70781,-1.14843756 l -2.00157,0 m -1.65703,-1.36171884 3.4043,0 c 2.37343,1.224e-5 4.11523,0.49493366 5.22539,1.48476572 1.11015,0.98438488 1.66522,2.52657088 1.66524,4.62656278 -2e-5,2.1109417 -0.55783,3.6613309 -1.67344,4.651172 -1.11564,0.989845 -2.8547,1.484766 -5.21719,1.484766 l -3.4043,0 0,-12.2472665"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4862"
+         inkscape:connector-curvature="0" /><path
+         d="m -161.68287,6.7560149 0,0.7382813 -6.93984,0 c 0.0656,1.0390657 0.37734,1.8320337 0.93516,2.3789064 0.56327,0.5414074 1.3453,0.8121104 2.34609,0.8121094 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08827,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54142,0.229688 -1.09649,0.404687 -1.66524,0.525 -0.56875,0.120312 -1.14571,0.180468 -1.73086,0.180469 -1.46562,-10e-7 -2.62773,-0.426563 -3.48632,-1.279688 -0.85313,-0.8531232 -1.27969,-2.0070283 -1.27969,-3.461719 0,-1.5039003 0.40469,-2.6960867 1.21406,-3.5765627 0.81484,-0.8859286 1.91133,-1.328897 3.28945,-1.3289064 1.23594,9.4e-6 2.21211,0.3992278 2.92852,1.1976564 0.72187,0.7929762 1.0828,1.8730533 1.08281,3.2402346 m -1.50937,-0.4429688 c -0.011,-0.8257751 -0.24337,-1.4847588 -0.69727,-1.9769533 -0.44844,-0.4921796 -1.04454,-0.7382731 -1.78828,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.713672 -0.50313,0.4757882 -0.79297,1.1457094 -0.86953,2.0097657 l 5.38125,-0.0082"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4864"
+         inkscape:connector-curvature="0" /><path
+         d="m -153.34849,2.8103115 0,1.4273438 c -0.42657,-0.2187423 -0.86954,-0.3828046 -1.32891,-0.4921875 -0.45938,-0.1093669 -0.93516,-0.1640544 -1.42734,-0.1640625 -0.74922,8.1e-6 -1.31251,0.1148518 -1.68985,0.3445312 -0.37187,0.2296951 -0.55781,0.5742261 -0.55781,1.0335939 0,0.3500064 0.13398,0.626178 0.40195,0.8285157 0.26797,0.1968807 0.80664,0.3855524 1.61602,0.5660156 l 0.5168,0.1148438 c 1.07187,0.2296925 1.83202,0.5550828 2.28047,0.9761719 0.45389,0.4156289 0.68085,0.9980502 0.68086,1.7472658 -1e-5,0.8531268 -0.33907,1.5285168 -1.01719,2.0261718 -0.67266,0.497656 -1.59962,0.746484 -2.78086,0.746485 -0.49219,-10e-7 -1.00625,-0.04922 -1.54219,-0.147657 -0.53047,-0.09297 -1.09102,-0.235156 -1.68164,-0.426562 l 0,-1.558594 c 0.55781,0.289845 1.10742,0.508595 1.64883,0.65625 0.5414,0.142189 1.07734,0.213282 1.60781,0.213281 0.71093,1e-6 1.25781,-0.120311 1.64063,-0.360937 0.3828,-0.246092 0.57421,-0.5906233 0.57421,-1.0335941 0,-0.4101534 -0.13945,-0.7246063 -0.41835,-0.9433594 -0.27345,-0.2187465 -0.87774,-0.4292931 -1.8129,-0.6316407 l -0.525,-0.1230469 c -0.93515,-0.1968707 -1.61054,-0.4976516 -2.02617,-0.9023438 -0.41562,-0.4101508 -0.62344,-0.9706972 -0.62343,-1.6816407 -1e-5,-0.864055 0.30624,-1.5312419 0.91875,-2.0015627 0.61249,-0.4703033 1.48202,-0.7054594 2.60859,-0.7054688 0.55781,9.4e-6 1.08281,0.041025 1.575,0.1230469 0.49218,0.08204 0.94609,0.2050872 1.36172,0.3691407"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4866"
+         inkscape:connector-curvature="0" /><path
+         d="m -150.44458,2.5396083 1.50937,0 0,9.1875007 -1.50937,0 0,-9.1875007 m 0,-3.5765627 1.50937,0 0,1.91132824 -1.50937,0 0,-1.91132824"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4868"
+         inkscape:connector-curvature="0" /><path
+         d="m -139.7395,7.026718 c -1e-5,-1.0937443 -0.22696,-1.9413997 -0.68086,-2.5429689 -0.44844,-0.6015547 -1.08008,-0.9023357 -1.89492,-0.9023438 -0.80938,8.1e-6 -1.44102,0.3007891 -1.89492,0.9023438 -0.44845,0.6015692 -0.67266,1.4492246 -0.67266,2.5429689 0,1.0882849 0.22421,1.933206 0.67266,2.5347658 0.4539,0.6015642 1.08554,0.9023452 1.89492,0.9023442 0.81484,1e-6 1.44648,-0.30078 1.89492,-0.9023442 0.4539,-0.6015598 0.68085,-1.4464809 0.68086,-2.5347658 m 1.50937,3.560157 c -1e-5,1.564062 -0.34727,2.72617 -1.04179,3.486328 -0.69454,0.765622 -1.75821,1.148434 -3.19102,1.148437 -0.53047,-3e-6 -1.03086,-0.04102 -1.50117,-0.123046 -0.47032,-0.07657 -0.92696,-0.196879 -1.36992,-0.360938 l 0,-1.468359 c 0.44296,0.240623 0.88046,0.418357 1.3125,0.533203 0.43202,0.114841 0.87226,0.172263 1.3207,0.172265 0.98984,-2e-6 1.73085,-0.259767 2.22305,-0.779297 0.49218,-0.514063 0.73827,-1.293359 0.73828,-2.33789 l 0,-0.746485 c -0.31173,0.541408 -0.71095,0.946095 -1.19766,1.214063 -0.48672,0.267969 -1.06914,0.401953 -1.74726,0.401953 -1.12657,0 -2.03438,-0.429297 -2.72344,-1.287891 -0.68907,-0.8585914 -1.0336,-1.9960904 -1.0336,-3.4125 0,-1.421869 0.34453,-2.5621023 1.0336,-3.4207033 0.68906,-0.8585849 1.59687,-1.2878814 2.72344,-1.2878908 0.67812,9.4e-6 1.26054,0.1339937 1.74726,0.4019532 0.48671,0.2679775 0.88593,0.6726646 1.19766,1.2140626 l 0,-1.3945314 1.50937,0 0,8.0472667"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4870"
+         inkscape:connector-curvature="0" /><path
+         d="m -127.48403,6.1817961 0,5.5453129 -1.50938,0 0,-5.4960942 c -10e-6,-0.8695249 -0.16954,-1.5203056 -0.50859,-1.9523439 -0.33907,-0.4320234 -0.84766,-0.6480388 -1.52578,-0.6480469 -0.81485,8.1e-6 -1.45743,0.2597735 -1.92774,0.779297 -0.47031,0.519538 -0.70547,1.2277405 -0.70547,2.1246095 l 0,5.1925785 -1.51757,0 0,-9.1875007 1.51757,0 0,1.4273439 c 0.36094,-0.5523355 0.78477,-0.9652257 1.27149,-1.238672 0.49218,-0.2734282 1.0582,-0.4101469 1.69805,-0.4101563 1.05546,9.4e-6 1.85389,0.3281341 2.39531,0.9843751 0.5414,0.6507891 0.8121,1.6105538 0.81211,2.8792971"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4872"
+         inkscape:connector-curvature="0" /><path
+         d="m -111.70124,-0.11820435 0,1.61601575 c -0.62891,-0.3007708 -1.22227,-0.5249893 -1.78008,-0.67265631 -0.55782,-0.14764521 -1.09649,-0.22147327 -1.61601,-0.22148439 -0.90235,1.112e-5 -1.59962,0.17501096 -2.0918,0.525 -0.48672,0.3500103 -0.73008,0.8476661 -0.73008,1.4929689 0,0.5414148 0.16133,0.9515707 0.48399,1.2304688 0.32812,0.2734451 0.94609,0.4949293 1.8539,0.6644532 l 1.00078,0.2050781 c 1.23593,0.2351631 2.14648,0.6507877 2.73165,1.2468751 0.59061,0.5906302 0.88592,1.3835982 0.88593,2.3789064 -1e-5,1.186721 -0.39923,2.0863298 -1.19765,2.6988288 -0.79298,0.6125 -1.95782,0.918749 -3.49453,0.91875 -0.5797,-10e-7 -1.19767,-0.06563 -1.85391,-0.196875 -0.65079,-0.13125 -1.32618,-0.325391 -2.02617,-0.582422 l 0,-1.7062504 c 0.67265,0.3773456 1.33163,0.6617204 1.97695,0.8531254 0.64531,0.191407 1.27968,0.28711 1.90313,0.287109 0.94608,10e-7 1.67616,-0.185936 2.19023,-0.557813 0.51405,-0.3718725 0.77109,-0.9023408 0.77109,-1.5914059 0,-0.6015587 -0.18594,-1.0718707 -0.55781,-1.4109376 -0.36641,-0.3390575 -0.97071,-0.5933541 -1.81289,-0.7628907 l -1.00898,-0.196875 c -1.23595,-0.2460879 -2.13009,-0.6316344 -2.68243,-1.1566407 -0.55234,-0.5249927 -0.82851,-1.2550702 -0.82851,-2.1902345 0,-1.0828025 0.38007,-1.93592673 1.14023,-2.55937518 0.76562,-0.62342539 1.81836,-0.93514385 3.15821,-0.93515631 0.57421,1.246e-5 1.15936,0.0519655 1.75546,0.15585938 0.59609,0.10391847 1.20586,0.2597777 1.8293,0.46757816"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4874"
+         inkscape:connector-curvature="0" /><path
+         d="m -100.586,6.7560149 0,0.7382813 -6.93985,0 c 0.0656,1.0390657 0.37734,1.8320337 0.93516,2.3789064 0.56328,0.5414074 1.34531,0.8121104 2.34609,0.8121094 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08828,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404687 -1.66523,0.525 -0.56876,0.120312 -1.14571,0.180468 -1.73086,0.180469 -1.46563,-10e-7 -2.62774,-0.426563 -3.48633,-1.279688 -0.85313,-0.8531232 -1.27969,-2.0070283 -1.27969,-3.461719 0,-1.5039003 0.40469,-2.6960867 1.21406,-3.5765627 0.81485,-0.8859286 1.91133,-1.328897 3.28946,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.08281,1.8730533 1.08282,3.2402346 m -1.50938,-0.4429688 c -0.0109,-0.8257751 -0.24337,-1.4847588 -0.69726,-1.9769533 -0.44845,-0.4921796 -1.04454,-0.7382731 -1.78829,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.713672 -0.50313,0.4757882 -0.79297,1.1457094 -0.86953,2.0097657 l 5.38125,-0.0082"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4876"
+         inkscape:connector-curvature="0" /><path
+         d="m -96.615661,-0.0689856 0,2.6085939 3.108984,0 0,1.173047 -3.108984,0 0,4.9875003 c -3e-6,0.7492211 0.101168,1.2304707 0.303515,1.4437504 0.207809,0.213282 0.626168,0.319923 1.255078,0.319922 l 1.550391,0 0,1.263281 -1.550391,0 c -1.164847,0 -1.968752,-0.216015 -2.411718,-0.648047 -0.442971,-0.437499 -0.664455,-1.2304669 -0.664454,-2.3789064 l 0,-4.9875003 -1.107422,0 0,-1.173047 1.107422,0 0,-2.6085939 1.517579,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4878"
+         inkscape:connector-curvature="0" /><path
+         d="m -90.020355,-0.0689856 0,2.6085939 3.108985,0 0,1.173047 -3.108985,0 0,4.9875003 c -3e-6,0.7492211 0.101169,1.2304707 0.303516,1.4437504 0.207809,0.213282 0.626168,0.319923 1.255078,0.319922 l 1.550391,0 0,1.263281 -1.550391,0 c -1.164847,0 -1.968753,-0.216015 -2.411719,-0.648047 -0.442971,-0.437499 -0.664455,-1.2304669 -0.664453,-2.3789064 l 0,-4.9875003 -1.107422,0 0,-1.173047 1.107422,0 0,-2.6085939 1.517578,0"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4880"
+         inkscape:connector-curvature="0" /><path
+         d="m -84.918017,2.5396083 1.509375,0 0,9.1875007 -1.509375,0 0,-9.1875007 m 0,-3.5765627 1.509375,0 0,1.91132824 -1.509375,0 0,-1.91132824"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4882"
+         inkscape:connector-curvature="0" /><path
+         d="m -72.621545,6.1817961 0,5.5453129 -1.509375,0 0,-5.4960942 c -8e-6,-0.8695249 -0.169539,-1.5203056 -0.508594,-1.9523439 -0.339069,-0.4320234 -0.847662,-0.6480388 -1.525781,-0.6480469 -0.814849,8.1e-6 -1.457426,0.2597735 -1.927735,0.779297 -0.470315,0.519538 -0.705471,1.2277405 -0.705468,2.1246095 l 0,5.1925785 -1.517579,0 0,-9.1875007 1.517579,0 0,1.4273439 c 0.360934,-0.5523355 0.784762,-0.9652257 1.271484,-1.238672 0.492183,-0.2734282 1.058198,-0.4101469 1.698047,-0.4101563 1.055462,9.4e-6 1.853899,0.3281341 2.395313,0.9843751 0.541397,0.6507891 0.8121,1.6105538 0.812109,2.8792971"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4884"
+         inkscape:connector-curvature="0" /><path
+         d="m -63.548889,7.026718 c -7e-6,-1.0937443 -0.22696,-1.9413997 -0.680859,-2.5429689 -0.448444,-0.6015547 -1.080084,-0.9023357 -1.894922,-0.9023438 -0.809379,8.1e-6 -1.441019,0.3007891 -1.894922,0.9023438 -0.44844,0.6015692 -0.672659,1.4492246 -0.672656,2.5429689 -3e-6,1.0882849 0.224216,1.933206 0.672656,2.5347658 0.453903,0.6015642 1.085543,0.9023452 1.894922,0.9023442 0.814838,1e-6 1.446478,-0.30078 1.894922,-0.9023442 0.453899,-0.6015598 0.680852,-1.4464809 0.680859,-2.5347658 m 1.509375,3.560157 c -9e-6,1.564062 -0.347274,2.72617 -1.041796,3.486328 -0.694539,0.765622 -1.75821,1.148434 -3.191016,1.148437 -0.530473,-3e-6 -1.030864,-0.04102 -1.501172,-0.123046 -0.470316,-0.07657 -0.926956,-0.196879 -1.369922,-0.360938 l 0,-1.468359 c 0.442966,0.240623 0.880466,0.418357 1.3125,0.533203 0.432027,0.114841 0.872261,0.172263 1.320703,0.172265 0.989838,-2e-6 1.730853,-0.259767 2.223047,-0.779297 0.49218,-0.514063 0.738274,-1.293359 0.738281,-2.33789 l 0,-0.746485 c -0.311726,0.541408 -0.710944,0.946095 -1.197656,1.214063 -0.486725,0.267969 -1.069146,0.401953 -1.747266,0.401953 -1.126566,0 -2.034378,-0.429297 -2.723437,-1.287891 -0.689064,-0.8585914 -1.033595,-1.9960904 -1.033594,-3.4125 -10e-7,-1.421869 0.34453,-2.5621023 1.033594,-3.4207033 0.689059,-0.8585849 1.596871,-1.2878814 2.723437,-1.2878908 0.67812,9.4e-6 1.260541,0.1339937 1.747266,0.4019532 0.486712,0.2679775 0.88593,0.6726646 1.197656,1.2140626 l 0,-1.3945314 1.509375,0 0,8.0472667"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4886"
+         inkscape:connector-curvature="0" /><path
+         d="m -53.073498,2.8103115 0,1.4273438 c -0.42657,-0.2187423 -0.869538,-0.3828046 -1.328906,-0.4921875 -0.459381,-0.1093669 -0.935162,-0.1640544 -1.427344,-0.1640625 -0.749223,8.1e-6 -1.312504,0.1148518 -1.689844,0.3445312 -0.371878,0.2296951 -0.557815,0.5742261 -0.557813,1.0335939 -2e-6,0.3500064 0.133982,0.626178 0.401954,0.8285157 0.267965,0.1968807 0.806637,0.3855524 1.616015,0.5660156 l 0.516797,0.1148438 c 1.071869,0.2296925 1.832025,0.5550828 2.280469,0.9761719 0.453899,0.4156289 0.680852,0.9980502 0.68086,1.7472658 -8e-6,0.8531268 -0.339071,1.5285168 -1.017188,2.0261718 -0.672663,0.497656 -1.599615,0.746484 -2.78086,0.746485 -0.492191,-10e-7 -1.006253,-0.04922 -1.542187,-0.147657 -0.530471,-0.09297 -1.091017,-0.235156 -1.681641,-0.426562 l 0,-1.558594 c 0.557811,0.289845 1.10742,0.508595 1.648828,0.65625 0.541403,0.142189 1.07734,0.213282 1.607813,0.213281 0.710933,1e-6 1.257807,-0.120311 1.640625,-0.360937 0.382806,-0.246092 0.574212,-0.5906233 0.574219,-1.0335941 -7e-6,-0.4101534 -0.13946,-0.7246063 -0.41836,-0.9433594 -0.273443,-0.2187465 -0.877739,-0.4292931 -1.81289,-0.6316407 l -0.525,-0.1230469 C -57.82311,7.4122692 -58.4985,7.1114883 -58.914123,6.7067961 -59.32975,6.2966453 -59.537562,5.7360989 -59.537561,5.0251554 c -1e-6,-0.864055 0.306249,-1.5312419 0.91875,-2.0015627 0.612498,-0.4703033 1.482028,-0.7054594 2.608594,-0.7054688 0.557807,9.4e-6 1.082807,0.041025 1.575,0.1230469 0.492181,0.08204 0.946087,0.2050872 1.361719,0.3691407"
+         style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4888"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:9.60000038px"
+       id="text4863-9"><path
+         d="m -393.83092,-67.415047 0,5.697657 2.57969,0 c 0.95468,8e-6 1.6927,-0.247128 2.21406,-0.741406 0.52134,-0.494262 0.78202,-1.198428 0.78203,-2.112501 -1e-5,-0.90728 -0.26069,-1.60806 -0.78203,-2.102343 -0.52136,-0.494258 -1.25938,-0.741393 -2.21406,-0.741407 l -2.57969,0 m -2.05156,-1.685937 4.63125,0 c 1.69947,1.5e-5 2.98254,0.385952 3.84922,1.157812 0.87342,0.765118 1.31014,1.889075 1.31015,3.371875 -10e-6,1.496364 -0.43673,2.627092 -1.31015,3.392188 -0.86668,0.765111 -2.14975,1.147663 -3.84922,1.147656 l -2.57969,0 0,6.093751 -2.05156,0 0,-15.163282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4891"
+         inkscape:connector-curvature="0" /><path
+         d="m -377.16451,-63.565828 c -0.20991,-0.121865 -0.44012,-0.209886 -0.69063,-0.264062 -0.24376,-0.06093 -0.51459,-0.0914 -0.8125,-0.09141 -1.05625,1e-5 -1.86875,0.345322 -2.4375,1.035937 -0.56198,0.683863 -0.84297,1.669018 -0.84297,2.955469 l 0,5.992188 -1.8789,0 0,-11.375001 1.8789,0 0,1.767188 c 0.39271,-0.690615 0.9039,-1.201812 1.5336,-1.533594 0.62968,-0.33853 1.39478,-0.507801 2.29531,-0.507813 0.12864,1.2e-5 0.27083,0.01017 0.42656,0.03047 0.15572,0.01355 0.32838,0.03725 0.51797,0.07109 l 0.0102,1.919531"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4893"
+         inkscape:connector-curvature="0" /><path
+         d="m -371.22311,-64.002546 c -1.00209,10e-6 -1.79427,0.392718 -2.37656,1.178125 -0.58229,0.778654 -0.87344,1.848444 -0.87344,3.209375 0,1.360942 0.28776,2.434118 0.86328,3.219531 0.58229,0.778648 1.37786,1.16797 2.38672,1.167969 0.99531,10e-7 1.78411,-0.392707 2.36641,-1.178125 0.58228,-0.785414 0.87343,-1.855204 0.87344,-3.209375 -1e-5,-1.347389 -0.29116,-2.413794 -0.87344,-3.199219 -0.5823,-0.792178 -1.3711,-1.188271 -2.36641,-1.188281 m 0,-1.584376 c 1.625,1.2e-5 2.9013,0.528137 3.82891,1.584376 0.92759,1.056259 1.39139,2.518757 1.39141,4.3875 -2e-5,1.861983 -0.46382,3.324481 -1.39141,4.3875 -0.92761,1.05625 -2.20391,1.584375 -3.82891,1.584375 -1.63177,0 -2.91146,-0.528125 -3.83906,-1.584375 -0.92083,-1.063019 -1.38125,-2.525517 -1.38125,-4.3875 0,-1.868743 0.46042,-3.331241 1.38125,-4.3875 0.9276,-1.056239 2.20729,-1.584364 3.83906,-1.584376"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4895"
+         inkscape:connector-curvature="0" /><path
+         d="m -355.40982,-63.58614 0,-6.154688 1.86875,0 0,15.803126 -1.86875,0 0,-1.70625 c -0.39272,0.677084 -0.89038,1.181511 -1.49297,1.513281 -0.59584,0.325 -1.31355,0.4875 -2.15313,0.4875 -1.37448,0 -2.49505,-0.548437 -3.36172,-1.645313 -0.85989,-1.096872 -1.28984,-2.539058 -1.28984,-4.326562 0,-1.787493 0.42995,-3.229679 1.28984,-4.326563 0.86667,-1.096864 1.98724,-1.645301 3.36172,-1.645313 0.83958,1.2e-5 1.55729,0.165897 2.15313,0.497657 0.60259,0.325011 1.10025,0.826052 1.49297,1.503125 m -6.36797,3.971094 c -1e-5,1.374483 0.28098,2.45443 0.84297,3.239844 0.56874,0.778647 1.34739,1.16797 2.33593,1.167969 0.98854,1e-6 1.76718,-0.389322 2.33594,-1.167969 0.56874,-0.785414 0.85312,-1.865361 0.85313,-3.239844 -10e-6,-1.374472 -0.28439,-2.451034 -0.85313,-3.229688 -0.56876,-0.785407 -1.3474,-1.178115 -2.33594,-1.178125 -0.98854,1e-5 -1.76719,0.392718 -2.33593,1.178125 -0.56199,0.778654 -0.84298,1.855216 -0.84297,3.229688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4897"
+         inkscape:connector-curvature="0" /><path
+         d="m -349.88482,-58.426765 0,-6.885938 1.86875,0 0,6.814844 c -10e-6,1.076566 0.20989,1.88568 0.62968,2.427344 0.41979,0.534898 1.04948,0.802345 1.88907,0.802344 1.00884,1e-6 1.80442,-0.321613 2.38671,-0.964844 0.58906,-0.643226 0.88359,-1.520048 0.8836,-2.630469 l 0,-6.449219 1.86875,0 0,11.375001 -1.86875,0 0,-1.746875 c -0.45366,0.690626 -0.98178,1.205209 -1.58438,1.54375 -0.59584,0.331771 -1.28985,0.497656 -2.08203,0.497656 -1.30677,0 -2.2987,-0.40625 -2.97578,-1.21875 -0.67708,-0.812498 -1.01563,-2.000778 -1.01562,-3.564844"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4899"
+         inkscape:connector-curvature="0" /><path
+         d="m -328.30279,-64.875984 0,1.746875 c -0.52813,-0.291136 -1.05964,-0.507803 -1.59453,-0.65 -0.52813,-0.148948 -1.06303,-0.223427 -1.60469,-0.223437 -1.21198,10e-6 -2.15313,0.385947 -2.82344,1.157812 -0.67031,0.765112 -1.00547,1.841674 -1.00546,3.229688 -10e-6,1.388025 0.33515,2.467972 1.00546,3.239844 0.67031,0.765106 1.61146,1.147657 2.82344,1.147656 0.54166,10e-7 1.07656,-0.07109 1.60469,-0.213281 0.53489,-0.148957 1.0664,-0.369009 1.59453,-0.660157 l 0,1.726563 c -0.52136,0.24375 -1.06303,0.426563 -1.625,0.548438 -0.55522,0.121874 -1.14766,0.182812 -1.77734,0.182812 -1.71303,0 -3.07396,-0.538281 -4.08282,-1.614844 -1.00885,-1.07656 -1.51328,-2.528902 -1.51328,-4.357031 0,-1.855201 0.50781,-3.314314 1.52344,-4.377344 1.02239,-1.06301 2.42057,-1.59452 4.19453,-1.594532 0.57552,1.2e-5 1.13749,0.06095 1.68594,0.182813 0.54843,0.115115 1.07994,0.291157 1.59453,0.528125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4901"
+         inkscape:connector-curvature="0" /><path
+         d="m -323.18404,-68.54239 0,3.229687 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c -1e-5,0.927607 0.12525,1.52344 0.37578,1.7875 0.25728,0.264065 0.77525,0.396096 1.5539,0.396094 l 1.91954,0 0,1.564063 -1.91954,0 c -1.44219,0 -2.4375,-0.267448 -2.98593,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82266,-2.945313 l 0,-6.175 -1.37109,0 0,-1.452344 1.37109,0 0,-3.229687 1.87891,0"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4903"
+         inkscape:connector-curvature="0" /><path
+         d="m -308.11216,-67.415047 0,11.791407 2.47812,0 c 2.09218,2e-6 3.62239,-0.473956 4.59063,-1.421875 0.97499,-0.947913 1.46249,-2.444265 1.4625,-4.489063 -10e-6,-2.03124 -0.48751,-3.517437 -1.4625,-4.458594 -0.96824,-0.947903 -2.49845,-1.421861 -4.59063,-1.421875 l -2.47812,0 m -2.05157,-1.685937 4.21485,0 c 2.93853,1.5e-5 5.09504,0.612775 6.46953,1.838281 1.37447,1.218762 2.0617,3.128135 2.06172,5.728125 -2e-5,2.613547 -0.69064,4.533077 -2.07188,5.758594 -1.38126,1.225522 -3.53438,1.838282 -6.45937,1.838282 l -4.21485,0 0,-15.163282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4905"
+         inkscape:connector-curvature="0" /><path
+         d="m -284.50904,-60.09239 0,0.914063 -8.59219,0 c 0.0813,1.286462 0.46719,2.268232 1.15782,2.945312 0.69739,0.670314 1.66562,1.00547 2.90468,1.005469 0.7177,10e-7 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.176039 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767188 c -0.67032,0.284375 -1.35756,0.501041 -2.06172,0.65 -0.70417,0.148958 -1.41849,0.223437 -2.14297,0.223437 -1.81458,0 -3.25338,-0.528125 -4.3164,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.7388,0.494282 3.62579,1.482813 0.89374,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21406,-0.914062 -1.04272,10e-6 -1.87891,0.294541 -2.5086,0.883593 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4907"
+         inkscape:connector-curvature="0" /><path
+         d="m -274.19029,-64.977547 0,1.767188 c -0.52813,-0.270824 -1.07657,-0.473949 -1.64531,-0.609375 -0.56876,-0.135407 -1.15782,-0.203115 -1.76719,-0.203125 -0.92761,1e-5 -1.625,0.142197 -2.09219,0.426563 -0.46042,0.284384 -0.69062,0.710946 -0.69062,1.279687 0,0.433341 0.16588,0.775268 0.49765,1.025781 0.33177,0.243758 0.9987,0.477351 2.00079,0.700782 l 0.63984,0.142187 c 1.32708,0.284381 2.26822,0.687246 2.82344,1.208594 0.56197,0.514588 0.84296,1.235681 0.84297,2.163281 -10e-6,1.056253 -0.4198,1.89245 -1.25938,2.508594 -0.83282,0.616146 -1.98047,0.924219 -3.44297,0.924219 -0.60938,0 -1.24584,-0.06094 -1.90937,-0.182812 -0.65678,-0.115105 -1.35079,-0.291146 -2.08203,-0.528125 l 0,-1.929688 c 0.69062,0.358856 1.37109,0.629689 2.0414,0.8125 0.67031,0.176043 1.33385,0.264064 1.99063,0.264063 0.8802,1e-6 1.55728,-0.148957 2.03125,-0.446876 0.47395,-0.304685 0.71093,-0.731247 0.71093,-1.279687 0,-0.507809 -0.17266,-0.897132 -0.51796,-1.167969 -0.33855,-0.270829 -1.08673,-0.531506 -2.24454,-0.782031 l -0.65,-0.152344 c -1.15781,-0.243745 -1.99401,-0.61614 -2.50859,-1.117188 -0.51458,-0.507805 -0.77188,-1.201815 -0.77187,-2.082031 -1e-5,-1.069782 0.37916,-1.895823 1.1375,-2.478125 0.75833,-0.58228 1.83489,-0.873426 3.22968,-0.873438 0.69062,1.2e-5 1.34062,0.05079 1.95,0.152344 0.60937,0.101574 1.17135,0.253918 1.68594,0.457031"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4909"
+         inkscape:connector-curvature="0" /><path
+         d="m -270.59497,-65.312703 1.86875,0 0,11.375001 -1.86875,0 0,-11.375001 m 0,-4.428125 1.86875,0 0,2.366406 -1.86875,0 0,-2.366406"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4911"
+         inkscape:connector-curvature="0" /><path
+         d="m -257.34106,-59.757234 c -10e-6,-1.354159 -0.281,-2.403637 -0.84297,-3.148437 -0.55522,-0.744782 -1.33725,-1.117178 -2.3461,-1.117188 -1.00209,1e-5 -1.78412,0.372406 -2.34609,1.117188 -0.55521,0.7448 -0.83282,1.794278 -0.83281,3.148437 -1e-5,1.347401 0.2776,2.393493 0.83281,3.138282 0.56197,0.744793 1.344,1.117189 2.34609,1.117187 1.00885,2e-6 1.79088,-0.372394 2.3461,-1.117187 0.56197,-0.744789 0.84296,-1.790881 0.84297,-3.138282 m 1.86875,4.407813 c -2e-5,1.936458 -0.42996,3.375259 -1.28985,4.316406 -0.8599,0.947913 -2.17683,1.421871 -3.95078,1.421876 -0.65678,-5e-6 -1.27631,-0.05079 -1.85859,-0.152344 -0.5823,-0.0948 -1.14766,-0.243754 -1.6961,-0.446875 l 0,-1.817969 c 0.54844,0.297914 1.0901,0.517966 1.625,0.660156 0.53489,0.142185 1.07995,0.213279 1.63516,0.213281 1.22551,-2e-6 2.14296,-0.321617 2.75234,-0.964843 0.60937,-0.63646 0.91406,-1.601303 0.91407,-2.894532 l 0,-0.924219 c -0.38595,0.670314 -0.88022,1.171356 -1.48282,1.503126 -0.60261,0.331771 -1.3237,0.497656 -2.16328,0.497656 -1.39479,0 -2.51875,-0.53151 -3.37187,-1.594532 -0.85313,-1.063018 -1.27969,-2.47135 -1.27969,-4.225 0,-1.760409 0.42656,-3.172126 1.27969,-4.235156 0.85312,-1.06301 1.97708,-1.59452 3.37187,-1.594532 0.83958,1.2e-5 1.56067,0.165897 2.16328,0.497657 0.6026,0.331781 1.09687,0.832823 1.48282,1.503125 l 0,-1.726563 1.86875,0 0,9.963282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4913"
+         inkscape:connector-curvature="0" /><path
+         d="m -242.16763,-60.803328 0,6.865626 -1.86875,0 0,-6.804688 c -1e-5,-1.076555 -0.2099,-1.882283 -0.62968,-2.417188 -0.4198,-0.534886 -1.04949,-0.802333 -1.88907,-0.802343 -1.00886,10e-6 -1.80443,0.321624 -2.38672,0.964843 -0.58229,0.643238 -0.87344,1.52006 -0.87343,2.630469 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.44687,-0.683844 0.97161,-1.195042 1.57422,-1.533594 0.60936,-0.33853 1.31015,-0.507801 2.10234,-0.507813 1.30676,1.2e-5 2.2953,0.406262 2.96562,1.21875 0.67031,0.805739 1.00546,1.994019 1.00547,3.564844"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4915"
+         inkscape:connector-curvature="0" /><path
+         d="m -233.81919,-69.100984 12.82734,0 0,1.726562 -5.38281,0 0,13.43672 -2.06172,0 0,-13.43672 -5.38281,0 0,-1.726562"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4917"
+         inkscape:connector-curvature="0" /><path
+         d="m -212.86684,-60.09239 0,0.914063 -8.59219,0 c 0.0813,1.286462 0.46718,2.268232 1.15781,2.945312 0.69739,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,10e-7 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.176039 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767188 c -0.67032,0.284375 -1.35756,0.501041 -2.06172,0.65 -0.70417,0.148958 -1.4185,0.223437 -2.14297,0.223437 -1.81459,0 -3.25339,-0.528125 -4.31641,-1.584375 -1.05625,-1.056248 -1.58437,-2.484892 -1.58437,-4.285938 0,-1.861972 0.50104,-3.338012 1.50312,-4.428125 1.00886,-1.096864 2.36641,-1.645301 4.07266,-1.645313 1.5302,1.2e-5 2.73879,0.494282 3.62578,1.482813 0.89374,0.98178 1.34062,2.319018 1.34063,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21407,-0.914062 -1.04271,10e-6 -1.87891,0.294541 -2.50859,0.883593 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4919"
+         inkscape:connector-curvature="0" /><path
+         d="m -200.9231,-63.129109 c 0.46718,-0.839573 1.02577,-1.459104 1.67579,-1.858594 0.64998,-0.399468 1.41509,-0.599207 2.29531,-0.599219 1.18488,1.2e-5 2.09894,0.416418 2.74219,1.249219 0.64321,0.826052 0.96482,2.004175 0.96484,3.534375 l 0,6.865626 -1.87891,0 0,-6.804688 c -10e-6,-1.090096 -0.19298,-1.89921 -0.5789,-2.427344 -0.38596,-0.528115 -0.97502,-0.792177 -1.76719,-0.792187 -0.96824,10e-6 -1.73335,0.321624 -2.29531,0.964843 -0.56199,0.643238 -0.84298,1.52006 -0.84297,2.630469 l 0,6.428907 -1.87891,0 0,-6.804688 c -1e-5,-1.096867 -0.19298,-1.905981 -0.5789,-2.427344 -0.38595,-0.528115 -0.98178,-0.792177 -1.7875,-0.792187 -0.9547,10e-6 -1.71303,0.325009 -2.275,0.975 -0.56199,0.643237 -0.84298,1.516674 -0.84297,2.620312 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.42656,-0.697386 0.93775,-1.211969 1.53359,-1.54375 0.59583,-0.33176 1.30338,-0.497645 2.12266,-0.497657 0.82603,1.2e-5 1.52681,0.209908 2.10234,0.629688 0.58228,0.419802 1.01223,1.029177 1.28984,1.828125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4921"
+         inkscape:connector-curvature="0" /><path
+         d="m -187.69965,-55.643952 0,6.032813 -1.87891,0 0,-15.701564 1.87891,0 0,1.726563 c 0.3927,-0.677073 0.88697,-1.178114 1.48281,-1.503125 0.6026,-0.33176 1.32031,-0.497645 2.15313,-0.497657 1.38124,1.2e-5 2.50181,0.548449 3.36171,1.645313 0.86666,1.096884 1.29999,2.53907 1.3,4.326563 -1e-5,1.787504 -0.43334,3.22969 -1.3,4.326562 -0.8599,1.096876 -1.98047,1.645313 -3.36171,1.645313 -0.83282,0 -1.55053,-0.1625 -2.15313,-0.4875 -0.59584,-0.33177 -1.09011,-0.836197 -1.48281,-1.513281 m 6.35781,-3.971094 c -1e-5,-1.374472 -0.28438,-2.451034 -0.85312,-3.229688 -0.56199,-0.785407 -1.33725,-1.178115 -2.32579,-1.178125 -0.98854,1e-5 -1.76719,0.392718 -2.33593,1.178125 -0.56199,0.778654 -0.84298,1.855216 -0.84297,3.229688 -1e-5,1.374483 0.28098,2.45443 0.84297,3.239844 0.56874,0.778647 1.34739,1.16797 2.33593,1.167969 0.98854,1e-6 1.7638,-0.389322 2.32579,-1.167969 0.56874,-0.785414 0.85311,-1.865361 0.85312,-3.239844"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4923"
+         inkscape:connector-curvature="0" /><path
+         d="m -176.30434,-69.740828 1.86875,0 0,15.803126 -1.86875,0 0,-15.803126"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4925"
+         inkscape:connector-curvature="0" /><path
+         d="m -165.36607,-59.655671 c -1.5099,5e-6 -2.55599,0.172662 -3.13828,0.517969 -0.5823,0.345317 -0.87344,0.934379 -0.87344,1.767187 0,0.663545 0.21666,1.191669 0.65,1.584375 0.4401,0.385939 1.03593,0.578908 1.7875,0.578907 1.03593,1e-6 1.86536,-0.365624 2.48828,-1.096876 0.62968,-0.738017 0.94452,-1.716402 0.94453,-2.935156 l 0,-0.416406 -1.85859,0 m 3.72734,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.42657,0.690626 -0.95808,1.201824 -1.59453,1.533594 -0.63646,0.325 -1.41511,0.4875 -2.33594,0.4875 -1.16458,0 -2.09219,-0.325 -2.78281,-0.975 -0.68385,-0.656769 -1.02578,-1.533592 -1.02578,-2.630469 0,-1.279683 0.42656,-2.244526 1.27969,-2.894531 0.85989,-0.649993 2.13958,-0.974993 3.83906,-0.975 l 2.62031,0 0,-0.182813 c -1e-5,-0.859887 -0.28438,-1.523429 -0.85312,-1.990625 -0.56199,-0.473948 -1.35417,-0.710927 -2.37656,-0.710937 -0.65001,10e-6 -1.28308,0.07787 -1.89922,0.233593 -0.61615,0.155739 -1.2086,0.389333 -1.77735,0.700782 l 0,-1.726563 c 0.68385,-0.264051 1.3474,-0.460405 1.99063,-0.589063 0.64322,-0.135405 1.26952,-0.203113 1.8789,-0.203125 1.64531,1.2e-5 2.87421,0.426574 3.68672,1.279688 0.81249,0.853135 1.21874,2.146363 1.21875,3.879688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4927"
+         inkscape:connector-curvature="0" /><path
+         d="m -155.93091,-68.54239 0,3.229687 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c 0,0.927607 0.12526,1.52344 0.37578,1.7875 0.25729,0.264065 0.77526,0.396096 1.55391,0.396094 l 1.91953,0 0,1.564063 -1.91953,0 c -1.44219,0 -2.4375,-0.267448 -2.98594,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82265,-2.945313 l 0,-6.175 -1.3711,0 0,-1.452344 1.3711,0 0,-3.229687 1.8789,0"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4929"
+         inkscape:connector-curvature="0" /><path
+         d="m -139.88404,-60.09239 0,0.914063 -8.59219,0 c 0.0812,1.286462 0.46719,2.268232 1.15782,2.945312 0.69739,0.670314 1.66562,1.00547 2.90468,1.005469 0.7177,10e-7 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.176039 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767188 c -0.67032,0.284375 -1.35756,0.501041 -2.06172,0.65 -0.70417,0.148958 -1.41849,0.223437 -2.14297,0.223437 -1.81458,0 -3.25338,-0.528125 -4.3164,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.7388,0.494282 3.62579,1.482813 0.89374,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21406,-0.914062 -1.04272,10e-6 -1.87891,0.294541 -2.5086,0.883593 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4931"
+         inkscape:connector-curvature="0" /><path
+         d="m -131.1395,-60.468171 5.47422,0 0,1.665625 -5.47422,0 0,-1.665625"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4933"
+         inkscape:connector-curvature="0" /><path
+         d="m -115.97623,-69.100984 2.05156,0 0,15.163282 -2.05156,0 0,-15.163282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4935"
+         inkscape:connector-curvature="0" /><path
+         d="m -100.46761,-60.803328 0,6.865626 -1.86875,0 0,-6.804688 c -1e-5,-1.076555 -0.20991,-1.882283 -0.62969,-2.417188 -0.4198,-0.534886 -1.04949,-0.802333 -1.88906,-0.802343 -1.00886,10e-6 -1.80444,0.321624 -2.38672,0.964843 -0.5823,0.643238 -0.87344,1.52006 -0.87344,2.630469 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.44687,-0.683844 0.97161,-1.195042 1.57422,-1.533594 0.60937,-0.33853 1.31015,-0.507801 2.10234,-0.507813 1.30676,1.2e-5 2.2953,0.406262 2.96563,1.21875 0.6703,0.805739 1.00545,1.994019 1.00547,3.564844"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4937"
+         inkscape:connector-curvature="0" /><path
+         d="m -96.791052,-69.740828 1.878906,0 0,9.333594 5.575782,-4.905469 2.386719,0 -6.032813,5.321875 6.286719,6.053126 -2.4375,0 -5.778907,-5.555469 0,5.555469 -1.878906,0 0,-15.803126"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4939"
+         inkscape:connector-curvature="0" /><path
+         d="m -77.402783,-64.977547 0,1.767188 c -0.528133,-0.270824 -1.07657,-0.473949 -1.645312,-0.609375 -0.568757,-0.135407 -1.157819,-0.203115 -1.767188,-0.203125 -0.927609,1e-5 -1.625004,0.142197 -2.092187,0.426563 -0.46042,0.284384 -0.690629,0.710946 -0.690626,1.279687 -3e-6,0.433341 0.165883,0.775268 0.497657,1.025781 0.331767,0.243758 0.998693,0.477351 2.000781,0.700782 l 0.639844,0.142187 c 1.327076,0.284381 2.268221,0.687246 2.823438,1.208594 0.561969,0.514588 0.842959,1.235681 0.842968,2.163281 -9e-6,1.056253 -0.419801,1.89245 -1.259375,2.508594 -0.83282,0.616146 -1.980475,0.924219 -3.442969,0.924219 -0.609379,0 -1.245837,-0.06094 -1.909375,-0.182812 -0.656773,-0.115105 -1.350783,-0.291146 -2.082031,-0.528125 l 0,-1.929688 c 0.690623,0.358856 1.371091,0.629689 2.041406,0.8125 0.670309,0.176043 1.33385,0.264064 1.990625,0.264063 0.880203,1e-6 1.557285,-0.148957 2.03125,-0.446876 0.473951,-0.304685 0.71093,-0.731247 0.710938,-1.279687 -8e-6,-0.507809 -0.172664,-0.897132 -0.517969,-1.167969 -0.338549,-0.270829 -1.086725,-0.531506 -2.244531,-0.782031 l -0.65,-0.152344 c -1.157816,-0.243745 -1.994013,-0.61614 -2.508594,-1.117188 -0.514585,-0.507805 -0.771876,-1.201815 -0.771875,-2.082031 -10e-7,-1.069782 0.379165,-1.895823 1.1375,-2.478125 0.75833,-0.58228 1.834892,-0.873426 3.229688,-0.873438 0.690618,1.2e-5 1.340618,0.05079 1.95,0.152344 0.609367,0.101574 1.171345,0.253918 1.685937,0.457031"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4941"
+         inkscape:connector-curvature="0" /><path
+         d="m -65.621514,-64.875984 0,1.746875 c -0.528135,-0.291136 -1.059645,-0.507803 -1.594532,-0.65 -0.528133,-0.148948 -1.063028,-0.223427 -1.604687,-0.223437 -1.211985,10e-6 -2.15313,0.385947 -2.823438,1.157812 -0.670316,0.765112 -1.005472,1.841674 -1.005469,3.229688 -3e-6,1.388025 0.335153,2.467972 1.005469,3.239844 0.670308,0.765106 1.611453,1.147657 2.823438,1.147656 0.541659,10e-7 1.076554,-0.07109 1.604687,-0.213281 0.534887,-0.148957 1.066397,-0.369009 1.594532,-0.660157 l 0,1.726563 c -0.521364,0.24375 -1.06303,0.426563 -1.625,0.548438 -0.555217,0.121874 -1.147664,0.182812 -1.777344,0.182812 -1.713026,0 -3.073962,-0.538281 -4.082813,-1.614844 -1.008856,-1.07656 -1.513282,-2.528902 -1.513281,-4.357031 -10e-7,-1.855201 0.507811,-3.314314 1.523437,-4.377344 1.022392,-1.06301 2.420568,-1.59452 4.194532,-1.594532 0.575513,1.2e-5 1.137492,0.06095 1.685937,0.182813 0.548429,0.115115 1.079939,0.291157 1.594532,0.528125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4943"
+         inkscape:connector-curvature="0" /><path
+         d="m -57.181683,-59.655671 c -1.509901,5e-6 -2.555994,0.172662 -3.138281,0.517969 -0.582295,0.345317 -0.873441,0.934379 -0.873438,1.767187 -3e-6,0.663545 0.216663,1.191669 0.65,1.584375 0.4401,0.385939 1.035933,0.578908 1.7875,0.578907 1.035931,1e-6 1.865357,-0.365624 2.488282,-1.096876 0.629678,-0.738017 0.944522,-1.716402 0.944531,-2.935156 l 0,-0.416406 -1.858594,0 m 3.727344,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.426571,0.690626 -0.958081,1.201824 -1.594531,1.533594 -0.636466,0.325 -1.415111,0.4875 -2.335938,0.4875 -1.164587,0 -2.092191,-0.325 -2.782813,-0.975 -0.683856,-0.656769 -1.025782,-1.533592 -1.025781,-2.630469 -1e-6,-1.279683 0.426561,-2.244526 1.279688,-2.894531 0.859892,-0.649993 2.139578,-0.974993 3.839062,-0.975 l 2.620313,0 0,-0.182813 c -9e-6,-0.859887 -0.284384,-1.523429 -0.853125,-1.990625 -0.561987,-0.473948 -1.354174,-0.710927 -2.376563,-0.710937 -0.650005,10e-6 -1.283077,0.07787 -1.899219,0.233593 -0.616149,0.155739 -1.208596,0.389333 -1.777343,0.700782 l 0,-1.726563 c 0.683851,-0.264051 1.347392,-0.460405 1.990625,-0.589063 0.643224,-0.135405 1.269526,-0.203113 1.878906,-0.203125 1.645305,1.2e-5 2.87421,0.426574 3.686719,1.279688 0.81249,0.853135 1.218739,2.146363 1.21875,3.879688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4945"
+         inkscape:connector-curvature="0" /><path
+         d="m -47.787146,-55.643952 0,6.032813 -1.878906,0 0,-15.701564 1.878906,0 0,1.726563 c 0.392704,-0.677073 0.886975,-1.178114 1.482813,-1.503125 0.602598,-0.33176 1.320306,-0.497645 2.153125,-0.497657 1.381241,1.2e-5 2.501813,0.548449 3.361719,1.645313 0.866655,1.096884 1.299988,2.53907 1.3,4.326563 -1.2e-5,1.787504 -0.433345,3.22969 -1.3,4.326562 -0.859906,1.096876 -1.980478,1.645313 -3.361719,1.645313 -0.832819,0 -1.550527,-0.1625 -2.153125,-0.4875 -0.595838,-0.33177 -1.090109,-0.836197 -1.482813,-1.513281 m 6.357813,-3.971094 c -1e-5,-1.374472 -0.284385,-2.451034 -0.853125,-3.229688 -0.561988,-0.785407 -1.337248,-1.178115 -2.325781,-1.178125 -0.988548,1e-5 -1.767193,0.392718 -2.335938,1.178125 -0.561983,0.778654 -0.842973,1.855216 -0.842969,3.229688 -4e-6,1.374483 0.280986,2.45443 0.842969,3.239844 0.568745,0.778647 1.34739,1.16797 2.335938,1.167969 0.988533,1e-6 1.763793,-0.389322 2.325781,-1.167969 0.56874,-0.785414 0.853115,-1.865361 0.853125,-3.239844"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4947"
+         inkscape:connector-curvature="0" /><path
+         d="m -26.662145,-60.09239 0,0.914063 -8.592188,0 c 0.08125,1.286462 0.467184,2.268232 1.157812,2.945312 0.697391,0.670314 1.665619,1.00547 2.904688,1.005469 0.7177,10e-7 1.41171,-0.08802 2.082031,-0.264063 0.677074,-0.176039 1.347386,-0.440102 2.010938,-0.792187 l 0,1.767188 c -0.670323,0.284375 -1.357562,0.501041 -2.061719,0.65 -0.704175,0.148958 -1.418497,0.223437 -2.142969,0.223437 -1.814589,0 -3.253389,-0.528125 -4.316406,-1.584375 -1.056252,-1.056248 -1.584377,-2.484892 -1.584375,-4.285938 -2e-6,-1.861972 0.50104,-3.338012 1.503125,-4.428125 1.00885,-1.096864 2.366401,-1.645301 4.072656,-1.645313 1.5302,1.2e-5 2.738793,0.494282 3.625782,1.482813 0.893738,0.98178 1.340613,2.319018 1.340625,4.011719 m -1.86875,-0.548438 c -0.01355,-1.022388 -0.301312,-1.838272 -0.863282,-2.447656 -0.555217,-0.609365 -1.293237,-0.914052 -2.214062,-0.914062 -1.042714,10e-6 -1.878912,0.294541 -2.508594,0.883593 -0.622921,0.589071 -0.981774,1.418498 -1.076563,2.488282 l 6.662501,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4949"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-size:9.60000038px"
+       id="text5819"><path
+         d="m -393.83092,-40.21505 0,5.697657 2.57969,0 c 0.95468,8e-6 1.6927,-0.247128 2.21406,-0.741406 0.52134,-0.494262 0.78202,-1.198428 0.78203,-2.112501 -1e-5,-0.90728 -0.26069,-1.60806 -0.78203,-2.102343 -0.52136,-0.494258 -1.25938,-0.741393 -2.21406,-0.741407 l -2.57969,0 m -2.05156,-1.685937 4.63125,0 c 1.69947,1.5e-5 2.98254,0.385952 3.84922,1.157812 0.87342,0.765118 1.31014,1.889075 1.31015,3.371875 -10e-6,1.496364 -0.43673,2.627092 -1.31015,3.392188 -0.86668,0.765111 -2.14975,1.147663 -3.84922,1.147656 l -2.57969,0 0,6.093751 -2.05156,0 0,-15.163282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4952"
+         inkscape:connector-curvature="0" /><path
+         d="m -382.79108,-28.464268 3.35157,0 0,-11.567969 -3.6461,0.73125 0,-1.86875 3.62578,-0.73125 2.05157,0 0,13.436719 3.35156,0 0,1.726563 -8.73438,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4954"
+         inkscape:connector-curvature="0" /><path
+         d="m -363.46373,-41.900987 3.05703,0 3.86953,10.31875 3.88984,-10.31875 3.05704,0 0,15.163282 -2.00079,0 0,-13.314845 -3.91015,10.400001 -2.06172,0 -3.91016,-10.400001 0,13.314845 -1.99062,0 0,-15.163282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4956"
+         inkscape:connector-curvature="0" /><path
+         d="m -340.4192,-32.455674 c -1.5099,5e-6 -2.55599,0.172662 -3.13828,0.517968 -0.58229,0.345318 -0.87344,0.93438 -0.87344,1.767188 0,0.663545 0.21667,1.191669 0.65,1.584375 0.4401,0.385939 1.03594,0.578908 1.7875,0.578906 1.03593,2e-6 1.86536,-0.365623 2.48829,-1.096875 0.62967,-0.738017 0.94452,-1.716402 0.94453,-2.935156 l 0,-0.416406 -1.8586,0 m 3.72735,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.42657,0.690626 -0.95808,1.201824 -1.59453,1.533594 -0.63647,0.325 -1.41512,0.4875 -2.33594,0.4875 -1.16459,0 -2.09219,-0.325 -2.78282,-0.975 -0.68385,-0.65677 -1.02578,-1.533592 -1.02578,-2.630469 0,-1.279683 0.42656,-2.244526 1.27969,-2.894531 0.85989,-0.649994 2.13958,-0.974993 3.83906,-0.975 l 2.62032,0 0,-0.182813 c -10e-6,-0.859888 -0.28439,-1.523429 -0.85313,-1.990625 -0.56199,-0.473949 -1.35417,-0.710927 -2.37656,-0.710938 -0.65001,1.1e-5 -1.28308,0.07787 -1.89922,0.233594 -0.61615,0.155739 -1.2086,0.389333 -1.77734,0.700782 l 0,-1.726563 c 0.68385,-0.264051 1.34739,-0.460405 1.99062,-0.589063 0.64323,-0.135405 1.26953,-0.203113 1.87891,-0.203125 1.6453,1.2e-5 2.87421,0.426574 3.68672,1.279688 0.81249,0.853135 1.21874,2.146362 1.21875,3.879688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4958"
+         inkscape:connector-curvature="0" /><path
+         d="m -330.98404,-41.342394 0,3.229688 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c -1e-5,0.927607 0.12525,1.52344 0.37578,1.7875 0.25729,0.264065 0.77525,0.396096 1.5539,0.396094 l 1.91954,0 0,1.564063 -1.91954,0 c -1.44219,0 -2.4375,-0.267448 -2.98593,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82266,-2.945313 l 0,-6.175 -1.37109,0 0,-1.452344 1.37109,0 0,-3.229688 1.87891,0"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4960"
+         inkscape:connector-curvature="0" /><path
+         d="m -314.93717,-32.892393 0,0.914062 -8.59219,0 c 0.0813,1.286463 0.46719,2.268233 1.15781,2.945313 0.6974,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,1e-6 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.17604 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767187 c -0.67032,0.284376 -1.35756,0.501042 -2.06172,0.650001 -0.70417,0.148958 -1.41849,0.223437 -2.14297,0.223437 -1.81458,0 -3.25339,-0.528125 -4.3164,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.7388,0.494282 3.62579,1.482813 0.89373,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21406,-0.914063 -1.04272,1.1e-5 -1.87892,0.294542 -2.5086,0.883594 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4962"
+         inkscape:connector-curvature="0" /><path
+         d="m -305.27857,-36.365831 c -0.2099,-0.121865 -0.44011,-0.209886 -0.69062,-0.264062 -0.24376,-0.06093 -0.51459,-0.0914 -0.8125,-0.09141 -1.05626,10e-6 -1.86876,0.345323 -2.4375,1.035938 -0.56199,0.683862 -0.84298,1.669018 -0.84297,2.955469 l 0,5.992188 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.3927,-0.690615 0.9039,-1.201812 1.53359,-1.533594 0.62968,-0.33853 1.39479,-0.507801 2.29531,-0.507813 0.12864,1.2e-5 0.27083,0.01017 0.42657,0.03047 0.15572,0.01355 0.32837,0.03725 0.51797,0.07109 l 0.0102,1.919531"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4964"
+         inkscape:connector-curvature="0" /><path
+         d="m -303.29811,-38.112706 1.86875,0 0,11.375001 -1.86875,0 0,-11.375001 m 0,-4.428125 1.86875,0 0,2.366406 -1.86875,0 0,-2.366406"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4966"
+         inkscape:connector-curvature="0" /><path
+         d="m -292.35982,-32.455674 c -1.5099,5e-6 -2.556,0.172662 -3.13828,0.517968 -0.5823,0.345318 -0.87344,0.93438 -0.87344,1.767188 0,0.663545 0.21666,1.191669 0.65,1.584375 0.4401,0.385939 1.03593,0.578908 1.7875,0.578906 1.03593,2e-6 1.86536,-0.365623 2.48828,-1.096875 0.62968,-0.738017 0.94452,-1.716402 0.94453,-2.935156 l 0,-0.416406 -1.85859,0 m 3.72734,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.42657,0.690626 -0.95808,1.201824 -1.59453,1.533594 -0.63646,0.325 -1.41511,0.4875 -2.33594,0.4875 -1.16458,0 -2.09219,-0.325 -2.78281,-0.975 -0.68386,-0.65677 -1.02578,-1.533592 -1.02578,-2.630469 0,-1.279683 0.42656,-2.244526 1.27969,-2.894531 0.85989,-0.649994 2.13958,-0.974993 3.83906,-0.975 l 2.62031,0 0,-0.182813 c -10e-6,-0.859888 -0.28438,-1.523429 -0.85312,-1.990625 -0.56199,-0.473949 -1.35418,-0.710927 -2.37657,-0.710938 -0.65,1.1e-5 -1.28307,0.07787 -1.89921,0.233594 -0.61615,0.155739 -1.2086,0.389333 -1.77735,0.700782 l 0,-1.726563 c 0.68385,-0.264051 1.34739,-0.460405 1.99063,-0.589063 0.64322,-0.135405 1.26952,-0.203113 1.8789,-0.203125 1.64531,1.2e-5 2.87421,0.426574 3.68672,1.279688 0.81249,0.853135 1.21874,2.146362 1.21875,3.879688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4968"
+         inkscape:connector-curvature="0" /><path
+         d="m -284.7731,-42.540831 1.86875,0 0,15.803126 -1.86875,0 0,-15.803126"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4970"
+         inkscape:connector-curvature="0" /><path
+         d="m -263.21139,-41.403331 0,2.000781 c -0.77865,-0.372382 -1.51329,-0.649986 -2.2039,-0.832812 -0.69064,-0.182799 -1.35756,-0.274205 -2.00078,-0.274219 -1.1172,1.4e-5 -1.98048,0.21668 -2.58985,0.65 -0.60261,0.433346 -0.90391,1.049491 -0.9039,1.848438 -10e-6,0.670323 0.19973,1.178135 0.59922,1.523437 0.40624,0.338551 1.17134,0.61277 2.29531,0.822657 l 1.23906,0.253906 c 1.5302,0.291154 2.65754,0.805737 3.38203,1.54375 0.73124,0.731256 1.09687,1.713026 1.09688,2.945313 -10e-6,1.469273 -0.49429,2.583074 -1.48282,3.341406 -0.98178,0.758333 -2.42396,1.1375 -4.32656,1.1375 -0.71771,0 -1.48282,-0.08125 -2.29531,-0.24375 -0.80573,-0.1625 -1.64193,-0.402864 -2.50859,-0.721094 l 0,-2.1125 c 0.83281,0.46719 1.64869,0.819273 2.44765,1.05625 0.79896,0.236981 1.58437,0.35547 2.35625,0.355469 1.17135,1e-6 2.07525,-0.230207 2.71172,-0.690625 0.63645,-0.460414 0.95468,-1.117184 0.95469,-1.970313 -10e-6,-0.744787 -0.23022,-1.327078 -0.69063,-1.746875 -0.45365,-0.419785 -1.20183,-0.734629 -2.24453,-0.944531 l -1.24922,-0.24375 c -1.53021,-0.30468 -2.63724,-0.782024 -3.32109,-1.432031 -0.68386,-0.649991 -1.02578,-1.553897 -1.02578,-2.711719 0,-1.340613 0.47057,-2.396862 1.41172,-3.168751 0.94791,-0.77186 2.25129,-1.157797 3.91015,-1.157812 0.71093,1.5e-5 1.43541,0.06434 2.17344,0.192969 0.73801,0.128661 1.49296,0.321629 2.26484,0.578906"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4972"
+         inkscape:connector-curvature="0" /><path
+         d="m -249.72389,-33.603331 0,6.865626 -1.86875,0 0,-6.804688 c -1e-5,-1.076555 -0.2099,-1.882283 -0.62968,-2.417188 -0.4198,-0.534886 -1.04949,-0.802334 -1.88907,-0.802344 -1.00886,10e-6 -1.80443,0.321625 -2.38671,0.964844 -0.5823,0.643238 -0.87345,1.52006 -0.87344,2.630469 l 0,6.428907 -1.87891,0 0,-15.803126 1.87891,0 0,6.195313 c 0.44687,-0.683844 0.97161,-1.195042 1.57422,-1.533594 0.60937,-0.33853 1.31015,-0.507801 2.10234,-0.507813 1.30676,1.2e-5 2.2953,0.406262 2.96563,1.21875 0.6703,0.805739 1.00545,1.994019 1.00546,3.564844"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4974"
+         inkscape:connector-curvature="0" /><path
+         d="m -236.24654,-32.892393 0,0.914062 -8.59219,0 c 0.0813,1.286463 0.46718,2.268233 1.15781,2.945313 0.69739,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,1e-6 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.17604 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767187 c -0.67032,0.284376 -1.35756,0.501042 -2.06172,0.650001 -0.70417,0.148958 -1.4185,0.223437 -2.14297,0.223437 -1.81459,0 -3.25339,-0.528125 -4.3164,-1.584375 -1.05626,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.73879,0.494282 3.62578,1.482813 0.89374,0.98178 1.34062,2.319018 1.34063,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21407,-0.914063 -1.04271,1.1e-5 -1.87891,0.294542 -2.50859,0.883594 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4976"
+         inkscape:connector-curvature="0" /><path
+         d="m -223.44967,-32.892393 0,0.914062 -8.59218,0 c 0.0812,1.286463 0.46718,2.268233 1.15781,2.945313 0.69739,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,1e-6 1.41171,-0.08802 2.08203,-0.264063 0.67707,-0.17604 1.34738,-0.440102 2.01093,-0.792187 l 0,1.767187 c -0.67032,0.284376 -1.35756,0.501042 -2.06171,0.650001 -0.70418,0.148958 -1.4185,0.223437 -2.14297,0.223437 -1.81459,0 -3.25339,-0.528125 -4.31641,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58437,-4.285938 -1e-5,-1.861972 0.50104,-3.338012 1.50312,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07266,-1.645313 1.5302,1.2e-5 2.73879,0.494282 3.62578,1.482813 0.89374,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55521,-0.609365 -1.29324,-0.914052 -2.21406,-0.914063 -1.04271,1.1e-5 -1.87891,0.294542 -2.50859,0.883594 -0.62292,0.589071 -0.98178,1.418498 -1.07657,2.488282 l 6.6625,-0.01016"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4978"
+         inkscape:connector-curvature="0" /><path
+         d="m -218.53404,-41.342394 0,3.229688 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c -1e-5,0.927607 0.12525,1.52344 0.37578,1.7875 0.25729,0.264065 0.77525,0.396096 1.55391,0.396094 l 1.91953,0 0,1.564063 -1.91953,0 c -1.4422,0 -2.43751,-0.267448 -2.98594,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82266,-2.945313 l 0,-6.175 -1.37109,0 0,-1.452344 1.37109,0 0,-3.229688 1.87891,0"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4980"
+         inkscape:connector-curvature="0" /><path
+         d="m -206.5395,-33.268174 5.47421,0 0,1.665625 -5.47421,0 0,-1.665625"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4982"
+         inkscape:connector-curvature="0" /><path
+         d="m -190.83795,-28.464268 3.35157,0 0,-11.567969 -3.6461,0.73125 0,-1.86875 3.62578,-0.73125 2.05157,0 0,13.436719 3.35156,0 0,1.726563 -8.73438,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4984"
+         inkscape:connector-curvature="0" /><path
+         d="m -173.56215,-33.938487 c -0.97501,7e-6 -1.7435,0.260684 -2.30547,0.782031 -0.55522,0.521361 -0.83282,1.239068 -0.83282,2.153126 0,0.914065 0.2776,1.631773 0.83282,2.153125 0.56197,0.521355 1.33046,0.782032 2.30547,0.782031 0.97499,10e-7 1.74348,-0.260676 2.30546,-0.782031 0.56197,-0.528123 0.84296,-1.24583 0.84297,-2.153125 -10e-6,-0.914058 -0.281,-1.631765 -0.84297,-2.153126 -0.55521,-0.521347 -1.3237,-0.782024 -2.30546,-0.782031 m -2.05157,-0.873437 c -0.88021,-0.216659 -1.56745,-0.626294 -2.06172,-1.228907 -0.4875,-0.602594 -0.73125,-1.337229 -0.73125,-2.203906 0,-1.211967 0.42995,-2.170039 1.28985,-2.874219 0.86666,-0.704152 2.05156,-1.056235 3.55469,-1.05625 1.50988,1.5e-5 2.69478,0.352098 3.55468,1.05625 0.85989,0.70418 1.28984,1.662252 1.28985,2.874219 -1e-5,0.866677 -0.24715,1.601312 -0.74141,2.203906 -0.48751,0.602613 -1.16798,1.012248 -2.04141,1.228907 0.98854,0.230216 1.75702,0.680476 2.30547,1.350781 0.5552,0.670318 0.8328,1.489589 0.83282,2.457813 -2e-5,1.469273 -0.45028,2.596616 -1.35079,3.382031 -0.89376,0.785417 -2.17683,1.178125 -3.84921,1.178125 -1.67241,0 -2.95886,-0.392708 -3.85938,-1.178125 -0.89375,-0.785415 -1.34063,-1.912758 -1.34063,-3.382031 0,-0.968224 0.27761,-1.787495 0.83282,-2.457813 0.5552,-0.670305 1.32708,-1.120565 2.31562,-1.350781 m -0.75156,-3.239844 c 0,0.785427 0.24375,1.398187 0.73125,1.838281 0.49427,0.440113 1.18489,0.660165 2.07188,0.660156 0.8802,9e-6 1.56744,-0.220043 2.06171,-0.660156 0.50104,-0.440094 0.75156,-1.052854 0.75157,-1.838281 -1e-5,-0.785405 -0.25053,-1.398165 -0.75157,-1.838282 -0.49427,-0.44009 -1.18151,-0.660142 -2.06171,-0.660156 -0.88699,1.4e-5 -1.57761,0.220066 -2.07188,0.660156 -0.4875,0.440117 -0.73125,1.052877 -0.73125,1.838282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4986"
+         inkscape:connector-curvature="0" /><path
+         d="m -164.35044,-28.464268 3.35156,0 0,-11.567969 -3.64609,0.73125 0,-1.86875 3.62578,-0.73125 2.05156,0 0,13.436719 3.35156,0 0,1.726563 -8.73437,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4988"
+         inkscape:connector-curvature="0" /><path
+         d="m -142.86996,-35.929112 c 0.46717,-0.839573 1.02577,-1.459104 1.67578,-1.858594 0.64998,-0.399468 1.41509,-0.599207 2.29531,-0.599219 1.18488,1.2e-5 2.09894,0.416418 2.74219,1.249219 0.64321,0.826051 0.96482,2.004175 0.96484,3.534375 l 0,6.865626 -1.8789,0 0,-6.804688 c -2e-5,-1.090096 -0.19299,-1.89921 -0.57891,-2.427344 -0.38595,-0.528115 -0.97502,-0.792178 -1.76719,-0.792188 -0.96824,10e-6 -1.73334,0.321625 -2.29531,0.964844 -0.56199,0.643238 -0.84298,1.52006 -0.84297,2.630469 l 0,6.428907 -1.87891,0 0,-6.804688 c -1e-5,-1.096867 -0.19297,-1.905981 -0.5789,-2.427344 -0.38595,-0.528115 -0.98178,-0.792178 -1.7875,-0.792188 -0.9547,10e-6 -1.71303,0.32501 -2.275,0.975001 -0.56199,0.643237 -0.84298,1.516674 -0.84297,2.620312 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.42656,-0.697386 0.93775,-1.211969 1.53359,-1.54375 0.59583,-0.33176 1.30338,-0.497645 2.12266,-0.497657 0.82603,1.2e-5 1.52681,0.209908 2.10234,0.629688 0.58228,0.419802 1.01223,1.029177 1.28985,1.828125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4990"
+         inkscape:connector-curvature="0" /><path
+         d="m -122.59808,-35.929112 c 0.46717,-0.839573 1.02577,-1.459104 1.67578,-1.858594 0.64999,-0.399468 1.41509,-0.599207 2.29531,-0.599219 1.18488,1.2e-5 2.09894,0.416418 2.74219,1.249219 0.64321,0.826051 0.96482,2.004175 0.96484,3.534375 l 0,6.865626 -1.8789,0 0,-6.804688 c -2e-5,-1.090096 -0.19299,-1.89921 -0.57891,-2.427344 -0.38595,-0.528115 -0.97502,-0.792178 -1.76719,-0.792188 -0.96824,10e-6 -1.73334,0.321625 -2.29531,0.964844 -0.56199,0.643238 -0.84298,1.52006 -0.84297,2.630469 l 0,6.428907 -1.87891,0 0,-6.804688 c 0,-1.096867 -0.19297,-1.905981 -0.5789,-2.427344 -0.38595,-0.528115 -0.98178,-0.792178 -1.7875,-0.792188 -0.9547,10e-6 -1.71303,0.32501 -2.275,0.975001 -0.56199,0.643237 -0.84297,1.516674 -0.84297,2.620312 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.42656,-0.697386 0.93775,-1.211969 1.53359,-1.54375 0.59583,-0.33176 1.30338,-0.497645 2.12266,-0.497657 0.82603,1.2e-5 1.52681,0.209908 2.10234,0.629688 0.58228,0.419802 1.01223,1.029177 1.28985,1.828125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4992"
+         inkscape:connector-curvature="0" /><path
+         d="m -95.105126,-38.112706 -4.113282,5.535157 4.326563,5.839844 -2.203906,0 -3.310939,-4.46875 -3.31094,4.46875 -2.2039,0 4.41797,-5.951563 -4.04219,-5.423438 2.2039,0 3.01641,4.052344 3.016407,-4.052344 2.203907,0"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4994"
+         inkscape:connector-curvature="0" /><path
+         d="m -85.00982,-28.464268 3.351562,0 0,-11.567969 -3.646094,0.73125 0,-1.86875 3.625782,-0.73125 2.051562,0 0,13.436719 3.351563,0 0,1.726563 -8.734375,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4996"
+         inkscape:connector-curvature="0" /><path
+         d="m -67.734015,-33.938487 c -0.975005,7e-6 -1.743494,0.260684 -2.305468,0.782031 -0.555213,0.521361 -0.832816,1.239068 -0.832813,2.153126 -3e-6,0.914065 0.2776,1.631773 0.832813,2.153125 0.561974,0.521355 1.330463,0.782032 2.305468,0.782031 0.974993,10e-7 1.743482,-0.260676 2.305469,-0.782031 0.56197,-0.528123 0.842959,-1.24583 0.842969,-2.153125 -1e-5,-0.914058 -0.280999,-1.631765 -0.842969,-2.153126 -0.555216,-0.521347 -1.323705,-0.782024 -2.305469,-0.782031 m -2.051562,-0.873437 c -0.880212,-0.216659 -1.567451,-0.626294 -2.061719,-1.228907 -0.487502,-0.602594 -0.731252,-1.337229 -0.73125,-2.203906 -2e-6,-1.211967 0.429946,-2.170039 1.289844,-2.874219 0.866663,-0.704152 2.051557,-1.056235 3.554687,-1.05625 1.509888,1.5e-5 2.694783,0.352098 3.554688,1.05625 0.859885,0.70418 1.289833,1.662252 1.289844,2.874219 -1.1e-5,0.866677 -0.247147,1.601312 -0.741406,2.203906 -0.487511,0.602613 -1.167979,1.012248 -2.041407,1.228907 0.988532,0.230216 1.757021,0.680476 2.305469,1.350781 0.555197,0.670318 0.832801,1.489589 0.832813,2.457813 -1.2e-5,1.469273 -0.450272,2.596616 -1.350782,3.382031 -0.893759,0.785417 -2.176831,1.178125 -3.849219,1.178125 -1.6724,0 -2.958858,-0.392708 -3.859375,-1.178125 -0.893752,-0.785415 -1.340626,-1.912758 -1.340625,-3.382031 -10e-7,-0.968224 0.277603,-1.787495 0.832813,-2.457813 0.555205,-0.670305 1.32708,-1.120565 2.315625,-1.350781 m -0.751563,-3.239844 c -3e-6,0.785427 0.243746,1.398187 0.73125,1.838281 0.494266,0.440113 1.184891,0.660165 2.071875,0.660156 0.880201,9e-6 1.56744,-0.220043 2.061719,-0.660156 0.501033,-0.440094 0.751553,-1.052854 0.751563,-1.838281 -1e-5,-0.785405 -0.25053,-1.398165 -0.751563,-1.838282 -0.494279,-0.44009 -1.181518,-0.660142 -2.061719,-0.660156 -0.886984,1.4e-5 -1.577609,0.220066 -2.071875,0.660156 -0.487504,0.440117 -0.731253,1.052877 -0.73125,1.838282"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path4998"
+         inkscape:connector-curvature="0" /><path
+         d="m -58.522302,-28.464268 3.351563,0 0,-11.567969 -3.646094,0.73125 0,-1.86875 3.625781,-0.73125 2.051563,0 0,13.436719 3.351562,0 0,1.726563 -8.734375,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5000"
+         inkscape:connector-curvature="0" /><path
+         d="m -37.041839,-35.929112 c 0.467176,-0.839573 1.025769,-1.459104 1.675781,-1.858594 0.649987,-0.399468 1.415091,-0.599207 2.295313,-0.599219 1.18488,1.2e-5 2.098942,0.416418 2.742188,1.249219 0.643211,0.826051 0.964825,2.004175 0.964843,3.534375 l 0,6.865626 -1.878906,0 0,-6.804688 c -1.7e-5,-1.090096 -0.192985,-1.89921 -0.578906,-2.427344 -0.385953,-0.528115 -0.975015,-0.792178 -1.767188,-0.792188 -0.968242,10e-6 -1.733346,0.321625 -2.295312,0.964844 -0.561991,0.643238 -0.84298,1.52006 -0.842969,2.630469 l 0,6.428907 -1.878907,0 0,-6.804688 c -9e-6,-1.096867 -0.192977,-1.905981 -0.578906,-2.427344 -0.385946,-0.528115 -0.981778,-0.792178 -1.7875,-0.792188 -0.954693,10e-6 -1.713026,0.32501 -2.275,0.975001 -0.561983,0.643237 -0.842973,1.516674 -0.842969,2.620312 l 0,6.428907 -1.878906,0 0,-11.375001 1.878906,0 0,1.767188 c 0.426558,-0.697386 0.937756,-1.211969 1.533594,-1.54375 0.595827,-0.33176 1.303379,-0.497645 2.122656,-0.497657 0.826034,1.2e-5 1.526814,0.209908 2.102344,0.629688 0.582282,0.419802 1.012229,1.029177 1.289844,1.828125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5002"
+         inkscape:connector-curvature="0" /><path
+         d="m -16.769958,-35.929112 c 0.467176,-0.839573 1.02577,-1.459104 1.675781,-1.858594 0.649987,-0.399468 1.415091,-0.599207 2.295313,-0.599219 1.18488,1.2e-5 2.098942,0.416418 2.742188,1.249219 0.6432107,0.826051 0.964825,2.004175 0.9648435,3.534375 l 0,6.865626 -1.8789065,0 0,-6.804688 c -1.6e-5,-1.090096 -0.192985,-1.89921 -0.578906,-2.427344 -0.385953,-0.528115 -0.975015,-0.792178 -1.767188,-0.792188 -0.968242,10e-6 -1.733346,0.321625 -2.295312,0.964844 -0.561991,0.643238 -0.84298,1.52006 -0.842969,2.630469 l 0,6.428907 -1.878906,0 0,-6.804688 c -10e-6,-1.096867 -0.192978,-1.905981 -0.578907,-2.427344 -0.385946,-0.528115 -0.981778,-0.792178 -1.7875,-0.792188 -0.954693,10e-6 -1.713026,0.32501 -2.275,0.975001 -0.561983,0.643237 -0.842973,1.516674 -0.842969,2.620312 l 0,6.428907 -1.878906,0 0,-11.375001 1.878906,0 0,1.767188 c 0.426559,-0.697386 0.937756,-1.211969 1.533594,-1.54375 0.595828,-0.33176 1.303379,-0.497645 2.122656,-0.497657 0.826034,1.2e-5 1.526814,0.209908 2.102344,0.629688 0.582282,0.419802 1.012229,1.029177 1.289844,1.828125"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5004"
+         inkscape:connector-curvature="0" /><path
+         d="m 4.5886233,-41.900987 1.7265626,0 -5.2812503,17.092969 -1.72656255,0 5.28125025,-17.092969"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5006"
+         inkscape:connector-curvature="0" /><path
+         d="m 14.663617,-41.900987 9.750001,0 0,0.873437 -5.504688,14.289845 -2.142969,0 5.179688,-13.43672 -7.282032,0 0,-1.726562"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5008"
+         inkscape:connector-curvature="0" /><path
+         d="m 28.42536,-29.317393 2.142969,0 0,2.579688 -2.142969,0 0,-2.579688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5010"
+         inkscape:connector-curvature="0" /><path
+         d="m 35.402686,-28.464268 3.351562,0 0,-11.567969 -3.646094,0.73125 0,-1.86875 3.625782,-0.73125 2.051562,0 0,13.436719 3.351563,0 0,1.726563 -8.734375,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5012"
+         inkscape:connector-curvature="0" /><path
+         d="m 48.666742,-41.900987 2.142969,0 0,1.746875 -1.665625,3.25 -1.310156,0 0.832812,-3.25 0,-1.746875 m 4.164063,0 2.142969,0 0,1.746875 -1.665625,3.25 -1.310157,0 0.832813,-3.25 0,-1.746875"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5014"
+         inkscape:connector-curvature="0" /><path
+         d="m 74.86988,-38.112706 -4.113282,5.535157 4.326563,5.839844 -2.203906,0 -3.310938,-4.46875 -3.310938,4.46875 -2.203906,0 4.417969,-5.951563 -4.042188,-5.423438 2.203907,0 3.016406,4.052344 3.016406,-4.052344 2.203907,0"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5016"
+         inkscape:connector-curvature="0" /><path
+         d="m 84.091748,-41.900987 9.750001,0 0,0.873437 -5.504688,14.289845 -2.142969,0 5.179688,-13.43672 -7.282032,0 0,-1.726562"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5018"
+         inkscape:connector-curvature="0" /><path
+         d="m 97.853491,-29.317393 2.142969,0 0,2.579688 -2.142969,0 0,-2.579688"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5020"
+         inkscape:connector-curvature="0" /><path
+         d="m 104.83082,-28.464268 3.35156,0 0,-11.567969 -3.64609,0.73125 0,-1.86875 3.62578,-0.73125 2.05156,0 0,13.436719 3.35156,0 0,1.726563 -8.73437,0 0,-1.726563"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5022"
+         inkscape:connector-curvature="0" /><path
+         d="m 118.09487,-41.900987 2.14297,0 0,1.746875 -1.66562,3.25 -1.31016,0 0.83281,-3.25 0,-1.746875 m 4.16407,0 2.14296,0 0,1.746875 -1.66562,3.25 -1.31016,0 0.83282,-3.25 0,-1.746875"
+         style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+         id="path5024"
+         inkscape:connector-curvature="0" /></g><g
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:164.99999762%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#f6921e;fill-opacity:1"
+       id="text4741-7"><path
+         d="m -345.92125,420.07328 -2.24375,1.2125 2.24375,1.21875 -0.3625,0.6125 -2.1,-1.26875 0,2.35625 -0.7125,0 0,-2.35625 -2.1,1.26875 -0.3625,-0.6125 2.24375,-1.21875 -2.24375,-1.2125 0.3625,-0.61875 2.1,1.26875 0,-2.35625 0.7125,0 0,2.35625 2.1,-1.26875 0.3625,0.61875"
+         id="path5027"
+         inkscape:connector-curvature="0" /><path
+         d="m -343.02125,419.57328 0,7.25625 1.525,0 c 1.28749,1e-5 2.22916,-0.29166 2.825,-0.875 0.59999,-0.58333 0.89999,-1.50416 0.9,-2.7625 -10e-6,-1.24999 -0.30001,-2.16457 -0.9,-2.74375 -0.59584,-0.58332 -1.53751,-0.87499 -2.825,-0.875 l -1.525,0 m -1.2625,-1.0375 2.59375,0 c 1.80833,1e-5 3.13541,0.3771 3.98125,1.13125 0.84582,0.75001 1.26874,1.92501 1.26875,3.525 -10e-6,1.60834 -0.42501,2.78959 -1.275,3.54375 -0.85001,0.75417 -2.17501,1.13125 -3.975,1.13125 l -2.59375,0 0,-9.33125"
+         id="path5029"
+         inkscape:connector-curvature="0" /><path
+         d="m -328.49625,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5031"
+         inkscape:connector-curvature="0" /><path
+         d="m -326.60875,418.14203 1.15,0 0,9.725 -1.15,0 0,-9.725"
+         id="path5033"
+         inkscape:connector-curvature="0" /><path
+         d="m -317.07125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.025,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83542,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45625,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15625,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5035"
+         inkscape:connector-curvature="0" /><path
+         d="m -314.04625,418.87953 0,1.9875 2.36875,0 0,0.89375 -2.36875,0 0,3.8 c -1e-5,0.57084 0.0771,0.93751 0.23125,1.1 0.15833,0.16251 0.47708,0.24376 0.95625,0.24375 l 1.18125,0 0,0.9625 -1.18125,0 c -0.88751,0 -1.50001,-0.16458 -1.8375,-0.49375 -0.3375,-0.33333 -0.50625,-0.93749 -0.50625,-1.8125 l 0,-3.8 -0.84375,0 0,-0.89375 0.84375,0 0,-1.9875 1.15625,0"
+         id="path5037"
+         inkscape:connector-curvature="0" /><path
+         d="m -304.17125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83542,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45625,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15625,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5039"
+         inkscape:connector-curvature="0" /><path
+         d="m -297.07125,418.87953 0,1.9875 2.36875,0 0,0.89375 -2.36875,0 0,3.8 c 0,0.57084 0.0771,0.93751 0.23125,1.1 0.15833,0.16251 0.47708,0.24376 0.95625,0.24375 l 1.18125,0 0,0.9625 -1.18125,0 c -0.8875,0 -1.5,-0.16458 -1.8375,-0.49375 -0.3375,-0.33333 -0.50625,-0.93749 -0.50625,-1.8125 l 0,-3.8 -0.84375,0 0,-0.89375 0.84375,0 0,-1.9875 1.15625,0"
+         id="path5041"
+         inkscape:connector-curvature="0" /><path
+         d="m -287.365,423.64203 0,4.225 -1.15,0 0,-4.1875 c -1e-5,-0.66249 -0.12918,-1.15832 -0.3875,-1.4875 -0.25834,-0.32916 -0.64584,-0.49374 -1.1625,-0.49375 -0.62084,10e-6 -1.11042,0.19793 -1.46875,0.59375 -0.35834,0.39584 -0.53751,0.93543 -0.5375,1.61875 l 0,3.95625 -1.15625,0 0,-9.725 1.15625,0 0,3.8125 c 0.27499,-0.42082 0.59791,-0.73541 0.96875,-0.94375 0.37499,-0.20832 0.80624,-0.31249 1.29375,-0.3125 0.80416,10e-6 1.41249,0.25001 1.825,0.75 0.41249,0.49584 0.61874,1.22709 0.61875,2.19375"
+         id="path5043"
+         inkscape:connector-curvature="0" /><path
+         d="m -279.07125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.025,0.61876 1.7875,0.61875 0.44166,10e-6 0.86875,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83542,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45625,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15625,0.18126 -1.54375,0.54375 -0.38333,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5045"
+         inkscape:connector-curvature="0" /><path
+         d="m -267.12125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5047"
+         inkscape:connector-curvature="0" /><path
+         d="m -259.6275,420.86703 -2.53125,3.40625 2.6625,3.59375 -1.35625,0 -2.0375,-2.75 -2.0375,2.75 -1.35625,0 2.71875,-3.6625 -2.4875,-3.3375 1.35625,0 1.85625,2.49375 1.85625,-2.49375 1.35625,0"
+         id="path5049"
+         inkscape:connector-curvature="0" /><path
+         d="m -254.6775,424.34828 c -0.92917,1e-5 -1.57292,0.10626 -1.93125,0.31875 -0.35834,0.21251 -0.5375,0.57501 -0.5375,1.0875 0,0.40834 0.13333,0.73334 0.4,0.975 0.27083,0.23751 0.63749,0.35626 1.1,0.35625 0.63749,10e-6 1.14791,-0.22499 1.53125,-0.675 0.38749,-0.45416 0.58124,-1.05624 0.58125,-1.80625 l 0,-0.25625 -1.14375,0 m 2.29375,-0.475 0,3.99375 -1.15,0 0,-1.0625 c -0.26251,0.42501 -0.58959,0.73959 -0.98125,0.94375 -0.39167,0.2 -0.87084,0.3 -1.4375,0.3 -0.71667,0 -1.2875,-0.2 -1.7125,-0.6 -0.42084,-0.40416 -0.63125,-0.94374 -0.63125,-1.61875 0,-0.78749 0.2625,-1.38124 0.7875,-1.78125 0.52916,-0.39999 1.31666,-0.59999 2.3625,-0.6 l 1.6125,0 0,-0.1125 c -1e-5,-0.52916 -0.17501,-0.93749 -0.525,-1.225 -0.34584,-0.29166 -0.83334,-0.43749 -1.4625,-0.4375 -0.40001,1e-5 -0.78959,0.0479 -1.16875,0.14375 -0.37917,0.0958 -0.74375,0.23959 -1.09375,0.43125 l 0,-1.0625 c 0.42083,-0.16249 0.82916,-0.28332 1.225,-0.3625 0.39583,-0.0833 0.78124,-0.12499 1.15625,-0.125 1.01249,10e-6 1.76874,0.26251 2.26875,0.7875 0.49999,0.52501 0.74999,1.32084 0.75,2.3875"
+         id="path5051"
+         inkscape:connector-curvature="0" /><path
+         d="m -244.55875,422.21078 c 0.28749,-0.51666 0.63124,-0.89791 1.03125,-1.14375 0.39999,-0.24582 0.87082,-0.36874 1.4125,-0.36875 0.72915,10e-6 1.29165,0.25626 1.6875,0.76875 0.39582,0.50834 0.59373,1.23334 0.59375,2.175 l 0,4.225 -1.15625,0 0,-4.1875 c -1e-5,-0.67082 -0.11876,-1.16874 -0.35625,-1.49375 -0.23751,-0.32499 -0.60001,-0.48749 -1.0875,-0.4875 -0.59585,10e-6 -1.06668,0.19793 -1.4125,0.59375 -0.34584,0.39584 -0.51876,0.93543 -0.51875,1.61875 l 0,3.95625 -1.15625,0 0,-4.1875 c -1e-5,-0.67499 -0.11876,-1.17291 -0.35625,-1.49375 -0.23751,-0.32499 -0.60418,-0.48749 -1.1,-0.4875 -0.58751,10e-6 -1.05417,0.20001 -1.4,0.6 -0.34584,0.39584 -0.51876,0.93334 -0.51875,1.6125 l 0,3.95625 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.26249,-0.42916 0.57708,-0.74582 0.94375,-0.95 0.36666,-0.20415 0.80208,-0.30624 1.30625,-0.30625 0.50832,10e-6 0.93957,0.12918 1.29375,0.3875 0.35832,0.25834 0.62291,0.63334 0.79375,1.125"
+         id="path5053"
+         inkscape:connector-curvature="0" /><path
+         d="m -236.42125,426.81703 0,3.7125 -1.15625,0 0,-9.6625 1.15625,0 0,1.0625 c 0.24167,-0.41666 0.54583,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.8125,-0.30624 1.325,-0.30625 0.85,10e-6 1.53958,0.33751 2.06875,1.0125 0.53333,0.67501 0.79999,1.56251 0.8,2.6625 -1e-5,1.10001 -0.26667,1.98751 -0.8,2.6625 -0.52917,0.67501 -1.21875,1.0125 -2.06875,1.0125 -0.5125,0 -0.95417,-0.1 -1.325,-0.3 -0.36667,-0.20416 -0.67083,-0.51458 -0.9125,-0.93125 m 3.9125,-2.44375 c 0,-0.84582 -0.175,-1.50832 -0.525,-1.9875 -0.34584,-0.48332 -0.82292,-0.72499 -1.43125,-0.725 -0.60833,1e-5 -1.0875,0.24168 -1.4375,0.725 -0.34583,0.47918 -0.51875,1.14168 -0.51875,1.9875 0,0.84584 0.17292,1.51042 0.51875,1.99375 0.35,0.47917 0.82917,0.71876 1.4375,0.71875 0.60833,10e-6 1.08541,-0.23958 1.43125,-0.71875 0.35,-0.48333 0.525,-1.14791 0.525,-1.99375"
+         id="path5055"
+         inkscape:connector-curvature="0" /><path
+         d="m -229.40875,418.14203 1.15,0 0,9.725 -1.15,0 0,-9.725"
+         id="path5057"
+         inkscape:connector-curvature="0" /><path
+         d="m -219.87125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5059"
+         inkscape:connector-curvature="0" /><path
+         d="m -208.88376,424.37328 c 0,-0.84582 -0.175,-1.50832 -0.525,-1.9875 -0.34583,-0.48332 -0.82292,-0.72499 -1.43125,-0.725 -0.60833,1e-5 -1.0875,0.24168 -1.4375,0.725 -0.34583,0.47918 -0.51875,1.14168 -0.51875,1.9875 0,0.84584 0.17292,1.51042 0.51875,1.99375 0.35,0.47917 0.82917,0.71876 1.4375,0.71875 0.60833,10e-6 1.08542,-0.23958 1.43125,-0.71875 0.35,-0.48333 0.525,-1.14791 0.525,-1.99375 m -3.9125,-2.44375 c 0.24167,-0.41666 0.54584,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.8125,-0.30624 1.325,-0.30625 0.85,10e-6 1.53958,0.33751 2.06875,1.0125 0.53333,0.67501 0.8,1.56251 0.8,2.6625 0,1.10001 -0.26667,1.98751 -0.8,2.6625 -0.52917,0.67501 -1.21875,1.0125 -2.06875,1.0125 -0.5125,0 -0.95417,-0.1 -1.325,-0.3 -0.36666,-0.20416 -0.67083,-0.51458 -0.9125,-0.93125 l 0,1.05 -1.15625,0 0,-9.725 1.15625,0 0,3.7875"
+         id="path5061"
+         inkscape:connector-curvature="0" /><path
+         d="m -205.78376,420.86703 1.15,0 0,7 -1.15,0 0,-7 m 0,-2.725 1.15,0 0,1.45625 -1.15,0 0,-1.45625"
+         id="path5063"
+         inkscape:connector-curvature="0" /><path
+         d="m -198.1775,421.94203 c -0.12917,-0.075 -0.27084,-0.12916 -0.425,-0.1625 -0.15001,-0.0375 -0.31667,-0.0562 -0.5,-0.0563 -0.65001,10e-6 -1.15001,0.21251 -1.5,0.6375 -0.34584,0.42084 -0.51875,1.02709 -0.51875,1.81875 l 0,3.6875 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.24166,-0.42499 0.55624,-0.73957 0.94375,-0.94375 0.38749,-0.20832 0.85833,-0.31249 1.4125,-0.3125 0.0792,10e-6 0.16666,0.006 0.2625,0.0188 0.0958,0.008 0.20208,0.0229 0.31875,0.0437 l 0.006,1.18125"
+         id="path5065"
+         inkscape:connector-curvature="0" /><path
+         d="m -192.565,421.92953 0,-3.7875 1.15,0 0,9.725 -1.15,0 0,-1.05 c -0.24167,0.41667 -0.54792,0.72709 -0.91875,0.93125 -0.36667,0.2 -0.80834,0.3 -1.325,0.3 -0.84584,0 -1.53542,-0.33749 -2.06875,-1.0125 -0.52917,-0.67499 -0.79375,-1.56249 -0.79375,-2.6625 0,-1.09999 0.26458,-1.98749 0.79375,-2.6625 0.53333,-0.67499 1.22291,-1.01249 2.06875,-1.0125 0.51666,10e-6 0.95833,0.1021 1.325,0.30625 0.37083,0.20001 0.67708,0.50834 0.91875,0.925 m -3.91875,2.44375 c 0,0.84584 0.17291,1.51042 0.51875,1.99375 0.34999,0.47917 0.82916,0.71876 1.4375,0.71875 0.60833,10e-6 1.08749,-0.23958 1.4375,-0.71875 0.34999,-0.48333 0.52499,-1.14791 0.525,-1.99375 -1e-5,-0.84582 -0.17501,-1.50832 -0.525,-1.9875 -0.35001,-0.48332 -0.82917,-0.72499 -1.4375,-0.725 -0.60834,1e-5 -1.08751,0.24168 -1.4375,0.725 -0.34584,0.47918 -0.51875,1.14168 -0.51875,1.9875"
+         id="path5067"
+         inkscape:connector-curvature="0" /><path
+         d="m -180.35249,421.92953 0,-3.7875 1.15,0 0,9.725 -1.15,0 0,-1.05 c -0.24168,0.41667 -0.54793,0.72709 -0.91875,0.93125 -0.36667,0.2 -0.80834,0.3 -1.325,0.3 -0.84584,0 -1.53542,-0.33749 -2.06875,-1.0125 -0.52917,-0.67499 -0.79375,-1.56249 -0.79375,-2.6625 0,-1.09999 0.26458,-1.98749 0.79375,-2.6625 0.53333,-0.67499 1.22291,-1.01249 2.06875,-1.0125 0.51666,10e-6 0.95833,0.1021 1.325,0.30625 0.37082,0.20001 0.67707,0.50834 0.91875,0.925 m -3.91875,2.44375 c -1e-5,0.84584 0.17291,1.51042 0.51875,1.99375 0.34999,0.47917 0.82916,0.71876 1.4375,0.71875 0.60833,10e-6 1.08749,-0.23958 1.4375,-0.71875 0.34999,-0.48333 0.52499,-1.14791 0.525,-1.99375 -1e-5,-0.84582 -0.17501,-1.50832 -0.525,-1.9875 -0.35001,-0.48332 -0.82917,-0.72499 -1.4375,-0.725 -0.60834,1e-5 -1.08751,0.24168 -1.4375,0.725 -0.34584,0.47918 -0.51876,1.14168 -0.51875,1.9875"
+         id="path5069"
+         inkscape:connector-curvature="0" /><path
+         d="m -170.84624,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.28749,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18543,-1.13124 -0.53125,-1.50625 -0.34168,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5071"
+         inkscape:connector-curvature="0" /><path
+         d="m -164.49624,421.07328 0,1.0875 c -0.32501,-0.16666 -0.66251,-0.29166 -1.0125,-0.375 -0.35001,-0.0833 -0.71251,-0.12499 -1.0875,-0.125 -0.57084,1e-5 -1.00001,0.0875 -1.2875,0.2625 -0.28334,0.17501 -0.42501,0.43751 -0.425,0.7875 -1e-5,0.26668 0.10208,0.47709 0.30625,0.63125 0.20416,0.15001 0.61458,0.29376 1.23125,0.43125 l 0.39375,0.0875 c 0.81666,0.17501 1.39582,0.42293 1.7375,0.74375 0.34582,0.31667 0.51874,0.76042 0.51875,1.33125 -1e-5,0.65001 -0.25834,1.16459 -0.775,1.54375 -0.51251,0.37917 -1.21876,0.56875 -2.11875,0.56875 -0.37501,0 -0.76667,-0.0375 -1.175,-0.1125 -0.40417,-0.0708 -0.83125,-0.17916 -1.28125,-0.325 l 0,-1.1875 c 0.425,0.22084 0.84375,0.38751 1.25625,0.5 0.41249,0.10834 0.82083,0.16251 1.225,0.1625 0.54166,10e-6 0.95833,-0.0917 1.25,-0.275 0.29166,-0.18749 0.43749,-0.44999 0.4375,-0.7875 -1e-5,-0.31249 -0.10626,-0.55208 -0.31875,-0.71875 -0.20834,-0.16666 -0.66876,-0.32708 -1.38125,-0.48125 l -0.4,-0.0937 c -0.71251,-0.14999 -1.22709,-0.37916 -1.54375,-0.6875 -0.31667,-0.31249 -0.475,-0.73957 -0.475,-1.28125 0,-0.65832 0.23333,-1.16666 0.7,-1.525 0.46666,-0.35832 1.12916,-0.53749 1.9875,-0.5375 0.42499,10e-6 0.82499,0.0313 1.2,0.0937 0.37499,0.0625 0.72082,0.15626 1.0375,0.28125"
+         id="path5073"
+         inkscape:connector-curvature="0" /><path
+         d="m -162.28376,420.86703 1.15,0 0,7 -1.15,0 0,-7 m 0,-2.725 1.15,0 0,1.45625 -1.15,0 0,-1.45625"
+         id="path5075"
+         inkscape:connector-curvature="0" /><path
+         d="m -154.1275,424.28578 c -1e-5,-0.83332 -0.17292,-1.47916 -0.51875,-1.9375 -0.34167,-0.45832 -0.82292,-0.68749 -1.44375,-0.6875 -0.61667,1e-5 -1.09792,0.22918 -1.44375,0.6875 -0.34167,0.45834 -0.5125,1.10418 -0.5125,1.9375 0,0.82917 0.17083,1.47292 0.5125,1.93125 0.34583,0.45834 0.82708,0.68751 1.44375,0.6875 0.62083,10e-6 1.10208,-0.22916 1.44375,-0.6875 0.34583,-0.45833 0.51874,-1.10208 0.51875,-1.93125 m 1.15,2.7125 c -1e-5,1.19167 -0.26459,2.07709 -0.79375,2.65625 -0.52917,0.58334 -1.33959,0.875 -2.43125,0.875 -0.40417,0 -0.78542,-0.0312 -1.14375,-0.0937 -0.35834,-0.0583 -0.70625,-0.15 -1.04375,-0.275 l 0,-1.11875 c 0.3375,0.18334 0.67083,0.31875 1,0.40625 0.32916,0.0875 0.66458,0.13125 1.00625,0.13125 0.75416,0 1.31874,-0.19791 1.69375,-0.59375 0.37499,-0.39166 0.56249,-0.98541 0.5625,-1.78125 l 0,-0.56875 c -0.23751,0.41251 -0.54167,0.72084 -0.9125,0.925 -0.37084,0.20417 -0.81459,0.30625 -1.33125,0.30625 -0.85834,0 -1.55,-0.32708 -2.075,-0.98125 -0.525,-0.65416 -0.7875,-1.52083 -0.7875,-2.6 0,-1.08332 0.2625,-1.95207 0.7875,-2.60625 0.525,-0.65416 1.21666,-0.98124 2.075,-0.98125 0.51666,10e-6 0.96041,0.1021 1.33125,0.30625 0.37083,0.20418 0.67499,0.51251 0.9125,0.925 l 0,-1.0625 1.15,0 0,6.13125"
+         id="path5077"
+         inkscape:connector-curvature="0" /><path
+         d="m -144.79,423.64203 0,4.225 -1.15,0 0,-4.1875 c -1e-5,-0.66249 -0.12917,-1.15832 -0.3875,-1.4875 -0.25834,-0.32916 -0.64584,-0.49374 -1.1625,-0.49375 -0.62084,10e-6 -1.11042,0.19793 -1.46875,0.59375 -0.35834,0.39584 -0.5375,0.93543 -0.5375,1.61875 l 0,3.95625 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.275,-0.42082 0.59791,-0.73541 0.96875,-0.94375 0.37499,-0.20832 0.80624,-0.31249 1.29375,-0.3125 0.80416,10e-6 1.41249,0.25001 1.825,0.75 0.41249,0.49584 0.61874,1.22709 0.61875,2.19375"
+         id="path5079"
+         inkscape:connector-curvature="0" /><path
+         d="m -138.02125,421.07328 0,1.0875 c -0.32501,-0.16666 -0.66251,-0.29166 -1.0125,-0.375 -0.35001,-0.0833 -0.71251,-0.12499 -1.0875,-0.125 -0.57084,1e-5 -1,0.0875 -1.2875,0.2625 -0.28334,0.17501 -0.425,0.43751 -0.425,0.7875 0,0.26668 0.10208,0.47709 0.30625,0.63125 0.20416,0.15001 0.61458,0.29376 1.23125,0.43125 l 0.39375,0.0875 c 0.81666,0.17501 1.39583,0.42293 1.7375,0.74375 0.34583,0.31667 0.51874,0.76042 0.51875,1.33125 -1e-5,0.65001 -0.25834,1.16459 -0.775,1.54375 -0.51251,0.37917 -1.21876,0.56875 -2.11875,0.56875 -0.37501,0 -0.76667,-0.0375 -1.175,-0.1125 -0.40417,-0.0708 -0.83125,-0.17916 -1.28125,-0.325 l 0,-1.1875 c 0.425,0.22084 0.84375,0.38751 1.25625,0.5 0.4125,0.10834 0.82083,0.16251 1.225,0.1625 0.54166,10e-6 0.95833,-0.0917 1.25,-0.275 0.29166,-0.18749 0.43749,-0.44999 0.4375,-0.7875 -1e-5,-0.31249 -0.10626,-0.55208 -0.31875,-0.71875 -0.20834,-0.16666 -0.66876,-0.32708 -1.38125,-0.48125 l -0.4,-0.0937 c -0.7125,-0.14999 -1.22709,-0.37916 -1.54375,-0.6875 -0.31667,-0.31249 -0.475,-0.73957 -0.475,-1.28125 0,-0.65832 0.23333,-1.16666 0.7,-1.525 0.46666,-0.35832 1.12916,-0.53749 1.9875,-0.5375 0.42499,10e-6 0.82499,0.0313 1.2,0.0937 0.37499,0.0625 0.72083,0.15626 1.0375,0.28125"
+         id="path5081"
+         inkscape:connector-curvature="0" /><path
+         d="m -126.70875,424.37328 c -1e-5,-0.84582 -0.17501,-1.50832 -0.525,-1.9875 -0.34584,-0.48332 -0.82292,-0.72499 -1.43125,-0.725 -0.60834,1e-5 -1.08751,0.24168 -1.4375,0.725 -0.34584,0.47918 -0.51875,1.14168 -0.51875,1.9875 0,0.84584 0.17291,1.51042 0.51875,1.99375 0.34999,0.47917 0.82916,0.71876 1.4375,0.71875 0.60833,10e-6 1.08541,-0.23958 1.43125,-0.71875 0.34999,-0.48333 0.52499,-1.14791 0.525,-1.99375 m -3.9125,-2.44375 c 0.24166,-0.41666 0.54583,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.81249,-0.30624 1.325,-0.30625 0.84999,10e-6 1.53957,0.33751 2.06875,1.0125 0.53332,0.67501 0.79999,1.56251 0.8,2.6625 -1e-5,1.10001 -0.26668,1.98751 -0.8,2.6625 -0.52918,0.67501 -1.21876,1.0125 -2.06875,1.0125 -0.51251,0 -0.95417,-0.1 -1.325,-0.3 -0.36667,-0.20416 -0.67084,-0.51458 -0.9125,-0.93125 l 0,1.05 -1.15625,0 0,-9.725 1.15625,0 0,3.7875"
+         id="path5083"
+         inkscape:connector-curvature="0" /><path
+         d="m -117.62125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5085"
+         inkscape:connector-curvature="0" /><path
+         d="m -112.19,418.14203 0,0.95625 -1.1,0 c -0.41251,1e-5 -0.70001,0.0833 -0.8625,0.25 -0.15834,0.16668 -0.2375,0.46668 -0.2375,0.9 l 0,0.61875 1.89375,0 0,0.89375 -1.89375,0 0,6.10625 -1.15625,0 0,-6.10625 -1.1,0 0,-0.89375 1.1,0 0,-0.4875 c 0,-0.77915 0.18125,-1.34582 0.54375,-1.7 0.3625,-0.35832 0.93749,-0.53749 1.725,-0.5375 l 1.0875,0"
+         id="path5087"
+         inkscape:connector-curvature="0" /><path
+         d="m -108.52125,421.67328 c -0.61667,1e-5 -1.10417,0.24168 -1.4625,0.725 -0.35834,0.47918 -0.5375,1.13751 -0.5375,1.975 0,0.83751 0.17708,1.49792 0.53125,1.98125 0.35833,0.47917 0.84791,0.71876 1.46875,0.71875 0.61249,10e-6 1.09791,-0.24166 1.45625,-0.725 0.35833,-0.48333 0.53749,-1.14166 0.5375,-1.975 -1e-5,-0.82916 -0.17917,-1.48541 -0.5375,-1.96875 -0.35834,-0.48749 -0.84376,-0.73124 -1.45625,-0.73125 m 0,-0.975 c 0.99999,10e-6 1.78541,0.32501 2.35625,0.975 0.57082,0.65001 0.85624,1.55001 0.85625,2.7 -1e-5,1.14584 -0.28543,2.04584 -0.85625,2.7 -0.57084,0.65001 -1.35626,0.975 -2.35625,0.975 -1.00417,0 -1.79167,-0.32499 -2.3625,-0.975 -0.56667,-0.65416 -0.85,-1.55416 -0.85,-2.7 0,-1.14999 0.28333,-2.04999 0.85,-2.7 0.57083,-0.64999 1.35833,-0.97499 2.3625,-0.975"
+         id="path5089"
+         inkscape:connector-curvature="0" /><path
+         d="m -99.352505,421.94203 c -0.129172,-0.075 -0.270839,-0.12916 -0.425,-0.1625 -0.150005,-0.0375 -0.316675,-0.0562 -0.500005,-0.0563 -0.65,10e-6 -1.15,0.21251 -1.5,0.6375 -0.34583,0.42084 -0.51875,1.02709 -0.51875,1.81875 l 0,3.6875 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.24167,-0.42499 0.55625,-0.73957 0.94375,-0.94375 0.3875,-0.20832 0.85833,-0.31249 1.412505,-0.3125 0.07916,10e-6 0.166661,0.006 0.2625,0.0188 0.09583,0.008 0.202078,0.0229 0.31875,0.0437 l 0.0063,1.18125"
+         id="path5091"
+         inkscape:connector-curvature="0" /><path
+         d="m -92.408743,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.287498,1.39584 0.7125,1.8125 0.429163,0.41251 1.024996,0.61876 1.7875,0.61875 0.441662,10e-6 0.868745,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.412507,0.17501 -0.835423,0.30834 -1.26875,0.4 -0.433339,0.0917 -0.872922,0.1375 -1.31875,0.1375 -1.11667,0 -2.002086,-0.32499 -2.65625,-0.975 -0.650001,-0.64999 -0.975001,-1.52916 -0.975,-2.6375 -10e-7,-1.14582 0.308332,-2.05416 0.925,-2.725 0.620831,-0.67499 1.456247,-1.01249 2.50625,-1.0125 0.941661,10e-6 1.685411,0.30418 2.23125,0.9125 0.549993,0.60418 0.824993,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.0083,-0.62916 -0.185423,-1.13124 -0.53125,-1.50625 -0.341672,-0.37499 -0.795838,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.156253,0.18126 -1.54375,0.54375 -0.383336,0.36251 -0.604169,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+         id="path5093"
+         inkscape:connector-curvature="0" /><path
+         d="m -86.552484,425.10453 0,-4.2375 1.15,0 0,4.19375 c -2e-6,0.66251 0.129164,1.16042 0.3875,1.49375 0.25833,0.32917 0.64583,0.49376 1.1625,0.49375 0.620829,1e-5 1.110412,-0.19791 1.46875,-0.59375 0.362494,-0.39583 0.543744,-0.93541 0.54375,-1.61875 l 0,-3.96875 1.15,0 0,7 -1.15,0 0,-1.075 c -0.279172,0.42501 -0.604172,0.74167 -0.975,0.95 -0.366671,0.20417 -0.793754,0.30625 -1.28125,0.30625 -0.804169,0 -1.414586,-0.25 -1.83125,-0.75 -0.416668,-0.49999 -0.625001,-1.23124 -0.625,-2.19375"
+         id="path5095"
+         inkscape:connector-curvature="0" /><path
+         d="m -77.196234,426.81703 0,3.7125 -1.15625,0 0,-9.6625 1.15625,0 0,1.0625 c 0.241664,-0.41666 0.54583,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.812496,-0.30624 1.325,-0.30625 0.849995,10e-6 1.539577,0.33751 2.06875,1.0125 0.533326,0.67501 0.799993,1.56251 0.8,2.6625 -7e-6,1.10001 -0.266674,1.98751 -0.8,2.6625 -0.529173,0.67501 -1.218755,1.0125 -2.06875,1.0125 -0.512504,0 -0.95417,-0.1 -1.325,-0.3 -0.36667,-0.20416 -0.670836,-0.51458 -0.9125,-0.93125 m 3.9125,-2.44375 c -6e-6,-0.84582 -0.175006,-1.50832 -0.525,-1.9875 -0.345839,-0.48332 -0.822922,-0.72499 -1.43125,-0.725 -0.608337,1e-5 -1.087503,0.24168 -1.4375,0.725 -0.345836,0.47918 -0.518752,1.14168 -0.51875,1.9875 -2e-6,0.84584 0.172914,1.51042 0.51875,1.99375 0.349997,0.47917 0.829163,0.71876 1.4375,0.71875 0.608328,10e-6 1.085411,-0.23958 1.43125,-0.71875 0.349994,-0.48333 0.524994,-1.14791 0.525,-1.99375"
+         id="path5097"
+         inkscape:connector-curvature="0" /><path
+         d="m -70.183734,418.14203 1.15,0 0,9.725 -1.15,0 0,-9.725"
+         id="path5099"
+         inkscape:connector-curvature="0" /><path
+         d="m -63.921246,421.67328 c -0.61667,1e-5 -1.10417,0.24168 -1.4625,0.725 -0.358336,0.47918 -0.537502,1.13751 -0.5375,1.975 -2e-6,0.83751 0.177081,1.49792 0.53125,1.98125 0.35833,0.47917 0.847913,0.71876 1.46875,0.71875 0.612495,10e-6 1.097911,-0.24166 1.45625,-0.725 0.358327,-0.48333 0.537494,-1.14166 0.5375,-1.975 -6e-6,-0.82916 -0.179173,-1.48541 -0.5375,-1.96875 -0.358339,-0.48749 -0.843755,-0.73124 -1.45625,-0.73125 m 0,-0.975 c 0.999995,10e-6 1.785411,0.32501 2.35625,0.975 0.570826,0.65001 0.856243,1.55001 0.85625,2.7 -7e-6,1.14584 -0.285424,2.04584 -0.85625,2.7 -0.570839,0.65001 -1.356255,0.975 -2.35625,0.975 -1.00417,0 -1.791669,-0.32499 -2.3625,-0.975 -0.566668,-0.65416 -0.850001,-1.55416 -0.85,-2.7 -10e-7,-1.14999 0.283332,-2.04999 0.85,-2.7 0.570831,-0.64999 1.35833,-0.97499 2.3625,-0.975"
+         id="path5101"
+         inkscape:connector-curvature="0" /><path
+         d="m -55.627484,424.34828 c -0.92917,1e-5 -1.57292,0.10626 -1.93125,0.31875 -0.358336,0.21251 -0.537502,0.57501 -0.5375,1.0875 -2e-6,0.40834 0.133331,0.73334 0.4,0.975 0.270831,0.23751 0.637497,0.35626 1.1,0.35625 0.637496,10e-6 1.147912,-0.22499 1.53125,-0.675 0.387495,-0.45416 0.581244,-1.05624 0.58125,-1.80625 l 0,-0.25625 -1.14375,0 m 2.29375,-0.475 0,3.99375 -1.15,0 0,-1.0625 c -0.262505,0.42501 -0.589588,0.73959 -0.98125,0.94375 -0.391671,0.2 -0.870837,0.3 -1.4375,0.3 -0.716669,0 -1.287502,-0.2 -1.7125,-0.6 -0.420834,-0.40416 -0.631251,-0.94374 -0.63125,-1.61875 -10e-7,-0.78749 0.262499,-1.38124 0.7875,-1.78125 0.529164,-0.39999 1.316664,-0.59999 2.3625,-0.6 l 1.6125,0 0,-0.1125 c -6e-6,-0.52916 -0.175005,-0.93749 -0.525,-1.225 -0.345838,-0.29166 -0.833338,-0.43749 -1.4625,-0.4375 -0.400003,1e-5 -0.789586,0.0479 -1.16875,0.14375 -0.379169,0.0958 -0.743752,0.23959 -1.09375,0.43125 l 0,-1.0625 c 0.420832,-0.16249 0.829164,-0.28332 1.225,-0.3625 0.39583,-0.0833 0.781247,-0.12499 1.15625,-0.125 1.012495,10e-6 1.768745,0.26251 2.26875,0.7875 0.499994,0.52501 0.749993,1.32084 0.75,2.3875"
+         id="path5103"
+         inkscape:connector-curvature="0" /><path
+         d="m -46.352508,421.92953 0,-3.7875 1.15,0 0,9.725 -1.15,0 0,-1.05 c -0.241673,0.41667 -0.547922,0.72709 -0.91875,0.93125 -0.366672,0.2 -0.808338,0.3 -1.325,0.3 -0.845837,0 -1.535419,-0.33749 -2.068751,-1.0125 -0.529167,-0.67499 -0.79375,-1.56249 -0.79375,-2.6625 0,-1.09999 0.264583,-1.98749 0.79375,-2.6625 0.533332,-0.67499 1.222914,-1.01249 2.068751,-1.0125 0.516662,10e-6 0.958328,0.1021 1.325,0.30625 0.370828,0.20001 0.677077,0.50834 0.91875,0.925 m -3.918751,2.44375 c -10e-7,0.84584 0.172915,1.51042 0.51875,1.99375 0.349998,0.47917 0.829164,0.71876 1.437501,0.71875 0.608328,10e-6 1.087495,-0.23958 1.4375,-0.71875 0.349994,-0.48333 0.524994,-1.14791 0.525,-1.99375 -6e-6,-0.84582 -0.175006,-1.50832 -0.525,-1.9875 -0.350005,-0.48332 -0.829172,-0.72499 -1.4375,-0.725 -0.608337,1e-5 -1.087503,0.24168 -1.437501,0.725 -0.345835,0.47918 -0.518751,1.14168 -0.51875,1.9875"
+         id="path5105"
+         inkscape:connector-curvature="0" /><path
+         d="m -42.833759,420.86703 1.15,0 0,7 -1.15,0 0,-7 m 0,-2.725 1.15,0 0,1.45625 -1.15,0 0,-1.45625"
+         id="path5107"
+         inkscape:connector-curvature="0" /><path
+         d="m -33.46499,423.64203 0,4.225 -1.15,0 0,-4.1875 c -6e-6,-0.66249 -0.129173,-1.15832 -0.3875,-1.4875 -0.258339,-0.32916 -0.645838,-0.49374 -1.1625,-0.49375 -0.620837,10e-6 -1.11042,0.19793 -1.46875,0.59375 -0.358336,0.39584 -0.537503,0.93543 -0.5375,1.61875 l 0,3.95625 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.274997,-0.42082 0.597914,-0.73541 0.96875,-0.94375 0.374996,-0.20832 0.806246,-0.31249 1.29375,-0.3125 0.804161,10e-6 1.412494,0.25001 1.825,0.75 0.412493,0.49584 0.618743,1.22709 0.61875,2.19375"
+         id="path5109"
+         inkscape:connector-curvature="0" /><path
+         d="m -26.55249,424.28578 c -6e-6,-0.83332 -0.172922,-1.47916 -0.51875,-1.9375 -0.341672,-0.45832 -0.822921,-0.68749 -1.44375,-0.6875 -0.61667,1e-5 -1.09792,0.22918 -1.44375,0.6875 -0.341669,0.45834 -0.512502,1.10418 -0.5125,1.9375 -2e-6,0.82917 0.170831,1.47292 0.5125,1.93125 0.34583,0.45834 0.82708,0.68751 1.44375,0.6875 0.620829,10e-6 1.102078,-0.22916 1.44375,-0.6875 0.345828,-0.45833 0.518744,-1.10208 0.51875,-1.93125 m 1.15,2.7125 c -7e-6,1.19167 -0.26459,2.07709 -0.79375,2.65625 -0.529172,0.58334 -1.339588,0.875 -2.43125,0.875 -0.40417,0 -0.78542,-0.0312 -1.14375,-0.0937 -0.358336,-0.0583 -0.706252,-0.15 -1.04375,-0.275 l 0,-1.11875 c 0.337498,0.18334 0.670831,0.31875 1,0.40625 0.329164,0.0875 0.66458,0.13125 1.00625,0.13125 0.754162,0 1.318745,-0.19791 1.69375,-0.59375 0.374994,-0.39166 0.562494,-0.98541 0.5625,-1.78125 l 0,-0.56875 c -0.237506,0.41251 -0.541672,0.72084 -0.9125,0.925 -0.370838,0.20417 -0.814588,0.30625 -1.33125,0.30625 -0.858336,0 -1.550002,-0.32708 -2.075,-0.98125 -0.525001,-0.65416 -0.787501,-1.52083 -0.7875,-2.6 -10e-7,-1.08332 0.262499,-1.95207 0.7875,-2.60625 0.524998,-0.65416 1.216664,-0.98124 2.075,-0.98125 0.516662,10e-6 0.960412,0.1021 1.33125,0.30625 0.370828,0.20418 0.674994,0.51251 0.9125,0.925 l 0,-1.0625 1.15,0 0,6.13125"
+         id="path5111"
+         inkscape:connector-curvature="0" /><path
+         d="m -18.22124,420.07328 -2.24375,1.2125 2.24375,1.21875 -0.3625,0.6125 -2.1,-1.26875 0,2.35625 -0.7125,0 0,-2.35625 -2.1,1.26875 -0.3625,-0.6125 2.24375,-1.21875 -2.24375,-1.2125 0.3625,-0.61875 2.1,1.26875 0,-2.35625 0.7125,0 0,2.35625 2.1,-1.26875 0.3625,0.61875"
+         id="path5113"
+         inkscape:connector-curvature="0" /></g><g
+       id="g14777"><path
+         d="m 590.02932,44.404687 0,7.07968 1.48788,0 c 1.2562,1e-6 2.17493,-0.284568 2.75629,-0.853708 0.58536,-0.569136 0.87806,-1.467562 0.8781,-2.695279 -4e-5,-1.219577 -0.29274,-2.111905 -0.8781,-2.676985 -0.58136,-0.569131 -1.50009,-0.8537 -2.75629,-0.853708 l -1.48788,0 m -1.23177,-1.012254 2.53062,0 c 1.76433,9e-6 3.05914,0.367916 3.8844,1.103722 0.8252,0.731758 1.23783,1.878165 1.23788,3.439225 -5e-5,1.5692 -0.4147,2.721705 -1.24399,3.457518 -0.82934,0.735816 -2.12209,1.103724 -3.87829,1.103724 l -2.53062,0 0,-9.104189"
+         id="path3477"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 604.20087,48.801284 0,0.548813 -5.15882,0 c 0.0488,0.772405 0.28048,1.361869 0.69518,1.768395 0.41868,0.402464 1.00004,0.603695 1.74398,0.603694 0.4309,10e-7 0.84762,-0.05285 1.25005,-0.158546 0.40657,-0.105696 0.809,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40243,0.170742 -0.81506,0.300831 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134154 -1.28664,0.134154 -1.08948,0 -1.95335,-0.317092 -2.5916,-0.951275 -0.6342,-0.634182 -0.95128,-1.491954 -0.95128,-2.573321 0,-1.117946 0.30082,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.4208,-0.987855 2.44527,-0.987862 0.91873,7e-6 1.6444,0.296771 2.17695,0.890295 0.5366,0.589471 0.80492,1.392363 0.80492,2.408677 m -1.122,-0.329287 c -0.008,-0.613853 -0.1809,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32934,-0.548812 -0.62608,6e-6 -1.12814,0.176845 -1.5062,0.530518 -0.37401,0.353685 -0.58948,0.851681 -0.64637,1.49399 l 4.00023,-0.0061"
+         id="path3479"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 610.39637,45.868187 0,1.061037 c -0.31712,-0.162605 -0.64637,-0.284564 -0.98788,-0.365875 -0.34146,-0.0813 -0.69518,-0.121952 -1.06102,-0.121958 -0.55693,6e-6 -0.97566,0.08538 -1.2562,0.256112 -0.2764,0.170748 -0.41464,0.42686 -0.41464,0.768338 0,0.260182 0.0996,0.465478 0.2988,0.615889 0.19918,0.146355 0.59964,0.286606 1.20129,0.420757 l 0.38416,0.08537 c 0.79679,0.170745 1.36189,0.412629 1.69523,0.725652 0.33742,0.308964 0.5061,0.741916 0.50615,1.298856 -5e-5,0.634185 -0.25207,1.136246 -0.75615,1.506186 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.03659 -1.14638,-0.109762 -0.39435,-0.06911 -0.81102,-0.174807 -1.25009,-0.317092 l 0,-1.158604 c 0.41465,0.215461 0.82323,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158547 1.19522,0.158546 0.52847,1e-6 0.93499,-0.08943 1.21956,-0.268309 0.28458,-0.182935 0.42686,-0.439048 0.42686,-0.768337 0,-0.304893 -0.10367,-0.538647 -0.31097,-0.70126 -0.20331,-0.162609 -0.65248,-0.319122 -1.34766,-0.46954 l -0.39027,-0.09147 c -0.69518,-0.146347 -1.19724,-0.369937 -1.5062,-0.670771 -0.30895,-0.304892 -0.4634,-0.721582 -0.4634,-1.250073 0,-0.642308 0.22764,-1.138271 0.68296,-1.487892 0.45528,-0.349606 1.10166,-0.524413 1.93912,-0.52442 0.41465,7e-6 0.80492,0.0305 1.1708,0.09147 0.36589,0.06099 0.70331,0.152455 1.01226,0.274407"
+         id="path3481"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 612.55501,45.666955 1.12204,0 0,6.829667 -1.12204,0 0,-6.829667 m 0,-2.658691 1.12204,0 0,1.420815 -1.12204,0 0,-1.420815"
+         id="path3483"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 620.51282,49.002515 c 0,-0.813051 -0.16874,-1.443168 -0.50616,-1.890353 -0.33333,-0.447175 -0.80289,-0.670765 -1.40858,-0.670771 -0.6017,6e-6 -1.07122,0.223596 -1.40864,0.670771 -0.33337,0.447185 -0.50004,1.077302 -0.50004,1.890353 0,0.808993 0.16667,1.437078 0.50004,1.884257 0.33742,0.447181 0.80694,0.670771 1.40864,0.67077 0.60569,1e-6 1.07525,-0.223589 1.40858,-0.67077 0.33742,-0.447179 0.50616,-1.075264 0.50616,-1.884257 m 1.12199,2.646496 c 0,1.162669 -0.25813,2.02654 -0.77443,2.591614 -0.5163,0.569137 -1.30698,0.853706 -2.37208,0.853709 -0.39435,-3e-6 -0.7663,-0.03049 -1.11593,-0.09147 -0.34959,-0.05692 -0.68908,-0.146352 -1.01833,-0.268308 l 0,-1.091527 c 0.32925,0.17887 0.6545,0.310992 0.97567,0.396364 0.32112,0.08537 0.64839,0.128055 0.98173,0.128056 0.73581,-10e-7 1.28668,-0.193102 1.65257,-0.579301 0.36584,-0.382138 0.54881,-0.961439 0.54881,-1.737907 l 0,-0.55491 c -0.23173,0.402463 -0.52852,0.703293 -0.89032,0.902492 -0.3618,0.199198 -0.79476,0.298798 -1.29885,0.298798 -0.83746,0 -1.51226,-0.319125 -2.02452,-0.957374 -0.51221,-0.638246 -0.76832,-1.483823 -0.76832,-2.536733 0,-1.056967 0.25611,-1.904576 0.76832,-2.54283 0.51226,-0.638242 1.18706,-0.957366 2.02452,-0.957373 0.50409,7e-6 0.93705,0.09961 1.29885,0.298798 0.3618,0.199205 0.65859,0.500035 0.89032,0.902491 l 0,-1.036646 1.12199,0 0,5.982056"
+         id="path3485"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 629.62311,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12603,-1.130142 -0.37805,-1.451305 -0.25207,-0.32115 -0.63012,-0.481729 -1.13421,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43301,0.579302 -0.34964,0.386207 -0.52443,0.91266 -0.52443,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58333,-0.717515 0.94518,-0.920786 0.36584,-0.203256 0.78659,-0.304888 1.26226,-0.304895 0.78457,7e-6 1.3781,0.243923 1.78058,0.73175 0.40248,0.483773 0.60367,1.197229 0.60372,2.140368"
+         id="path3487"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 637.12964,44.404687 0,3.420931 1.54885,0 c 0.57323,4e-6 1.01635,-0.148378 1.32934,-0.445148 0.31304,-0.29676 0.46956,-0.719548 0.46956,-1.268367 0,-0.54474 -0.15652,-0.965496 -0.46956,-1.262268 -0.31299,-0.296758 -0.75611,-0.44514 -1.32934,-0.445148 l -1.54885,0 m -1.23178,-1.012254 2.78063,0 c 1.02039,9e-6 1.79077,0.231729 2.31111,0.695162 0.52443,0.459385 0.78664,1.13422 0.78664,2.024508 0,0.898432 -0.26221,1.577333 -0.78664,2.036704 -0.52034,0.459381 -1.29072,0.689069 -2.31111,0.689065 l -1.54885,0 0,3.65875 -1.23178,0 0,-9.104189"
+         id="path3489"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 645.59355,46.453587 c -0.60169,6e-6 -1.07732,0.235791 -1.42695,0.707358 -0.34959,0.467512 -0.52438,1.109825 -0.52438,1.926941 0,0.817124 0.17277,1.46147 0.51832,1.93304 0.34959,0.467508 0.82727,0.701261 1.43301,0.70126 0.59757,10e-7 1.07117,-0.235785 1.4208,-0.707358 0.34959,-0.47157 0.52443,-1.113884 0.52443,-1.926942 0,-0.808986 -0.17484,-1.449266 -0.52443,-1.920843 -0.34963,-0.475632 -0.82323,-0.71345 -1.4208,-0.713456 m 0,-0.951275 c 0.97563,7e-6 1.74197,0.317098 2.2989,0.951275 0.55694,0.634188 0.8354,1.512287 0.8354,2.634299 0,1.117954 -0.27846,1.996053 -0.8354,2.6343 -0.55693,0.634183 -1.32327,0.951275 -2.2989,0.951275 -0.97975,0 -1.74807,-0.317092 -2.30505,-0.951275 -0.55285,-0.638247 -0.82929,-1.516346 -0.82929,-2.6343 0,-1.122012 0.27644,-2.000111 0.82929,-2.634299 0.55698,-0.634177 1.3253,-0.951268 2.30505,-0.951275"
+         id="path3491"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 654.93553,45.868187 0,1.061037 c -0.31708,-0.162605 -0.64638,-0.284564 -0.98784,-0.365875 -0.3415,-0.0813 -0.69518,-0.121952 -1.06106,-0.121958 -0.55694,6e-6 -0.97567,0.08538 -1.25616,0.256112 -0.27644,0.170748 -0.41464,0.42686 -0.41464,0.768338 0,0.260182 0.0996,0.465478 0.29876,0.615889 0.19922,0.146355 0.59963,0.286606 1.20133,0.420757 l 0.38416,0.08537 c 0.79679,0.170745 1.36185,0.412629 1.69523,0.725652 0.33737,0.308964 0.5061,0.741916 0.5061,1.298856 0,0.634185 -0.25206,1.136246 -0.75615,1.506186 -0.5,0.36994 -1.18907,0.55491 -2.06717,0.55491 -0.36589,0 -0.74803,-0.03659 -1.14642,-0.109762 -0.39431,-0.06911 -0.81102,-0.174807 -1.25005,-0.317092 l 0,-1.158604 c 0.41465,0.215461 0.82319,0.378072 1.22567,0.487833 0.40243,0.105698 0.80087,0.158547 1.19518,0.158546 0.52846,1e-6 0.93503,-0.08943 1.2196,-0.268309 0.28453,-0.182935 0.42682,-0.439048 0.42682,-0.768337 0,-0.304893 -0.10363,-0.538647 -0.31098,-0.70126 -0.20326,-0.162609 -0.65248,-0.319122 -1.34766,-0.46954 l -0.39026,-0.09147 c -0.69514,-0.146347 -1.1972,-0.369937 -1.50616,-0.670771 -0.30895,-0.304892 -0.46345,-0.721582 -0.46345,-1.250073 0,-0.642308 0.22764,-1.138271 0.68297,-1.487892 0.45532,-0.349606 1.1017,-0.524413 1.93912,-0.52442 0.41469,7e-6 0.80496,0.0305 1.1708,0.09147 0.36588,0.06099 0.7033,0.152455 1.01226,0.274407"
+         id="path3493"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 657.09421,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+         id="path3495"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 661.66763,43.727818 0,1.939137 2.31111,0 0,0.872002 -2.31111,0 0,3.707533 c 0,0.556945 0.0752,0.914689 0.22562,1.073233 0.1545,0.158547 0.46547,0.23782 0.93301,0.237819 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.3293,-0.325221 -0.49394,-0.914686 -0.49394,-1.768396 l 0,-3.707533 -0.82324,0 0,-0.872002 0.82324,0 0,-1.939137 1.1281,0"
+         id="path3497"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 665.46056,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+         id="path3499"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 671.57066,46.453587 c -0.60165,6e-6 -1.07731,0.235791 -1.4269,0.707358 -0.34963,0.467512 -0.52443,1.109825 -0.52443,1.926941 0,0.817124 0.17278,1.46147 0.51832,1.93304 0.34959,0.467508 0.82728,0.701261 1.43301,0.70126 0.59757,10e-7 1.07117,-0.235785 1.4208,-0.707358 0.34964,-0.47157 0.52443,-1.113884 0.52443,-1.926942 0,-0.808986 -0.17479,-1.449266 -0.52443,-1.920843 -0.34963,-0.475632 -0.82323,-0.71345 -1.4208,-0.713456 m 0,-0.951275 c 0.97567,7e-6 1.74197,0.317098 2.2989,0.951275 0.55694,0.634188 0.83541,1.512287 0.83541,2.634299 0,1.117954 -0.27847,1.996053 -0.83541,2.6343 -0.55693,0.634183 -1.32323,0.951275 -2.2989,0.951275 -0.97975,0 -1.74807,-0.317092 -2.305,-0.951275 -0.55289,-0.638247 -0.82934,-1.516346 -0.82934,-2.6343 0,-1.122012 0.27645,-2.000111 0.82934,-2.634299 0.55693,-0.634177 1.32525,-0.951268 2.305,-0.951275"
+         id="path3501"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 682.23592,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12604,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78462,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60372,1.197229 0.60372,2.140368"
+         id="path3503"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 684.48606,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+         id="path3505"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 693.62684,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12604,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78457,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60372,1.197229 0.60372,2.140368"
+         id="path3507"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 700.3711,49.002515 c 0,-0.813051 -0.16869,-1.443168 -0.50611,-1.890353 -0.33337,-0.447175 -0.80289,-0.670765 -1.40863,-0.670771 -0.60165,6e-6 -1.07121,0.223596 -1.40859,0.670771 -0.33337,0.447185 -0.50004,1.077302 -0.50004,1.890353 0,0.808993 0.16667,1.437078 0.50004,1.884257 0.33738,0.447181 0.80694,0.670771 1.40859,0.67077 0.60574,1e-6 1.07526,-0.223589 1.40863,-0.67077 0.33742,-0.447179 0.50611,-1.075264 0.50611,-1.884257 m 1.12204,2.646496 c 0,1.162669 -0.25817,2.02654 -0.77443,2.591614 -0.5163,0.569137 -1.30702,0.853706 -2.37208,0.853709 -0.39435,-3e-6 -0.76635,-0.03049 -1.11593,-0.09147 -0.34964,-0.05692 -0.68908,-0.146352 -1.01837,-0.268308 l 0,-1.091527 c 0.32929,0.17887 0.6545,0.310992 0.97567,0.396364 0.32116,0.08537 0.64843,0.128055 0.98177,0.128056 0.73581,-10e-7 1.28664,-0.193102 1.65253,-0.579301 0.36588,-0.382138 0.5488,-0.961439 0.5488,-1.737907 l 0,-0.55491 c -0.23172,0.402463 -0.52847,0.703293 -0.89027,0.902492 -0.36184,0.199198 -0.79476,0.298798 -1.29885,0.298798 -0.83746,0 -1.5123,-0.319125 -2.02452,-0.957374 -0.51221,-0.638246 -0.76832,-1.483823 -0.76832,-2.536733 0,-1.056967 0.25611,-1.904576 0.76832,-2.54283 0.51222,-0.638242 1.18706,-0.957366 2.02452,-0.957373 0.50409,7e-6 0.93701,0.09961 1.29885,0.298798 0.3618,0.199205 0.65855,0.500035 0.89027,0.902491 l 0,-1.036646 1.12204,0 0,5.982056"
+         id="path3509"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 704.09085,50.947751 1.28664,0 0,1.548871 -1.28664,0 0,-1.548871 m 0,-4.908823 1.28664,0 0,1.548871 -1.28664,0 0,-1.548871"
+         id="path3511"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 715.74398,44.227847 c -0.8944,8e-6 -1.60579,0.333361 -2.1343,1.000058 -0.52443,0.666713 -0.78664,1.575301 -0.78659,2.725769 -5e-5,1.146412 0.26216,2.052968 0.78659,2.719671 0.52851,0.666706 1.2399,1.000059 2.1343,1.000058 0.89435,10e-7 1.6017,-0.333352 2.12204,-1.000058 0.52443,-0.666703 0.78664,-1.573259 0.78664,-2.719671 0,-1.150468 -0.26221,-2.059056 -0.78664,-2.725769 -0.52034,-0.666697 -1.22769,-1.00005 -2.12204,-1.000058 m 0,-1.000058 c 1.27649,9e-6 2.29688,0.428896 3.06116,1.28666 0.76423,0.853716 1.14637,2.000123 1.14637,3.439225 0,1.435046 -0.38214,2.581453 -1.14637,3.439224 -0.76428,0.853709 -1.78467,1.280563 -3.06116,1.280563 -1.28058,0 -2.30501,-0.426854 -3.07337,-1.280563 -0.76428,-0.853706 -1.14642,-2.000113 -1.14642,-3.439224 0,-1.439102 0.38214,-2.585509 1.14642,-3.439225 0.76836,-0.857764 1.79279,-1.286651 3.07337,-1.28666"
+         id="path3513"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 727.50684,48.37443 0,4.122192 -1.12203,0 0,-4.085604 c 0,-0.646375 -0.12599,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78462,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60371,1.197229 0.60371,2.140368"
+         id="path3515"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 734.84262,43.727818 0,1.939137 2.31111,0 0,0.872002 -2.31111,0 0,3.707533 c 0,0.556945 0.0752,0.914689 0.22562,1.073233 0.1545,0.158547 0.46547,0.23782 0.93301,0.237819 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.3293,-0.325221 -0.49394,-0.914686 -0.49394,-1.768396 l 0,-3.707533 -0.82324,0 0,-0.872002 0.82324,0 0,-1.939137 1.1281,0"
+         id="path3517"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 744.31269,48.37443 0,4.122192 -1.12199,0 0,-4.085604 c -5e-5,-0.646375 -0.12604,-1.130142 -0.3781,-1.451305 -0.25202,-0.32115 -0.63012,-0.481729 -1.13421,-0.481735 -0.60574,6e-6 -1.08338,0.193107 -1.43301,0.579302 -0.34959,0.386207 -0.52443,0.91266 -0.52443,1.57936 l 0,3.859982 -1.1281,0 0,-9.488358 1.1281,0 0,3.719729 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36589,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78462,7e-6 1.37815,0.243923 1.78063,0.73175 0.40243,0.483773 0.60367,1.197229 0.60367,2.140368"
+         id="path3519"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 752.40462,48.801284 0,0.548813 -5.15882,0 c 0.0488,0.772405 0.28048,1.361869 0.69518,1.768395 0.41868,0.402464 1.00004,0.603695 1.74398,0.603694 0.4309,10e-7 0.84762,-0.05285 1.25005,-0.158546 0.40657,-0.105696 0.809,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40243,0.170742 -0.81506,0.300831 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134154 -1.28664,0.134154 -1.08948,0 -1.95335,-0.317092 -2.5916,-0.951275 -0.6342,-0.634182 -0.95128,-1.491954 -0.95128,-2.573321 0,-1.117946 0.30082,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.4208,-0.987855 2.44527,-0.987862 0.91873,7e-6 1.6444,0.296771 2.17695,0.890295 0.5366,0.589471 0.80492,1.392363 0.80492,2.408677 m -1.122,-0.329287 c -0.008,-0.613853 -0.1809,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32934,-0.548812 -0.62608,6e-6 -1.12814,0.176845 -1.5062,0.530518 -0.37401,0.353685 -0.58948,0.851681 -0.64637,1.49399 l 4.00023,-0.0061"
+         id="path3521"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 757.56959,45.666955 1.12199,0 1.40253,5.329579 1.39642,-5.329579 1.32323,0 1.40253,5.329579 1.39642,-5.329579 1.12204,0 -1.78669,6.829667 -1.32328,0 -1.46956,-5.597887 -1.47571,5.597887 -1.32324,0 -1.78668,-6.829667"
+         id="path3523"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 774.11933,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12604,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-9.488358 1.1281,0 0,3.719729 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78457,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60372,1.197229 0.60372,2.140368"
+         id="path3525"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 776.36947,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+         id="path3527"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 780.94289,43.727818 0,1.939137 2.31111,0 0,0.872002 -2.31111,0 0,3.707533 c 0,0.556945 0.0752,0.914689 0.22562,1.073233 0.15449,0.158547 0.46547,0.23782 0.93296,0.237819 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86588,0 -1.4635,-0.160579 -1.79275,-0.481736 -0.32929,-0.325221 -0.49393,-0.914686 -0.49393,-1.768396 l 0,-3.707533 -0.82324,0 0,-0.872002 0.82324,0 0,-1.939137 1.1281,0"
+         id="path3529"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 790.5776,48.801284 0,0.548813 -5.15886,0 c 0.0488,0.772405 0.28049,1.361869 0.69518,1.768395 0.41873,0.402464 1.00004,0.603695 1.74398,0.603694 0.4309,10e-7 0.84762,-0.05285 1.2501,-0.158546 0.40652,-0.105696 0.80895,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40248,0.170742 -0.81511,0.300831 -1.23788,0.390267 -0.42282,0.08944 -0.8517,0.134154 -1.28669,0.134154 -1.08948,0 -1.95335,-0.317092 -2.5916,-0.951275 -0.6342,-0.634182 -0.95128,-1.491954 -0.95128,-2.573321 0,-1.117946 0.30083,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.42084,-0.987855 2.44527,-0.987862 0.91878,7e-6 1.6444,0.296771 2.17695,0.890295 0.53664,0.589471 0.80492,1.392363 0.80496,2.408677 m -1.12204,-0.329287 c -0.008,-0.613853 -0.1809,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32934,-0.548812 -0.62608,6e-6 -1.12814,0.176845 -1.5062,0.530518 -0.37401,0.353685 -0.58944,0.851681 -0.64637,1.49399 l 4.00023,-0.0061"
+         id="path3531"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 799.49882,49.063495 c -0.90652,3e-6 -1.53462,0.103667 -1.88425,0.310994 -0.34959,0.207331 -0.52443,0.56101 -0.52443,1.061037 0,0.398399 0.13012,0.71549 0.39027,0.951275 0.26428,0.231722 0.62199,0.347582 1.07323,0.347581 0.622,1e-6 1.12002,-0.219524 1.49404,-0.658575 0.37805,-0.443114 0.56708,-1.030546 0.56708,-1.762298 l 0,-0.250014 -1.11594,0 m 2.23798,-0.463442 0,3.896569 -1.12204,0 0,-1.036646 c -0.25611,0.414659 -0.57526,0.721587 -0.95735,0.920785 -0.38214,0.195133 -0.84968,0.2927 -1.40253,0.2927 -0.69926,0 -1.2562,-0.195133 -1.67084,-0.5854 -0.41061,-0.394331 -0.61589,-0.920784 -0.61589,-1.57936 0,-0.768335 0.25611,-1.347636 0.76832,-1.737906 0.5163,-0.390263 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109763 c 0,-0.516285 -0.17076,-0.914682 -0.51222,-1.195191 -0.33742,-0.284564 -0.81308,-0.426848 -1.4269,-0.426854 -0.39027,6e-6 -0.77039,0.04676 -1.14032,0.140251 -0.36997,0.09351 -0.72566,0.23376 -1.06712,0.420757 l 0,-1.036646 c 0.41056,-0.158539 0.80895,-0.276432 1.19518,-0.353679 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.121958 0.98788,7e-6 1.72571,0.256119 2.21354,0.768337 0.48784,0.512231 0.73173,1.288698 0.73178,2.329404"
+         id="path3533"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 808.01155,46.715797 c -0.12603,-0.07317 -0.26428,-0.126018 -0.41469,-0.158546 -0.14633,-0.03658 -0.30896,-0.05488 -0.48784,-0.05488 -0.63416,6e-6 -1.12199,0.207335 -1.4635,0.621987 -0.33742,0.410598 -0.5061,1.002096 -0.5061,1.774494 l 0,3.597771 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.23576,-0.414652 0.5427,-0.721581 0.9208,-0.920786 0.37805,-0.203256 0.83742,-0.304888 1.3781,-0.304895 0.0772,7e-6 0.16262,0.0061 0.2561,0.01829 0.0935,0.0081 0.1972,0.02236 0.31102,0.04269 l 0.006,1.152506"
+         id="path3535"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 814.7863,48.801284 0,0.548813 -5.15882,0 c 0.0488,0.772405 0.28049,1.361869 0.69514,1.768395 0.41873,0.402464 1.00009,0.603695 1.74403,0.603694 0.4309,10e-7 0.84761,-0.05285 1.25005,-0.158546 0.40652,-0.105696 0.80899,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40248,0.170742 -0.81506,0.300831 -1.23788,0.390267 -0.42278,0.08944 -0.85166,0.134154 -1.28664,0.134154 -1.08949,0 -1.95336,-0.317092 -2.5916,-0.951275 -0.63421,-0.634182 -0.95129,-1.491954 -0.95129,-2.573321 0,-1.117946 0.30083,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.4208,-0.987855 2.44527,-0.987862 0.91874,7e-6 1.6444,0.296771 2.17696,0.890295 0.53659,0.589471 0.80491,1.392363 0.80491,2.408677 m -1.12199,-0.329287 c -0.008,-0.613853 -0.18095,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32939,-0.548812 -0.62603,6e-6 -1.1281,0.176845 -1.50615,0.530518 -0.37401,0.353685 -0.58949,0.851681 -0.64638,1.49399 l 4.00024,-0.0061"
+         id="path3537"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 819.74393,49.063495 c -0.90657,3e-6 -1.53467,0.103667 -1.88426,0.310994 -0.34963,0.207331 -0.52442,0.56101 -0.52442,1.061037 0,0.398399 0.13007,0.71549 0.39026,0.951275 0.26424,0.231722 0.622,0.347582 1.07324,0.347581 0.62199,1e-6 1.11997,-0.219524 1.49398,-0.658575 0.37806,-0.443114 0.56708,-1.030546 0.56713,-1.762298 l 0,-0.250014 -1.11593,0 m 2.23792,-0.463442 0,3.896569 -1.12199,0 0,-1.036646 c -0.25615,0.414659 -0.57525,0.721587 -0.95739,0.920785 -0.38214,0.195133 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.195133 -1.6708,-0.5854 -0.41061,-0.394331 -0.61593,-0.920784 -0.61593,-1.57936 0,-0.768335 0.25615,-1.347636 0.76836,-1.737906 0.5163,-0.390263 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109763 c -5e-5,-0.516285 -0.17075,-0.914682 -0.51226,-1.195191 -0.33742,-0.284564 -0.81304,-0.426848 -1.42691,-0.426854 -0.39026,6e-6 -0.77034,0.04676 -1.14031,0.140251 -0.36993,0.09351 -0.72562,0.23376 -1.06713,0.420757 l 0,-1.036646 c 0.41061,-0.158539 0.809,-0.276432 1.19518,-0.353679 0.38623,-0.0813 0.76226,-0.121951 1.12815,-0.121958 0.98783,7e-6 1.72567,0.256119 2.21355,0.768337 0.48778,0.512231 0.73172,1.288698 0.73172,2.329404"
+         id="path3539"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 830.92139,46.453587 c -0.60165,6e-6 -1.07732,0.235791 -1.4269,0.707358 -0.34964,0.467512 -0.52443,1.109825 -0.52443,1.926941 0,0.817124 0.17277,1.46147 0.51832,1.93304 0.34963,0.467508 0.82727,0.701261 1.43301,0.70126 0.59762,10e-7 1.07122,-0.235785 1.4208,-0.707358 0.34964,-0.47157 0.52443,-1.113884 0.52443,-1.926942 0,-0.808986 -0.17479,-1.449266 -0.52443,-1.920843 -0.34958,-0.475632 -0.82318,-0.71345 -1.4208,-0.713456 m 0,-0.951275 c 0.97567,7e-6 1.74197,0.317098 2.2989,0.951275 0.55694,0.634188 0.83545,1.512287 0.83545,2.634299 0,1.117954 -0.27851,1.996053 -0.83545,2.6343 -0.55693,0.634183 -1.32323,0.951275 -2.2989,0.951275 -0.97975,0 -1.74807,-0.317092 -2.305,-0.951275 -0.5529,-0.638247 -0.82934,-1.516346 -0.82934,-2.6343 0,-1.122012 0.27644,-2.000111 0.82934,-2.634299 0.55693,-0.634177 1.32525,-0.951268 2.305,-0.951275"
+         id="path3541"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 841.58664,48.37443 0,4.122192 -1.12203,0 0,-4.085604 c 0,-0.646375 -0.12599,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08339,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78461,7e-6 1.37814,0.243923 1.78062,0.73175 0.40243,0.483773 0.60367,1.197229 0.60367,2.140368"
+         id="path3543"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 843.83678,43.008264 1.122,0 0,9.488358 -1.122,0 0,-9.488358"
+         id="path3545"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 850.14202,53.130805 c -0.31708,0.813054 -0.62603,1.343572 -0.92686,1.591556 -0.30087,0.247979 -0.7033,0.37197 -1.20739,0.371973 l -0.89642,0 0,-0.939079 0.65859,0 c 0.30895,-2e-6 0.5488,-0.07318 0.71956,-0.219525 0.17075,-0.146352 0.35978,-0.4919 0.56708,-1.036646 l 0.20124,-0.512225 -2.76236,-6.719904 1.18912,0 2.13426,5.341775 2.13425,-5.341775 1.18912,0 -3.00019,7.46385"
+         id="path3547"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 853.08124,50.947751 1.28664,0 0,1.548871 -1.28664,0 0,-1.548871"
+         id="path3549"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 588.79755,62.12523 1.23177,0 0,8.067546 4.4332,0 0,1.036644 -5.66497,0 0,-9.10419"
+         id="path3551"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 598.80421,67.796291 c -0.90656,4e-6 -1.53462,0.103668 -1.88425,0.310996 -0.34959,0.207333 -0.52443,0.561011 -0.52443,1.061039 0,0.398398 0.13012,0.715487 0.39027,0.951272 0.26423,0.231722 0.62199,0.347581 1.07323,0.347581 0.622,0 1.11998,-0.219523 1.49399,-0.658573 0.3781,-0.443113 0.56713,-1.030547 0.56713,-1.762297 l 0,-0.250018 -1.11594,0 m 2.23793,-0.46344 0,3.896569 -1.12199,0 0,-1.036644 c -0.25611,0.414656 -0.57526,0.721584 -0.9574,0.920786 -0.38214,0.195133 -0.84963,0.292695 -1.40252,0.2927 -0.69922,-5e-6 -1.25616,-0.195134 -1.6708,-0.5854 -0.41061,-0.394335 -0.61589,-0.920786 -0.61589,-1.579364 0,-0.768333 0.25611,-1.347636 0.76832,-1.737907 0.5163,-0.390262 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109762 c 0,-0.516286 -0.17076,-0.914679 -0.51222,-1.195189 -0.33742,-0.284564 -0.81308,-0.42685 -1.4269,-0.426855 -0.39032,5e-6 -0.77039,0.04676 -1.14032,0.140253 -0.36997,0.09351 -0.72566,0.23376 -1.06717,0.420753 l 0,-1.036645 c 0.41061,-0.15854 0.809,-0.276432 1.19523,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.12196 0.98788,9e-6 1.72571,0.25612 2.21354,0.768338 0.48784,0.512232 0.73173,1.288697 0.73173,2.329405"
+         id="path3553"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 607.71327,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64638,-0.284564 -0.98784,-0.365878 -0.3415,-0.0813 -0.69518,-0.121951 -1.06106,-0.121956 -0.55694,5e-6 -0.97567,0.08538 -1.25616,0.256112 -0.27644,0.170748 -0.41464,0.426859 -0.41464,0.768338 0,0.260179 0.0996,0.465478 0.29876,0.615887 0.19922,0.146354 0.59963,0.286607 1.20133,0.420758 l 0.38416,0.08537 c 0.79679,0.170744 1.36185,0.412626 1.69523,0.725652 0.33737,0.308963 0.5061,0.741915 0.5061,1.298853 0,0.634188 -0.25206,1.136246 -0.75615,1.506186 -0.5,0.369941 -1.18907,0.554909 -2.06717,0.554914 -0.36589,-5e-6 -0.74803,-0.03659 -1.14642,-0.109766 -0.39431,-0.06911 -0.81102,-0.174808 -1.25005,-0.31709 l 0,-1.158605 c 0.41465,0.215459 0.82319,0.378072 1.22567,0.487833 0.40243,0.105698 0.80087,0.158545 1.19518,0.158545 0.52846,0 0.93503,-0.08943 1.2196,-0.268306 0.28453,-0.182939 0.42682,-0.43905 0.42682,-0.768339 0,-0.304894 -0.10363,-0.538646 -0.31098,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34766,-0.469541 l -0.39026,-0.09147 c -0.69514,-0.146345 -1.1972,-0.369936 -1.50616,-0.670772 -0.30895,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.642309 0.22764,-1.138274 0.68297,-1.487893 0.45532,-0.349606 1.1017,-0.524413 1.93912,-0.524422 0.41469,9e-6 0.80496,0.03049 1.1708,0.09147 0.36588,0.06099 0.7033,0.152457 1.01226,0.274408"
+         id="path3555"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 615.71373,67.534082 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69518,1.768399 0.41869,0.402462 1.00005,0.603692 1.74399,0.603692 0.4309,0 0.84761,-0.05285 1.25005,-0.158544 0.40656,-0.105698 0.809,-0.264243 1.20739,-0.475639 l 0,1.061039 c -0.40244,0.170739 -0.81506,0.300831 -1.23788,0.390266 -0.42277,0.08944 -0.85165,0.134151 -1.28664,0.134156 -1.08949,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573321 0,-1.117944 0.30083,-2.004176 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987857 2.44528,-0.987866 0.91873,9e-6 1.6444,0.296772 2.17695,0.890299 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548806 -1.32934,-0.548811 -0.62608,5e-6 -1.12815,0.176846 -1.5062,0.530519 -0.37401,0.353683 -0.58949,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+         id="path3557"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 621.51286,65.448594 c -0.12603,-0.07317 -0.26423,-0.126015 -0.41464,-0.158545 -0.14638,-0.03659 -0.309,-0.05488 -0.48784,-0.05488 -0.6342,5e-6 -1.12204,0.207333 -1.4635,0.621989 -0.33742,0.410597 -0.50615,1.002094 -0.50615,1.774492 l 0,3.597771 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.23581,-0.414656 0.54275,-0.72158 0.9208,-0.920786 0.37805,-0.20326 0.83742,-0.30489 1.37815,-0.304899 0.0772,9e-6 0.16258,0.0061 0.2561,0.01832 0.0935,0.0081 0.19716,0.02236 0.31098,0.0427 l 0.006,1.152503"
+         id="path3559"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 627.95837,66.881607 0,3.335558 1.97571,0 c 0.66263,0 1.15248,-0.136185 1.46961,-0.408559 0.32117,-0.276437 0.48173,-0.697195 0.48173,-1.262269 0,-0.569137 -0.16056,-0.987861 -0.48173,-1.256172 -0.31713,-0.272369 -0.80698,-0.408554 -1.46961,-0.408558 l -1.97571,0 m 0,-3.744122 0,2.744061 1.82328,0 c 0.60165,5e-6 1.04881,-0.11179 1.34151,-0.335386 0.29678,-0.227649 0.44518,-0.573196 0.44518,-1.036644 0,-0.459367 -0.1484,-0.802884 -0.44518,-1.030547 -0.2927,-0.22765 -0.73986,-0.341475 -1.34151,-0.341484 l -1.82328,0 m -1.23177,-1.012255 3.14651,0 c 0.93907,9e-6 1.66267,0.195143 2.17085,0.5854 0.50817,0.390276 0.76226,0.945184 0.76226,1.66473 0,0.556952 -0.13012,1.000066 -0.39027,1.32935 -0.26019,0.329288 -0.64233,0.534587 -1.14642,0.615886 0.60574,0.130097 1.07525,0.402466 1.40863,0.817122 0.33738,0.410597 0.50611,0.924854 0.50611,1.542775 0,0.813053 -0.27645,1.441139 -0.82929,1.884253 -0.5529,0.443118 -1.33954,0.664674 -2.35992,0.664674 l -3.26846,0 0,-9.10419"
+         id="path3561"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 641.08106,67.534082 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69518,1.768399 0.41869,0.402462 1.00005,0.603692 1.74399,0.603692 0.4309,0 0.84761,-0.05285 1.25005,-0.158544 0.40656,-0.105698 0.809,-0.264243 1.20739,-0.475639 l 0,1.061039 c -0.40243,0.170739 -0.81506,0.300831 -1.23788,0.390266 -0.42277,0.08944 -0.85165,0.134151 -1.28664,0.134156 -1.08949,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573321 0,-1.117944 0.30083,-2.004176 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987857 2.44528,-0.987866 0.91873,9e-6 1.6444,0.296772 2.17695,0.890299 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548806 -1.32934,-0.548811 -0.62608,5e-6 -1.12815,0.176846 -1.5062,0.530519 -0.37401,0.353683 -0.58949,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+         id="path3563"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 646.02647,67.796291 c -0.90656,4e-6 -1.53462,0.103668 -1.88425,0.310996 -0.34959,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13011,0.715487 0.39026,0.951272 0.26424,0.231722 0.622,0.347581 1.07324,0.347581 0.62199,0 1.11997,-0.219523 1.49398,-0.658573 0.3781,-0.443113 0.56713,-1.030547 0.56713,-1.762297 l 0,-0.250018 -1.11594,0 m 2.23793,-0.46344 0,3.896569 -1.12199,0 0,-1.036644 c -0.25611,0.414656 -0.57526,0.721584 -0.95739,0.920786 -0.38214,0.195133 -0.84964,0.292695 -1.40253,0.2927 -0.69922,-5e-6 -1.25615,-0.195134 -1.6708,-0.5854 -0.41061,-0.394335 -0.61589,-0.920786 -0.61589,-1.579364 0,-0.768333 0.25611,-1.347636 0.76832,-1.737907 0.5163,-0.390262 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109762 c 0,-0.516286 -0.17076,-0.914679 -0.51222,-1.195189 -0.33742,-0.284564 -0.81308,-0.42685 -1.4269,-0.426855 -0.39031,5e-6 -0.77039,0.04676 -1.14032,0.140253 -0.36997,0.09351 -0.72566,0.23376 -1.06717,0.420753 l 0,-1.036645 c 0.41061,-0.15854 0.809,-0.276432 1.19523,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.12196 0.98783,9e-6 1.72571,0.25612 2.21354,0.768338 0.48784,0.512232 0.73173,1.288697 0.73173,2.329405"
+         id="path3565"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 655.89903,65.710807 c 0.28048,-0.504091 0.61588,-0.876061 1.00615,-1.115919 0.39027,-0.239844 0.84963,-0.359771 1.3781,-0.35978 0.71143,9e-6 1.26024,0.250023 1.64647,0.750046 0.38618,0.49597 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -5e-5,-0.654504 -0.11589,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.475629 -1.06102,-0.475639 -0.58136,1e-5 -1.04073,0.193109 -1.37815,0.579303 -0.33742,0.386208 -0.50611,0.912659 -0.50611,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -4e-5,-0.658568 -0.11588,-1.144372 -0.34761,-1.457402 -0.23173,-0.317085 -0.58944,-0.475629 -1.07323,-0.475639 -0.57319,1e-5 -1.02852,0.195143 -1.36594,0.5854 -0.33742,0.386208 -0.5061,0.91063 -0.5061,1.573266 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.2561,-0.418719 0.56304,-0.727682 0.92075,-0.926883 0.35776,-0.199192 0.7826,-0.298793 1.27447,-0.298802 0.49596,9e-6 0.91672,0.126033 1.26226,0.378072 0.34964,0.252052 0.60776,0.61793 0.77448,1.097627"
+         id="path3567"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 673.59518,62.826493 0,1.298853 c -0.41469,-0.386194 -0.8578,-0.674826 -1.32938,-0.865905 -0.46749,-0.191056 -0.96548,-0.286593 -1.49399,-0.286598 -1.04068,5e-6 -1.83751,0.319133 -2.39036,0.95737 -0.55289,0.634193 -0.82934,1.552944 -0.82934,2.75626 0,1.199258 0.27645,2.11801 0.82934,2.756256 0.55285,0.634188 1.34968,0.951277 2.39036,0.951277 0.52851,0 1.0265,-0.09553 1.49399,-0.286602 0.47158,-0.191066 0.91469,-0.479702 1.32938,-0.865906 l 0,1.286664 c -0.43094,0.2927 -0.88829,0.512222 -1.37204,0.658572 -0.4797,0.14635 -0.98787,0.219523 -1.52447,0.219528 -1.37814,-5e-6 -2.46359,-0.420758 -3.25629,-1.26227 -0.79275,-0.845579 -1.18912,-1.998082 -1.18912,-3.457519 0,-1.463495 0.39637,-2.615998 1.18912,-3.457518 0.7927,-0.84557 1.87815,-1.268358 3.25629,-1.268367 0.54472,9e-6 1.05694,0.07318 1.53664,0.219523 0.48379,0.142295 0.93706,0.357755 1.35987,0.646382"
+         id="path3569"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 675.34528,68.534143 0,-4.134389 1.12199,0 0,4.091703 c 0,0.646378 0.12603,1.132181 0.3781,1.457402 0.25202,0.321157 0.63007,0.481736 1.13421,0.481736 0.60569,0 1.08338,-0.193104 1.43301,-0.579303 0.35367,-0.386203 0.53049,-0.912654 0.53049,-1.579363 l 0,-3.872175 1.12204,0 0,6.829666 -1.12204,0 0,-1.048844 c -0.27236,0.414661 -0.58944,0.723624 -0.95124,0.926884 -0.35776,0.199201 -0.77448,0.298797 -1.2501,0.298802 -0.78462,-5e-6 -1.38016,-0.243917 -1.78668,-0.73175 -0.40652,-0.487834 -0.60978,-1.201292 -0.60978,-2.140369"
+         id="path3571"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 684.49822,62.460616 0,1.939138 2.31112,0 0,0.872003 -2.31112,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.1545,0.158545 0.46548,0.237819 0.93302,0.237819 l 1.15248,0 0,0.939078 -1.15248,0 c -0.86594,0 -1.4635,-0.160578 -1.7928,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82323,0 0,-0.872003 0.82323,0 0,-1.939138 1.1281,0"
+         id="path3573"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 692.64506,64.600985 0,1.061039 c -0.31712,-0.162608 -0.64637,-0.284564 -0.98788,-0.365878 -0.34146,-0.0813 -0.69513,-0.121951 -1.06102,-0.121956 -0.55693,5e-6 -0.97566,0.08538 -1.2562,0.256112 -0.2764,0.170748 -0.41464,0.426859 -0.41464,0.768338 0,0.260179 0.0996,0.465478 0.2988,0.615887 0.19922,0.146354 0.59964,0.286607 1.20129,0.420758 l 0.38416,0.08537 c 0.79679,0.170744 1.36189,0.412626 1.69523,0.725652 0.33742,0.308963 0.5061,0.741915 0.50615,1.298853 -5e-5,0.634188 -0.25207,1.136246 -0.75615,1.506186 -0.50005,0.369941 -1.18912,0.554909 -2.06722,0.554914 -0.36584,-5e-6 -0.74798,-0.03659 -1.14638,-0.109766 -0.39435,-0.06911 -0.81102,-0.174808 -1.25009,-0.31709 l 0,-1.158605 c 0.41465,0.215459 0.82323,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158545 1.19522,0.158545 0.52847,0 0.93499,-0.08943 1.21956,-0.268306 0.28458,-0.182939 0.42686,-0.43905 0.42686,-0.768339 0,-0.304894 -0.10367,-0.538646 -0.31097,-0.701258 -0.20331,-0.162608 -0.65248,-0.319123 -1.34766,-0.469541 l -0.39027,-0.09147 c -0.69518,-0.146345 -1.19724,-0.369936 -1.5062,-0.670772 -0.30895,-0.30489 -0.4634,-0.72158 -0.4634,-1.25007 0,-0.642309 0.22764,-1.138274 0.68296,-1.487893 0.45528,-0.349606 1.10166,-0.524413 1.93912,-0.524422 0.41465,9e-6 0.80492,0.03049 1.1708,0.09147 0.36589,0.06099 0.70331,0.152457 1.01226,0.274408"
+         id="path3575"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 701.87119,63.338716 -1.6708,4.530752 3.34776,0 -1.67696,-4.530752 m -0.69513,-1.213486 1.39642,0 3.4697,9.10419 -1.28058,0 -0.82929,-2.335502 -4.10391,0 -0.82934,2.335502 -1.29885,0 3.47585,-9.10419"
+         id="path3577"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 706.16413,64.399754 1.12204,0 1.40252,5.329578 1.39642,-5.329578 1.32324,0 1.40252,5.329578 1.39642,-5.329578 1.122,0 -1.78669,6.829666 -1.32323,0 -1.46961,-5.597888 -1.47567,5.597888 -1.32328,0 -1.78668,-6.829666"
+         id="path3579"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 720.15275,67.796291 c -0.90656,4e-6 -1.53466,0.103668 -1.88425,0.310996 -0.34963,0.207333 -0.52443,0.561011 -0.52443,1.061039 0,0.398398 0.13008,0.715487 0.39027,0.951272 0.26423,0.231722 0.62199,0.347581 1.07323,0.347581 0.622,0 1.11998,-0.219523 1.49399,-0.658573 0.37805,-0.443113 0.56713,-1.030547 0.56713,-1.762297 l 0,-0.250018 -1.11594,0 m 2.23793,-0.46344 0,3.896569 -1.12199,0 0,-1.036644 c -0.25616,0.414656 -0.57526,0.721584 -0.9574,0.920786 -0.38214,0.195133 -0.84963,0.292695 -1.40252,0.2927 -0.69922,-5e-6 -1.25616,-0.195134 -1.6708,-0.5854 -0.41061,-0.394335 -0.61589,-0.920786 -0.61589,-1.579364 0,-0.768333 0.25611,-1.347636 0.76832,-1.737907 0.5163,-0.390262 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109762 c 0,-0.516286 -0.17076,-0.914679 -0.51226,-1.195189 -0.33742,-0.284564 -0.81304,-0.42685 -1.42691,-0.426855 -0.39027,5e-6 -0.77034,0.04676 -1.14031,0.140253 -0.36993,0.09351 -0.72562,0.23376 -1.06713,0.420753 l 0,-1.036645 c 0.41061,-0.15854 0.809,-0.276432 1.19518,-0.353678 0.38623,-0.0813 0.76226,-0.121951 1.12815,-0.12196 0.98783,9e-6 1.72571,0.25612 2.21354,0.768338 0.48784,0.512232 0.73173,1.288697 0.73173,2.329405"
+         id="path3581"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 727.5495,71.863603 c -0.31708,0.813054 -0.62603,1.343574 -0.92686,1.591558 -0.30083,0.247976 -0.70331,0.37197 -1.20739,0.37197 l -0.89638,0 0,-0.939078 0.65854,0 c 0.309,0 0.54881,-0.07318 0.71956,-0.219527 0.17076,-0.14635 0.35978,-0.491897 0.56713,-1.036644 l 0.20124,-0.512223 -2.76235,-6.719905 1.18907,0 2.13425,5.341772 2.1343,-5.341772 1.18907,0 -3.00018,7.463849"
+         id="path3583"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 731.49486,69.680548 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872 m 0,-4.908824 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872"
+         id="path3585"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 742.20892,62.936255 c -0.6342,9e-6 -1.11184,0.313035 -1.43301,0.939077 -0.31708,0.621994 -0.47562,1.559042 -0.47562,2.811141 0,1.248041 0.15854,2.185089 0.47562,2.811137 0.32117,0.621988 0.79881,0.932985 1.43301,0.932985 0.63825,0 1.11589,-0.310997 1.43302,-0.932985 0.32116,-0.626048 0.48172,-1.563096 0.48172,-2.811137 0,-1.252099 -0.16056,-2.189147 -0.48172,-2.811141 -0.31713,-0.626042 -0.79477,-0.939068 -1.43302,-0.939077 m 0,-0.975667 c 1.02039,9e-6 1.79886,0.404504 2.3355,1.213486 0.54068,0.804932 0.81102,1.975732 0.81102,3.512399 0,1.53261 -0.27034,2.703409 -0.81102,3.5124 -0.53664,0.804923 -1.31511,1.207384 -2.3355,1.207389 -1.02038,-5e-6 -1.80092,-0.402466 -2.3416,-1.207389 -0.53664,-0.808991 -0.80491,-1.97979 -0.80491,-3.5124 0,-1.536667 0.26827,-2.707467 0.80491,-3.512399 0.54068,-0.808982 1.32122,-1.213477 2.3416,-1.213486"
+         id="path3587"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 747.52628,69.680548 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872"
+         id="path3589"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 751.71559,70.192776 2.0123,0 0,-6.945529 -2.18916,0.43905 0,-1.122017 2.17695,-0.43905 1.23178,0 0,8.067546 2.0123,0 0,1.036644 -5.24417,0 0,-1.036644"
+         id="path3591"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 762.70403,67.308457 3.28678,0 0,1.000061 -3.28678,0 0,-1.000061"
+         id="path3593"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 774.55225,62.936255 c -0.63416,9e-6 -1.11185,0.313035 -1.43297,0.939077 -0.31713,0.621994 -0.47567,1.559042 -0.47567,2.811141 0,1.248041 0.15854,2.185089 0.47567,2.811137 0.32112,0.621988 0.79881,0.932985 1.43297,0.932985 0.63824,0 1.11593,-0.310997 1.43301,-0.932985 0.32117,-0.626048 0.48173,-1.563096 0.48177,-2.811137 -4e-5,-1.252099 -0.1606,-2.189147 -0.48177,-2.811141 -0.31708,-0.626042 -0.79477,-0.939068 -1.43301,-0.939077 m 0,-0.975667 c 1.02038,9e-6 1.7989,0.404504 2.33554,1.213486 0.54068,0.804932 0.81102,1.975732 0.81102,3.512399 0,1.53261 -0.27034,2.703409 -0.81102,3.5124 -0.53664,0.804923 -1.31516,1.207384 -2.33554,1.207389 -1.02039,-5e-6 -1.80092,-0.402466 -2.3416,-1.207389 -0.5366,-0.808991 -0.80492,-1.97979 -0.80492,-3.5124 0,-1.536667 0.26832,-2.707467 0.80492,-3.512399 0.54068,-0.808982 1.32121,-1.213477 2.3416,-1.213486"
+         id="path3595"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 779.86965,69.680548 1.28664,0 0,1.548872 -1.28664,0 0,-1.548872"
+         id="path3597"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 784.90652,70.192776 4.29904,0 0,1.036644 -5.78081,0 0,-1.036644 c 0.46749,-0.48377 1.10372,-1.132178 1.90863,-1.945236 0.809,-0.817117 1.31713,-1.343573 1.52448,-1.579363 0.3943,-0.443109 0.66873,-0.817113 0.82323,-1.122017 0.15854,-0.308953 0.23779,-0.611814 0.23779,-0.908586 0,-0.483761 -0.17071,-0.878096 -0.51222,-1.182999 -0.33742,-0.304886 -0.77851,-0.457333 -1.32323,-0.457342 -0.38623,9e-6 -0.79477,0.06708 -1.22567,0.20123 -0.42686,0.134165 -0.8842,0.337425 -1.37204,0.609794 l 0,-1.243977 c 0.49596,-0.199188 0.95942,-0.349605 1.39032,-0.451245 0.4309,-0.10162 0.82525,-0.152438 1.18301,-0.152447 0.94311,9e-6 1.69518,0.235795 2.2562,0.707356 0.56102,0.47158 0.84151,1.1017 0.84151,1.890355 0,0.374013 -0.0711,0.729725 -0.21341,1.067136 -0.13825,0.333356 -0.39229,0.727691 -0.76226,1.182994 -0.10161,0.117898 -0.42479,0.459381 -0.96956,1.02445 -0.54477,0.561011 -1.31309,1.347641 -2.30501,2.359897"
+         id="path3599"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 796.95603,65.710807 c 0.28049,-0.504091 0.61589,-0.876061 1.00615,-1.115919 0.39022,-0.239844 0.84964,-0.359771 1.3781,-0.35978 0.71144,9e-6 1.26024,0.250023 1.64647,0.750046 0.38618,0.49597 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.475629 -1.06102,-0.475639 -0.58136,1e-5 -1.04073,0.193109 -1.37815,0.579303 -0.33742,0.386208 -0.5061,0.912659 -0.5061,1.579363 l 0,3.85998 -1.12815,0 0,-4.085605 c 0,-0.658568 -0.11584,-1.144372 -0.34757,-1.457402 -0.23172,-0.317085 -0.58944,-0.475629 -1.07323,-0.475639 -0.57319,1e-5 -1.02851,0.195143 -1.36593,0.5854 -0.33742,0.386208 -0.50611,0.91063 -0.50611,1.573266 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.25611,-0.418719 0.56304,-0.727682 0.92075,-0.926883 0.35776,-0.199192 0.7826,-0.298793 1.27448,-0.298802 0.49596,9e-6 0.91671,0.126033 1.26226,0.378072 0.34963,0.252052 0.60776,0.61793 0.77447,1.097627"
+         id="path3601"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 809.12744,65.710807 c 0.28053,-0.504091 0.61588,-0.876061 1.00615,-1.115919 0.39027,-0.239844 0.84963,-0.359771 1.37814,-0.35978 0.71144,9e-6 1.26024,0.250023 1.64642,0.750046 0.38623,0.49597 0.5793,1.203325 0.57934,2.122073 l 0,4.122193 -1.12814,0 0,-4.085605 c 0,-0.654504 -0.11584,-1.140304 -0.34757,-1.457402 -0.23173,-0.317085 -0.5854,-0.475629 -1.06102,-0.475639 -0.58136,1e-5 -1.04073,0.193109 -1.37814,0.579303 -0.33742,0.386208 -0.50616,0.912659 -0.50616,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c 0,-0.658568 -0.11584,-1.144372 -0.34756,-1.457402 -0.23173,-0.317085 -0.58949,-0.475629 -1.07324,-0.475639 -0.57323,1e-5 -1.02851,0.195143 -1.36593,0.5854 -0.33742,0.386208 -0.50615,0.91063 -0.50615,1.573266 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.2561,-0.418719 0.56304,-0.727682 0.9208,-0.926883 0.35776,-0.199192 0.78255,-0.298793 1.27447,-0.298802 0.49596,9e-6 0.91671,0.126033 1.26226,0.378072 0.34963,0.252052 0.60776,0.61793 0.77443,1.097627"
+         id="path3603"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 824.86009,67.820685 c 0,-0.825249 -0.17075,-1.471627 -0.51226,-1.939139 -0.33742,-0.471566 -0.80289,-0.707351 -1.39642,-0.707356 -0.59352,5e-6 -1.06102,0.23579 -1.40252,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939139 0,0.825253 0.16869,1.473665 0.50611,1.945235 0.3415,0.467508 0.809,0.701259 1.40252,0.701259 0.59353,0 1.059,-0.233751 1.39642,-0.701259 0.34151,-0.47157 0.51226,-1.119982 0.51226,-1.945235 m -3.81731,-2.384286 c 0.23577,-0.40652 0.53255,-0.707351 0.89031,-0.902489 0.3618,-0.199192 0.7927,-0.298793 1.29275,-0.298802 0.82929,9e-6 1.50211,0.329298 2.01841,0.987866 0.52034,0.658577 0.78054,1.524482 0.78054,2.597711 0,1.073237 -0.2602,1.939138 -0.78054,2.597711 -0.5163,0.658577 -1.18912,0.987861 -2.01841,0.987866 -0.50005,-5e-6 -0.93095,-0.09757 -1.29275,-0.2927 -0.35776,-0.199202 -0.65454,-0.502062 -0.89031,-0.908592 l 0,1.02445 -1.1281,0 0,-9.488359 1.1281,0 0,3.695338"
+         id="path3605"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 830.53113,65.186385 c -0.60166,5e-6 -1.07728,0.23579 -1.42691,0.707356 -0.34959,0.467512 -0.52443,1.109826 -0.52443,1.926944 0,0.817122 0.17278,1.46147 0.51832,1.933041 0.34964,0.467507 0.82732,0.701258 1.43302,0.701258 0.59761,0 1.07121,-0.235785 1.42084,-0.707356 0.34959,-0.47157 0.52438,-1.113885 0.52438,-1.926943 0,-0.808986 -0.17479,-1.449267 -0.52438,-1.920842 -0.34963,-0.475634 -0.82323,-0.713453 -1.42084,-0.713458 m 0,-0.951277 c 0.97566,9e-6 1.74196,0.317098 2.29894,0.951277 0.55694,0.634188 0.8354,1.512288 0.8354,2.6343 0,1.117953 -0.27846,1.996053 -0.8354,2.634299 -0.55698,0.634184 -1.32328,0.951273 -2.29894,0.951278 -0.97971,-5e-6 -1.74808,-0.317094 -2.30501,-0.951278 -0.55289,-0.638246 -0.82929,-1.516346 -0.82929,-2.634299 0,-1.122012 0.2764,-2.000112 0.82929,-2.6343 0.55693,-0.634179 1.3253,-0.951268 2.30501,-0.951277"
+         id="path3607"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 836.62906,62.460616 0,1.939138 2.31112,0 0,0.872003 -2.31112,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22563,1.073233 0.15445,0.158545 0.46547,0.237819 0.93296,0.237819 l 1.15253,0 0,0.939078 -1.15253,0 c -0.86589,0 -1.4635,-0.160578 -1.79279,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82319,0 0,-0.872003 0.82319,0 0,-1.939138 1.12814,0"
+         id="path3609"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 846.09909,67.107227 0,4.122193 -1.12199,0 0,-4.085605 c 0,-0.646373 -0.12604,-1.130143 -0.3781,-1.451305 -0.25202,-0.321148 -0.63012,-0.481726 -1.13421,-0.481736 -0.60574,1e-5 -1.08338,0.193109 -1.43301,0.579303 -0.34959,0.386208 -0.52443,0.912659 -0.52443,1.579363 l 0,3.85998 -1.1281,0 0,-9.488359 1.1281,0 0,3.719732 c 0.26832,-0.410588 0.58338,-0.717517 0.94518,-0.920786 0.36589,-0.20326 0.78664,-0.30489 1.26231,-0.304899 0.78457,9e-6 1.3781,0.243926 1.78058,0.73175 0.40243,0.483774 0.60367,1.197232 0.60367,2.140369"
+         id="path3611"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 856.67899,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64637,-0.284564 -0.98783,-0.365878 -0.34151,-0.0813 -0.69518,-0.121951 -1.06107,-0.121956 -0.55693,5e-6 -0.97567,0.08538 -1.25615,0.256112 -0.27645,0.170748 -0.41465,0.426859 -0.41465,0.768338 0,0.260179 0.0996,0.465478 0.29881,0.615887 0.19917,0.146354 0.59958,0.286607 1.20128,0.420758 l 0.38416,0.08537 c 0.79679,0.170744 1.36185,0.412626 1.69523,0.725652 0.33742,0.308963 0.50611,0.741915 0.50611,1.298853 0,0.634188 -0.25207,1.136246 -0.75616,1.506186 -0.5,0.369941 -1.18907,0.554909 -2.06717,0.554914 -0.36589,-5e-6 -0.74803,-0.03659 -1.14642,-0.109766 -0.39431,-0.06911 -0.81102,-0.174808 -1.25005,-0.31709 l 0,-1.158605 c 0.41465,0.215459 0.82319,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158545 1.19518,0.158545 0.52851,0 0.93503,-0.08943 1.21961,-0.268306 0.28457,-0.182939 0.42681,-0.43905 0.42686,-0.768339 -5e-5,-0.304894 -0.10368,-0.538646 -0.31102,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34762,-0.469541 l -0.39026,-0.09147 c -0.69518,-0.146345 -1.19725,-0.369936 -1.5062,-0.670772 -0.30896,-0.30489 -0.46346,-0.72158 -0.46346,-1.25007 0,-0.642309 0.22764,-1.138274 0.68297,-1.487893 0.45533,-0.349606 1.1017,-0.524413 1.93917,-0.524422 0.41464,9e-6 0.80491,0.03049 1.1708,0.09147 0.36584,0.06099 0.70326,0.152457 1.01221,0.274408"
+         id="path3613"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 858.83767,64.399754 1.12199,0 0,6.829666 -1.12199,0 0,-6.829666 m 0,-2.658693 1.12199,0 0,1.420814 -1.12199,0 0,-1.420814"
+         id="path3615"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 866.79544,65.436399 0,-3.695338 1.12199,0 0,9.488359 -1.12199,0 0,-1.02445 c -0.23582,0.40653 -0.53458,0.70939 -0.89638,0.908592 -0.35776,0.195133 -0.7887,0.292695 -1.29279,0.2927 -0.82525,-5e-6 -1.49803,-0.329289 -2.01841,-0.987866 -0.51626,-0.658573 -0.77443,-1.524474 -0.77443,-2.597711 0,-1.073229 0.25817,-1.939134 0.77443,-2.597711 0.52038,-0.658568 1.19316,-0.987857 2.01841,-0.987866 0.50409,9e-6 0.93503,0.09961 1.29279,0.298802 0.3618,0.195138 0.66056,0.495969 0.89638,0.902489 m -3.82338,2.384286 c 0,0.825253 0.16869,1.473665 0.50611,1.945235 0.34146,0.467508 0.809,0.701259 1.40253,0.701259 0.59352,0 1.06102,-0.233751 1.40252,-0.701259 0.34146,-0.47157 0.51222,-1.119982 0.51222,-1.945235 0,-0.825249 -0.17076,-1.471627 -0.51222,-1.939139 -0.3415,-0.471566 -0.809,-0.707351 -1.40252,-0.707356 -0.59353,5e-6 -1.06107,0.23579 -1.40253,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939139"
+         id="path3617"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 876.07037,67.534082 0,0.548811 -5.15886,0 c 0.0488,0.772407 0.28053,1.36187 0.69518,1.768399 0.41873,0.402462 1.00004,0.603692 1.74398,0.603692 0.43095,0 0.84762,-0.05285 1.2501,-0.158544 0.40652,-0.105698 0.809,-0.264243 1.20739,-0.475639 l 0,1.061039 c -0.40248,0.170739 -0.81511,0.300831 -1.23788,0.390266 -0.42282,0.08944 -0.8517,0.134151 -1.28669,0.134156 -1.08948,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63416,-0.634183 -0.95128,-1.491952 -0.95128,-2.573321 0,-1.117944 0.30083,-2.004176 0.90252,-2.658689 0.6057,-0.658568 1.4208,-0.987857 2.44523,-0.987866 0.91878,9e-6 1.6444,0.296772 2.177,0.890299 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12204,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33333,-0.365868 -0.77644,-0.548806 -1.32934,-0.548811 -0.62603,5e-6 -1.1281,0.176846 -1.5062,0.530519 -0.37396,0.353683 -0.58944,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+         id="path3619"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 882.26583,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64637,-0.284564 -0.98783,-0.365878 -0.34151,-0.0813 -0.69518,-0.121951 -1.06107,-0.121956 -0.55693,5e-6 -0.97566,0.08538 -1.25615,0.256112 -0.27645,0.170748 -0.41465,0.426859 -0.41465,0.768338 0,0.260179 0.0996,0.465478 0.29876,0.615887 0.19922,0.146354 0.59964,0.286607 1.20134,0.420758 l 0.38416,0.08537 c 0.79678,0.170744 1.36184,0.412626 1.69522,0.725652 0.33738,0.308963 0.50611,0.741915 0.50611,1.298853 0,0.634188 -0.25207,1.136246 -0.75615,1.506186 -0.5,0.369941 -1.18908,0.554909 -2.06718,0.554914 -0.36588,-5e-6 -0.74802,-0.03659 -1.14642,-0.109766 -0.3943,-0.06911 -0.81102,-0.174808 -1.25004,-0.31709 l 0,-1.158605 c 0.41464,0.215459 0.82318,0.378072 1.22566,0.487833 0.40244,0.105698 0.80088,0.158545 1.19518,0.158545 0.52847,0 0.93504,-0.08943 1.21961,-0.268306 0.28453,-0.182939 0.42681,-0.43905 0.42681,-0.768339 0,-0.304894 -0.10362,-0.538646 -0.31097,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34766,-0.469541 l -0.39027,-0.09147 c -0.69513,-0.146345 -1.1972,-0.369936 -1.50615,-0.670772 -0.30895,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.642309 0.22764,-1.138274 0.68296,-1.487893 0.45533,-0.349606 1.1017,-0.524413 1.93912,-0.524422 0.4147,9e-6 0.80496,0.03049 1.1708,0.09147 0.36589,0.06099 0.70331,0.152457 1.01226,0.274408"
+         id="path3621"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 891.04683,65.186385 c -0.60165,5e-6 -1.07727,0.23579 -1.4269,0.707356 -0.34959,0.467512 -0.52443,1.109826 -0.52443,1.926944 0,0.817122 0.17277,1.46147 0.51832,1.933041 0.34963,0.467507 0.82732,0.701258 1.43301,0.701258 0.59762,0 1.07122,-0.235785 1.42085,-0.707356 0.34959,-0.47157 0.52438,-1.113885 0.52438,-1.926943 0,-0.808986 -0.17479,-1.449267 -0.52438,-1.920842 -0.34963,-0.475634 -0.82323,-0.713453 -1.42085,-0.713458 m 0,-0.951277 c 0.97567,9e-6 1.74197,0.317098 2.29895,0.951277 0.55693,0.634188 0.8354,1.512288 0.8354,2.6343 0,1.117953 -0.27847,1.996053 -0.8354,2.634299 -0.55698,0.634184 -1.32328,0.951273 -2.29895,0.951278 -0.9797,-5e-6 -1.74807,-0.317094 -2.305,-0.951278 -0.5529,-0.638246 -0.8293,-1.516346 -0.8293,-2.634299 0,-1.122012 0.2764,-2.000112 0.8293,-2.6343 0.55693,-0.634179 1.3253,-0.951268 2.305,-0.951277"
+         id="path3623"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 899.49243,61.741061 0,0.93298 -1.07323,0 c -0.40244,9e-6 -0.68297,0.08132 -0.84151,0.243917 -0.15445,0.162622 -0.23172,0.455322 -0.23172,0.8781 l 0,0.603696 1.8477,0 0,0.872003 -1.8477,0 0,5.957663 -1.1281,0 0,-5.957663 -1.07324,0 0,-0.872003 1.07324,0 0,-0.475638 c 0,-0.760198 0.17685,-1.313077 0.53053,-1.658633 0.35367,-0.349606 0.91469,-0.524413 1.68301,-0.524422 l 1.06102,0"
+         id="path3625"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 909.31622,64.661963 0,1.048844 c -0.31708,-0.174803 -0.63622,-0.30489 -0.95739,-0.390267 -0.31708,-0.08943 -0.63825,-0.13415 -0.96345,-0.134155 -0.72769,5e-6 -1.29275,0.231727 -1.69523,0.695161 -0.40248,0.459381 -0.60367,1.105763 -0.60367,1.939139 0,0.833384 0.20119,1.481796 0.60367,1.945235 0.40248,0.459376 0.96754,0.689064 1.69523,0.689064 0.3252,0 0.64637,-0.0427 0.96345,-0.128058 0.32117,-0.08943 0.64031,-0.221556 0.95739,-0.396364 l 0,1.03665 c -0.31304,0.14635 -0.63824,0.256111 -0.97566,0.329284 -0.33338,0.07318 -0.68908,0.109761 -1.06713,0.109766 -1.02851,-5e-6 -1.84564,-0.323192 -2.45138,-0.96957 -0.60574,-0.646378 -0.90859,-1.51838 -0.90859,-2.616007 0,-1.113881 0.30492,-1.989947 0.9147,-2.628203 0.61386,-0.638242 1.4533,-0.957365 2.51841,-0.957374 0.34555,9e-6 0.68297,0.03659 1.01226,0.109766 0.32929,0.06911 0.64844,0.174812 0.95739,0.317089"
+         id="path3627"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 911.16388,68.534143 0,-4.134389 1.122,0 0,4.091703 c 0,0.646378 0.12603,1.132181 0.37805,1.457402 0.25207,0.321157 0.63012,0.481736 1.13425,0.481736 0.6057,0 1.08338,-0.193104 1.43302,-0.579303 0.35367,-0.386203 0.53048,-0.912654 0.53048,-1.579363 l 0,-3.872175 1.12204,0 0,6.829666 -1.12204,0 0,-1.048844 c -0.27236,0.414661 -0.58944,0.723624 -0.95128,0.926884 -0.35772,0.199201 -0.77443,0.298797 -1.25005,0.298802 -0.78462,-5e-6 -1.38017,-0.243917 -1.78669,-0.73175 -0.40652,-0.487834 -0.60978,-1.201292 -0.60978,-2.140369"
+         id="path3629"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 920.31683,62.460616 0,1.939138 2.31111,0 0,0.872003 -2.31111,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.1545,0.158545 0.46547,0.237819 0.93301,0.237819 l 1.15248,0 0,0.939078 -1.15248,0 c -0.86593,0 -1.4635,-0.160578 -1.79279,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82323,0 0,-0.872003 0.82323,0 0,-1.939138 1.1281,0"
+         id="path3631"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 925.21959,62.460616 0,1.939138 2.31111,0 0,0.872003 -2.31111,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.15445,0.158545 0.46547,0.237819 0.93296,0.237819 l 1.15253,0 0,0.939078 -1.15253,0 c -0.86588,0 -1.4635,-0.160578 -1.79279,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82319,0 0,-0.872003 0.82319,0 0,-1.939138 1.12815,0"
+         id="path3633"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 929.01247,64.399754 1.122,0 0,6.829666 -1.122,0 0,-6.829666 m 0,-2.658693 1.122,0 0,1.420814 -1.122,0 0,-1.420814"
+         id="path3635"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 938.15325,67.107227 0,4.122193 -1.12204,0 0,-4.085605 c 0,-0.646373 -0.12598,-1.130143 -0.37805,-1.451305 -0.25207,-0.321148 -0.63012,-0.481726 -1.13421,-0.481736 -0.60574,1e-5 -1.08338,0.193109 -1.43301,0.579303 -0.34963,0.386208 -0.52443,0.912659 -0.52443,1.579363 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.26832,-0.410588 0.58338,-0.717517 0.94518,-0.920786 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.304899 0.78462,9e-6 1.37815,0.243926 1.78063,0.73175 0.40243,0.483774 0.60367,1.197232 0.60367,2.140369"
+         id="path3637"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 944.89757,67.735313 c -5e-5,-0.81305 -0.16874,-1.44317 -0.50616,-1.890355 -0.33333,-0.447172 -0.80289,-0.670763 -1.40863,-0.670768 -0.60165,5e-6 -1.07117,0.223596 -1.40859,0.670768 -0.33338,0.447185 -0.50004,1.077305 -0.50004,1.890355 0,0.808995 0.16666,1.437076 0.50004,1.884257 0.33742,0.447182 0.80694,0.670772 1.40859,0.670772 0.60574,0 1.0753,-0.22359 1.40863,-0.670772 0.33742,-0.447181 0.50611,-1.075262 0.50616,-1.884257 m 1.12199,2.646499 c 0,1.162668 -0.25813,2.026535 -0.77443,2.591613 -0.5163,0.569133 -1.30698,0.853706 -2.37208,0.853706 -0.39436,0 -0.7663,-0.03049 -1.11594,-0.09147 -0.34958,-0.05692 -0.68907,-0.14635 -1.01836,-0.268306 l 0,-1.09153 c 0.32929,0.178871 0.65454,0.310992 0.97566,0.396369 0.32117,0.08537 0.64844,0.128053 0.98178,0.128053 0.73581,0 1.28668,-0.193099 1.65252,-0.579303 0.36589,-0.382135 0.54881,-0.961437 0.54886,-1.737903 l 0,-0.554913 c -0.23173,0.402466 -0.52852,0.703293 -0.89032,0.902494 -0.3618,0.199197 -0.79476,0.298797 -1.29885,0.298797 -0.83747,0 -1.51231,-0.319123 -2.02452,-0.957374 -0.51221,-0.638247 -0.76832,-1.483822 -0.76832,-2.536733 0,-1.056966 0.25611,-1.904575 0.76832,-2.542831 0.51221,-0.638242 1.18705,-0.957365 2.02452,-0.957374 0.50409,9e-6 0.93705,0.09961 1.29885,0.298802 0.3618,0.199201 0.65859,0.500032 0.89032,0.902489 l 0,-1.036645 1.12199,0 0,5.982058"
+         id="path3639"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 952.30652,61.741061 1.122,0 0,9.488359 -1.122,0 0,-9.488359"
+         id="path3641"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 955.77012,64.399754 1.12204,0 0,6.829666 -1.12204,0 0,-6.829666 m 0,-2.658693 1.12204,0 0,1.420814 -1.12204,0 0,-1.420814"
+         id="path3643"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 964.9109,67.107227 0,4.122193 -1.122,0 0,-4.085605 c 0,-0.646373 -0.12603,-1.130143 -0.3781,-1.451305 -0.25202,-0.321148 -0.63012,-0.481726 -1.1342,-0.481736 -0.6057,1e-5 -1.08338,0.193109 -1.43302,0.579303 -0.34958,0.386208 -0.52442,0.912659 -0.52438,1.579363 l 0,3.85998 -1.12814,0 0,-6.829666 1.12814,0 0,1.061039 c 0.26828,-0.410588 0.58334,-0.717517 0.94514,-0.920786 0.36588,-0.20326 0.78664,-0.30489 1.2623,-0.304899 0.78458,9e-6 1.3781,0.243926 1.78058,0.73175 0.40244,0.483774 0.60368,1.197232 0.60368,2.140369"
+         id="path3645"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 973.00287,67.534082 0,0.548811 -5.15887,0 c 0.0488,0.772407 0.28049,1.36187 0.69518,1.768399 0.41874,0.402462 1.00005,0.603692 1.74399,0.603692 0.4309,0 0.84761,-0.05285 1.25009,-0.158544 0.40652,-0.105698 0.80896,-0.264243 1.2074,-0.475639 l 0,1.061039 c -0.40248,0.170739 -0.81511,0.300831 -1.23788,0.390266 -0.42282,0.08944 -0.8517,0.134151 -1.28669,0.134156 -1.08949,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573321 0,-1.117944 0.30083,-2.004176 0.90248,-2.658689 0.60574,-0.658568 1.42085,-0.987857 2.44528,-0.987866 0.91878,9e-6 1.6444,0.296772 2.17695,0.890299 0.53664,0.589468 0.80491,1.392361 0.80496,2.408675 m -1.12204,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548806 -1.32934,-0.548811 -0.62608,5e-6 -1.12815,0.176846 -1.5062,0.530519 -0.37401,0.353683 -0.58944,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+         id="path3647"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 979.19833,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64638,-0.284564 -0.98788,-0.365878 -0.34146,-0.0813 -0.69514,-0.121951 -1.06102,-0.121956 -0.55694,5e-6 -0.97567,0.08538 -1.25616,0.256112 -0.27644,0.170748 -0.41469,0.426859 -0.41469,0.768338 0,0.260179 0.0996,0.465478 0.29881,0.615887 0.19922,0.146354 0.59963,0.286607 1.20129,0.420758 l 0.38416,0.08537 c 0.79683,0.170744 1.36189,0.412626 1.69522,0.725652 0.33742,0.308963 0.50615,0.741915 0.50615,1.298853 0,0.634188 -0.25206,1.136246 -0.75615,1.506186 -0.50004,0.369941 -1.18907,0.554909 -2.06717,0.554914 -0.36589,-5e-6 -0.74803,-0.03659 -1.14642,-0.109766 -0.39435,-0.06911 -0.81102,-0.174808 -1.25009,-0.31709 l 0,-1.158605 c 0.41469,0.215459 0.82323,0.378072 1.22571,0.487833 0.40243,0.105698 0.80083,0.158545 1.19518,0.158545 0.52847,0 0.93499,-0.08943 1.21956,-0.268306 0.28457,-0.182939 0.42686,-0.43905 0.42686,-0.768339 0,-0.304894 -0.10367,-0.538646 -0.31098,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34765,-0.469541 l -0.39027,-0.09147 c -0.69514,-0.146345 -1.1972,-0.369936 -1.50616,-0.670772 -0.30899,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.642309 0.22764,-1.138274 0.68297,-1.487893 0.45528,-0.349606 1.1017,-0.524413 1.93912,-0.524422 0.41465,9e-6 0.80491,0.03049 1.1708,0.09147 0.36588,0.06099 0.7033,0.152457 1.01226,0.274408"
+         id="path3649"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 981.51555,69.680548 1.28664,0 0,1.548872 -1.28664,0 0,-1.548872"
+         id="path3651"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 588.79755,80.858028 1.83545,0 2.32332,6.195482 2.33549,-6.195482 1.8355,0 0,9.10419 -1.20129,0 0,-7.994368 -2.34771,6.244266 -1.23788,0 -2.3477,-6.244266 0,7.994368 -1.19518,0 0,-9.10419"
+         id="path3653"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 599.52988,83.132552 1.12199,0 0,6.829666 -1.12199,0 0,-6.829666 m 0,-2.658693 1.12199,0 0,1.420818 -1.12199,0 0,-1.420818"
+         id="path3655"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 608.67066,85.840025 0,4.122193 -1.12204,0 0,-4.085605 c 0,-0.646373 -0.12603,-1.130138 -0.37805,-1.451305 -0.25207,-0.321148 -0.63012,-0.481727 -1.13421,-0.481731 -0.60574,4e-6 -1.08343,0.193104 -1.43301,0.579298 -0.34964,0.386208 -0.52443,0.912663 -0.52443,1.579363 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.26832,-0.410588 0.58338,-0.717517 0.94518,-0.920786 0.36589,-0.203256 0.78664,-0.30489 1.26226,-0.304895 0.78462,5e-6 1.37815,0.243921 1.78058,0.73175 0.40248,0.48377 0.60372,1.197228 0.60372,2.140365"
+         id="path3657"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 610.9208,83.132552 1.12199,0 0,6.829666 -1.12199,0 0,-6.829666 m 0,-2.658693 1.12199,0 0,1.420818 -1.12199,0 0,-1.420818"
+         id="path3659"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 619.7018,84.443605 c 0.28048,-0.504092 0.61588,-0.876062 1.00615,-1.11592 0.39027,-0.239844 0.84963,-0.35977 1.3781,-0.359775 0.71143,5e-6 1.26024,0.250019 1.64647,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -5e-5,-0.654504 -0.11589,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.50611,0.912663 -0.50611,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -4e-5,-0.658568 -0.11588,-1.144367 -0.34761,-1.457402 -0.23172,-0.317085 -0.58944,-0.47563 -1.07323,-0.475634 -0.57319,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.9208,-0.926884 0.35771,-0.199192 0.78255,-0.298792 1.27443,-0.298797 0.49596,5e-6 0.91671,0.126029 1.2623,0.378067 0.34959,0.252058 0.60771,0.61793 0.77443,1.097628"
+         id="path3661"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 626.43996,87.26694 0,-4.134388 1.12204,0 0,4.091702 c 0,0.646383 0.12603,1.132182 0.37805,1.457403 0.25207,0.321157 0.63012,0.481736 1.13421,0.481736 0.60574,0 1.08342,-0.1931 1.43301,-0.579303 0.35367,-0.386199 0.53053,-0.912654 0.53053,-1.579363 l 0,-3.872175 1.12204,0 0,6.829666 -1.12204,0 0,-1.048839 c -0.27236,0.414656 -0.58948,0.723618 -0.95128,0.926883 -0.35772,0.199197 -0.77443,0.298797 -1.25005,0.298797 -0.78462,0 -1.38017,-0.243916 -1.78669,-0.73175 -0.40652,-0.487833 -0.60982,-1.201291 -0.60982,-2.140369"
+         id="path3663"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 639.80053,84.443605 c 0.28049,-0.504092 0.61589,-0.876062 1.00615,-1.11592 0.39027,-0.239844 0.84964,-0.35977 1.3781,-0.359775 0.71144,5e-6 1.26024,0.250019 1.64647,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.5061,0.912663 -0.5061,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -5e-5,-0.658568 -0.11589,-1.144367 -0.34762,-1.457402 -0.23172,-0.317085 -0.58944,-0.47563 -1.07323,-0.475634 -0.57319,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.92075,-0.926884 0.35776,-0.199192 0.7826,-0.298792 1.27448,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77447,1.097628"
+         id="path3665"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 651.91096,81.870283 0,3.42093 1.5489,0 c 0.57319,5e-6 1.0163,-0.148375 1.32934,-0.445147 0.31304,-0.296759 0.46951,-0.719546 0.46951,-1.268367 0,-0.544738 -0.15647,-0.965496 -0.46951,-1.262269 -0.31304,-0.296754 -0.75615,-0.445138 -1.32934,-0.445147 l -1.5489,0 m -1.23177,-1.012255 2.78067,0 c 1.02039,9e-6 1.79073,0.231731 2.31111,0.695166 0.52438,0.45938 0.7866,1.134215 0.78664,2.024505 -4e-5,0.898431 -0.26226,1.577334 -0.78664,2.036706 -0.52038,0.45938 -1.29072,0.689068 -2.31111,0.689063 l -1.5489,0 0,3.65875 -1.23177,0 0,-9.10419"
+         id="path3667"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 660.72245,86.529093 c -0.90652,0 -1.53462,0.103664 -1.88426,0.310992 -0.34958,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13012,0.715487 0.39026,0.951272 0.26428,0.231722 0.622,0.347585 1.07324,0.347581 0.62199,4e-6 1.12002,-0.219523 1.49403,-0.658573 0.37805,-0.443113 0.56708,-1.030547 0.56708,-1.762297 l 0,-0.250014 -1.11593,0 m 2.23797,-0.463444 0,3.896569 -1.12204,0 0,-1.036645 c -0.25611,0.414656 -0.57525,0.721585 -0.95735,0.920786 -0.38214,0.195134 -0.84968,0.2927 -1.40252,0.2927 -0.69927,0 -1.2562,-0.195133 -1.67085,-0.5854 -0.41061,-0.394334 -0.61589,-0.920786 -0.61589,-1.579363 0,-0.768334 0.25611,-1.347636 0.76832,-1.737903 0.5163,-0.390262 1.28462,-0.585395 2.30501,-0.5854 l 1.57328,0 0,-0.109766 c 0,-0.516281 -0.17075,-0.914679 -0.51221,-1.195189 -0.33742,-0.284564 -0.81309,-0.426851 -1.42691,-0.426855 -0.39027,4e-6 -0.77039,0.04676 -1.14031,0.140252 -0.36998,0.09351 -0.72567,0.233761 -1.06713,0.420758 l 0,-1.036649 c 0.41056,-0.158535 0.80895,-0.276433 1.19518,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.121956 0.98788,5e-6 1.72571,0.256116 2.21355,0.768334 0.48783,0.512232 0.73172,1.288702 0.73177,2.329405"
+         id="path3669"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 669.24734,84.181391 c -0.12603,-0.07317 -0.26423,-0.126014 -0.41465,-0.158544 -0.14637,-0.03659 -0.30895,-0.05488 -0.48783,-0.05488 -0.63421,5e-6 -1.12204,0.207337 -1.4635,0.621989 -0.33742,0.410597 -0.50611,1.002094 -0.50611,1.774491 l 0,3.597772 -1.12814,0 0,-6.829666 1.12814,0 0,1.061039 c 0.23577,-0.414652 0.5427,-0.72158 0.92076,-0.920786 0.3781,-0.203256 0.83746,-0.30489 1.37814,-0.304895 0.0772,5e-6 0.16258,0.0061 0.25611,0.01827 0.0935,0.0081 0.19715,0.02236 0.31097,0.0427 l 0.006,1.152503"
+         id="path3671"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 671.54628,81.193414 0,1.939138 2.31112,0 0,0.872003 -2.31112,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.15446,0.158544 0.46548,0.237819 0.93297,0.237819 l 1.15253,0 0,0.939078 -1.15253,0 c -0.86589,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.32929,-0.325221 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82319,0 0,-0.872003 0.82319,0 0,-1.939138 1.12814,0"
+         id="path3673"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 684.82141,81.156825 0,1.201291 c -0.46749,-0.223581 -0.90859,-0.390257 -1.32323,-0.500028 -0.41465,-0.109756 -0.81511,-0.164637 -1.20129,-0.164646 -0.67075,9e-6 -1.18907,0.130101 -1.55496,0.390266 -0.3618,0.260189 -0.54275,0.630129 -0.5427,1.109822 -5e-5,0.402471 0.11988,0.707365 0.35973,0.914689 0.24394,0.203269 0.70331,0.367911 1.37815,0.49393 l 0.74394,0.152448 c 0.91873,0.174812 1.59564,0.483774 2.03063,0.926883 0.43902,0.439054 0.65854,1.028518 0.65858,1.768394 -4e-5,0.882168 -0.29678,1.550906 -0.89031,2.006219 -0.58949,0.455308 -1.45537,0.682966 -2.59771,0.682966 -0.43094,0 -0.89031,-0.04878 -1.37814,-0.14635 -0.48375,-0.09757 -0.98582,-0.241887 -1.5062,-0.432952 l 0,-1.268367 c 0.50004,0.280505 0.9899,0.491897 1.4696,0.634183 0.47971,0.142287 0.95129,0.213426 1.41474,0.213426 0.70326,0 1.24601,-0.138219 1.62815,-0.414656 0.38209,-0.276438 0.57319,-0.670772 0.57319,-1.182999 0,-0.447177 -0.1382,-0.796792 -0.41465,-1.04884 -0.27241,-0.252043 -0.72158,-0.441079 -1.34766,-0.567107 l -0.75005,-0.14635 c -0.91873,-0.182935 -1.58342,-0.469533 -1.99398,-0.859804 -0.41061,-0.390262 -0.61589,-0.932976 -0.61589,-1.628146 0,-0.804918 0.28251,-1.439101 0.84761,-1.90255 0.5691,-0.46343 1.3517,-0.695152 2.34766,-0.695161 0.42686,9e-6 0.86185,0.03861 1.30496,0.115858 0.44312,0.07725 0.89642,0.193114 1.35983,0.347581"
+         id="path3675"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 687.2423,83.132552 1.122,0 0,6.829666 -1.122,0 0,-6.829666 m 0,-2.658693 1.122,0 0,1.420818 -1.122,0 0,-1.420818"
+         id="path3677"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 690.21806,83.132552 5.32962,0 0,1.02445 -4.21979,4.908824 4.21979,0 0,0.896392 -5.48205,0 0,-1.02445 4.21975,-4.908824 -4.06732,0 0,-0.896392"
+         id="path3679"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 703.10907,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69514,1.768399 0.41873,0.402461 1.00009,0.603692 1.74403,0.603692 0.4309,0 0.84761,-0.05285 1.25005,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.20739,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.8151,0.300832 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134155 -1.28664,0.134155 -1.08949,0 -1.95335,-0.317094 -2.5916,-0.951277 -0.6342,-0.634183 -0.95128,-1.491952 -0.95128,-2.573322 0,-1.117944 0.30082,-2.004175 0.90248,-2.658689 0.60573,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91873,5e-6 1.6444,0.296768 2.17695,0.890295 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613848 -0.18094,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548807 -1.32938,-0.548811 -0.62604,4e-6 -1.1281,0.176846 -1.50616,0.530519 -0.37401,0.353683 -0.58948,0.851681 -0.64637,1.493991 l 4.00023,-0.0061"
+         id="path3681"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 705.23727,88.413346 1.28664,0 0,1.548872 -1.28664,0 0,-1.548872 m 0,-4.908819 1.28664,0 0,1.548867 -1.28664,0 0,-1.548867"
+         id="path3683"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 713.31698,80.858028 4.83563,0 0,1.036649 -3.70753,0 0,2.231834 c 0.17888,-0.06097 0.35776,-0.105689 0.53664,-0.134151 0.17888,-0.03251 0.35776,-0.04878 0.53659,-0.04878 1.01635,4e-6 1.82126,0.278476 2.41479,0.835414 0.59353,0.556947 0.89031,1.311052 0.89031,2.262325 0,0.979734 -0.30491,1.741971 -0.91469,2.286719 -0.60978,0.54068 -1.46961,0.811024 -2.57943,0.811024 -0.38214,0 -0.77241,-0.03251 -1.1708,-0.09757 -0.39431,-0.06505 -0.8029,-0.162613 -1.22567,-0.2927 l 0,-1.23788 c 0.36589,0.199201 0.74394,0.347585 1.13421,0.445147 0.39026,0.09757 0.80289,0.146355 1.23788,0.14635 0.7033,5e-6 1.26024,-0.184968 1.67084,-0.554908 0.41056,-0.369941 0.61589,-0.871998 0.61589,-1.506186 0,-0.634179 -0.20533,-1.136241 -0.61589,-1.506186 -0.4106,-0.369936 -0.96754,-0.554904 -1.67084,-0.554909 -0.3293,5e-6 -0.65859,0.03659 -0.98788,0.109762 -0.32521,0.07318 -0.65854,0.187006 -1.00005,0.341483 l 0,-4.573438"
+         id="path3685"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 721.25647,88.413346 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872"
+         id="path3687"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 727.86662,81.669052 c -0.6342,1e-5 -1.11184,0.313035 -1.43301,0.939078 -0.31712,0.621993 -0.47566,1.559042 -0.47566,2.811141 0,1.248041 0.15854,2.185089 0.47566,2.811137 0.32117,0.621988 0.79881,0.932985 1.43301,0.932985 0.63825,0 1.11589,-0.310997 1.43302,-0.932985 0.32112,-0.626048 0.48172,-1.563096 0.48172,-2.811137 0,-1.252099 -0.1606,-2.189148 -0.48172,-2.811141 -0.31713,-0.626043 -0.79477,-0.939068 -1.43302,-0.939078 m 0,-0.975666 c 1.02039,9e-6 1.79886,0.404504 2.3355,1.213486 0.54068,0.804931 0.81102,1.975731 0.81102,3.512399 0,1.532614 -0.27034,2.703409 -0.81102,3.5124 -0.53664,0.804922 -1.31511,1.207388 -2.3355,1.207388 -1.02038,0 -1.80091,-0.402466 -2.34159,-1.207388 -0.53664,-0.808991 -0.80496,-1.979786 -0.80496,-3.5124 0,-1.536668 0.26832,-2.707468 0.80496,-3.512399 0.54068,-0.808982 1.32121,-1.213477 2.34159,-1.213486"
+         id="path3689"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 738.34285,84.443605 c 0.28049,-0.504092 0.61589,-0.876062 1.00615,-1.11592 0.39027,-0.239844 0.84964,-0.35977 1.3781,-0.359775 0.71144,5e-6 1.26024,0.250019 1.64647,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.5061,0.912663 -0.5061,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -5e-5,-0.658568 -0.11589,-1.144367 -0.34762,-1.457402 -0.23172,-0.317085 -0.58944,-0.47563 -1.07323,-0.475634 -0.57319,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.92075,-0.926884 0.35776,-0.199192 0.7826,-0.298792 1.27448,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77447,1.097628"
+         id="path3691"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 750.5143,84.443605 c 0.28049,-0.504092 0.61589,-0.876062 1.00616,-1.11592 0.39026,-0.239844 0.84963,-0.35977 1.3781,-0.359775 0.71143,5e-6 1.26024,0.250019 1.64646,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23172,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04072,0.193104 -1.37814,0.579298 -0.33742,0.386208 -0.50611,0.912663 -0.50611,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -5e-5,-0.658568 -0.11589,-1.144367 -0.34761,-1.457402 -0.23173,-0.317085 -0.58944,-0.47563 -1.07324,-0.475634 -0.57318,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.12814,0 0,-6.829666 1.12814,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.92076,-0.926884 0.35776,-0.199192 0.7826,-0.298792 1.27447,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77447,1.097628"
+         id="path3693"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 765.69811,83.333783 0,1.061038 c -0.31713,-0.162608 -0.64642,-0.284564 -0.98788,-0.365877 -0.34151,-0.0813 -0.69518,-0.121951 -1.06102,-0.121956 -0.55698,5e-6 -0.97567,0.08538 -1.2562,0.256111 -0.27645,0.170749 -0.41465,0.42686 -0.41465,0.768339 0,0.260184 0.0996,0.465478 0.29881,0.615887 0.19917,0.146354 0.59963,0.286607 1.20128,0.420757 l 0.38416,0.08537 c 0.79679,0.170744 1.36185,0.412627 1.69523,0.725653 0.33742,0.308963 0.50611,0.741915 0.50611,1.298853 0,0.634188 -0.25202,1.136245 -0.75611,1.506186 -0.50005,0.369941 -1.18912,0.554913 -2.06722,0.554913 -0.36589,0 -0.74803,-0.03659 -1.14642,-0.109766 -0.39431,-0.06911 -0.81102,-0.174807 -1.25005,-0.317089 l 0,-1.158605 c 0.41465,0.215459 0.82324,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158549 1.19518,0.158545 0.52851,4e-6 0.93503,-0.08944 1.21961,-0.268306 0.28457,-0.182939 0.42686,-0.43905 0.42686,-0.768339 0,-0.304894 -0.10368,-0.538646 -0.31102,-0.701258 -0.20326,-0.162608 -0.65248,-0.319124 -1.34762,-0.469542 l -0.39026,-0.09147 c -0.69518,-0.146345 -1.19725,-0.369936 -1.5062,-0.670772 -0.30896,-0.30489 -0.46346,-0.72158 -0.46346,-1.25007 0,-0.64231 0.22769,-1.13827 0.68297,-1.487894 0.45533,-0.349605 1.1017,-0.524412 1.93917,-0.524417 0.41464,5e-6 0.80491,0.03049 1.1708,0.09146 0.36584,0.06099 0.70326,0.152456 1.01226,0.274408"
+         id="path3695"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 768.52754,86.553482 c 0,0.825254 0.16869,1.473666 0.50611,1.945236 0.3415,0.467507 0.809,0.701263 1.40252,0.701259 0.59353,4e-6 1.06102,-0.233752 1.40253,-0.701259 0.34146,-0.47157 0.51221,-1.119982 0.51221,-1.945236 0,-0.825248 -0.17075,-1.471626 -0.51221,-1.939138 -0.34151,-0.471566 -0.809,-0.707351 -1.40253,-0.707356 -0.59352,5e-6 -1.06102,0.23579 -1.40252,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939138 m 3.82337,2.384286 c -0.23576,0.406529 -0.53457,0.70939 -0.89637,0.908591 -0.35776,0.195134 -0.78866,0.2927 -1.29279,0.2927 -0.82526,0 -1.49803,-0.329288 -2.01837,-0.987866 -0.5163,-0.658572 -0.77447,-1.524473 -0.77447,-2.597711 0,-1.073228 0.25817,-1.939129 0.77447,-2.597711 0.52034,-0.658568 1.19311,-0.987856 2.01837,-0.987861 0.50413,5e-6 0.93503,0.0996 1.29279,0.298797 0.3618,0.195138 0.66061,0.49597 0.89637,0.90249 l 0,-1.036645 1.12204,0 0,9.427377 -1.12204,0 0,-3.622161"
+         id="path3697"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 775.66818,87.26694 0,-4.134388 1.12204,0 0,4.091702 c 0,0.646383 0.12599,1.132182 0.37805,1.457403 0.25207,0.321157 0.63012,0.481736 1.13421,0.481736 0.60574,0 1.08338,-0.1931 1.43301,-0.579303 0.35368,-0.386199 0.53054,-0.912654 0.53054,-1.579363 l 0,-3.872175 1.12199,0 0,6.829666 -1.12199,0 0,-1.048839 c -0.27241,0.414656 -0.58949,0.723618 -0.95129,0.926883 -0.35776,0.199197 -0.77443,0.298797 -1.25009,0.298797 -0.78458,0 -1.38012,-0.243916 -1.78669,-0.73175 -0.40652,-0.487833 -0.60978,-1.201291 -0.60978,-2.140369"
+         id="path3699"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 786.81516,86.529093 c -0.90652,0 -1.53462,0.103664 -1.88426,0.310992 -0.34958,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13012,0.715487 0.39027,0.951272 0.26427,0.231722 0.62199,0.347585 1.07323,0.347581 0.62199,4e-6 1.12002,-0.219523 1.49403,-0.658573 0.37805,-0.443113 0.56708,-1.030547 0.56708,-1.762297 l 0,-0.250014 -1.11593,0 m 2.23797,-0.463444 0,3.896569 -1.12204,0 0,-1.036645 c -0.25611,0.414656 -0.57525,0.721585 -0.95735,0.920786 -0.38214,0.195134 -0.84968,0.2927 -1.40252,0.2927 -0.69927,0 -1.2562,-0.195133 -1.67085,-0.5854 -0.4106,-0.394334 -0.61589,-0.920786 -0.61589,-1.579363 0,-0.768334 0.25611,-1.347636 0.76833,-1.737903 0.51629,-0.390262 1.28462,-0.585395 2.305,-0.5854 l 1.57328,0 0,-0.109766 c 0,-0.516281 -0.17075,-0.914679 -0.51221,-1.195189 -0.33742,-0.284564 -0.81309,-0.426851 -1.42691,-0.426855 -0.39027,4e-6 -0.77039,0.04676 -1.14031,0.140252 -0.36997,0.09351 -0.72567,0.233761 -1.06713,0.420758 l 0,-1.036649 c 0.41056,-0.158535 0.80896,-0.276433 1.19518,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.121956 0.98788,5e-6 1.72571,0.256116 2.21355,0.768334 0.48783,0.512232 0.73172,1.288702 0.73177,2.329405"
+         id="path3701"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 795.32788,84.181391 c -0.12603,-0.07317 -0.26428,-0.126014 -0.41469,-0.158544 -0.14633,-0.03659 -0.30895,-0.05488 -0.48783,-0.05488 -0.63416,5e-6 -1.122,0.207337 -1.4635,0.621989 -0.33742,0.410597 -0.50611,1.002094 -0.50611,1.774491 l 0,3.597772 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.23577,-0.414652 0.5427,-0.72158 0.9208,-0.920786 0.37805,-0.203256 0.83742,-0.30489 1.3781,-0.304895 0.0772,5e-6 0.16263,0.0061 0.25611,0.01827 0.0935,0.0081 0.1972,0.02236 0.31102,0.0427 l 0.006,1.152503"
+         id="path3703"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 802.10264,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28048,1.36187 0.69513,1.768399 0.41873,0.402461 1.00009,0.603692 1.74403,0.603692 0.4309,0 0.84762,-0.05285 1.25005,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.20739,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.81506,0.300832 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134155 -1.28664,0.134155 -1.08948,0 -1.95335,-0.317094 -2.5916,-0.951277 -0.6342,-0.634183 -0.95128,-1.491952 -0.95128,-2.573322 0,-1.117944 0.30082,-2.004175 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91873,5e-6 1.6444,0.296768 2.17695,0.890295 0.5366,0.589468 0.80492,1.392361 0.80492,2.408675 m -1.122,-0.329289 c -0.008,-0.613848 -0.18094,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548807 -1.32938,-0.548811 -0.62604,4e-6 -1.1281,0.176846 -1.50616,0.530519 -0.37401,0.353683 -0.58948,0.851681 -0.64637,1.493991 l 4.00023,-0.0061"
+         id="path3705"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 805.95044,80.858028 1.03664,0 -3.1709,10.262795 -1.03664,0 3.1709,-10.262795"
+         id="path3707"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 812.67032,84.169197 0,-3.695338 1.12204,0 0,9.488359 -1.12204,0 0,-1.02445 c -0.23577,0.406529 -0.53457,0.70939 -0.89637,0.908591 -0.35776,0.195134 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.329288 -2.01841,-0.987866 -0.5163,-0.658572 -0.77447,-1.524473 -0.77447,-2.597711 0,-1.073228 0.25817,-1.939129 0.77447,-2.597711 0.52034,-0.658568 1.19316,-0.987856 2.01841,-0.987861 0.50409,5e-6 0.93499,0.0996 1.29275,0.298797 0.3618,0.195138 0.6606,0.49597 0.89637,0.90249 m -3.82337,2.384285 c 0,0.825254 0.16869,1.473666 0.50611,1.945236 0.3415,0.467507 0.809,0.701263 1.40252,0.701259 0.59353,4e-6 1.06102,-0.233752 1.40253,-0.701259 0.34146,-0.47157 0.51221,-1.119982 0.51221,-1.945236 0,-0.825248 -0.17075,-1.471626 -0.51221,-1.939138 -0.34151,-0.471566 -0.809,-0.707351 -1.40253,-0.707356 -0.59352,5e-6 -1.06102,0.23579 -1.40252,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939138"
+         id="path3709"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 816.10347,83.132552 1.122,0 0,6.829666 -1.122,0 0,-6.829666 m 0,-2.658693 1.122,0 0,1.420818 -1.122,0 0,-1.420818"
+         id="path3711"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 822.67093,86.529093 c -0.90657,0 -1.53467,0.103664 -1.88426,0.310992 -0.34963,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13007,0.715487 0.39026,0.951272 0.26424,0.231722 0.622,0.347585 1.07324,0.347581 0.62199,4e-6 1.11997,-0.219523 1.49398,-0.658573 0.37806,-0.443113 0.56708,-1.030547 0.56713,-1.762297 l 0,-0.250014 -1.11593,0 m 2.23792,-0.463444 0,3.896569 -1.12199,0 0,-1.036645 c -0.25615,0.414656 -0.57525,0.721585 -0.95739,0.920786 -0.38214,0.195134 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.195133 -1.6708,-0.5854 -0.41061,-0.394334 -0.61593,-0.920786 -0.61593,-1.579363 0,-0.768334 0.25615,-1.347636 0.76836,-1.737903 0.5163,-0.390262 1.28462,-0.585395 2.30501,-0.5854 l 1.57328,0 0,-0.109766 c -5e-5,-0.516281 -0.17075,-0.914679 -0.51226,-1.195189 -0.33742,-0.284564 -0.81304,-0.426851 -1.42691,-0.426855 -0.39026,4e-6 -0.77034,0.04676 -1.14031,0.140252 -0.36993,0.09351 -0.72562,0.233761 -1.06713,0.420758 l 0,-1.036649 c 0.41061,-0.158535 0.809,-0.276433 1.19518,-0.353678 0.38623,-0.0813 0.76226,-0.121951 1.12815,-0.121956 0.98783,5e-6 1.72567,0.256116 2.21355,0.768334 0.48778,0.512232 0.73172,1.288702 0.73172,2.329405"
+         id="path3713"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 832.54343,84.443605 c 0.28054,-0.504092 0.61589,-0.876062 1.00616,-1.11592 0.39026,-0.239844 0.84963,-0.35977 1.37814,-0.359775 0.71144,5e-6 1.26024,0.250019 1.64642,0.750042 0.38623,0.495969 0.5793,1.203325 0.57934,2.122073 l 0,4.122193 -1.12814,0 0,-4.085605 c 0,-0.654504 -0.11584,-1.140304 -0.34757,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.50615,0.912663 -0.50615,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c 0,-0.658568 -0.11584,-1.144367 -0.34757,-1.457402 -0.23172,-0.317085 -0.58948,-0.47563 -1.07323,-0.475634 -0.57323,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50616,0.910625 -0.50616,1.573261 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.9208,-0.926884 0.35776,-0.199192 0.78256,-0.298792 1.27448,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77442,1.097628"
+         id="path3715"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 845.23931,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69513,1.768399 0.41874,0.402461 1.0001,0.603692 1.74404,0.603692 0.4309,0 0.84761,-0.05285 1.25004,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.2074,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.81511,0.300832 -1.23788,0.390267 -0.42278,0.08944 -0.85166,0.134155 -1.28664,0.134155 -1.08949,0 -1.95336,-0.317094 -2.5916,-0.951277 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573322 0,-1.117944 0.30083,-2.004175 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91874,5e-6 1.6444,0.296768 2.17696,0.890295 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613848 -0.18095,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.7765,-0.548807 -1.32939,-0.548811 -0.62603,4e-6 -1.1281,0.176846 -1.50615,0.530519 -0.37402,0.353683 -0.58949,0.851681 -0.64638,1.493991 l 4.00024,-0.0061"
+         id="path3717"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 848.19069,81.193414 0,1.939138 2.31111,0 0,0.872003 -2.31111,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.1545,0.158544 0.46547,0.237819 0.93301,0.237819 l 1.15248,0 0,0.939078 -1.15248,0 c -0.86593,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.32929,-0.325221 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82323,0 0,-0.872003 0.82323,0 0,-1.939138 1.1281,0"
+         id="path3719"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 857.82541,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69513,1.768399 0.41874,0.402461 1.00005,0.603692 1.74404,0.603692 0.4309,0 0.84756,-0.05285 1.25004,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.2074,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.81511,0.300832 -1.23788,0.390267 -0.42278,0.08944 -0.8517,0.134155 -1.28664,0.134155 -1.08954,0 -1.9534,-0.317094 -2.59165,-0.951277 -0.63416,-0.634183 -0.95124,-1.491952 -0.95124,-2.573322 0,-1.117944 0.30083,-2.004175 0.90248,-2.658689 0.60569,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91874,5e-6 1.6444,0.296768 2.17696,0.890295 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12204,-0.329289 c -0.008,-0.613848 -0.1809,-1.103715 -0.51832,-1.469597 -0.33333,-0.365868 -0.77645,-0.548807 -1.32934,-0.548811 -0.62603,4e-6 -1.1281,0.176846 -1.50615,0.530519 -0.37402,0.353683 -0.58949,0.851681 -0.64642,1.493991 l 4.00023,-0.0061"
+         id="path3721"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 863.62454,84.181391 c -0.12603,-0.07317 -0.26428,-0.126014 -0.41469,-0.158544 -0.14633,-0.03659 -0.30895,-0.05488 -0.48783,-0.05488 -0.63416,5e-6 -1.122,0.207337 -1.4635,0.621989 -0.33742,0.410597 -0.50611,1.002094 -0.50611,1.774491 l 0,3.597772 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.23577,-0.414652 0.5427,-0.72158 0.9208,-0.920786 0.37805,-0.203256 0.83742,-0.30489 1.3781,-0.304895 0.0772,5e-6 0.16263,0.0061 0.25611,0.01827 0.0935,0.0081 0.1972,0.02236 0.31102,0.0427 l 0.006,1.152503"
+         id="path3723"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 863.83795,88.413346 1.28668,0 0,1.548872 -1.28668,0 0,-1.548872"
+         id="path3725"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 588.79755,99.590826 1.83545,0 2.32332,6.195484 2.33549,-6.195484 1.8355,0 0,9.104194 -1.20129,0 0,-7.99437 -2.34771,6.24426 -1.23788,0 -2.3477,-6.24426 0,7.99437 -1.19518,0 0,-9.104194"
+         id="path3727"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 599.52988,101.86535 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.658689 1.12199,0 0,1.420809 -1.12199,0 0,-1.420809"
+         id="path3729"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 608.67066,104.57283 0,4.12219 -1.12204,0 0,-4.08561 c 0,-0.64637 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48174 -0.60574,10e-6 -1.08343,0.19311 -1.43301,0.57931 -0.34964,0.3862 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71752 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30489 1.26226,-0.30489 0.78462,0 1.37815,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19723 0.60372,2.14037"
+         id="path3731"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 610.9208,101.86535 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.658689 1.12199,0 0,1.420809 -1.12199,0 0,-1.420809"
+         id="path3733"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 619.7018,103.1764 c 0.28048,-0.50408 0.61588,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84963,-0.35977 1.3781,-0.35977 0.71143,0 1.26024,0.25002 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c -5e-5,-0.6545 -0.11589,-1.1403 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,10e-6 -1.04073,0.19311 -1.37815,0.57931 -0.33742,0.3862 -0.50611,0.91266 -0.50611,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c -4e-5,-0.65857 -0.11588,-1.14437 -0.34761,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.9208,-0.92688 0.35771,-0.1992 0.78255,-0.2988 1.27443,-0.2988 0.49596,0 0.91671,0.12603 1.2623,0.37807 0.34959,0.25205 0.60771,0.61793 0.77443,1.09762"
+         id="path3735"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 626.43996,105.99974 0,-4.13439 1.12204,0 0,4.0917 c 0,0.64638 0.12603,1.13218 0.37805,1.4574 0.25207,0.32116 0.63012,0.48174 1.13421,0.48174 0.60574,0 1.08342,-0.1931 1.43301,-0.5793 0.35367,-0.3862 0.53053,-0.91266 0.53053,-1.57937 l 0,-3.87217 1.12204,0 0,6.82967 -1.12204,0 0,-1.04884 c -0.27236,0.41465 -0.58948,0.72362 -0.95128,0.92688 -0.35772,0.1992 -0.77443,0.2988 -1.25005,0.2988 -0.78462,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48784 -0.60982,-1.20129 -0.60982,-2.14037"
+         id="path3737"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 639.80053,103.1764 c 0.28049,-0.50408 0.61589,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84964,-0.35977 1.3781,-0.35977 0.71144,0 1.26024,0.25002 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c -4e-5,-0.6545 -0.11588,-1.1403 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,10e-6 -1.04073,0.19311 -1.37815,0.57931 -0.33742,0.3862 -0.5061,0.91266 -0.5061,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c -5e-5,-0.65857 -0.11589,-1.14437 -0.34762,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.92075,-0.92688 0.35776,-0.1992 0.7826,-0.2988 1.27448,-0.2988 0.49596,0 0.91671,0.12603 1.26226,0.37807 0.34963,0.25205 0.60776,0.61793 0.77447,1.09762"
+         id="path3739"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 650.67919,99.590826 5.232,0 0,1.036644 -4.00023,0 0,2.68309 3.60997,0 0,1.03664 -3.60997,0 0,4.34782 -1.23177,0 0,-9.104194"
+         id="path3741"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 662.9848,104.99968 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.00005,0.60369 1.74404,0.60369 0.4309,0 0.84756,-0.0529 1.25004,-0.15854 0.40652,-0.1057 0.809,-0.26425 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42278,0.0894 -0.8517,0.13416 -1.28664,0.13416 -1.08954,0 -1.9534,-0.3171 -2.59165,-0.95128 -0.63416,-0.63418 -0.95129,-1.49195 -0.95124,-2.57332 -5e-5,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60569,-0.65857 1.4208,-0.98786 2.44527,-0.98786 0.91874,0 1.6444,0.29677 2.17696,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62603,1e-5 -1.1281,0.17685 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+         id="path3743"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 667.93021,105.26189 c -0.90656,0 -1.53466,0.10367 -1.88425,0.31099 -0.34963,0.20734 -0.52443,0.56101 -0.52443,1.06104 0,0.3984 0.13008,0.71549 0.39027,0.95127 0.26423,0.23173 0.62199,0.34759 1.07323,0.34758 0.622,10e-6 1.11998,-0.21952 1.49399,-0.65857 0.37805,-0.44311 0.56708,-1.03055 0.56712,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23793,-0.46344 0,3.89657 -1.122,0 0,-1.03665 c -0.25615,0.41466 -0.57525,0.72159 -0.95739,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40252,0.2927 -0.69922,0 -1.25616,-0.19514 -1.67085,-0.5854 -0.41056,-0.39433 -0.61589,-0.92079 -0.61589,-1.57937 0,-0.76833 0.25611,-1.34763 0.76837,-1.7379 0.5163,-0.39026 1.28462,-0.58539 2.30501,-0.5854 l 1.57327,0 0,-0.10977 c -4e-5,-0.51628 -0.17075,-0.91467 -0.51225,-1.19518 -0.33742,-0.28457 -0.81304,-0.42685 -1.42691,-0.42686 -0.39027,1e-5 -0.77039,0.0468 -1.14031,0.14025 -0.36993,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41061,-0.15853 0.809,-0.27643 1.19518,-0.35368 0.38623,-0.0813 0.76226,-0.12195 1.12815,-0.12195 0.98783,0 1.72566,0.25611 2.21354,0.76833 0.48779,0.51223 0.73173,1.2887 0.73173,2.32941"
+         id="path3745"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 673.59518,99.926211 0,1.939139 2.31112,0 0,0.872 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15446,0.15854 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48174 -0.32929,-0.32522 -0.49394,-0.91468 -0.49394,-1.76839 l 0,-3.70754 -0.82319,0 0,-0.872 0.82319,0 0,-1.939139 1.12814,0"
+         id="path3747"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 677.27223,105.99974 0,-4.13439 1.12199,0 0,4.0917 c 0,0.64638 0.12604,1.13218 0.37806,1.4574 0.25206,0.32116 0.63012,0.48174 1.13425,0.48174 0.60569,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53049,-0.91266 0.53049,-1.57937 l 0,-3.87217 1.12204,0 0,6.82967 -1.12204,0 0,-1.04884 c -0.27236,0.41465 -0.58944,0.72362 -0.95129,0.92688 -0.35771,0.1992 -0.77442,0.2988 -1.25004,0.2988 -0.78462,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48784 -0.60978,-1.20129 -0.60978,-2.14037"
+         id="path3749"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 689.27293,102.91419 c -0.12603,-0.0732 -0.26428,-0.12602 -0.41469,-0.15855 -0.14633,-0.0366 -0.30896,-0.0549 -0.48784,-0.0549 -0.63416,1e-5 -1.12199,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.5061,1.0021 -0.5061,1.77449 l 0,3.59778 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.23576,-0.41465 0.5427,-0.72158 0.9208,-0.92079 0.37805,-0.20325 0.83742,-0.30489 1.3781,-0.30489 0.0772,0 0.16262,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31102,0.0427 l 0.006,1.15251"
+         id="path3751"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 696.04768,104.99968 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41869,0.40246 1.00005,0.60369 1.74399,0.60369 0.4309,0 0.84761,-0.0529 1.25005,-0.15854 0.40656,-0.1057 0.809,-0.26425 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08949,0 -1.95335,-0.3171 -2.5916,-0.95128 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44528,-0.98786 0.91873,0 1.6444,0.29677 2.17695,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12815,0.17685 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3753"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 707.38373,99.889627 0,1.201283 c -0.46754,-0.22358 -0.90863,-0.39025 -1.32328,-0.50002 -0.41464,-0.10976 -0.81506,-0.16464 -1.20128,-0.16465 -0.67076,10e-6 -1.18908,0.1301 -1.55496,0.39027 -0.3618,0.26018 -0.5427,0.63013 -0.5427,1.10982 0,0.40247 0.11992,0.70736 0.35978,0.91469 0.24389,0.20327 0.70326,0.36791 1.3781,0.49393 l 0.74394,0.15244 c 0.91878,0.17482 1.59564,0.48378 2.03062,0.92689 0.43903,0.43905 0.65859,1.02852 0.65859,1.7684 0,0.88216 -0.29679,1.5509 -0.89031,2.00621 -0.58949,0.45531 -1.45538,0.68297 -2.59771,0.68297 -0.4309,0 -0.89031,-0.0488 -1.37815,-0.14635 -0.48374,-0.0976 -0.98581,-0.24189 -1.50615,-0.43296 l 0,-1.26836 c 0.5,0.2805 0.9899,0.4919 1.46961,0.63418 0.47966,0.14229 0.95124,0.21343 1.41469,0.21343 0.70331,0 1.24601,-0.13822 1.62815,-0.41466 0.38214,-0.27644 0.57318,-0.67077 0.57318,-1.183 0,-0.44718 -0.1382,-0.79679 -0.41464,-1.04884 -0.27236,-0.25204 -0.72158,-0.44108 -1.34762,-0.56711 l -0.75004,-0.14635 c -0.91878,-0.18293 -1.58343,-0.46953 -1.99404,-0.8598 -0.4106,-0.39026 -0.61588,-0.93297 -0.61588,-1.62815 0,-0.80491 0.28251,-1.43909 0.84761,-1.90255 0.56915,-0.463425 1.3517,-0.695147 2.34771,-0.695156 0.42681,9e-6 0.8618,0.03861 1.30491,0.115858 0.44311,0.07725 0.89642,0.193113 1.35987,0.347585"
+         id="path3755"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 709.80458,101.86535 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.658689 1.12204,0 0,1.420809 -1.12204,0 0,-1.420809"
+         id="path3757"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 712.78039,101.86535 5.32957,0 0,1.02445 -4.21975,4.90882 4.21975,0 0,0.8964 -5.48205,0 0,-1.02445 4.21979,-4.90883 -4.06731,0 0,-0.89639"
+         id="path3759"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 725.67135,104.99968 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69514,1.7684 0.41873,0.40246 1.00009,0.60369 1.74403,0.60369 0.4309,0 0.84761,-0.0529 1.25005,-0.15854 0.40652,-0.1057 0.809,-0.26425 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08949,0 -1.95335,-0.3171 -2.5916,-0.95128 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44528,-0.98786 0.91873,0 1.6444,0.29677 2.17695,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12815,0.17685 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3761"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 727.79954,107.14614 1.28665,0 0,1.54888 -1.28665,0 0,-1.54888 m 0,-4.90882 1.28665,0 0,1.54887 -1.28665,0 0,-1.54887"
+         id="path3763"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 736.0805,107.65837 2.0123,0 0,-6.94553 -2.18912,0.43905 0,-1.12201 2.17696,-0.439054 1.23177,0 0,8.067544 2.01231,0 0,1.03665 -5.24422,0 0,-1.03665"
+         id="path3765"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 743.81875,107.14614 1.28669,0 0,1.54888 -1.28669,0 0,-1.54888"
+         id="path3767"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 750.4289,100.40185 c -0.6342,1e-5 -1.11184,0.31304 -1.43301,0.93908 -0.31708,0.622 -0.47562,1.55904 -0.47562,2.81114 0,1.24804 0.15854,2.18509 0.47562,2.81114 0.32117,0.62199 0.79881,0.93298 1.43301,0.93298 0.63825,0 1.11594,-0.31099 1.43302,-0.93298 0.32116,-0.62605 0.48172,-1.5631 0.48172,-2.81114 0,-1.2521 -0.16056,-2.18914 -0.48172,-2.81114 -0.31708,-0.62604 -0.79477,-0.93907 -1.43302,-0.93908 m 0,-0.975666 c 1.02039,9e-6 1.7989,0.404504 2.3355,1.213486 0.54068,0.80493 0.81102,1.97573 0.81102,3.5124 0,1.53261 -0.27034,2.70341 -0.81102,3.5124 -0.5366,0.80493 -1.31511,1.20739 -2.3355,1.20739 -1.02038,0 -1.80092,-0.40246 -2.3416,-1.20739 -0.53664,-0.80899 -0.80491,-1.97979 -0.80491,-3.5124 0,-1.53667 0.26827,-2.70747 0.80491,-3.5124 0.54068,-0.808982 1.32122,-1.213477 2.3416,-1.213486"
+         id="path3769"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 760.90513,103.1764 c 0.28048,-0.50408 0.61588,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84963,-0.35977 1.37815,-0.35977 0.71138,0 1.26019,0.25002 1.64642,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c 0,-0.6545 -0.11589,-1.1403 -0.34757,-1.4574 -0.23177,-0.31709 -0.58544,-0.47563 -1.06106,-0.47564 -0.58132,10e-6 -1.04073,0.19311 -1.3781,0.57931 -0.33747,0.3862 -0.50616,0.91266 -0.50616,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c 0,-0.65857 -0.11588,-1.14437 -0.34761,-1.4574 -0.23168,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.2561,-0.41872 0.56304,-0.72768 0.9208,-0.92688 0.35771,-0.1992 0.78255,-0.2988 1.27447,-0.2988 0.49596,0 0.91671,0.12603 1.26226,0.37807 0.34959,0.25205 0.60776,0.61793 0.77443,1.09762"
+         id="path3771"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 773.07658,103.1764 c 0.28049,-0.50408 0.61589,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84964,-0.35977 1.37815,-0.35977 0.71139,0 1.26019,0.25002 1.64642,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c 0,-0.6545 -0.11588,-1.1403 -0.34756,-1.4574 -0.23178,-0.31709 -0.58545,-0.47563 -1.06107,-0.47564 -0.58131,10e-6 -1.04073,0.19311 -1.3781,0.57931 -0.33747,0.3862 -0.50615,0.91266 -0.50615,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c 0,-0.65857 -0.11589,-1.14437 -0.34762,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.9208,-0.92688 0.35771,-0.1992 0.78255,-0.2988 1.27447,-0.2988 0.49596,0 0.91672,0.12603 1.26226,0.37807 0.34959,0.25205 0.60776,0.61793 0.77443,1.09762"
+         id="path3773"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 783.254,101.86535 1.12199,0 1.40253,5.32958 1.39642,-5.32958 1.32328,0 1.40248,5.32958 1.39642,-5.32958 1.12204,0 -1.78669,6.82967 -1.32323,0 -1.46961,-5.59789 -1.47571,5.59789 -1.32324,0 -1.78668,-6.82967"
+         id="path3775"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 794.12655,101.86535 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.658689 1.12204,0 0,1.420809 -1.12204,0 0,-1.420809"
+         id="path3777"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 802.08436,102.90199 0,-3.695329 1.122,0 0,9.488359 -1.122,0 0,-1.02445 c -0.23581,0.40653 -0.53457,0.70939 -0.89642,0.90859 -0.35771,0.19513 -0.78866,0.2927 -1.29274,0.2927 -0.82526,0 -1.49803,-0.32929 -2.01842,-0.98787 -0.5163,-0.65857 -0.77442,-1.52447 -0.77442,-2.59771 0,-1.07323 0.25812,-1.93913 0.77442,-2.59771 0.52039,-0.65857 1.19316,-0.98786 2.01842,-0.98786 0.50408,0 0.93503,0.0996 1.29274,0.2988 0.36185,0.19513 0.66061,0.49596 0.89642,0.90248 m -3.82342,2.38429 c 0,0.82525 0.16874,1.47367 0.50616,1.94524 0.34146,0.4675 0.809,0.70126 1.40252,0.70125 0.59353,10e-6 1.06102,-0.23375 1.40253,-0.70125 0.34146,-0.47157 0.51221,-1.11999 0.51221,-1.94524 0,-0.82524 -0.17075,-1.47163 -0.51221,-1.93914 -0.34151,-0.47156 -0.809,-0.70735 -1.40253,-0.70735 -0.59352,0 -1.06106,0.23579 -1.40252,0.70735 -0.33742,0.46751 -0.50616,1.1139 -0.50616,1.93914"
+         id="path3779"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 811.3593,104.99968 0,0.54881 -5.15886,0 c 0.0488,0.77241 0.28053,1.36187 0.69518,1.7684 0.41873,0.40246 1.00004,0.60369 1.74398,0.60369 0.43095,0 0.84762,-0.0529 1.25009,-0.15854 0.40653,-0.1057 0.809,-0.26425 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08948,0 -1.95335,-0.3171 -2.5916,-0.95128 -0.63416,-0.63418 -0.95128,-1.49195 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90252,-2.65869 0.6057,-0.65857 1.4208,-0.98786 2.44523,-0.98786 0.91878,0 1.6444,0.29677 2.17695,0.89029 0.53664,0.58947 0.80496,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.1281,0.17685 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3781"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 813.35939,107.14614 1.28669,0 0,1.54888 -1.28669,0 0,-1.54888"
+         id="path3783"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 588.79755,118.32363 1.23177,0 0,9.10418 -1.23177,0 0,-9.10418"
+         id="path3785"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 597.7493,121.9092 c 0.28049,-0.50409 0.61589,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84964,-0.35977 1.3781,-0.35977 0.71144,0 1.26024,0.25001 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12207 l 0,4.12219 -1.1281,0 0,-4.0856 c -4e-5,-0.65451 -0.11588,-1.14031 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,1e-5 -1.04073,0.19311 -1.37815,0.5793 -0.33742,0.38621 -0.5061,0.91266 -0.5061,1.57936 l 0,3.85998 -1.1281,0 0,-4.0856 c -5e-5,-0.65857 -0.11589,-1.14437 -0.34762,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,1e-5 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57326 l 0,3.85998 -1.12815,0 0,-6.82966 1.12815,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.92075,-0.92689 0.35776,-0.19919 0.7826,-0.29879 1.27448,-0.29879 0.49596,0 0.91671,0.12602 1.26226,0.37807 0.34963,0.25205 0.60776,0.61792 0.77447,1.09762"
+         id="path3787"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 607.70716,123.99469 c -0.90652,0 -1.53462,0.10367 -1.88425,0.31099 -0.34959,0.20733 -0.52438,0.56101 -0.52438,1.06104 0,0.3984 0.13007,0.71549 0.39026,0.95127 0.26424,0.23172 0.62195,0.34759 1.07324,0.34759 0.62194,0 1.11997,-0.21953 1.49398,-0.65858 0.37806,-0.44311 0.56708,-1.03054 0.56708,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23797,-0.46345 0,3.89657 -1.12204,0 0,-1.03664 c -0.2561,0.41466 -0.57525,0.72159 -0.95734,0.92078 -0.38214,0.19514 -0.84968,0.2927 -1.40253,0.2927 -0.69922,0 -1.2562,-0.19513 -1.67085,-0.5854 -0.4106,-0.39433 -0.61588,-0.92078 -0.61588,-1.57936 0,-0.76833 0.2561,-1.34763 0.76832,-1.7379 0.5163,-0.39026 1.28466,-0.5854 2.30505,-0.5854 l 1.57323,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81309,-0.42684 -1.42691,-0.42685 -0.39026,10e-6 -0.77038,0.0468 -1.14031,0.14025 -0.36993,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41056,-0.15854 0.80896,-0.27643 1.19518,-0.35368 0.38618,-0.0813 0.76222,-0.12195 1.1281,-0.12195 0.98788,0 1.72572,0.25612 2.21355,0.76833 0.48783,0.51223 0.73177,1.2887 0.73177,2.3294"
+         id="path3789"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 616.75648,123.93371 c 0,-0.81305 -0.16869,-1.44317 -0.50611,-1.89035 -0.33338,-0.44718 -0.80289,-0.67077 -1.40863,-0.67078 -0.60165,1e-5 -1.07121,0.2236 -1.40863,0.67078 -0.33334,0.44718 -0.5,1.0773 -0.5,1.89035 0,0.80899 0.16666,1.43708 0.5,1.88425 0.33742,0.44718 0.80698,0.67078 1.40863,0.67078 0.60574,0 1.07525,-0.2236 1.40863,-0.67078 0.33742,-0.44717 0.50611,-1.07526 0.50611,-1.88425 m 1.12204,2.64649 c 0,1.16267 -0.25817,2.02654 -0.77443,2.59162 -0.5163,0.56914 -1.30702,0.8537 -2.37213,0.85371 -0.39431,-1e-5 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01836,-0.26831 l 0,-1.09153 c 0.32929,0.17887 0.6545,0.311 0.97566,0.39637 0.32117,0.0854 0.6484,0.12805 0.98178,0.12805 0.73581,0 1.28664,-0.1931 1.65252,-0.5793 0.36589,-0.38214 0.54881,-0.96143 0.54881,-1.7379 l 0,-0.55491 c -0.23173,0.40246 -0.52847,0.70329 -0.89027,0.90249 -0.36184,0.1992 -0.79477,0.29879 -1.29885,0.29879 -0.83747,0 -1.51231,-0.31912 -2.02452,-0.95737 -0.51221,-0.63824 -0.76837,-1.48382 -0.76837,-2.53673 0,-1.05697 0.25616,-1.90458 0.76837,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02452,-0.95737 0.50408,0 0.93701,0.0996 1.29885,0.29879 0.3618,0.19921 0.65854,0.50004 0.89027,0.90249 l 0,-1.03664 1.12204,0 0,5.98205"
+         id="path3791"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 626.03142,123.73248 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28048,1.36187 0.69513,1.7684 0.41873,0.40246 1.00005,0.60369 1.74403,0.60369 0.4309,0 0.84762,-0.0528 1.25005,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.8151,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08948,0 -1.9534,-0.31709 -2.59164,-0.95127 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44527,-0.98786 0.91873,0 1.6444,0.29677 2.17695,0.89029 0.5366,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61385 -0.18094,-1.10372 -0.51836,-1.4696 -0.33334,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62604,10e-6 -1.1281,0.17684 -1.50616,0.53052 -0.37401,0.35368 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3793"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 632.22692,120.79938 0,1.06104 c -0.31712,-0.16261 -0.64642,-0.28457 -0.98788,-0.36588 -0.3415,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55698,1e-5 -0.97566,0.0854 -1.2562,0.25611 -0.27644,0.17075 -0.41464,0.42686 -0.41464,0.76834 0,0.26019 0.0996,0.46548 0.2988,0.61589 0.19918,0.14636 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17074 1.36185,0.41263 1.69523,0.72565 0.33742,0.30897 0.5061,0.74192 0.5061,1.29886 0,0.63418 -0.25202,1.13625 -0.7561,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36589,0 -0.74803,-0.0366 -1.14642,-0.10976 -0.39431,-0.0691 -0.81102,-0.1748 -1.25005,-0.31709 l 0,-1.15861 c 0.41465,0.21547 0.82319,0.37808 1.22567,0.48784 0.40248,0.1057 0.80087,0.15855 1.19518,0.15855 0.52851,0 0.93503,-0.0894 1.2196,-0.26831 0.28458,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10367,-0.53865 -0.31102,-0.70126 -0.20326,-0.16261 -0.65248,-0.31912 -1.34761,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.64231 0.22769,-1.13827 0.68297,-1.48789 0.45532,-0.34961 1.1017,-0.52442 1.93916,-0.52442 0.41465,0 0.80492,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15246 1.01226,0.27441"
+         id="path3795"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 641.05668,117.95165 c -0.54476,0.93503 -0.94922,1.85988 -1.2135,2.77456 -0.26423,0.91469 -0.39632,1.84157 -0.39632,2.78065 0,0.93908 0.13209,1.87002 0.39632,2.79284 0.26832,0.91875 0.67282,1.8436 1.2135,2.77455 l -0.97566,0 c -0.60978,-0.95534 -1.06713,-1.89442 -1.37204,-2.81724 -0.30083,-0.92281 -0.45124,-1.83953 -0.45124,-2.75015 0,-0.90656 0.15041,-1.81921 0.45124,-2.73797 0.30082,-0.91875 0.75817,-1.85782 1.37204,-2.81724 l 0.97566,0"
+         id="path3797"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 643.23974,120.59815 1.122,0 0,6.95162 c 0,0.86997 -0.16667,1.50009 -0.50001,1.89035 -0.32929,0.39027 -0.86184,0.5854 -1.59765,0.58541 l -0.42686,0 0,-0.95128 0.2988,0 c 0.42686,0 0.7175,-0.0996 0.872,-0.2988 0.15449,-0.19513 0.23172,-0.60369 0.23172,-1.22568 l 0,-6.95162 m 0,-2.65869 1.122,0 0,1.42081 -1.122,0 0,-1.42081"
+         id="path3799"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 647.78878,126.40336 0,3.62217 -1.1281,0 0,-9.42738 1.1281,0 0,1.03664 c 0.23577,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.7927,-0.29879 1.29275,-0.29879 0.82929,0 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78054,1.52448 0.78054,2.59771 0,1.07324 -0.2602,1.93914 -0.78054,2.59771 -0.5163,0.65858 -1.18912,0.98786 -2.01841,0.98786 -0.50005,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.19919 -0.65454,-0.50206 -0.89031,-0.90859 m 3.81731,-2.38428 c 0,-0.82525 -0.17075,-1.47162 -0.51226,-1.93914 -0.33742,-0.47156 -0.80289,-0.70735 -1.39642,-0.70736 -0.59352,1e-5 -1.06102,0.2358 -1.40248,0.70736 -0.33742,0.46752 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.80896,0.70127 1.40248,0.70127 0.59353,0 1.059,-0.23376 1.39642,-0.70127 0.34151,-0.47157 0.51226,-1.11998 0.51226,-1.94523"
+         id="path3801"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 659.12483,123.93371 c -4e-5,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33333,-0.44718 -0.80289,-0.67077 -1.40863,-0.67078 -0.60166,1e-5 -1.07117,0.2236 -1.40859,0.67078 -0.33338,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.80899 0.16667,1.43708 0.50005,1.88425 0.33742,0.44718 0.80693,0.67078 1.40859,0.67078 0.60574,0 1.0753,-0.2236 1.40863,-0.67078 0.33742,-0.44717 0.50611,-1.07526 0.50615,-1.88425 m 1.122,2.64649 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59162 -0.5163,0.56914 -1.30698,0.8537 -2.37209,0.85371 -0.39435,-1e-5 -0.7663,-0.0305 -1.11593,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01837,-0.26831 l 0,-1.09153 c 0.3293,0.17887 0.65455,0.311 0.97567,0.39637 0.32117,0.0854 0.64844,0.12805 0.98177,0.12805 0.73582,0 1.28669,-0.1931 1.65253,-0.5793 0.36589,-0.38214 0.54881,-0.96143 0.54885,-1.7379 l 0,-0.55491 c -0.23172,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.29879 -1.29885,0.29879 -0.83747,0 -1.51231,-0.31912 -2.02452,-0.95737 -0.51222,-0.63824 -0.76832,-1.48382 -0.76832,-2.53673 0,-1.05697 0.2561,-1.90458 0.76832,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02452,-0.95737 0.50408,0 0.93705,0.0996 1.29885,0.29879 0.3618,0.19921 0.65859,0.50004 0.89031,0.90249 l 0,-1.03664 1.122,0 0,5.98205"
+         id="path3803"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 662.38108,117.95165 0.97567,0 c 0.60982,0.95942 1.0651,1.89849 1.36593,2.81724 0.30491,0.91876 0.45735,1.83141 0.45735,2.73797 0,0.91062 -0.15244,1.82734 -0.45735,2.75015 -0.30083,0.92282 -0.75611,1.8619 -1.36593,2.81724 l -0.97567,0 c 0.54068,-0.93095 0.94316,-1.8558 1.20739,-2.77455 0.26832,-0.92282 0.40248,-1.85376 0.40248,-2.79284 0,-0.93908 -0.13416,-1.86596 -0.40248,-2.78065 -0.26423,-0.91468 -0.66671,-1.83953 -1.20739,-2.77456"
+         id="path3805"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 667.72287,125.87894 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887 m 0,-4.90882 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887"
+         id="path3807"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 682.49813,119.02489 0,1.29885 c -0.41469,-0.38619 -0.85781,-0.67483 -1.32934,-0.8659 -0.46754,-0.19106 -0.96552,-0.28659 -1.49399,-0.2866 -1.04072,1e-5 -1.83751,0.31913 -2.3904,0.95737 -0.5529,0.63419 -0.8293,1.55294 -0.8293,2.75626 0,1.19926 0.2764,2.11801 0.8293,2.75626 0.55289,0.63418 1.34968,0.95127 2.3904,0.95127 0.52847,0 1.02645,-0.0955 1.49399,-0.2866 0.47153,-0.19107 0.91465,-0.4797 1.32934,-0.86591 l 0,1.28666 c -0.43095,0.2927 -0.88829,0.51223 -1.37204,0.65858 -0.47971,0.14635 -0.98788,0.21952 -1.52447,0.21952 -1.37815,0 -2.46355,-0.42075 -3.2563,-1.26226 -0.79274,-0.84558 -1.18911,-1.99809 -1.18907,-3.45752 -4e-5,-1.4635 0.39633,-2.616 1.18907,-3.45752 0.79275,-0.84557 1.87815,-1.26836 3.2563,-1.26837 0.54472,1e-5 1.05698,0.0732 1.53668,0.21953 0.48375,0.14229 0.93701,0.35775 1.35983,0.64638"
+         id="path3809"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 687.01058,121.38478 c -0.60166,10e-6 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10983 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34964,0.46751 0.82728,0.70126 1.43302,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92084 -0.34959,-0.47564 -0.82319,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97566,0 1.74196,0.31709 2.2989,0.95127 0.55693,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27851,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12201 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95127"
+         id="path3811"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 697.67583,123.30562 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64637 -0.12604,-1.13014 -0.3781,-1.4513 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48174 -0.60574,1e-5 -1.08338,0.19311 -1.43301,0.5793 -0.34959,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71752 0.94518,-0.92079 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.30489 0.78462,0 1.37815,0.24392 1.78063,0.73175 0.40243,0.48377 0.60367,1.19722 0.60367,2.14036"
+         id="path3813"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 699.12105,120.59815 1.18908,0 2.1343,5.73204 2.13425,-5.73204 1.18907,0 -2.56111,6.82966 -1.52447,0 -2.56112,-6.82966"
+         id="path3815"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 713.15844,123.73248 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.0001,0.60369 1.74404,0.60369 0.4309,0 0.84761,-0.0528 1.25004,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.85166,0.13415 -1.28664,0.13415 -1.08949,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44527,-0.98786 0.91874,0 1.6444,0.29677 2.17696,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.18095,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.7765,-0.5488 -1.32939,-0.54881 -0.62603,10e-6 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64638,1.49399 l 4.00024,-0.006"
+         id="path3817"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 718.95757,121.64699 c -0.12603,-0.0732 -0.26428,-0.12602 -0.41464,-0.15855 -0.14638,-0.0366 -0.309,-0.0549 -0.48784,-0.0549 -0.6342,1e-5 -1.12204,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50615,1.00209 -0.50615,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.23577,-0.41466 0.5427,-0.72158 0.9208,-0.92079 0.37805,-0.20326 0.83742,-0.30489 1.3781,-0.30489 0.0773,0 0.16263,0.006 0.25615,0.0183 0.0935,0.008 0.19716,0.0224 0.31098,0.0427 l 0.006,1.15251"
+         id="path3819"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 721.25647,118.65901 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07324 0.1545,0.15855 0.46548,0.23782 0.93302,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86594,0 -1.46355,-0.16058 -1.7928,-0.48173 -0.32929,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3821"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 730.13504,118.65901 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07324 0.1545,0.15855 0.46547,0.23782 0.93296,0.23782 l 1.15253,0 0,0.93907 -1.15253,0 c -0.86588,0 -1.46349,-0.16058 -1.79274,-0.48173 -0.3293,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.872 0.82324,0 0,-1.93914 1.1281,0"
+         id="path3823"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 736.57444,121.38478 c -0.60166,10e-6 -1.07728,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10983 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34964,0.46751 0.82728,0.70126 1.43302,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92084 -0.34959,-0.47564 -0.82319,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97566,0 1.74196,0.31709 2.2989,0.95127 0.55698,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27846,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97971,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.2764,-2.00011 0.82929,-2.6343 0.55693,-0.63418 1.3253,-0.95127 2.30501,-0.95127"
+         id="path3825"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 744.73344,120.59815 1.18912,0 2.13426,5.73204 2.1343,-5.73204 1.18907,0 -2.56111,6.82966 -1.52448,0 -2.56116,-6.82966"
+         id="path3827"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 758.77087,123.73248 0,0.54881 -5.15886,0 c 0.0488,0.7724 0.28053,1.36187 0.69518,1.7684 0.41873,0.40246 1.00005,0.60369 1.74399,0.60369 0.43094,0 0.84761,-0.0528 1.25009,-0.15855 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.81511,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28668,0.13415 -1.08949,0 -1.95336,-0.31709 -2.5916,-0.95127 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.42084,-0.98786 2.44527,-0.98786 0.91878,0 1.6444,0.29677 2.17695,0.89029 0.53664,0.58947 0.80492,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62607,10e-6 -1.1281,0.17684 -1.50619,0.53052 -0.37402,0.35368 -0.58945,0.85168 -0.64638,1.49399 l 4.00023,-0.006"
+         id="path3829"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 765.52735,120.86036 0,1.04884 c -0.31712,-0.1748 -0.63622,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.96345,-0.13415 -0.72769,10e-6 -1.29275,0.23172 -1.69523,0.69516 -0.40248,0.45938 -0.60367,1.10576 -0.60367,1.93914 0,0.83338 0.20119,1.48179 0.60367,1.94523 0.40248,0.45938 0.96754,0.68907 1.69523,0.68907 0.3252,0 0.64637,-0.0427 0.96345,-0.12806 0.32117,-0.0894 0.64027,-0.22155 0.95739,-0.39636 l 0,1.03664 c -0.31304,0.14635 -0.63824,0.25612 -0.97566,0.32929 -0.33338,0.0732 -0.68908,0.10976 -1.06713,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45138,-0.96956 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.61601 0,-1.11388 0.30492,-1.98995 0.9147,-2.6282 0.61386,-0.63825 1.4533,-0.95737 2.51841,-0.95737 0.34555,0 0.68297,0.0366 1.01226,0.10976 0.32929,0.0691 0.64844,0.17481 0.95739,0.31709"
+         id="path3831"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 768.60068,118.65901 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22567,1.07324 0.15445,0.15855 0.46542,0.23782 0.93296,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3833"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 775.04013,121.38478 c -0.6017,10e-6 -1.07732,0.23579 -1.42696,0.70736 -0.34958,0.46751 -0.52442,1.10983 -0.52438,1.92694 -4e-5,0.81712 0.17278,1.46147 0.51832,1.93304 0.34959,0.46751 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23579 1.4208,-0.70736 0.34958,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80899 -0.17484,-1.44927 -0.52442,-1.92084 -0.34964,-0.47564 -0.82324,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97562,0 1.74196,0.31709 2.2989,0.95127 0.55693,0.63419 0.8354,1.51229 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55694,0.63418 -1.32328,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30506,-0.95127 -0.55284,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.27645,-2.00011 0.82929,-2.6343 0.55698,-0.63418 1.3253,-0.95127 2.30506,-0.95127"
+         id="path3835"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 783.98573,121.64699 c -0.12604,-0.0732 -0.26424,-0.12602 -0.41465,-0.15855 -0.14633,-0.0366 -0.30896,-0.0549 -0.48783,-0.0549 -0.63417,1e-5 -1.122,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.12815,0 0,-6.82966 1.12815,0 0,1.06104 c 0.23577,-0.41466 0.5427,-0.72158 0.92075,-0.92079 0.3781,-0.20326 0.83747,-0.30489 1.37815,-0.30489 0.0772,0 0.16262,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31102,0.0427 l 0.006,1.15251"
+         id="path3837"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 789.03481,124.73254 0,-4.13439 1.12204,0 0,4.0917 c -5e-5,0.64638 0.12599,1.13218 0.37805,1.4574 0.25202,0.32116 0.63012,0.48174 1.13421,0.48174 0.60574,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53054,-0.91266 0.53054,-1.57936 l 0,-3.87218 1.12199,0 0,6.82966 -1.12199,0 0,-1.04884 c -0.27241,0.41466 -0.58949,0.72362 -0.95129,0.92689 -0.35776,0.19919 -0.77443,0.29879 -1.25009,0.29879 -0.78458,0 -1.38017,-0.24391 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20128 -0.60978,-2.14036"
+         id="path3839"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 801.43188,120.79938 0,1.06104 c -0.31712,-0.16261 -0.64637,-0.28457 -0.98788,-0.36588 -0.34146,-0.0813 -0.69513,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97566,0.0854 -1.2562,0.25611 -0.2764,0.17075 -0.41464,0.42686 -0.41464,0.76834 0,0.26019 0.0996,0.46548 0.2988,0.61589 0.19922,0.14636 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17074 1.36189,0.41263 1.69523,0.72565 0.33742,0.30897 0.5061,0.74192 0.50615,1.29886 -5e-5,0.63418 -0.25207,1.13625 -0.75615,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14638,-0.10976 -0.39435,-0.0691 -0.81102,-0.1748 -1.25009,-0.31709 l 0,-1.15861 c 0.41465,0.21547 0.82323,0.37808 1.22567,0.48784 0.40248,0.1057 0.80087,0.15855 1.19522,0.15855 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28458,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10367,-0.53865 -0.31097,-0.70126 -0.20331,-0.16261 -0.65248,-0.31912 -1.34766,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.4634,-0.72158 -0.4634,-1.25007 0,-0.64231 0.22764,-1.13827 0.68296,-1.48789 0.45528,-0.34961 1.10166,-0.52442 1.93912,-0.52442 0.41465,0 0.80492,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15246 1.01226,0.27441"
+         id="path3841"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 803.59056,120.59815 1.122,0 0,6.82966 -1.122,0 0,-6.82966 m 0,-2.65869 1.122,0 0,1.42081 -1.122,0 0,-1.42081"
+         id="path3843"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 812.7313,123.30562 0,4.12219 -1.122,0 0,-4.0856 c 0,-0.64637 -0.12603,-1.13014 -0.3781,-1.4513 -0.25202,-0.32115 -0.63012,-0.48173 -1.1342,-0.48174 -0.6057,1e-5 -1.08338,0.19311 -1.43302,0.5793 -0.34958,0.38621 -0.52442,0.91266 -0.52438,1.57936 l 0,3.85998 -1.12814,0 0,-6.82966 1.12814,0 0,1.06104 c 0.26828,-0.41059 0.58334,-0.71752 0.94514,-0.92079 0.36588,-0.20326 0.78664,-0.30489 1.2623,-0.30489 0.78458,0 1.3781,0.24392 1.78058,0.73175 0.40244,0.48377 0.60368,1.19722 0.60368,2.14036"
+         id="path3845"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 819.47561,123.93371 c 0,-0.81305 -0.16874,-1.44317 -0.50611,-1.89035 -0.33338,-0.44718 -0.80294,-0.67077 -1.40863,-0.67078 -0.60166,1e-5 -1.07122,0.2236 -1.40864,0.67078 -0.33333,0.44718 -0.5,1.0773 -0.5,1.89035 0,0.80899 0.16667,1.43708 0.5,1.88425 0.33742,0.44718 0.80698,0.67078 1.40864,0.67078 0.60569,0 1.07525,-0.2236 1.40863,-0.67078 0.33737,-0.44717 0.50611,-1.07526 0.50611,-1.88425 m 1.12199,2.64649 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59162 -0.5163,0.56914 -1.30698,0.8537 -2.37208,0.85371 -0.39431,-1e-5 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01837,-0.26831 l 0,-1.09153 c 0.3293,0.17887 0.6545,0.311 0.97567,0.39637 0.32117,0.0854 0.64839,0.12805 0.98177,0.12805 0.73582,0 1.28664,-0.1931 1.65253,-0.5793 0.36584,-0.38214 0.54881,-0.96143 0.54881,-1.7379 l 0,-0.55491 c -0.23173,0.40246 -0.52852,0.70329 -0.89032,0.90249 -0.3618,0.1992 -0.79476,0.29879 -1.29885,0.29879 -0.83742,0 -1.51226,-0.31912 -2.02447,-0.95737 -0.51226,-0.63824 -0.76837,-1.48382 -0.76837,-2.53673 0,-1.05697 0.25611,-1.90458 0.76837,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02447,-0.95737 0.50409,0 0.93705,0.0996 1.29885,0.29879 0.3618,0.19921 0.65859,0.50004 0.89032,0.90249 l 0,-1.03664 1.12199,0 0,5.98205"
+         id="path3847"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 828.05537,121.3238 -1.28664,0 0,-1.05494 1.00004,-1.94523 0.78664,0 -0.50004,1.94523 0,1.05494"
+         id="path3849"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 832.141,119.33588 0,3.42093 1.54885,0 c 0.57324,0 1.01635,-0.14838 1.32934,-0.44515 0.31304,-0.29676 0.46956,-0.71954 0.46956,-1.26837 0,-0.54473 -0.15652,-0.96549 -0.46956,-1.26226 -0.31299,-0.29676 -0.7561,-0.44514 -1.32934,-0.44515 l -1.54885,0 m -1.23177,-1.01225 2.78062,0 c 1.02039,1e-5 1.79078,0.23172 2.31112,0.69516 0.52442,0.45938 0.78664,1.13422 0.78664,2.0245 0,0.89844 -0.26222,1.57734 -0.78664,2.03671 -0.52034,0.45938 -1.29073,0.68907 -2.31112,0.68906 l -1.54885,0 0,3.65875 -1.23177,0 0,-9.10418"
+         id="path3851"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 840.95248,123.99469 c -0.90656,0 -1.53466,0.10367 -1.88425,0.31099 -0.34963,0.20733 -0.52443,0.56101 -0.52443,1.06104 0,0.3984 0.13008,0.71549 0.39027,0.95127 0.26423,0.23172 0.62195,0.34759 1.07323,0.34759 0.62195,0 1.11998,-0.21953 1.49399,-0.65858 0.37805,-0.44311 0.56708,-1.03054 0.56708,-1.7623 l 0,-0.25001 -1.11589,0 m 2.23793,-0.46345 0,3.89657 -1.12204,0 0,-1.03664 c -0.25611,0.41466 -0.57521,0.72159 -0.95735,0.92078 -0.38214,0.19514 -0.84967,0.2927 -1.40252,0.2927 -0.69922,0 -1.2562,-0.19513 -1.67085,-0.5854 -0.41056,-0.39433 -0.61588,-0.92078 -0.61588,-1.57936 0,-0.76833 0.2561,-1.34763 0.76836,-1.7379 0.51626,-0.39026 1.28462,-0.5854 2.30501,-0.5854 l 1.57323,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81304,-0.42684 -1.42691,-0.42685 -0.39027,10e-6 -0.77038,0.0468 -1.14031,0.14025 -0.36993,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41056,-0.15854 0.809,-0.27643 1.19518,-0.35368 0.38618,-0.0813 0.76226,-0.12195 1.1281,-0.12195 0.98788,0 1.72571,0.25612 2.21355,0.76833 0.48783,0.51223 0.73177,1.2887 0.73177,2.3294"
+         id="path3853"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 846.62962,118.65901 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07324 0.1545,0.15855 0.46548,0.23782 0.93302,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86594,0 -1.46355,-0.16058 -1.7928,-0.48173 -0.32929,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3855"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 856.0997,123.30562 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64637 -0.12604,-1.13014 -0.37806,-1.4513 -0.25206,-0.32115 -0.63012,-0.48173 -1.1342,-0.48174 -0.60574,1e-5 -1.08343,0.19311 -1.43302,0.5793 -0.34963,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-9.48835 1.1281,0 0,3.71973 c 0.26832,-0.41059 0.58338,-0.71752 0.94518,-0.92079 0.36588,-0.20326 0.78664,-0.30489 1.26226,-0.30489 0.78457,0 1.37814,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19722 0.60372,2.14036"
+         id="path3857"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 862.47202,121.28111 0,-1.10982 7.81754,2.83554 0,1.01225 -7.81754,2.83553 0,-1.10982 6.28085,-2.22574 -6.28085,-2.23794"
+         id="path3859"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 875.55205,118.32363 7.70166,0 0,1.03664 -3.23186,0 0,8.06754 -1.23788,0 0,-8.06754 -3.23192,0 0,-1.03664"
+         id="path3861"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 886.54049,121.64699 c -0.12603,-0.0732 -0.26423,-0.12602 -0.41464,-0.15855 -0.14638,-0.0366 -0.30896,-0.0549 -0.48784,-0.0549 -0.6342,1e-5 -1.12204,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50615,1.00209 -0.50615,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.23581,-0.41466 0.54275,-0.72158 0.9208,-0.92079 0.37805,-0.20326 0.83747,-0.30489 1.37815,-0.30489 0.0772,0 0.16258,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31098,0.0427 l 0.006,1.15251"
+         id="path3863"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 890.84564,123.99469 c -0.90657,0 -1.53467,0.10367 -1.88425,0.31099 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06104 0,0.3984 0.13007,0.71549 0.39027,0.95127 0.26423,0.23172 0.62199,0.34759 1.07323,0.34759 0.62199,0 1.11997,-0.21953 1.49399,-0.65858 0.37805,-0.44311 0.56712,-1.03054 0.56712,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23792,-0.46345 0,3.89657 -1.12199,0 0,-1.03664 c -0.25615,0.41466 -0.57525,0.72159 -0.95739,0.92078 -0.38214,0.19514 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.6708,-0.5854 -0.4106,-0.39433 -0.61588,-0.92078 -0.61588,-1.57936 0,-0.76833 0.2561,-1.34763 0.76832,-1.7379 0.5163,-0.39026 1.28462,-0.5854 2.305,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51226,-1.1952 -0.33742,-0.28456 -0.81304,-0.42684 -1.4269,-0.42685 -0.39027,10e-6 -0.77034,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72562,0.23376 -1.06712,0.42076 l 0,-1.03665 c 0.4106,-0.15854 0.809,-0.27643 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.12814,-0.12195 0.98784,0 1.72571,0.25612 2.21355,0.76833 0.48783,0.51223 0.73172,1.2887 0.73172,2.3294"
+         id="path3865"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 900.31566,120.86036 0,1.04884 c -0.31708,-0.1748 -0.63618,-0.30489 -0.95734,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.9635,-0.13415 -0.72769,10e-6 -1.29275,0.23172 -1.69518,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96749,0.68907 1.69518,0.68907 0.32525,0 0.64642,-0.0427 0.9635,-0.12806 0.32116,-0.0894 0.64026,-0.22155 0.95734,-0.39636 l 0,1.03664 c -0.31299,0.14635 -0.63824,0.25612 -0.97566,0.32929 -0.33334,0.0732 -0.68903,0.10976 -1.06713,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45133,-0.96956 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.61601 0,-1.11388 0.30487,-1.98995 0.91465,-2.6282 0.61386,-0.63825 1.45335,-0.95737 2.51846,-0.95737 0.34554,0 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17481 0.95734,0.31709"
+         id="path3867"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 908.12104,123.73248 0,0.54881 -5.15886,0 c 0.0488,0.7724 0.28048,1.36187 0.69518,1.7684 0.41873,0.40246 1.00004,0.60369 1.74398,0.60369 0.4309,0 0.84762,-0.0528 1.2501,-0.15855 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.81511,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28669,0.13415 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63418 -0.95128,-1.49195 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.42084,-0.98786 2.44527,-0.98786 0.91878,0 1.6444,0.29677 2.17695,0.89029 0.53664,0.58947 0.80492,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,10e-6 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3869"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 915.21898,123.08 0,3.33556 1.97572,0 c 0.66267,0 1.15252,-0.13619 1.4696,-0.40856 0.32117,-0.27644 0.48173,-0.69719 0.48173,-1.26227 0,-0.56913 -0.16056,-0.98786 -0.48173,-1.25617 -0.31708,-0.27237 -0.80693,-0.40856 -1.4696,-0.40856 l -1.97572,0 m 0,-3.74412 0,2.74406 1.82328,0 c 0.60166,1e-5 1.04886,-0.11179 1.34156,-0.33538 0.29674,-0.22765 0.44513,-0.5732 0.44513,-1.03665 0,-0.45937 -0.14839,-0.80289 -0.44513,-1.03055 -0.2927,-0.22764 -0.7399,-0.34147 -1.34156,-0.34148 l -1.82328,0 m -1.23177,-1.01225 3.14651,0 c 0.93908,1e-5 1.66272,0.19514 2.1709,0.5854 0.50812,0.39027 0.76221,0.94518 0.76221,1.66473 0,0.55695 -0.13007,1.00006 -0.39027,1.32934 -0.26019,0.3293 -0.64233,0.53459 -1.14642,0.61589 0.60574,0.1301 1.07526,0.40247 1.40864,0.81712 0.33742,0.4106 0.5061,0.92486 0.5061,1.54278 0,0.81305 -0.27644,1.44114 -0.82929,1.88425 -0.55289,0.44312 -1.33953,0.66467 -2.35987,0.66467 l -3.26851,0 0,-9.10418"
+         id="path3871"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 922.49993,120.59815 1.122,0 0,6.82966 -1.122,0 0,-6.82966 m 0,-2.65869 1.122,0 0,1.42081 -1.122,0 0,-1.42081"
+         id="path3873"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 927.07335,118.65901 0,1.93914 2.31107,0 0,0.872 -2.31107,0 0,3.70753 c -4e-5,0.55695 0.0752,0.91469 0.22562,1.07324 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82319,0 0,-0.872 0.82319,0 0,-1.93914 1.12814,0"
+         id="path3875"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 936.18365,121.9092 c 0.28048,-0.50409 0.61588,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84963,-0.35977 1.3781,-0.35977 0.71143,0 1.26024,0.25001 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12207 l 0,4.12219 -1.1281,0 0,-4.0856 c 0,-0.65451 -0.11589,-1.14031 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,1e-5 -1.04073,0.19311 -1.37815,0.5793 -0.33742,0.38621 -0.50611,0.91266 -0.50611,1.57936 l 0,3.85998 -1.1281,0 0,-4.0856 c 0,-0.65857 -0.11588,-1.14437 -0.34761,-1.4574 -0.23173,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,1e-5 -1.02852,0.19514 -1.36594,0.5854 -0.33742,0.38621 -0.5061,0.91063 -0.5061,1.57326 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.2561,-0.41872 0.56304,-0.72768 0.9208,-0.92689 0.35771,-0.19919 0.78255,-0.29879 1.27442,-0.29879 0.49596,0 0.91672,0.12602 1.26231,0.37807 0.34959,0.25205 0.60771,0.61792 0.77443,1.09762"
+         id="path3877"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 946.14151,123.99469 c -0.90657,0 -1.53462,0.10367 -1.88426,0.31099 -0.34958,0.20733 -0.52442,0.56101 -0.52442,1.06104 0,0.3984 0.13012,0.71549 0.39026,0.95127 0.26424,0.23172 0.622,0.34759 1.07324,0.34759 0.62199,0 1.11997,-0.21953 1.49398,-0.65858 0.3781,-0.44311 0.56713,-1.03054 0.56713,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23792,-0.46345 0,3.89657 -1.12199,0 0,-1.03664 c -0.25611,0.41466 -0.57525,0.72159 -0.95739,0.92078 -0.38214,0.19514 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.6708,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34763 0.76832,-1.7379 0.5163,-0.39026 1.28462,-0.5854 2.30501,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81309,-0.42684 -1.42691,-0.42685 -0.39031,10e-6 -0.77039,0.0468 -1.14031,0.14025 -0.36998,0.0935 -0.72567,0.23376 -1.06718,0.42076 l 0,-1.03665 c 0.41061,-0.15854 0.809,-0.27643 1.19523,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12195 0.98788,0 1.72571,0.25612 2.21355,0.76833 0.48783,0.51223 0.73172,1.2887 0.73172,2.3294"
+         id="path3879"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 951.7821,126.40336 0,3.62217 -1.1281,0 0,-9.42738 1.1281,0 0,1.03664 c 0.23577,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.7927,-0.29879 1.29275,-0.29879 0.82929,0 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78053,1.52448 0.78053,2.59771 0,1.07324 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65858 -1.18912,0.98786 -2.01841,0.98786 -0.50005,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.19919 -0.65454,-0.50206 -0.89031,-0.90859 m 3.81731,-2.38428 c 0,-0.82525 -0.17075,-1.47162 -0.51226,-1.93914 -0.33742,-0.47156 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.2358 -1.40252,0.70736 -0.33742,0.46752 -0.50611,1.11389 -0.50611,1.93914 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.3415,0.46751 0.80899,0.70127 1.40252,0.70127 0.59353,0 1.059,-0.23376 1.39642,-0.70127 0.34151,-0.47157 0.51226,-1.11998 0.51226,-1.94523"
+         id="path3881"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 959.03252,118.32363 1.28668,0 0,0.92688 -1.00009,1.94523 -0.78664,0 0.50005,-1.94523 0,-0.92688"
+         id="path3883"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 962.75832,125.87894 1.28669,0 0,1.54887 -1.28669,0 0,-1.54887"
+         id="path3885"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 587.53529,137.05643 7.70166,0 0,1.03664 -3.23192,0 0,8.06754 -1.23788,0 0,-8.06754 -3.23186,0 0,-1.03664"
+         id="path3887"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 600.11528,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.76839 0.41874,0.40247 1.00005,0.6037 1.74404,0.6037 0.4309,0 0.84756,-0.0529 1.25004,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.8517,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63418 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60569,-0.65856 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29678 2.17696,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62603,1e-5 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+         id="path3889"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 607.41446,139.33095 -2.46965,3.32336 2.59775,3.5063 -1.32328,0 -1.98793,-2.68308 -1.98792,2.68308 -1.32324,0 2.65262,-3.57338 -2.427,-3.25628 1.32328,0 1.81107,2.43306 1.81107,-2.43306 1.32323,0"
+         id="path3891"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 610.25,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3893"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 614.32953,144.61174 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887 m 0,-4.90882 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+         id="path3895"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 629.10479,137.75768 0,1.29886 c -0.41469,-0.38619 -0.85781,-0.67483 -1.32939,-0.8659 -0.46749,-0.19106 -0.96547,-0.2866 -1.49398,-0.28661 -1.04068,1e-5 -1.83752,0.31914 -2.39036,0.95738 -0.5529,0.63419 -0.82934,1.55294 -0.82934,2.75625 0,1.19927 0.27644,2.11802 0.82934,2.75626 0.55284,0.63419 1.34968,0.95128 2.39036,0.95128 0.52851,0 1.02649,-0.0955 1.49398,-0.28661 0.47158,-0.19106 0.9147,-0.47969 1.32939,-0.8659 l 0,1.28666 c -0.43095,0.2927 -0.88829,0.51223 -1.37204,0.65858 -0.47971,0.14635 -0.98788,0.21952 -1.52447,0.21952 -1.37815,0 -2.4636,-0.42076 -3.2563,-1.26227 -0.79274,-0.84557 -1.18912,-1.99808 -1.18912,-3.45752 0,-1.46349 0.39638,-2.61599 1.18912,-3.45751 0.7927,-0.84557 1.87815,-1.26836 3.2563,-1.26837 0.54472,10e-6 1.05693,0.0732 1.53664,0.21953 0.48379,0.14229 0.93705,0.35775 1.35987,0.64637"
+         id="path3897"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 633.61724,140.11758 c -0.60166,1e-5 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10982 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34959,0.4675 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34964,-0.47563 -0.82324,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55693,0.63419 0.8354,1.51228 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12202 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95128"
+         id="path3899"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 644.28249,142.03842 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32116 -0.63012,-0.48174 -1.13421,-0.48174 -0.60574,0 -1.08343,0.19311 -1.43301,0.5793 -0.34964,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37814,0.24392 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+         id="path3901"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 645.72767,139.33095 1.18912,0 2.13425,5.73204 2.1343,-5.73204 1.18907,0 -2.56111,6.82966 -1.52447,0 -2.56116,-6.82966"
+         id="path3903"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 659.7651,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.76839 0.41874,0.40247 1.00005,0.6037 1.74404,0.6037 0.4309,0 0.84756,-0.0529 1.25004,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.8517,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63418 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60569,-0.65856 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29678 2.17696,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62603,1e-5 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+         id="path3905"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 665.56423,140.37979 c -0.12603,-0.0732 -0.26428,-0.12602 -0.41469,-0.15855 -0.14633,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63416,1e-5 -1.122,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.23577,-0.41465 0.5427,-0.72158 0.9208,-0.92078 0.37805,-0.20326 0.83742,-0.30489 1.3781,-0.3049 0.0772,1e-5 0.16263,0.006 0.25611,0.0183 0.0935,0.008 0.1972,0.0224 0.31102,0.0427 l 0.006,1.1525"
+         id="path3907"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 667.86313,137.39181 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.4939,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3909"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 676.7417,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93296,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86588,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32925,-0.32523 -0.49389,-0.91469 -0.49389,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.872 0.82324,0 0,-1.93914 1.1281,0"
+         id="path3911"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 683.1811,140.11758 c -0.60166,1e-5 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10982 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34959,0.4675 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34964,-0.47563 -0.82324,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55693,0.63419 0.8354,1.51228 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12202 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95128"
+         id="path3913"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 691.3401,139.33095 1.18908,0 2.1343,5.73204 2.13425,-5.73204 1.18912,0 -2.56116,6.82966 -1.52447,0 -2.56112,-6.82966"
+         id="path3915"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 705.37749,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.76839 0.41869,0.40247 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.2501,-0.15855 0.40652,-0.10569 0.80895,-0.26424 1.20734,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23783,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28669,0.13415 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63418 -0.95128,-1.49196 -0.95128,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65856 1.42084,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29678 2.17695,0.8903 0.53664,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3917"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 712.13401,139.59316 0,1.04884 c -0.31712,-0.1748 -0.63622,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.96345,-0.13415 -0.72769,1e-5 -1.2928,0.23172 -1.69523,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96754,0.68907 1.69523,0.68907 0.3252,0 0.64637,-0.0427 0.96345,-0.12806 0.32117,-0.0894 0.64027,-0.22155 0.95739,-0.39636 l 0,1.03664 c -0.31304,0.14635 -0.63824,0.25611 -0.97566,0.32929 -0.33338,0.0732 -0.68908,0.10976 -1.06718,0.10976 -1.02851,0 -1.84559,-0.32319 -2.45133,-0.96957 -0.60574,-0.64637 -0.90859,-1.51838 -0.90859,-2.616 0,-1.11388 0.30487,-1.98995 0.9147,-2.6282 0.61382,-0.63824 1.4533,-0.95737 2.51841,-0.95738 0.34555,1e-5 0.68297,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17482 0.95739,0.3171"
+         id="path3919"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 715.20734,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3921"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 721.64674,140.11758 c -0.60165,1e-5 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52442,1.10982 -0.52442,1.92694 0,0.81712 0.17277,1.46147 0.51832,1.93304 0.34963,0.4675 0.82727,0.70126 1.43301,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.1748,-1.44927 -0.52443,-1.92085 -0.34959,-0.47563 -0.82319,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.2989,0.95128 0.55693,0.63419 0.83545,1.51228 0.83545,2.6343 0,1.11795 -0.27852,1.99605 -0.83545,2.6343 -0.55693,0.63418 -1.32323,0.95127 -2.2989,0.95127 -0.97975,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12202 0.27645,-2.00011 0.82934,-2.6343 0.55694,-0.63418 1.32526,-0.95127 2.30501,-0.95128"
+         id="path3923"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 730.59238,140.37979 c -0.12603,-0.0732 -0.26423,-0.12602 -0.41464,-0.15855 -0.14638,-0.0366 -0.30896,-0.0549 -0.48784,-0.0549 -0.6342,1e-5 -1.12203,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50615,1.00209 -0.50615,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.23581,-0.41465 0.54275,-0.72158 0.9208,-0.92078 0.37806,-0.20326 0.83747,-0.30489 1.37815,-0.3049 0.0772,1e-5 0.16258,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31098,0.0427 l 0.006,1.1525"
+         id="path3925"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 735.64147,143.46533 0,-4.13438 1.12199,0 0,4.0917 c 0,0.64638 0.12604,1.13218 0.3781,1.4574 0.25202,0.32116 0.63012,0.48174 1.13421,0.48174 0.60569,0 1.08338,-0.1931 1.43301,-0.57931 0.35368,-0.3862 0.53049,-0.91265 0.53049,-1.57936 l 0,-3.87217 1.12204,0 0,6.82966 -1.12204,0 0,-1.04884 c -0.27236,0.41466 -0.58944,0.72362 -0.95124,0.92689 -0.35776,0.19919 -0.77447,0.29879 -1.25009,0.29879 -0.78458,0 -1.38017,-0.24391 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20128 -0.60978,-2.14037"
+         id="path3927"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 748.03854,139.53218 0,1.06103 c -0.31712,-0.1626 -0.64642,-0.28456 -0.98788,-0.36587 -0.3415,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55698,1e-5 -0.97566,0.0854 -1.2562,0.25611 -0.27644,0.17075 -0.41464,0.42686 -0.41464,0.76834 0,0.26019 0.0996,0.46548 0.2988,0.61589 0.19918,0.14636 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17075 1.36185,0.41263 1.69523,0.72565 0.33742,0.30896 0.5061,0.74192 0.5061,1.29886 0,0.63418 -0.25202,1.13624 -0.7561,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36589,0 -0.74798,-0.0366 -1.14642,-0.10976 -0.39431,-0.0691 -0.81102,-0.17481 -1.25005,-0.31709 l 0,-1.15861 c 0.41465,0.21547 0.82323,0.37807 1.22567,0.48784 0.40248,0.10569 0.80087,0.15854 1.19518,0.15854 0.52851,0 0.93503,-0.0894 1.2196,-0.26831 0.28458,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.30489 -0.10367,-0.53865 -0.31102,-0.70126 -0.20326,-0.16261 -0.65248,-0.31913 -1.34761,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.3049 -0.46345,-0.72159 -0.46345,-1.25008 0,-0.6423 0.22769,-1.13827 0.68297,-1.48788 0.45532,-0.34961 1.1017,-0.52442 1.93916,-0.52443 0.41465,1e-5 0.80492,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15245 1.01226,0.27441"
+         id="path3929"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 750.19718,139.33095 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+         id="path3931"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 759.33795,142.03842 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.3781,-1.4513 -0.25202,-0.32116 -0.63012,-0.48174 -1.13421,-0.48174 -0.60573,0 -1.08338,0.19311 -1.43301,0.5793 -0.34959,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92078 0.36588,-0.20326 0.78663,-0.30489 1.26226,-0.3049 0.78461,1e-5 1.37814,0.24392 1.78062,0.73175 0.40243,0.48378 0.60367,1.19723 0.60367,2.14037"
+         id="path3933"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 766.08227,142.66651 c 0,-0.81306 -0.16874,-1.44317 -0.50616,-1.89036 -0.33333,-0.44717 -0.80289,-0.67076 -1.40858,-0.67077 -0.6017,1e-5 -1.07122,0.2236 -1.40864,0.67077 -0.33333,0.44719 -0.50004,1.0773 -0.50004,1.89036 0,0.80899 0.16671,1.43707 0.50004,1.88425 0.33742,0.44718 0.80694,0.67077 1.40864,0.67077 0.60569,0 1.07525,-0.22359 1.40858,-0.67077 0.33742,-0.44718 0.50616,-1.07526 0.50616,-1.88425 m 1.12199,2.64649 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59162 -0.5163,0.56913 -1.30698,0.8537 -2.37208,0.85371 -0.39436,-1e-5 -0.7663,-0.0305 -1.11594,-0.0915 -0.34958,-0.0569 -0.68902,-0.14636 -1.01832,-0.26831 l 0,-1.09153 c 0.3293,0.17887 0.6545,0.31099 0.97567,0.39637 0.32112,0.0854 0.64839,0.12805 0.98173,0.12805 0.73581,0 1.28668,-0.1931 1.65257,-0.5793 0.36584,-0.38214 0.54881,-0.96144 0.54881,-1.73791 l 0,-0.55491 c -0.23173,0.40247 -0.52852,0.7033 -0.89032,0.90249 -0.3618,0.19921 -0.79476,0.2988 -1.29885,0.2988 -0.83747,0 -1.51226,-0.31912 -2.02452,-0.95737 -0.51221,-0.63825 -0.76832,-1.48382 -0.76832,-2.53673 0,-1.05697 0.25611,-1.90458 0.76832,-2.54283 0.51226,-0.63824 1.18705,-0.95737 2.02452,-0.95738 0.50409,1e-5 0.93705,0.0996 1.29885,0.2988 0.3618,0.19921 0.65859,0.50004 0.89032,0.90249 l 0,-1.03664 1.12199,0 0,5.98205"
+         id="path3935"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 774.66203,140.0566 -1.28664,0 0,-1.05494 1.00004,-1.94523 0.78664,0 -0.50004,1.94523 0,1.05494"
+         id="path3937"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 778.74761,138.06868 0,3.42093 1.5489,0 c 0.57319,1e-5 1.0163,-0.14838 1.32934,-0.44515 0.31304,-0.29676 0.46952,-0.71955 0.46952,-1.26837 0,-0.54474 -0.15648,-0.96549 -0.46952,-1.26226 -0.31304,-0.29676 -0.75615,-0.44514 -1.32934,-0.44515 l -1.5489,0 m -1.23177,-1.01225 2.78067,0 c 1.02039,0 1.79073,0.23172 2.31111,0.69516 0.52439,0.45938 0.7866,1.13422 0.78664,2.0245 -4e-5,0.89844 -0.26225,1.57734 -0.78664,2.03671 -0.52038,0.45938 -1.29072,0.68907 -2.31111,0.68906 l -1.5489,0 0,3.65875 -1.23177,0 0,-9.10418"
+         id="path3939"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 787.5591,142.72749 c -0.90652,0 -1.53462,0.10366 -1.88426,0.31099 -0.34958,0.20733 -0.52442,0.56101 -0.52442,1.06104 0,0.39839 0.13012,0.71549 0.39027,0.95127 0.26427,0.23173 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.12002,-0.21952 1.49403,-0.65857 0.37805,-0.44312 0.56708,-1.03055 0.56708,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23797,-0.46345 0,3.89657 -1.12204,0 0,-1.03664 c -0.25611,0.41466 -0.57525,0.72159 -0.95735,0.92078 -0.38214,0.19514 -0.84968,0.2927 -1.40252,0.2927 -0.69927,0 -1.2562,-0.19513 -1.67085,-0.5854 -0.4106,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34763 0.76833,-1.7379 0.51629,-0.39027 1.28462,-0.5854 2.305,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81309,-0.42684 -1.42691,-0.42685 -0.39027,1e-5 -0.77039,0.0468 -1.14031,0.14025 -0.36997,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41056,-0.15854 0.80896,-0.27643 1.19518,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21355,0.76834 0.48783,0.51223 0.73172,1.2887 0.73177,2.3294"
+         id="path3941"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 793.23628,137.39181 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32925,-0.32523 -0.4939,-0.91469 -0.4939,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+         id="path3943"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 802.70636,142.03842 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12604,-1.13014 -0.37806,-1.4513 -0.25206,-0.32116 -0.63012,-0.48174 -1.1342,-0.48174 -0.60574,0 -1.08343,0.19311 -1.43302,0.5793 -0.34963,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-9.48835 1.1281,0 0,3.71972 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92078 0.36588,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37814,0.24392 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+         id="path3945"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 809.07868,140.01391 0,-1.10982 7.81749,2.83554 0,1.01225 -7.81749,2.83553 0,-1.10982 6.28085,-2.22574 -6.28085,-2.23794"
+         id="path3947"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 827.11629,137.89184 c -0.89435,1e-5 -1.60578,0.33336 -2.13425,1.00006 -0.52443,0.66671 -0.78664,1.5753 -0.78664,2.72576 0,1.14641 0.26221,2.05297 0.78664,2.71968 0.52847,0.6667 1.2399,1.00006 2.13425,1.00005 0.89436,1e-5 1.60175,-0.33335 2.12209,-1.00005 0.52443,-0.66671 0.78664,-1.57327 0.78664,-2.71968 0,-1.15046 -0.26221,-2.05905 -0.78664,-2.72576 -0.52034,-0.6667 -1.22773,-1.00005 -2.12209,-1.00006 m 0,-1.00006 c 1.2765,10e-6 2.29688,0.4289 3.06116,1.28666 0.76428,0.85372 1.14642,2.00012 1.14642,3.43922 0,1.43505 -0.38214,2.58146 -1.14642,3.43923 -0.76428,0.85371 -1.78466,1.28056 -3.06116,1.28056 -1.28053,0 -2.305,-0.42685 -3.07332,-1.28056 -0.76428,-0.8537 -1.14642,-2.00012 -1.14642,-3.43923 0,-1.4391 0.38214,-2.5855 1.14642,-3.43922 0.76832,-0.85776 1.79279,-1.28665 3.07332,-1.28666"
+         id="path3949"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 838.10473,142.75188 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47156 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.2358 -1.40253,0.70736 -0.33742,0.46751 -0.5061,1.11389 -0.5061,1.93914 0,0.82525 0.16868,1.47366 0.5061,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523 m -3.81726,-2.38429 c 0.23576,-0.40652 0.53255,-0.70735 0.89026,-0.90249 0.3618,-0.19919 0.79275,-0.29879 1.29279,-0.2988 0.8293,1e-5 1.50212,0.3293 2.01837,0.98786 0.52039,0.65859 0.78054,1.52449 0.78054,2.59772 0,1.07323 -0.26015,1.93914 -0.78054,2.59771 -0.51625,0.65857 -1.18907,0.98786 -2.01837,0.98786 -0.50004,0 -0.93099,-0.0976 -1.29279,-0.2927 -0.35771,-0.19919 -0.6545,-0.50206 -0.89026,-0.90859 l 0,1.02445 -1.12815,0 0,-9.48835 1.12815,0 0,3.69533"
+         id="path3951"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 841.1293,139.33095 1.12204,0 0,6.95162 c 0,0.86997 -0.16667,1.50009 -0.50005,1.89036 -0.32929,0.39026 -0.86185,0.58539 -1.59766,0.5854 l -0.42686,0 0,-0.95128 0.29881,0 c 0.42686,0 0.71754,-0.0996 0.87199,-0.2988 0.1545,-0.19513 0.23173,-0.60369 0.23173,-1.22568 l 0,-6.95162 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+         id="path3953"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 850.43472,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.76839 0.41869,0.40247 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25005,-0.15855 0.40656,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63418 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65856 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29678 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12815,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3955"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 857.19125,139.59316 0,1.04884 c -0.31713,-0.1748 -0.63623,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.96346,-0.13415 -0.72768,1e-5 -1.29279,0.23172 -1.69522,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96754,0.68907 1.69522,0.68907 0.32521,0 0.64638,-0.0427 0.96346,-0.12806 0.32116,-0.0894 0.64026,-0.22155 0.95739,-0.39636 l 0,1.03664 c -0.31304,0.14635 -0.63829,0.25611 -0.97567,0.32929 -0.33338,0.0732 -0.68907,0.10976 -1.06717,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45133,-0.96957 -0.60574,-0.64637 -0.90859,-1.51838 -0.90859,-2.616 0,-1.11388 0.30487,-1.98995 0.91469,-2.6282 0.61382,-0.63824 1.45331,-0.95737 2.51842,-0.95738 0.34554,1e-5 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17482 0.95739,0.3171"
+         id="path3957"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 860.26458,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.46355,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.872 0.82324,0 0,-1.93914 1.1281,0"
+         id="path3959"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 869.14314,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15446,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82319,0 0,-0.872 0.82319,0 0,-1.93914 1.12814,0"
+         id="path3961"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 875.58254,140.11758 c -0.60165,1e-5 -1.07727,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52442,1.10982 -0.52442,1.92694 0,0.81712 0.17277,1.46147 0.51832,1.93304 0.34963,0.4675 0.82727,0.70126 1.43301,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.1748,-1.44927 -0.52443,-1.92085 -0.34959,-0.47563 -0.82319,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.2989,0.95128 0.55698,0.63419 0.83545,1.51228 0.83545,2.6343 0,1.11795 -0.27847,1.99605 -0.83545,2.6343 -0.55693,0.63418 -1.32323,0.95127 -2.2989,0.95127 -0.97971,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12202 0.2764,-2.00011 0.82929,-2.6343 0.55694,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+         id="path3963"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 885.82704,138.06868 0,3.42093 1.54885,0 c 0.57324,1e-5 1.01635,-0.14838 1.32934,-0.44515 0.31304,-0.29676 0.46956,-0.71955 0.46956,-1.26837 0,-0.54474 -0.15652,-0.96549 -0.46956,-1.26226 -0.31299,-0.29676 -0.7561,-0.44514 -1.32934,-0.44515 l -1.54885,0 m -1.23177,-1.01225 2.78062,0 c 1.02039,0 1.79078,0.23172 2.31112,0.69516 0.52442,0.45938 0.78664,1.13422 0.78664,2.0245 0,0.89844 -0.26222,1.57734 -0.78664,2.03671 -0.52034,0.45938 -1.29073,0.68907 -2.31112,0.68906 l -1.54885,0 0,3.65875 -1.23177,0 0,-9.10418"
+         id="path3965"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 894.63852,142.72749 c -0.90656,0 -1.53462,0.10366 -1.88425,0.31099 -0.34959,0.20733 -0.52442,0.56101 -0.52442,1.06104 0,0.39839 0.13011,0.71549 0.39026,0.95127 0.26424,0.23173 0.622,0.34758 1.07324,0.34758 0.62199,0 1.11997,-0.21952 1.49398,-0.65857 0.3781,-0.44312 0.56713,-1.03055 0.56713,-1.7623 l 0,-0.25001 -1.11594,0 m 2.23793,-0.46345 0,3.89657 -1.12199,0 0,-1.03664 c -0.25611,0.41466 -0.57526,0.72159 -0.95739,0.92078 -0.38214,0.19514 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.6708,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34763 0.76832,-1.7379 0.5163,-0.39027 1.28462,-0.5854 2.30501,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17076,-0.91469 -0.51222,-1.1952 -0.33742,-0.28456 -0.81308,-0.42684 -1.4269,-0.42685 -0.39031,1e-5 -0.77039,0.0468 -1.14032,0.14025 -0.36997,0.0935 -0.72566,0.23376 -1.06717,0.42076 l 0,-1.03665 c 0.41061,-0.15854 0.809,-0.27643 1.19523,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73173,1.2887 0.73173,2.3294"
+         id="path3967"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 900.31571,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82318,0 0,-0.872 0.82318,0 0,-1.93914 1.12815,0"
+         id="path3969"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 909.78574,142.03842 0,4.12219 -1.122,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.3781,-1.4513 -0.25202,-0.32116 -0.63012,-0.48174 -1.1342,-0.48174 -0.6057,0 -1.08338,0.19311 -1.43302,0.5793 -0.34958,0.38621 -0.52442,0.91266 -0.52438,1.57936 l 0,3.85998 -1.12814,0 0,-9.48835 1.12814,0 0,3.71972 c 0.26828,-0.41058 0.58334,-0.71751 0.94514,-0.92078 0.36588,-0.20326 0.78664,-0.30489 1.2623,-0.3049 0.78458,1e-5 1.3781,0.24392 1.78058,0.73175 0.40244,0.48378 0.60368,1.19723 0.60368,2.14037"
+         id="path3971"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 912.44446,137.05643 1.28664,0 0,0.92688 -1.00004,1.94523 -0.78664,0 0.50004,-1.94523 0,-0.92688"
+         id="path3973"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 916.17027,144.61174 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+         id="path3975"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 590.02932,156.80148 0,7.07968 1.48788,0 c 1.2562,0 2.17493,-0.28457 2.75629,-0.85371 0.58536,-0.56914 0.87806,-1.46756 0.8781,-2.69528 -4e-5,-1.21958 -0.29274,-2.11191 -0.8781,-2.67699 -0.58136,-0.56913 -1.50009,-0.8537 -2.75629,-0.8537 l -1.48788,0 m -1.23177,-1.01226 2.53062,0 c 1.76433,1e-5 3.05914,0.36792 3.8844,1.10372 0.8252,0.73176 1.23783,1.87817 1.23788,3.43923 -5e-5,1.5692 -0.4147,2.72171 -1.24399,3.45752 -0.82934,0.73581 -2.12209,1.10372 -3.87829,1.10372 l -2.53062,0 0,-9.10419"
+         id="path3977"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 601.00559,158.85038 c -0.6017,0 -1.07732,0.23579 -1.42695,0.70735 -0.34959,0.46752 -0.52438,1.10983 -0.52438,1.92695 0,0.81712 0.17277,1.46146 0.51832,1.93303 0.34959,0.46751 0.82727,0.70127 1.43301,0.70127 0.59757,0 1.07117,-0.23579 1.4208,-0.70736 0.34959,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.17484,-1.44927 -0.52443,-1.92085 -0.34963,-0.47563 -0.82323,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97562,1e-5 1.74197,0.3171 2.2989,0.95128 0.55694,0.63419 0.8354,1.51229 0.8354,2.6343 0,1.11795 -0.27846,1.99605 -0.8354,2.6343 -0.55693,0.63418 -1.32328,0.95127 -2.2989,0.95127 -0.97975,0 -1.74807,-0.31709 -2.30505,-0.95127 -0.55285,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.27644,-2.00011 0.82929,-2.6343 0.55698,-0.63418 1.3253,-0.95127 2.30505,-0.95128"
+         id="path3979"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 605.87782,162.19813 0,-4.13439 1.12199,0 0,4.09171 c 0,0.64638 0.12604,1.13218 0.3781,1.4574 0.25202,0.32116 0.63012,0.48173 1.13421,0.48173 0.60569,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53049,-0.91265 0.53049,-1.57936 l 0,-3.87218 1.12204,0 0,6.82967 -1.12204,0 0,-1.04884 c -0.27236,0.41466 -0.58944,0.72362 -0.95124,0.92688 -0.35776,0.1992 -0.77447,0.2988 -1.25009,0.2988 -0.78462,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20129 -0.60978,-2.14037"
+         id="path3981"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 618.8237,161.48468 c 0,-0.82525 -0.17076,-1.47163 -0.51226,-1.93914 -0.33742,-0.47157 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40248,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.80895,0.70126 1.40248,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.3415,-0.47157 0.51226,-1.11998 0.51226,-1.94523 m -3.81731,-2.38429 c 0.23576,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.7927,-0.29879 1.29274,-0.2988 0.8293,1e-5 1.50212,0.32929 2.01842,0.98786 0.52034,0.65858 0.78053,1.52449 0.78053,2.59772 0,1.07323 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65857 -1.18912,0.98786 -2.01842,0.98786 -0.50004,0 -0.93094,-0.0976 -1.29274,-0.2927 -0.35776,-0.1992 -0.65455,-0.50206 -0.89031,-0.90859 l 0,1.02445 -1.1281,0 0,-9.48836 1.1281,0 0,3.69534"
+         id="path3983"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 621.84826,155.40505 1.122,0 0,9.48836 -1.122,0 0,-9.48836"
+         id="path3985"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 631.15369,161.19808 0,0.54881 -5.15887,0 c 0.0488,0.7724 0.28054,1.36187 0.69518,1.76839 0.41874,0.40247 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.10569 0.80896,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28669,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.42085,-0.98785 2.44528,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.8903 0.53664,0.58947 0.80491,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58944,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3987"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 637.01986,155.78922 1.23177,0 0,8.06754 4.4332,0 0,1.03665 -5.66497,0 0,-9.10419"
+         id="path3989"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 643.92271,158.06374 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42082 -1.12199,0 0,-1.42082"
+         id="path3991"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 653.06349,160.77122 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12604,-1.13014 -0.37806,-1.45131 -0.25206,-0.32115 -0.63012,-0.48173 -1.1342,-0.48173 -0.60574,0 -1.08343,0.19311 -1.43302,0.5793 -0.34963,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36588,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37814,0.24393 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+         id="path3993"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 661.15541,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69514,1.76839 0.41873,0.40247 1.00009,0.6037 1.74403,0.6037 0.4309,0 0.84761,-0.0529 1.25005,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.18095,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32939,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53051 -0.37401,0.35369 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path3995"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 667.35092,158.26498 0,1.06103 c -0.31713,-0.1626 -0.64642,-0.28456 -0.98788,-0.36587 -0.34151,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55698,1e-5 -0.97567,0.0854 -1.2562,0.25612 -0.27645,0.17074 -0.41465,0.42685 -0.41465,0.76833 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19917,0.14635 0.59963,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79678,0.17074 1.36184,0.41263 1.69522,0.72565 0.33742,0.30896 0.50611,0.74191 0.50611,1.29886 0,0.63418 -0.25202,1.13624 -0.75611,1.50618 -0.50004,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36588,0 -0.74802,-0.0366 -1.14642,-0.10976 -0.3943,-0.0691 -0.81102,-0.17481 -1.25004,-0.31709 l 0,-1.15861 c 0.41464,0.21546 0.82323,0.37808 1.22566,0.48784 0.40248,0.1057 0.80088,0.15854 1.19518,0.15854 0.52852,0 0.93504,-0.0894 1.21961,-0.26831 0.28457,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31102,-0.70127 -0.20326,-0.1626 -0.65248,-0.31911 -1.34761,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19725,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72159 -0.46345,-1.25008 0,-0.6423 0.22768,-1.13827 0.68296,-1.48789 0.45533,-0.34961 1.1017,-0.52441 1.93917,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15246 1.01226,0.27441"
+         id="path3997"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 669.79615,163.34454 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887 m 0,-4.90882 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887"
+         id="path3999"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 678.98573,156.80148 0,7.07968 1.48788,0 c 1.25615,0 2.17493,-0.28457 2.75625,-0.85371 0.5854,-0.56914 0.8781,-1.46756 0.8781,-2.69528 0,-1.21958 -0.2927,-2.11191 -0.8781,-2.67699 -0.58132,-0.56913 -1.5001,-0.8537 -2.75625,-0.8537 l -1.48788,0 m -1.23177,-1.01226 2.53062,0 c 1.76433,1e-5 3.0591,0.36792 3.8844,1.10372 0.8252,0.73176 1.23783,1.87817 1.23783,3.43923 0,1.5692 -0.41465,2.72171 -1.24394,3.45752 -0.82934,0.73581 -2.12209,1.10372 -3.87829,1.10372 l -2.53062,0 0,-9.10419"
+         id="path4001"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 693.15728,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28048,1.36187 0.69513,1.76839 0.41873,0.40247 1.00009,0.6037 1.74403,0.6037 0.4309,0 0.84762,-0.0529 1.25005,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.8151,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08948,0 -1.9534,-0.31709 -2.59164,-0.95127 -0.63416,-0.63419 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.5366,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61386 -0.18094,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32938,-0.54881 -0.62604,0 -1.1281,0.17684 -1.50616,0.53051 -0.37401,0.35369 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path4003"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 694.99883,155.40505 1.12204,0 0,9.48836 -1.12204,0 0,-9.48836"
+         id="path4005"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 704.30425,161.19808 0,0.54881 -5.15881,0 c 0.0488,0.7724 0.28048,1.36187 0.69517,1.76839 0.41869,0.40247 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.10569 0.80896,-0.26424 1.20735,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.6587 0.60573,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path4007"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 707.25568,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82318,0 0,-0.87201 0.82318,0 0,-1.93913 1.12815,0"
+         id="path4009"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 716.89035,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69514,1.76839 0.41873,0.40247 1.00009,0.6037 1.74403,0.6037 0.4309,0 0.84761,-0.0529 1.25005,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path4011"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 722.59192,162.19813 0,-4.13439 1.12204,0 0,4.09171 c 0,0.64638 0.12599,1.13218 0.37805,1.4574 0.25207,0.32116 0.63012,0.48173 1.13421,0.48173 0.60574,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53053,-0.91265 0.53053,-1.57936 l 0,-3.87218 1.122,0 0,6.82967 -1.122,0 0,-1.04884 c -0.2724,0.41466 -0.58948,0.72362 -0.95128,0.92688 -0.35776,0.1992 -0.77443,0.2988 -1.25009,0.2988 -0.78458,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20129 -0.60978,-2.14037"
+         id="path4013"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 734.98899,158.26498 0,1.06103 c -0.31708,-0.1626 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69513,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97567,0.0854 -1.25615,0.25612 -0.27645,0.17074 -0.4147,0.42685 -0.4147,0.76833 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19922,0.14635 0.59963,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79678,0.17074 1.36189,0.41263 1.69522,0.72565 0.33742,0.30896 0.50616,0.74191 0.50616,1.29886 0,0.63418 -0.25207,1.13624 -0.75616,1.50618 -0.50004,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14637,-0.10976 -0.39435,-0.0691 -0.81102,-0.17481 -1.25009,-0.31709 l 0,-1.15861 c 0.41464,0.21546 0.82323,0.37808 1.22566,0.48784 0.40248,0.1057 0.80088,0.15854 1.19523,0.15854 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28457,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31097,-0.70127 -0.20331,-0.1626 -0.65248,-0.31911 -1.34766,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.1972,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46341,-0.72159 -0.46341,-1.25008 0,-0.6423 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.34961 1.10165,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15246 1.01226,0.27441"
+         id="path4015"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 737.14762,158.06374 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+         id="path4017"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 746.2884,160.77122 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63017,-0.48173 -1.13426,-0.48173 -0.60569,0 -1.08338,0.19311 -1.43301,0.5793 -0.34959,0.38621 -0.52438,0.91266 -0.52438,1.57936 l 0,3.85998 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.26827,-0.41059 0.58333,-0.71751 0.94518,-0.92078 0.36584,-0.20326 0.78659,-0.30489 1.26226,-0.3049 0.78457,1e-5 1.3781,0.24393 1.78058,0.73175 0.40243,0.48378 0.60367,1.19723 0.60367,2.14037"
+         id="path4019"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 753.03272,161.39931 c 0,-0.81306 -0.16874,-1.44317 -0.50611,-1.89036 -0.33338,-0.44718 -0.80289,-0.67076 -1.40863,-0.67077 -0.60166,1e-5 -1.07122,0.22359 -1.40864,0.67077 -0.33333,0.44719 -0.5,1.0773 -0.5,1.89036 0,0.80899 0.16667,1.43707 0.5,1.88425 0.33742,0.44719 0.80698,0.67077 1.40864,0.67077 0.60574,0 1.07525,-0.22358 1.40863,-0.67077 0.33737,-0.44718 0.50611,-1.07526 0.50611,-1.88425 m 1.12203,2.64649 c -4e-5,1.16267 -0.25817,2.02654 -0.77447,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37208,0.85371 -0.39431,0 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14636 -1.01837,-0.26832 l 0,-1.09152 c 0.3293,0.17887 0.6545,0.31099 0.97567,0.39636 0.32117,0.0854 0.64839,0.12806 0.98177,0.12806 0.73582,0 1.28664,-0.1931 1.65253,-0.5793 0.36589,-0.38214 0.54881,-0.96144 0.54881,-1.73791 l 0,-0.55491 c -0.23173,0.40246 -0.52847,0.7033 -0.89032,0.90249 -0.3618,0.1992 -0.79476,0.2988 -1.29885,0.2988 -0.83742,0 -1.51226,-0.31912 -2.02447,-0.95737 -0.51226,-0.63825 -0.76837,-1.48383 -0.76837,-2.53673 0,-1.05697 0.25611,-1.90458 0.76837,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02447,-0.95738 0.50409,1e-5 0.93705,0.0996 1.29885,0.2988 0.36185,0.1992 0.65859,0.50004 0.89032,0.90249 l 0,-1.03665 1.12203,0 0,5.98206"
+         id="path4021"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 761.5515,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32924,-0.32523 -0.49389,-0.91469 -0.49389,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.87201 0.82323,0 0,-1.93913 1.1281,0"
+         id="path4023"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 771.02157,160.77122 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08342,0.19311 -1.43301,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-9.48836 1.1281,0 0,3.71973 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37815,0.24393 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+         id="path4025"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 779.1135,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69513,1.76839 0.41874,0.40247 1.00005,0.6037 1.74404,0.6037 0.4309,0 0.84756,-0.0529 1.25004,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.85166,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63419 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17696,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.18095,-1.10372 -0.51837,-1.4696 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53051 -0.37402,0.35369 -0.58949,0.85168 -0.64638,1.49399 l 4.00024,-0.006"
+         id="path4027"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 786.1017,158.7894 -1.28664,0 0,-1.05494 1.00005,-1.94524 0.78664,0 -0.50005,1.94524 0,1.05494"
+         id="path4029"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 788.95552,155.78922 5.75643,0 0,1.03665 -4.52461,0 0,2.69528 4.33558,0 0,1.03664 -4.33558,0 0,3.29897 4.63439,0 0,1.03665 -5.86621,0 0,-9.10419"
+         id="path4031"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 801.30383,159.10039 0,-3.69534 1.12199,0 0,9.48836 -1.12199,0 0,-1.02445 c -0.23581,0.40653 -0.53462,0.70939 -0.89642,0.90859 -0.35771,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98786 -0.5163,-0.65857 -0.77443,-1.52448 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93914 0.77443,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93504,0.0996 1.29275,0.2988 0.3618,0.19514 0.66061,0.49597 0.89642,0.90249 m -3.82342,2.38429 c 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.80896,0.70126 1.40253,0.70126 0.59353,0 1.06102,-0.23375 1.40248,-0.70126 0.34151,-0.47157 0.51226,-1.11998 0.51226,-1.94523 0,-0.82525 -0.17075,-1.47163 -0.51226,-1.93914 -0.34146,-0.47157 -0.80895,-0.70735 -1.40248,-0.70736 -0.59357,1e-5 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914"
+         id="path4033"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 804.73694,158.06374 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+         id="path4035"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 809.3104,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15446,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82319,0 0,-0.87201 0.82319,0 0,-1.93913 1.12814,0"
+         id="path4037"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 818.16454,163.86896 0,3.62216 -1.1281,0 0,-9.42738 1.1281,0 0,1.03665 c 0.23581,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.79275,-0.29879 1.29275,-0.2988 0.82934,1e-5 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78054,1.52449 0.78054,2.59772 0,1.07323 -0.2602,1.93914 -0.78054,2.59771 -0.5163,0.65857 -1.18907,0.98786 -2.01841,0.98786 -0.5,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.1992 -0.6545,-0.50206 -0.89031,-0.90859 m 3.81731,-2.38428 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47157 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.809,0.70126 1.40253,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523"
+         id="path4039"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 828.11028,161.46028 c -0.90657,10e-6 -1.53467,0.10367 -1.88425,0.311 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13007,0.7155 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.11997,-0.21952 1.49399,-0.65857 0.37805,-0.44312 0.56708,-1.03055 0.56712,-1.7623 l 0,-0.25002 -1.11593,0 m 2.23793,-0.46344 0,3.89657 -1.122,0 0,-1.03665 c -0.25615,0.41467 -0.57525,0.72159 -0.95739,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.67084,-0.5854 -0.41056,-0.39433 -0.61589,-0.92079 -0.61589,-1.57936 0,-0.76833 0.25615,-1.34763 0.76837,-1.73791 0.5163,-0.39026 1.28462,-0.58539 2.305,-0.5854 l 1.57328,0 0,-0.10976 c -4e-5,-0.51628 -0.17075,-0.91468 -0.51226,-1.19519 -0.33742,-0.28457 -0.81304,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72562,0.23376 -1.06712,0.42075 l 0,-1.03664 c 0.4106,-0.15854 0.809,-0.27643 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.12814,-0.12196 0.98784,1e-5 1.72567,0.25612 2.21355,0.76834 0.48779,0.51223 0.73173,1.2887 0.73173,2.3294"
+         id="path4041"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 833.77521,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.87201 0.82324,0 0,-1.93913 1.1281,0"
+         id="path4043"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 843.24528,160.77122 0,4.12219 -1.122,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13425,-0.48173 -0.6057,0 -1.08338,0.19311 -1.43297,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.12814,0 0,-9.48836 1.12814,0 0,3.71973 c 0.26828,-0.41059 0.58334,-0.71751 0.94518,-0.92078 0.36584,-0.20326 0.7866,-0.30489 1.26226,-0.3049 0.78458,1e-5 1.3781,0.24393 1.78058,0.73175 0.40248,0.48378 0.60368,1.19723 0.60368,2.14037"
+         id="path4045"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 849.84932,158.26498 0,1.06103 c -0.31708,-0.1626 -0.64637,-0.28456 -0.98783,-0.36587 -0.34151,-0.0813 -0.69518,-0.12195 -1.06107,-0.12196 -0.55693,1e-5 -0.97566,0.0854 -1.25615,0.25612 -0.27645,0.17074 -0.41465,0.42685 -0.41465,0.76833 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19917,0.14635 0.59959,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79678,0.17074 1.36184,0.41263 1.69522,0.72565 0.33742,0.30896 0.50611,0.74191 0.50611,1.29886 0,0.63418 -0.25207,1.13624 -0.75615,1.50618 -0.5,0.36994 -1.18908,0.55491 -2.06718,0.55491 -0.36588,0 -0.74802,-0.0366 -1.14642,-0.10976 -0.3943,-0.0691 -0.81102,-0.17481 -1.25004,-0.31709 l 0,-1.15861 c 0.41464,0.21546 0.82318,0.37808 1.22566,0.48784 0.40248,0.1057 0.80088,0.15854 1.19518,0.15854 0.52852,0 0.93504,-0.0894 1.21961,-0.26831 0.28457,-0.18293 0.42681,-0.43904 0.42686,-0.76833 -5e-5,-0.3049 -0.10367,-0.53865 -0.31102,-0.70127 -0.20326,-0.1626 -0.65248,-0.31911 -1.34761,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19725,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72159 -0.46345,-1.25008 0,-0.6423 0.22764,-1.13827 0.68296,-1.48789 0.45533,-0.34961 1.1017,-0.52441 1.93917,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15246 1.01221,0.27441"
+         id="path4047"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 860.88657,161.48468 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47157 -0.8029,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523 m -3.81731,-2.38429 c 0.23581,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.79275,-0.29879 1.29275,-0.2988 0.82934,1e-5 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78053,1.52449 0.78053,2.59772 0,1.07323 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65857 -1.18907,0.98786 -2.01841,0.98786 -0.5,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.1992 -0.6545,-0.50206 -0.89031,-0.90859 l 0,1.02445 -1.1281,0 0,-9.48836 1.1281,0 0,3.69534"
+         id="path4049"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 866.75278,165.52759 c -0.31712,0.81306 -0.62608,1.34358 -0.9269,1.59156 -0.30083,0.24798 -0.70331,0.37197 -1.2074,0.37197 l -0.89637,0 0,-0.93908 0.65858,0 c 0.30896,0 0.54881,-0.0732 0.71952,-0.21952 0.17075,-0.14635 0.35978,-0.4919 0.56712,-1.03665 l 0.20124,-0.51222 -2.76235,-6.71991 1.18908,0 2.13429,5.34178 2.13426,-5.34178 1.18907,0 -3.00014,7.46385"
+         id="path4051"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 880.95481,160.77122 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08342,0.19311 -1.43301,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78458,1e-5 1.37815,0.24393 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+         id="path4053"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 885.85142,158.85038 c -0.60165,0 -1.07727,0.23579 -1.42691,0.70735 -0.34963,0.46752 -0.52442,1.10983 -0.52442,1.92695 0,0.81712 0.17277,1.46146 0.51832,1.93303 0.34963,0.46751 0.82727,0.70127 1.43301,0.70127 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.1748,-1.44927 -0.52443,-1.92085 -0.34959,-0.47563 -0.82319,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.2989,0.95128 0.55698,0.63419 0.83545,1.51229 0.83545,2.6343 0,1.11795 -0.27847,1.99605 -0.83545,2.6343 -0.55693,0.63418 -1.32323,0.95127 -2.2989,0.95127 -0.97971,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.2764,-2.00011 0.82929,-2.6343 0.55694,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+         id="path4055"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 895.33366,159.10039 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23577,0.40653 -0.53457,0.70939 -0.89637,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98786 -0.5163,-0.65857 -0.77443,-1.52448 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93914 0.77443,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93499,0.0996 1.29275,0.2988 0.3618,0.19514 0.6606,0.49597 0.89637,0.90249 m -3.82337,2.38429 c 0,0.82525 0.16868,1.47366 0.5061,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59353,0 1.06106,-0.23375 1.40253,-0.70126 0.3415,-0.47157 0.51221,-1.11998 0.51221,-1.94523 0,-0.82525 -0.17071,-1.47163 -0.51221,-1.93914 -0.34147,-0.47157 -0.809,-0.70735 -1.40253,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.5061,1.11389 -0.5061,1.93914"
+         id="path4057"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 904.6086,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28048,1.36187 0.69518,1.76839 0.41868,0.40247 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.25005,-0.15855 0.40657,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.5366,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+         id="path4059"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 910.8041,158.26498 0,1.06103 c -0.31712,-0.1626 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97566,0.0854 -1.2562,0.25612 -0.2764,0.17074 -0.41464,0.42685 -0.41464,0.76833 0,0.26018 0.0996,0.46548 0.2988,0.61589 0.19918,0.14635 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17074 1.36189,0.41263 1.69523,0.72565 0.33742,0.30896 0.5061,0.74191 0.50615,1.29886 -5e-5,0.63418 -0.25207,1.13624 -0.75615,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14638,-0.10976 -0.39435,-0.0691 -0.81102,-0.17481 -1.25009,-0.31709 l 0,-1.15861 c 0.41465,0.21546 0.82323,0.37808 1.22567,0.48784 0.40248,0.1057 0.80087,0.15854 1.19522,0.15854 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28458,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31097,-0.70127 -0.20331,-0.1626 -0.65248,-0.31911 -1.34766,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.4634,-0.72159 -0.4634,-1.25008 0,-0.6423 0.22764,-1.13827 0.68296,-1.48789 0.45528,-0.34961 1.10166,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80492,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15246 1.01226,0.27441"
+         id="path4061"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 913.37132,155.78922 1.28664,0 0,0.92689 -1.00004,1.94523 -0.78664,0 0.50004,-1.94523 0,-0.92689"
+         id="path4063"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 922.02427,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82318,0 0,-0.87201 0.82318,0 0,-1.93913 1.12815,0"
+         id="path4065"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 928.46367,158.85038 c -0.60166,0 -1.07732,0.23579 -1.42691,0.70735 -0.34963,0.46752 -0.52443,1.10983 -0.52443,1.92695 0,0.81712 0.17278,1.46146 0.51832,1.93303 0.34964,0.46751 0.82728,0.70127 1.43302,0.70127 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34959,-0.47563 -0.82319,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55693,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27851,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12201 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95128"
+         id="path4067"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 936.09825,158.85038 c -0.60166,0 -1.07728,0.23579 -1.42691,0.70735 -0.34963,0.46752 -0.52443,1.10983 -0.52443,1.92695 0,0.81712 0.17278,1.46146 0.51832,1.93303 0.34964,0.46751 0.82728,0.70127 1.43302,0.70127 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34959,-0.47563 -0.82319,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55698,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27846,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97971,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.2764,-2.00011 0.82929,-2.6343 0.55693,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+         id="path4069"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 941.08636,155.40505 1.12199,0 0,9.48836 -1.12199,0 0,-9.48836"
+         id="path4071"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 944.70849,163.34454 1.28669,0 0,1.54887 -1.28669,0 0,-1.54887"
+         id="path4073"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 595.615,175.22328 0,1.29886 c -0.41465,-0.3862 -0.85776,-0.67483 -1.32934,-0.86591 -0.46749,-0.19106 -0.96552,-0.28659 -1.49399,-0.2866 -1.04072,1e-5 -1.83751,0.31913 -2.39036,0.95737 -0.55289,0.63419 -0.82934,1.55294 -0.82934,2.75626 0,1.19926 0.27645,2.11801 0.82934,2.75626 0.55285,0.63418 1.34964,0.95128 2.39036,0.95127 0.52847,1e-5 1.0265,-0.0955 1.49399,-0.2866 0.47158,-0.19107 0.91469,-0.4797 1.32934,-0.8659 l 0,1.28666 c -0.4309,0.2927 -0.88825,0.51223 -1.37204,0.65858 -0.47971,0.14635 -0.98783,0.21952 -1.52447,0.21952 -1.3781,0 -2.46355,-0.42076 -3.25629,-1.26227 -0.79271,-0.84558 -1.18908,-1.99808 -1.18908,-3.45752 0,-1.46349 0.39637,-2.616 1.18908,-3.45751 0.79274,-0.84557 1.87819,-1.26836 3.25629,-1.26837 0.54476,1e-5 1.05698,0.0732 1.53668,0.21952 0.48375,0.1423 0.93706,0.35776 1.35983,0.64638"
+         id="path4075"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 597.48098,174.13785 1.12199,0 0,9.48836 -1.12199,0 0,-9.48836"
+         id="path4077"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 606.78641,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28053,1.36187 0.69518,1.7684 0.41873,0.40246 1.00005,0.6037 1.74399,0.6037 0.43094,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.8151,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28664,0.13416 -1.08953,0 -1.9534,-0.31709 -2.59164,-0.95127 -0.63416,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90253,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.64435,0.29677 2.17695,0.89029 0.5366,0.58948 0.80492,1.39237 0.80492,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33334,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62604,0 -1.1281,0.17684 -1.5062,0.53052 -0.37397,0.35368 -0.58944,0.85167 -0.64638,1.49398 l 4.00024,-0.006"
+         id="path4079"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 611.73182,180.19308 c -0.90657,1e-5 -1.53467,0.10367 -1.88425,0.311 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13007,0.71549 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.11997,-0.21952 1.49399,-0.65858 0.37805,-0.44311 0.56708,-1.03054 0.56708,-1.76229 l 0,-0.25002 -1.11589,0 m 2.23793,-0.46344 0,3.89657 -1.12204,0 0,-1.03665 c -0.25611,0.41466 -0.57521,0.72159 -0.95735,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19514 -1.67084,-0.5854 -0.41056,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76837,-1.73791 0.51625,-0.39026 1.28462,-0.58539 2.305,-0.5854 l 1.57324,0 0,-0.10976 c 0,-0.51629 -0.17071,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81304,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72566,0.23375 -1.06712,0.42075 l 0,-1.03664 c 0.4106,-0.15854 0.809,-0.27644 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73178,1.28869 0.73178,2.3294"
+         id="path4081"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 621.9641,179.50402 0,4.12219 -1.12199,0 0,-4.0856 c -5e-5,-0.64638 -0.12603,-1.13015 -0.3781,-1.45131 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60573,0 -1.08338,0.1931 -1.43301,0.5793 -0.34959,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26831,-0.41058 0.58337,-0.71751 0.94517,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26226,-0.30489 0.78462,1e-5 1.37815,0.24392 1.78063,0.73175 0.40243,0.48377 0.60367,1.19723 0.60367,2.14037"
+         id="path4083"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 628.23886,174.52202 1.83549,0 2.32328,6.19548 2.33554,-6.19548 1.83545,0 0,9.10419 -1.20129,0 0,-7.99437 -2.34771,6.24427 -1.23788,0 -2.3477,-6.24427 0,7.99437 -1.19518,0 0,-9.10419"
+         id="path4085"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 642.07505,180.19308 c -0.90657,1e-5 -1.53467,0.10367 -1.88425,0.311 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13007,0.71549 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.11997,-0.21952 1.49399,-0.65858 0.37805,-0.44311 0.56708,-1.03054 0.56708,-1.76229 l 0,-0.25002 -1.11589,0 m 2.23792,-0.46344 0,3.89657 -1.12203,0 0,-1.03665 c -0.25611,0.41466 -0.57521,0.72159 -0.95735,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19514 -1.67084,-0.5854 -0.41056,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76837,-1.73791 0.51625,-0.39026 1.28462,-0.58539 2.305,-0.5854 l 1.57324,0 0,-0.10976 c 0,-0.51629 -0.17071,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81304,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72566,0.23375 -1.06712,0.42075 l 0,-1.03664 c 0.4106,-0.15854 0.809,-0.27644 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73177,1.28869 0.73177,2.3294"
+         id="path4087"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 647.74002,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82318,0 0,-0.87199 0.82318,0 0,-1.93914 1.12815,0"
+         id="path4089"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 657.37469,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41869,0.40246 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.80896,-0.26424 1.20735,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23783,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42085,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4091"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 663.17383,177.84538 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14637,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63421,0 -1.12204,0.20733 -1.4635,0.62198 -0.33742,0.41061 -0.50616,1.0021 -0.50616,1.7745 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.23582,-0.41465 0.54275,-0.72158 0.9208,-0.92079 0.37806,-0.20325 0.83747,-0.30488 1.37815,-0.30489 0.0772,1e-5 0.16258,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31097,0.0427 l 0.006,1.15251"
+         id="path4093"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 664.3629,176.79655 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.6587 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+         id="path4095"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 670.93035,180.19308 c -0.90652,1e-5 -1.53462,0.10367 -1.88425,0.311 -0.34959,0.20733 -0.52443,0.56101 -0.52438,1.06103 -5e-5,0.3984 0.13007,0.71549 0.39027,0.95128 0.26423,0.23172 0.62194,0.34758 1.07323,0.34758 0.62195,0 1.11997,-0.21952 1.49398,-0.65858 0.37806,-0.44311 0.56709,-1.03054 0.56709,-1.76229 l 0,-0.25002 -1.11594,0 m 2.23797,-0.46344 0,3.89657 -1.12203,0 0,-1.03665 c -0.25611,0.41466 -0.57526,0.72159 -0.95735,0.92079 -0.38214,0.19513 -0.84968,0.2927 -1.40253,0.2927 -0.69926,0 -1.2562,-0.19514 -1.67084,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76832,-1.73791 0.5163,-0.39026 1.28462,-0.58539 2.30505,-0.5854 l 1.57324,0 0,-0.10976 c 0,-0.51629 -0.17076,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81308,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36997,0.0935 -0.72566,0.23375 -1.06712,0.42075 l 0,-1.03664 c 0.41056,-0.15854 0.80895,-0.27644 1.19518,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73173,1.28869 0.73177,2.3294"
+         id="path4097"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 675.4855,174.13785 1.12204,0 0,9.48836 -1.12204,0 0,-9.48836"
+         id="path4099"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 682.97375,174.52202 5.75643,0 0,1.03665 -4.52466,0 0,2.69527 4.33564,0 0,1.03665 -4.33564,0 0,3.29897 4.63444,0 0,1.03665 -5.86621,0 0,-9.10419"
+         id="path4101"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 695.32202,177.83319 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23577,0.40653 -0.53458,0.70939 -0.89638,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29274,0.2927 -0.82526,0 -1.49808,-0.32929 -2.01842,-0.98786 -0.5163,-0.65858 -0.77442,-1.52448 -0.77442,-2.59771 0,-1.07323 0.25812,-1.93914 0.77442,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01842,-0.98786 0.50408,1e-5 0.93498,0.0996 1.29274,0.2988 0.3618,0.19514 0.66061,0.49597 0.89638,0.90249 m -3.82338,2.38429 c 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.06106,-0.23375 1.40252,-0.70126 0.34151,-0.47157 0.51222,-1.11998 0.51222,-1.94523 0,-0.82525 -0.17071,-1.47163 -0.51222,-1.93914 -0.34146,-0.47157 -0.809,-0.70735 -1.40252,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914"
+         id="path4103"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 703.24934,180.1321 c 0,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33334,-0.44717 -0.80289,-0.67076 -1.40859,-0.67077 -0.6017,1e-5 -1.07121,0.2236 -1.40863,0.67077 -0.33338,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.80899 0.16667,1.43708 0.50005,1.88426 0.33742,0.44718 0.80693,0.67077 1.40863,0.67077 0.6057,0 1.07525,-0.22359 1.40859,-0.67077 0.33742,-0.44718 0.50615,-1.07527 0.50615,-1.88426 m 1.12199,2.6465 c 0,1.16267 -0.25812,2.02654 -0.77442,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.39435,0 -0.7663,-0.0305 -1.11593,-0.0915 -0.34959,-0.0569 -0.68907,-0.14635 -1.01832,-0.26831 l 0,-1.09152 c 0.32925,0.17887 0.6545,0.31099 0.97566,0.39636 0.32113,0.0854 0.6484,0.12805 0.98173,0.12806 0.73582,-1e-5 1.28669,-0.1931 1.65257,-0.5793 0.36584,-0.38214 0.54881,-0.96144 0.54881,-1.73791 l 0,-0.55491 c -0.23173,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29886,0.2988 -0.83746,0 -1.51226,-0.31913 -2.02451,-0.95737 -0.51222,-0.63825 -0.76832,-1.48383 -0.76832,-2.53674 0,-1.05696 0.2561,-1.90458 0.76832,-2.54283 0.51225,-0.63824 1.18705,-0.95736 2.02451,-0.95737 0.50409,1e-5 0.93706,0.0996 1.29886,0.2988 0.3618,0.1992 0.65858,0.50003 0.89031,0.90249 l 0,-1.03664 1.12199,0 0,5.98205"
+         id="path4105"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 712.52428,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41874,0.40246 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.80896,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42085,-0.98785 2.44528,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.89029 0.53664,0.58948 0.80491,1.39237 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4107"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 718.71974,176.99778 0,1.06103 c -0.31708,-0.1626 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69513,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97567,0.0854 -1.25615,0.25611 -0.27645,0.17075 -0.4147,0.42686 -0.4147,0.76834 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19922,0.14635 0.59963,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79683,0.17075 1.36189,0.41263 1.69522,0.72566 0.33742,0.30896 0.50616,0.74191 0.50616,1.29885 0,0.63419 -0.25207,1.13625 -0.75616,1.50619 -0.50004,0.36994 -1.18907,0.55491 -2.06717,0.55491 -0.36589,0 -0.74803,-0.0366 -1.14642,-0.10976 -0.39435,-0.0691 -0.81102,-0.17481 -1.25009,-0.3171 l 0,-1.1586 c 0.41469,0.21546 0.82323,0.37807 1.22571,0.48784 0.40243,0.10569 0.80083,0.15854 1.19518,0.15854 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28457,-0.18293 0.42686,-0.43905 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31097,-0.70127 -0.20326,-0.16261 -0.65248,-0.31912 -1.34766,-0.46953 l -0.39027,-0.0915 c -0.69513,-0.14635 -1.1972,-0.36994 -1.50615,-0.67078 -0.309,-0.30489 -0.46346,-0.72158 -0.46346,-1.25007 0,-0.64231 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.3496 1.1017,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15245 1.01226,0.27441"
+         id="path4109"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 721.16501,182.07734 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887 m 0,-4.90882 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+         id="path4111"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 732.16566,175.73551 -1.67084,4.53075 3.34775,0 -1.67691,-4.53075 m -0.69518,-1.21349 1.39642,0 3.46975,9.10419 -1.28058,0 -0.82934,-2.3355 -4.10386,0 -0.82934,2.3355 -1.29885,0 3.4758,-9.10419"
+         id="path4113"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 741.8979,177.83319 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23576,0.40653 -0.53457,0.70939 -0.89637,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98786 -0.5163,-0.65858 -0.77443,-1.52448 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93914 0.77443,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93499,0.0996 1.29275,0.2988 0.3618,0.19514 0.66061,0.49597 0.89637,0.90249 m -3.82337,2.38429 c 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.3415,0.46751 0.809,0.70126 1.40252,0.70126 0.59353,0 1.06107,-0.23375 1.40253,-0.70126 0.34151,-0.47157 0.51221,-1.11998 0.51221,-1.94523 0,-0.82525 -0.1707,-1.47163 -0.51221,-1.93914 -0.34146,-0.47157 -0.809,-0.70735 -1.40253,-0.70736 -0.59352,1e-5 -1.06102,0.23579 -1.40252,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914"
+         id="path4115"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 749.8374,177.83319 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23577,0.40653 -0.53458,0.70939 -0.89638,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29274,0.2927 -0.82526,0 -1.49808,-0.32929 -2.01842,-0.98786 -0.5163,-0.65858 -0.77447,-1.52448 -0.77447,-2.59771 0,-1.07323 0.25817,-1.93914 0.77447,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01842,-0.98786 0.50408,1e-5 0.93498,0.0996 1.29274,0.2988 0.3618,0.19514 0.66061,0.49597 0.89638,0.90249 m -3.82338,2.38429 c 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.06102,-0.23375 1.40252,-0.70126 0.34146,-0.47157 0.51222,-1.11998 0.51222,-1.94523 0,-0.82525 -0.17076,-1.47163 -0.51222,-1.93914 -0.3415,-0.47157 -0.809,-0.70735 -1.40252,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914"
+         id="path4117"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 760.35021,180.19308 c -0.90656,1e-5 -1.53462,0.10367 -1.88425,0.311 -0.34963,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13012,0.71549 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.622,0 1.11998,-0.21952 1.49399,-0.65858 0.3781,-0.44311 0.56713,-1.03054 0.56713,-1.76229 l 0,-0.25002 -1.11594,0 m 2.23793,-0.46344 0,3.89657 -1.12199,0 0,-1.03665 c -0.25611,0.41466 -0.57526,0.72159 -0.9574,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40252,0.2927 -0.69922,0 -1.25616,-0.19514 -1.6708,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76832,-1.73791 0.5163,-0.39026 1.28462,-0.58539 2.30501,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17076,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81308,-0.42685 -1.42695,-0.42685 -0.39027,0 -0.77034,0.0468 -1.14027,0.14025 -0.36997,0.0935 -0.72566,0.23375 -1.06717,0.42075 l 0,-1.03664 c 0.41061,-0.15854 0.809,-0.27644 1.19523,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98783,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73173,1.28869 0.73173,2.3294"
+         id="path4119"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 773.79614,177.05875 0,1.04884 c -0.31713,-0.17479 -0.63623,-0.30489 -0.95739,-0.39026 -0.31708,-0.0894 -0.63825,-0.13415 -0.96346,-0.13415 -0.72768,0 -1.29279,0.23172 -1.69522,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96754,0.68907 1.69522,0.68907 0.32521,0 0.64638,-0.0427 0.96346,-0.12806 0.32116,-0.0894 0.64026,-0.22156 0.95739,-0.39637 l 0,1.03665 c -0.31304,0.14635 -0.63829,0.25611 -0.97567,0.32929 -0.33338,0.0732 -0.68907,0.10976 -1.06717,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45133,-0.96957 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.616 0,-1.11389 0.30487,-1.98996 0.91469,-2.62821 0.61382,-0.63824 1.45331,-0.95736 2.51842,-0.95737 0.34554,1e-5 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17482 0.95739,0.31709"
+         id="path4121"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 775.6438,180.93093 0,-4.13438 1.12199,0 0,4.09169 c 0,0.64639 0.12604,1.13218 0.3781,1.45741 0.25202,0.32115 0.63012,0.48173 1.13421,0.48173 0.60569,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53049,-0.91265 0.53049,-1.57936 l 0,-3.87217 1.12204,0 0,6.82966 -1.12204,0 0,-1.04884 c -0.27236,0.41466 -0.58944,0.72362 -0.95124,0.92688 -0.35776,0.1992 -0.77447,0.2988 -1.25009,0.2988 -0.78458,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48784 -0.60978,-1.20129 -0.60978,-2.14037"
+         id="path4123"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 784.79675,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15449,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82323,0 0,-0.87199 0.82323,0 0,-1.93914 1.12811,0"
+         id="path4125"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 789.6995,174.85741 0,1.93914 2.31112,0 0,0.87199 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82319,0 0,-0.87199 0.82319,0 0,-1.93914 1.12814,0"
+         id="path4127"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 793.49239,176.79655 1.12199,0 0,6.82966 -1.12199,0 0,-6.82966 m 0,-2.6587 1.12199,0 0,1.42082 -1.12199,0 0,-1.42082"
+         id="path4129"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 802.63317,179.50402 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12599,-1.13015 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08343,0.1931 -1.43301,0.5793 -0.34964,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26226,-0.30489 0.78462,1e-5 1.37815,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19723 0.60372,2.14037"
+         id="path4131"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 809.37748,180.1321 c -4e-5,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33333,-0.44717 -0.80289,-0.67076 -1.40863,-0.67077 -0.60166,1e-5 -1.07117,0.2236 -1.40859,0.67077 -0.33338,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.80899 0.16667,1.43708 0.50005,1.88426 0.33742,0.44718 0.80693,0.67077 1.40859,0.67077 0.60574,0 1.0753,-0.22359 1.40863,-0.67077 0.33742,-0.44718 0.50611,-1.07527 0.50615,-1.88426 m 1.122,2.6465 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.39435,0 -0.7663,-0.0305 -1.11593,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01837,-0.26831 l 0,-1.09152 c 0.3293,0.17887 0.65455,0.31099 0.97567,0.39636 0.32117,0.0854 0.64844,0.12805 0.98177,0.12806 0.73582,-1e-5 1.28669,-0.1931 1.65253,-0.5793 0.36589,-0.38214 0.54881,-0.96144 0.54885,-1.73791 l 0,-0.55491 c -0.23173,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29885,0.2988 -0.83747,0 -1.51231,-0.31913 -2.02452,-0.95737 -0.51222,-0.63825 -0.76832,-1.48383 -0.76832,-2.53674 0,-1.05696 0.2561,-1.90458 0.76832,-2.54283 0.51221,-0.63824 1.18705,-0.95736 2.02452,-0.95737 0.50408,1e-5 0.93705,0.0996 1.29885,0.2988 0.3618,0.1992 0.65858,0.50003 0.89031,0.90249 l 0,-1.03664 1.122,0 0,5.98205"
+         id="path4133"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 816.78644,174.13785 1.12199,0 0,9.48836 -1.12199,0 0,-9.48836"
+         id="path4135"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 820.25003,176.79655 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.6587 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+         id="path4137"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 829.39081,179.50402 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13015 -0.3781,-1.45131 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60569,0 -1.08338,0.1931 -1.43301,0.5793 -0.34959,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26231,-0.30489 0.78457,1e-5 1.3781,0.24392 1.78058,0.73175 0.40243,0.48377 0.60367,1.19723 0.60367,2.14037"
+         id="path4139"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 837.48274,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.0001,0.6037 1.74404,0.6037 0.4309,0 0.84761,-0.0529 1.25004,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42278,0.0894 -0.85166,0.13416 -1.28664,0.13416 -1.08949,0 -1.95336,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17696,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.18095,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.7765,-0.54881 -1.32939,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85167 -0.64638,1.49398 l 4.00024,-0.006"
+         id="path4141"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 844.41002,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93296,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86588,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82319,0 0,-0.87199 0.82319,0 0,-1.93914 1.12815,0"
+         id="path4143"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 850.84937,177.58318 c -0.60165,0 -1.07727,0.23579 -1.42691,0.70735 -0.34958,0.46751 -0.52442,1.10983 -0.52442,1.92695 0,0.81712 0.17277,1.46146 0.51832,1.93303 0.34963,0.46751 0.82732,0.70127 1.43301,0.70127 0.59761,0 1.07121,-0.23579 1.42085,-0.70737 0.34958,-0.47157 0.52438,-1.11388 0.52442,-1.92693 -4e-5,-0.80899 -0.17484,-1.44927 -0.52442,-1.92085 -0.34964,-0.47563 -0.82324,-0.71345 -1.42085,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.29895,0.95128 0.55693,0.63418 0.8354,1.51228 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55698,0.63418 -1.32328,0.95127 -2.29895,0.95127 -0.97971,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55284,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12202 0.27645,-2.00012 0.82929,-2.6343 0.55694,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+         id="path4145"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 860.92312,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82324,0 0,-0.87199 0.82324,0 0,-1.93914 1.1281,0"
+         id="path4147"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 870.39323,179.50402 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13015 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08342,0.1931 -1.43301,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.12814,0 0,-9.48836 1.12814,0 0,3.71973 c 0.26828,-0.41058 0.58334,-0.71751 0.94518,-0.92079 0.36585,-0.20325 0.7866,-0.30488 1.26226,-0.30489 0.78458,1e-5 1.3781,0.24392 1.78058,0.73175 0.40248,0.48377 0.60368,1.19723 0.60372,2.14037"
+         id="path4149"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 878.48516,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28054,1.36187 0.69518,1.7684 0.41874,0.40246 1.00005,0.6037 1.74399,0.6037 0.43095,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63416,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90253,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44523,-0.98786 0.91878,1e-5 1.6444,0.29677 2.177,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62603,0 -1.1281,0.17684 -1.5062,0.53052 -0.37397,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4151"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 883.65009,176.79655 1.12199,0 1.40253,5.32957 1.39642,-5.32957 1.32328,0 1.40248,5.32957 1.39646,-5.32957 1.122,0 -1.78669,6.82966 -1.32323,0 -1.46961,-5.59789 -1.47571,5.59789 -1.32324,0 -1.78668,-6.82966"
+         id="path4153"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 900.19982,179.50402 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13015 -0.3781,-1.45131 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08338,0.1931 -1.43301,0.5793 -0.34959,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-9.48836 1.1281,0 0,3.71973 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26231,-0.30489 0.78457,1e-5 1.3781,0.24392 1.78058,0.73175 0.40243,0.48377 0.60367,1.19723 0.60367,2.14037"
+         id="path4155"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 902.44996,176.79655 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.6587 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+         id="path4157"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 907.02338,174.85741 0,1.93914 2.31112,0 0,0.87199 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.1545,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32925,-0.32523 -0.4939,-0.91469 -0.4939,-1.7684 l 0,-3.70754 -0.82323,0 0,-0.87199 0.82323,0 0,-1.93914 1.1281,0"
+         id="path4159"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 916.6581,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69514,1.7684 0.41873,0.40246 1.00004,0.6037 1.74403,0.6037 0.4309,0 0.84757,-0.0529 1.25005,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08953,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63419 -0.95124,-1.49196 -0.95124,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.18095,-1.10371 -0.51837,-1.46959 -0.33333,-0.36587 -0.77644,-0.54881 -1.32934,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53052 -0.37401,0.35368 -0.58949,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4161"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 923.56095,182.60176 0,3.62216 -1.12814,0 0,-9.42737 1.12814,0 0,1.03664 c 0.23577,-0.40652 0.53256,-0.70735 0.89027,-0.90249 0.3618,-0.1992 0.79275,-0.29879 1.29279,-0.2988 0.8293,1e-5 1.50212,0.32929 2.01837,0.98786 0.52039,0.65858 0.78053,1.52449 0.78053,2.59772 0,1.07323 -0.26014,1.93913 -0.78053,2.59771 -0.51625,0.65857 -1.18907,0.98786 -2.01837,0.98786 -0.50004,0 -0.93099,-0.0976 -1.29279,-0.2927 -0.35771,-0.1992 -0.6545,-0.50206 -0.89027,-0.90859 m 3.81727,-2.38428 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47157 -0.8029,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523"
+         id="path4163"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 936.24462,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28054,1.36187 0.69518,1.7684 0.41874,0.40246 1.00005,0.6037 1.74399,0.6037 0.43095,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63416,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90253,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44523,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.89029 0.53664,0.58948 0.80496,1.39237 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.1281,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4165"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 942.04371,177.84538 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14633,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63416,0 -1.122,0.20733 -1.4635,0.62198 -0.33742,0.41061 -0.50611,1.0021 -0.50611,1.7745 l 0,3.59777 -1.12815,0 0,-6.82966 1.12815,0 0,1.06103 c 0.23577,-0.41465 0.5427,-0.72158 0.92075,-0.92079 0.3781,-0.20325 0.83747,-0.30488 1.37815,-0.30489 0.0772,1e-5 0.16263,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31102,0.0427 l 0.006,1.15251"
+         id="path4167"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 943.23283,176.79655 1.12199,0 0,6.82966 -1.12199,0 0,-6.82966 m 0,-2.6587 1.12199,0 0,1.42082 -1.12199,0 0,-1.42082"
+         id="path4169"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 952.01382,178.10759 c 0.28049,-0.50408 0.61589,-0.87605 1.00616,-1.11591 0.39026,-0.23985 0.84963,-0.35977 1.3781,-0.35978 0.71143,1e-5 1.26024,0.25002 1.64646,0.75005 0.38618,0.49596 0.5793,1.20332 0.5793,2.12207 l 0,4.12219 -1.1281,0 0,-4.0856 c -5e-5,-0.65451 -0.11589,-1.14031 -0.34762,-1.45741 -0.23172,-0.31708 -0.5854,-0.47563 -1.06102,-0.47563 -0.58135,0 -1.04072,0.1931 -1.37814,0.5793 -0.33742,0.38621 -0.50611,0.91266 -0.50611,1.57936 l 0,3.85998 -1.1281,0 0,-4.0856 c -4e-5,-0.65858 -0.11588,-1.14438 -0.34761,-1.45741 -0.23173,-0.31708 -0.58944,-0.47563 -1.07323,-0.47563 -0.57319,0 -1.02852,0.19513 -1.36594,0.5854 -0.33742,0.3862 -0.5061,0.91062 -0.5061,1.57326 l 0,3.85998 -1.12815,0 0,-6.82966 1.12815,0 0,1.06103 c 0.2561,-0.41872 0.56304,-0.72768 0.92075,-0.92688 0.35776,-0.1992 0.7826,-0.29879 1.27447,-0.2988 0.49596,1e-5 0.91672,0.12603 1.26226,0.37807 0.34963,0.25205 0.60776,0.61793 0.77447,1.09762"
+         id="path4171"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 964.7097,179.93087 0,0.54881 -5.15886,0 c 0.0488,0.77241 0.28048,1.36187 0.69518,1.7684 0.41873,0.40246 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.2501,-0.15855 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57333 0,-1.11794 0.30082,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42084,-0.98785 2.44527,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.89029 0.53664,0.58948 0.80492,1.39237 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4173"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 967.66108,174.85741 0,1.93914 2.31112,0 0,0.87199 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82319,0 0,-0.87199 0.82319,0 0,-1.93914 1.12814,0"
+         id="path4175"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 977.29576,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28048,1.36187 0.69518,1.7684 0.41868,0.40246 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.25005,-0.15855 0.40657,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57333 0,-1.11794 0.30082,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.89029 0.5366,0.58948 0.80492,1.39237 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58948,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+         id="path4177"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 983.09489,177.84538 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14637,-0.0366 -0.309,-0.0549 -0.48783,-0.0549 -0.63421,0 -1.12204,0.20733 -1.4635,0.62198 -0.33742,0.41061 -0.50615,1.0021 -0.50615,1.7745 l 0,3.59777 -1.12811,0 0,-6.82966 1.12811,0 0,1.06103 c 0.23581,-0.41465 0.54274,-0.72158 0.92079,-0.92079 0.37806,-0.20325 0.83743,-0.30488 1.37815,-0.30489 0.0772,1e-5 0.16258,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31097,0.0427 l 0.006,1.15251"
+         id="path4179"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 983.30834,182.07734 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+         id="path4181"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 590.02932,194.26707 0,3.42093 1.54885,0 c 0.57324,1e-5 1.01635,-0.14837 1.32939,-0.44514 0.31299,-0.29676 0.46951,-0.71955 0.46951,-1.26837 0,-0.54474 -0.15652,-0.9655 -0.46951,-1.26227 -0.31304,-0.29676 -0.75615,-0.44514 -1.32939,-0.44515 l -1.54885,0 m -1.23177,-1.01225 2.78062,0 c 1.02039,1e-5 1.79078,0.23173 2.31112,0.69516 0.52442,0.45939 0.78664,1.13422 0.78664,2.02451 0,0.89843 -0.26222,1.57733 -0.78664,2.03671 -0.52034,0.45937 -1.29073,0.68906 -2.31112,0.68906 l -1.54885,0 0,3.65875 -1.23177,0 0,-9.10419"
+         id="path4183"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 600.03599,196.57818 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14633,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63416,0 -1.122,0.20733 -1.4635,0.62199 -0.33742,0.41059 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.23577,-0.41465 0.5427,-0.72158 0.92075,-0.92078 0.3781,-0.20326 0.83747,-0.30489 1.37815,-0.3049 0.0772,1e-5 0.16263,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31102,0.0427 l 0.006,1.1525"
+         id="path4185"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 601.23727,195.52934 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+         id="path4187"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 609.61584,195.79155 0,1.04885 c -0.31713,-0.17481 -0.63623,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13415 -0.96346,-0.13416 -0.72768,1e-5 -1.29274,0.23173 -1.69522,0.69517 -0.40248,0.45938 -0.60368,1.10575 -0.60368,1.93913 0,0.83339 0.2012,1.4818 0.60368,1.94524 0.40248,0.45938 0.96754,0.68906 1.69522,0.68906 0.32521,0 0.64638,-0.0427 0.96346,-0.12805 0.32116,-0.0894 0.64026,-0.22156 0.95739,-0.39637 l 0,1.03665 c -0.31304,0.14635 -0.63825,0.25611 -0.97567,0.32928 -0.33338,0.0732 -0.68907,0.10977 -1.06712,0.10977 -1.02852,0 -1.84564,-0.32319 -2.45138,-0.96957 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.61601 0,-1.11388 0.30491,-1.98994 0.91469,-2.6282 0.61387,-0.63824 1.45331,-0.95736 2.51842,-0.95737 0.34554,1e-5 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64844,0.17481 0.95739,0.31709"
+         id="path4189"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 611.57934,195.52934 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+         id="path4191"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 620.72012,198.23682 0,4.12219 -1.122,0 0,-4.08561 c 0,-0.64637 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32115 -0.63016,-0.48173 -1.13425,-0.48174 -0.6057,1e-5 -1.08338,0.19311 -1.43301,0.57931 -0.34959,0.3862 -0.52439,0.91265 -0.52439,1.57936 l 0,3.85998 -1.12814,0 0,-6.82967 1.12814,0 0,1.06104 c 0.26828,-0.41059 0.58334,-0.71751 0.94518,-0.92078 0.36585,-0.20326 0.7866,-0.30489 1.26226,-0.3049 0.78458,1e-5 1.3781,0.24392 1.78058,0.73175 0.40244,0.48377 0.60368,1.19723 0.60368,2.14037"
+         id="path4193"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 627.46443,198.8649 c 0,-0.81305 -0.16873,-1.44317 -0.50611,-1.89035 -0.33338,-0.44718 -0.80289,-0.67077 -1.40863,-0.67077 -0.60165,0 -1.07121,0.22359 -1.40863,0.67077 -0.33334,0.44718 -0.5,1.0773 -0.5,1.89035 0,0.809 0.16666,1.43708 0.5,1.88426 0.33742,0.44718 0.80698,0.67077 1.40863,0.67077 0.60574,0 1.07525,-0.22359 1.40863,-0.67077 0.33738,-0.44718 0.50611,-1.07526 0.50611,-1.88426 m 1.12204,2.6465 c -5e-5,1.16266 -0.25817,2.02654 -0.77447,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.39431,0 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01836,-0.26831 l 0,-1.09152 c 0.32929,0.17887 0.6545,0.31099 0.97566,0.39636 0.32117,0.0854 0.6484,0.12806 0.98178,0.12806 0.73581,0 1.28664,-0.19311 1.65252,-0.57931 0.36589,-0.38213 0.54881,-0.96143 0.54881,-1.7379 l 0,-0.55491 c -0.23173,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29886,0.2988 -0.83742,0 -1.51226,-0.31912 -2.02447,-0.95738 -0.51226,-0.63824 -0.76837,-1.48382 -0.76837,-2.53673 0,-1.05696 0.25611,-1.90457 0.76837,-2.54283 0.51221,-0.63824 1.18705,-0.95736 2.02447,-0.95737 0.50409,1e-5 0.93706,0.0996 1.29886,0.29879 0.3618,0.19921 0.65858,0.50004 0.89031,0.9025 l 0,-1.03665 1.12204,0 0,5.98206"
+         id="path4195"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 631.18418,200.81014 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887 m 0,-4.90883 1.28664,0 0,1.54888 -1.28664,0 0,-1.54888"
+         id="path4197"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 642.18478,194.4683 -1.6708,4.53076 3.34775,0 -1.67695,-4.53076 m -0.69513,-1.21348 1.39642,0 3.4697,9.10419 -1.28054,0 -0.82934,-2.3355 -4.1039,0 -0.82929,2.3355 -1.29886,0 3.47581,-9.10419"
+         id="path4199"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 655.96,195.73057 0,1.06104 c -0.31713,-0.16261 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69518,-0.12196 -1.06102,-0.12196 -0.55698,0 -0.97567,0.0854 -1.2562,0.25611 -0.2764,0.17075 -0.41465,0.42686 -0.41465,0.76834 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19917,0.14635 0.59963,0.2866 1.20129,0.42075 l 0.38416,0.0854 c 0.79678,0.17074 1.36189,0.41262 1.69522,0.72564 0.33742,0.30897 0.50611,0.74192 0.50616,1.29886 -5e-5,0.63418 -0.25207,1.13625 -0.75616,1.50619 -0.50004,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14637,-0.10977 -0.39435,-0.0691 -0.81107,-0.1748 -1.25009,-0.31708 l 0,-1.15861 c 0.41464,0.21546 0.82323,0.37807 1.22566,0.48783 0.40248,0.1057 0.80088,0.15855 1.19523,0.15855 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28457,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10367,-0.53864 -0.31097,-0.70126 -0.20331,-0.16261 -0.65253,-0.31912 -1.34766,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14634 -1.19725,-0.36993 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72158 -0.46341,-1.25007 -4e-5,-0.64231 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.34961 1.10165,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36589,0.061 0.70326,0.15245 1.01226,0.2744"
+         id="path4201"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 658.11868,195.52934 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42081 -1.12199,0 0,-1.42081"
+         id="path4203"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 666.89963,196.8404 c 0.28054,-0.5041 0.61589,-0.87607 1.0062,-1.11592 0.39022,-0.23985 0.84964,-0.35977 1.3781,-0.35978 0.71144,1e-5 1.26024,0.25002 1.64647,0.75004 0.38618,0.49597 0.57925,1.20333 0.57929,2.12208 l 0,4.12219 -1.12814,0 0,-4.08561 c 0,-0.6545 -0.11584,-1.1403 -0.34757,-1.4574 -0.23173,-0.31708 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,1e-5 -1.04073,0.19311 -1.37815,0.57931 -0.33742,0.3862 -0.5061,0.91265 -0.5061,1.57936 l 0,3.85998 -1.12815,0 0,-4.08561 c 0,-0.65857 -0.11584,-1.14437 -0.34757,-1.4574 -0.23172,-0.31708 -0.58948,-0.47563 -1.07323,-0.47564 -0.57319,1e-5 -1.02851,0.19515 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.92075,-0.92689 0.35776,-0.19919 0.78256,-0.29878 1.27448,-0.29879 0.49596,1e-5 0.91671,0.12603 1.26226,0.37807 0.34963,0.25205 0.60776,0.61793 0.77442,1.09763"
+         id="path4205"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 674.83912,201.33456 0,3.62216 -1.1281,0 0,-9.42738 1.1281,0 0,1.03665 c 0.23582,-0.40652 0.53256,-0.70735 0.89032,-0.9025 0.3618,-0.19919 0.7927,-0.29878 1.29274,-0.29879 0.82934,1e-5 1.50212,0.32929 2.01842,0.98786 0.52034,0.65858 0.78053,1.52448 0.78053,2.59771 0,1.07324 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65858 -1.18908,0.98787 -2.01842,0.98787 -0.50004,0 -0.93094,-0.0976 -1.29274,-0.2927 -0.35776,-0.1992 -0.6545,-0.50207 -0.89032,-0.90859 m 3.81732,-2.38429 c 0,-0.82525 -0.17076,-1.47162 -0.51222,-1.93913 -0.33742,-0.47157 -0.80289,-0.70736 -1.39642,-0.70736 -0.59357,0 -1.06106,0.23579 -1.40252,0.70736 -0.33742,0.46751 -0.50616,1.11388 -0.50616,1.93913 0,0.82526 0.16874,1.47367 0.50616,1.94524 0.34146,0.46751 0.80895,0.70126 1.40252,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51222,-1.11998 0.51222,-1.94524"
+         id="path4207"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 681.681,192.87065 1.122,0 0,9.48836 -1.122,0 0,-9.48836"
+         id="path4209"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 690.98643,198.66367 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.00005,0.60369 1.74404,0.60369 0.4309,0 0.84756,-0.0528 1.25004,-0.15854 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.8517,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95128 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00417 0.90248,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17696,0.8903 0.53659,0.58946 0.80491,1.39236 0.80491,2.40867 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54882 -0.62603,1e-5 -1.1281,0.17685 -1.50615,0.53052 -0.37402,0.35369 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+         id="path4211"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 701.29801,196.56599 0,-3.69534 1.12199,0 0,9.48836 -1.12199,0 0,-1.02445 c -0.23581,0.40652 -0.53462,0.70939 -0.89642,0.90859 -0.35772,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98787 -0.5163,-0.65857 -0.77443,-1.52447 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93913 0.77443,-2.59771 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93503,0.0996 1.29275,0.29879 0.3618,0.19515 0.66061,0.49598 0.89642,0.9025 m -3.82342,2.38428 c 0,0.82526 0.16873,1.47367 0.50615,1.94524 0.34146,0.46751 0.80896,0.70126 1.40253,0.70126 0.59352,0 1.06102,-0.23375 1.40248,-0.70126 0.3415,-0.47157 0.51226,-1.11998 0.51226,-1.94524 0,-0.82525 -0.17076,-1.47162 -0.51226,-1.93913 -0.34146,-0.47157 -0.80896,-0.70736 -1.40248,-0.70736 -0.59357,0 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11388 -0.50615,1.93913"
+         id="path4213"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 710.57295,198.66367 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41873,0.40246 1.00005,0.60369 1.74399,0.60369 0.4309,0 0.84761,-0.0528 1.25009,-0.15854 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.8151,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28668,0.13415 -1.08949,0 -1.95336,-0.31709 -2.5916,-0.95128 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42085,-0.98785 2.44527,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17696,0.8903 0.53664,0.58946 0.80491,1.39236 0.80496,2.40867 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.7765,-0.54881 -1.32934,-0.54882 -0.62608,1e-5 -1.12815,0.17685 -1.5062,0.53052 -0.37402,0.35369 -0.58944,0.85168 -0.64638,1.49399 l 4.00024,-0.006"
+         id="path4215"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 716.76841,195.73057 0,1.06104 c -0.31708,-0.16261 -0.64638,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69514,-0.12196 -1.06102,-0.12196 -0.55694,0 -0.97567,0.0854 -1.25616,0.25611 -0.27644,0.17075 -0.41469,0.42686 -0.41469,0.76834 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19922,0.14635 0.59963,0.2866 1.20128,0.42075 l 0.38416,0.0854 c 0.79684,0.17074 1.3619,0.41262 1.69523,0.72564 0.33742,0.30897 0.50615,0.74192 0.50615,1.29886 0,0.63418 -0.25206,1.13625 -0.75615,1.50619 -0.50005,0.36994 -1.18907,0.55491 -2.06717,0.55491 -0.36589,0 -0.74803,-0.0366 -1.14642,-0.10977 -0.39436,-0.0691 -0.81102,-0.1748 -1.2501,-0.31708 l 0,-1.15861 c 0.4147,0.21546 0.82324,0.37807 1.22572,0.48783 0.40243,0.1057 0.80082,0.15855 1.19518,0.15855 0.52846,0 0.93498,-0.0894 1.21956,-0.26831 0.28457,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10368,-0.53864 -0.31098,-0.70126 -0.20326,-0.16261 -0.65248,-0.31912 -1.34766,-0.46954 l -0.39026,-0.0915 c -0.69514,-0.14634 -1.1972,-0.36993 -1.50616,-0.67077 -0.309,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.64231 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.34961 1.1017,-0.52441 1.93912,-0.52442 0.41464,1e-5 0.80491,0.0305 1.1708,0.0915 0.36588,0.061 0.7033,0.15245 1.01226,0.2744"
+         id="path4217"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 718.92709,195.52934 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42081 -1.12199,0 0,-1.42081"
+         id="path4219"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 726.88485,198.8649 c 0,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33333,-0.44718 -0.80289,-0.67077 -1.40859,-0.67077 -0.60165,0 -1.07121,0.22359 -1.40863,0.67077 -0.33333,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.809 0.16672,1.43708 0.50005,1.88426 0.33742,0.44718 0.80698,0.67077 1.40863,0.67077 0.6057,0 1.07526,-0.22359 1.40859,-0.67077 0.33742,-0.44718 0.50615,-1.07526 0.50615,-1.88426 m 1.122,2.6465 c 0,1.16266 -0.25813,2.02654 -0.77443,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.3943,0 -0.7663,-0.0305 -1.11593,-0.0915 -0.34959,-0.0569 -0.68903,-0.14635 -1.01832,-0.26831 l 0,-1.09152 c 0.32929,0.17887 0.6545,0.31099 0.97567,0.39636 0.32116,0.0854 0.64839,0.12806 0.98177,0.12806 0.73581,0 1.28664,-0.19311 1.65253,-0.57931 0.36584,-0.38213 0.5488,-0.96143 0.5488,-1.7379 l 0,-0.55491 c -0.23172,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29885,0.2988 -0.83742,0 -1.51226,-0.31912 -2.02452,-0.95738 -0.51222,-0.63824 -0.76832,-1.48382 -0.76832,-2.53673 0,-1.05696 0.2561,-1.90457 0.76832,-2.54283 0.51226,-0.63824 1.1871,-0.95736 2.02452,-0.95737 0.50408,1e-5 0.93705,0.0996 1.29885,0.29879 0.3618,0.19921 0.65859,0.50004 0.89031,0.9025 l 0,-1.03665 1.122,0 0,5.98206"
+         id="path4221"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 735.99514,198.23682 0,4.12219 -1.12204,0 0,-4.08561 c 0,-0.64637 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48174 -0.60574,1e-5 -1.08342,0.19311 -1.43301,0.57931 -0.34963,0.3862 -0.52443,0.91265 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37815,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19723 0.60372,2.14037"
+         id="path4223"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 742.36746,196.68794 7.81755,0 0,1.02445 -7.81755,0 0,-1.02445 m 0,2.48795 7.81755,0 0,1.03665 -7.81755,0 0,-1.03665"
+         id="path4225"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 756.66096,192.87065 1.12203,0 0,9.48836 -1.12203,0 0,-9.48836"
+         id="path4227"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 762.77111,196.31597 c -0.6017,1e-5 -1.07732,0.23579 -1.42696,0.70736 -0.34958,0.46751 -0.52438,1.10983 -0.52438,1.92694 0,0.81713 0.17278,1.46147 0.51832,1.93304 0.34959,0.46751 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23578 1.4208,-0.70736 0.34958,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80898 -0.17484,-1.44926 -0.52442,-1.92084 -0.34964,-0.47563 -0.82324,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95127 0.55693,0.63419 0.8354,1.51229 0.8354,2.6343 0,1.11796 -0.27847,1.99606 -0.8354,2.6343 -0.55694,0.63419 -1.32324,0.95128 -2.2989,0.95128 -0.97976,0 -1.74808,-0.31709 -2.30506,-0.95128 -0.55284,-0.63824 -0.82929,-1.51634 -0.82929,-2.6343 0,-1.12201 0.27645,-2.00011 0.82929,-2.6343 0.55698,-0.63417 1.3253,-0.95126 2.30506,-0.95127"
+         id="path4229"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 767.10669,195.52934 1.12204,0 1.40253,5.32958 1.39642,-5.32958 1.32323,0 1.40253,5.32958 1.39642,-5.32958 1.12204,0 -1.78669,6.82967 -1.32328,0 -1.4696,-5.59789 -1.47567,5.59789 -1.32323,0 -1.78674,-6.82967"
+         id="path4231"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 783.04055,201.33456 0,3.62216 -1.1281,0 0,-9.42738 1.1281,0 0,1.03665 c 0.23581,-0.40652 0.53255,-0.70735 0.89031,-0.9025 0.3618,-0.19919 0.79274,-0.29878 1.29274,-0.29879 0.82934,1e-5 1.50212,0.32929 2.01842,0.98786 0.52034,0.65858 0.78053,1.52448 0.78053,2.59771 0,1.07324 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65858 -1.18908,0.98787 -2.01842,0.98787 -0.5,0 -0.93094,-0.0976 -1.29274,-0.2927 -0.35776,-0.1992 -0.6545,-0.50207 -0.89031,-0.90859 m 3.81731,-2.38429 c 0,-0.82525 -0.17076,-1.47162 -0.51222,-1.93913 -0.33742,-0.47157 -0.80289,-0.70736 -1.39642,-0.70736 -0.59352,0 -1.06106,0.23579 -1.40252,0.70736 -0.33742,0.46751 -0.50615,1.11388 -0.50615,1.93913 0,0.82526 0.16873,1.47367 0.50615,1.94524 0.34146,0.46751 0.809,0.70126 1.40252,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51222,-1.11998 0.51222,-1.94524"
+         id="path4233"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 793.83996,196.57818 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14637,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63421,0 -1.12204,0.20733 -1.4635,0.62199 -0.33742,0.41059 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.23577,-0.41465 0.5427,-0.72158 0.92075,-0.92078 0.3781,-0.20326 0.83747,-0.30489 1.37815,-0.3049 0.0772,1e-5 0.16258,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31097,0.0427 l 0.006,1.1525"
+         id="path4235"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 795.02908,195.52934 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42081 -1.12199,0 0,-1.42081"
+         id="path4237"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 803.4076,195.79155 0,1.04885 c -0.31708,-0.17481 -0.63623,-0.30489 -0.95735,-0.39027 -0.31713,-0.0894 -0.63825,-0.13415 -0.9635,-0.13416 -0.72769,1e-5 -1.29275,0.23173 -1.69523,0.69517 -0.40243,0.45938 -0.60367,1.10575 -0.60367,1.93913 0,0.83339 0.20124,1.4818 0.60367,1.94524 0.40248,0.45938 0.96754,0.68906 1.69523,0.68906 0.32525,0 0.64637,-0.0427 0.9635,-0.12805 0.32112,-0.0894 0.64027,-0.22156 0.95735,-0.39637 l 0,1.03665 c -0.31304,0.14635 -0.63825,0.25611 -0.97567,0.32928 -0.33333,0.0732 -0.68907,0.10977 -1.06713,0.10977 -1.02851,0 -1.84564,-0.32319 -2.45138,-0.96957 -0.60569,-0.64638 -0.90858,-1.51838 -0.90858,-2.61601 0,-1.11388 0.30491,-1.98994 0.91469,-2.6282 0.61387,-0.63824 1.45335,-0.95736 2.51846,-0.95737 0.34555,1e-5 0.68297,0.0366 1.01226,0.10976 0.32925,0.0691 0.64839,0.17481 0.95735,0.31709"
+         id="path4239"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 811.21293,198.66367 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.0001,0.60369 1.74404,0.60369 0.4309,0 0.84761,-0.0528 1.25004,-0.15854 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.85166,0.13415 -1.28664,0.13415 -1.08949,0 -1.9534,-0.31709 -2.59165,-0.95128 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17695,0.8903 0.5366,0.58946 0.80492,1.39236 0.80492,2.40867 m -1.122,-0.32929 c -0.008,-0.61385 -0.18094,-1.10371 -0.51832,-1.46959 -0.33337,-0.36587 -0.77649,-0.54881 -1.32938,-0.54882 -0.62603,1e-5 -1.1281,0.17685 -1.50615,0.53052 -0.37402,0.35369 -0.58949,0.85168 -0.64638,1.49399 l 4.00023,-0.006"
+         id="path4241"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+         d="m 813.21307,200.81014 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+         id="path4243"
+         inkscape:connector-curvature="0"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /></g></g><g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="DELETE bird before uploading"
+     style="display:inline" /><g
+     inkscape:groupmode="layer"
+     id="layer9"
+     inkscape:label="Your Design"><g
+       id="g21"
+       inkscape:label="0"
+       transform="matrix(0.8,0,0,0.8,-113.89464,-481.88053)"
+       style="stroke:#0000ff;stroke-opacity:1;stroke-width:0.03543307;stroke-miterlimit:4;stroke-dasharray:none"><path
+         inkscape:connector-curvature="0"
+         id="path23"
+         d="m 240.31326,720.37047 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path25"
+         d="m 240.31326,853.86055 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path27"
+         d="m 507.29378,853.86055 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 1 0 10.51176,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path29"
+         d="m 516.30882,655.63475 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path31"
+         d="m 568.78387,625.5946 0.55008,0.0196"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path33"
+         d="m 569.33395,625.61422 0.54307,0.062"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path35"
+         d="m 569.87702,625.67624 0.54307,0.11107"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path37"
+         d="m 570.42009,625.78731 0.53256,0.1447"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path39"
+         d="m 570.95265,625.93201 0.51504,0.1941"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path41"
+         d="m 571.46769,626.12611 0.49753,0.2309"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path43"
+         d="m 571.96522,626.35701 0.4765,0.26593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path45"
+         d="m 572.44172,626.62294 0.45898,0.30902"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path47"
+         d="m 572.9007,626.93196 0.43446,0.34231"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path49"
+         d="m 573.33516,627.27427 0.40642,0.37209"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path51"
+         d="m 573.74158,627.64636 0.37139,0.40538"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path53"
+         d="m 574.11297,628.05174 0.34337,0.43025"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path55"
+         d="m 574.45634,628.48199 0.30482,0.45828"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path57"
+         d="m 574.76116,628.94027 0.26978,0.47861"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path59"
+         d="m 575.03094,629.41888 0.22774,0.50173"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path61"
+         d="m 575.25868,629.92061 0.1927,0.51153"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path63"
+         d="m 575.45138,630.43214 0.14365,0.53151"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path65"
+         d="m 575.59503,630.96365 0.11212,0.54027"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path67"
+         d="m 575.70715,631.50392 0.0631,0.54623"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path69"
+         d="m 575.77022,632.05015 0.0175,0.55007"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path71"
+         d="m 575.78774,632.60022 0,288.00768"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path73"
+         d="m 575.78774,920.6079 -0.0175,0.54559"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path75"
+         d="m 575.77022,921.15349 -0.0631,0.55043"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path77"
+         d="m 575.70715,921.70392 -0.11212,0.53593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path79"
+         d="m 575.59503,922.23985 -0.14365,0.53592"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path81"
+         d="m 575.45138,922.77577 -0.1927,0.51182"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path83"
+         d="m 575.25868,923.28759 -0.22774,0.49731"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path85"
+         d="m 575.03094,923.7849 -0.26978,0.48281"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path87"
+         d="m 574.76116,924.26771 -0.30482,0.45868"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path89"
+         d="m 574.45634,924.72639 -0.34337,0.42971"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path91"
+         d="m 574.11297,925.1561 -0.37139,0.40557"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path93"
+         d="m 573.74158,925.56167 -0.40642,0.37177"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path95"
+         d="m 573.33516,925.93344 -0.43446,0.3428"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path97"
+         d="m 572.9007,926.27624 -0.45898,0.30418"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path99"
+         d="m 572.44172,926.58042 -0.4765,0.27038"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path101"
+         d="m 571.96522,926.8508 -0.49753,0.22693"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path103"
+         d="m 571.46769,927.07773 -0.51504,0.19312"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path105"
+         d="m 570.95265,927.27085 -0.53256,0.14968"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path107"
+         d="m 570.42009,927.42053 -0.54307,0.10622"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path109"
+         d="m 569.87702,927.52675 -0.54307,0.0628"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path111"
+         d="m 569.33395,927.58952 -0.54658,0.0241"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path113"
+         d="m 568.78737,927.61366 -393.47009,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path115"
+         d="m 175.31728,927.61366 -0.55043,-0.0241"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path117"
+         d="m 174.76685,927.58952 -0.54556,-0.0628"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path119"
+         d="m 174.22129,927.52675 -0.54076,-0.10622"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path121"
+         d="m 173.68053,927.42053 -0.53112,-0.14968"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path123"
+         d="m 173.14941,927.27085 -0.51179,-0.19312"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path125"
+         d="m 172.63762,927.07773 -0.50214,-0.22693"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path127"
+         d="m 172.13548,926.8508 -0.47798,-0.27038"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path129"
+         d="m 171.6575,926.58042 -0.45869,-0.30418"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path131"
+         d="m 171.19881,926.27624 -0.42971,-0.3428"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path133"
+         d="m 170.7691,925.93344 -0.40557,-0.37177"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path135"
+         d="m 170.36353,925.56167 -0.37177,-0.40557"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path137"
+         d="m 169.99176,925.1561 -0.3428,-0.42971"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path139"
+         d="m 169.64896,924.72639 -0.30901,-0.45868"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path141"
+         d="M 169.33995,924.26771 169.0744,923.7849"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path143"
+         d="m 169.0744,923.7849 -0.23175,-0.49731"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path145"
+         d="m 168.84265,923.28759 -0.19314,-0.51182"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path147"
+         d="m 168.64951,922.77577 -0.14484,-0.53592"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path149"
+         d="m 168.50467,922.23985 -0.11105,-0.53593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path151"
+         d="m 168.39362,921.70392 -0.0628,-0.55043"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path153"
+         d="m 168.33085,921.15349 -0.0241,-0.54559"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path155"
+         d="m 168.30671,920.6079 0.005,-288.00768"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path157"
+         d="m 168.31154,632.60022 0.0193,-0.55007"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path159"
+         d="m 168.33085,632.05015 0.0628,-0.54623"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path161"
+         d="m 168.39362,631.50392 0.11105,-0.54027"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path163"
+         d="m 168.50467,630.96365 0.14484,-0.53151"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path165"
+         d="m 168.64951,630.43214 0.19314,-0.51153"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path167"
+         d="m 168.84265,629.92061 0.23175,-0.50173"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path169"
+         d="m 169.0744,629.41888 0.26555,-0.47861"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path171"
+         d="m 169.33995,628.94027 0.30901,-0.45828"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path173"
+         d="m 169.64896,628.48199 0.3428,-0.43025"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path175"
+         d="m 169.99176,628.05174 0.37177,-0.40538"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path177"
+         d="m 170.36353,627.64636 0.40557,-0.37209"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path179"
+         d="m 170.7691,627.27427 0.42971,-0.34231"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path181"
+         d="m 171.19881,626.93196 0.45869,-0.30902"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path183"
+         d="m 171.6575,626.62294 0.47798,-0.26593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path185"
+         d="m 172.13548,626.35701 0.50214,-0.2309"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path187"
+         d="m 172.63762,626.12611 0.51179,-0.1941"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path189"
+         d="m 173.14941,625.93201 0.53112,-0.1447"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path191"
+         d="m 173.68053,625.78731 0.54076,-0.11107"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path193"
+         d="m 174.22129,625.67624 0.54556,-0.062"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path195"
+         d="m 174.76685,625.61422 0.55043,-0.0245"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path197"
+         d="m 175.31728,625.5897 393.46659,0.005"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path199"
+         d="m 177.15682,862.70795 0,2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path201"
+         d="m 177.15682,864.8035 -2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path203"
+         d="m 174.35646,864.8035 0,44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path205"
+         d="m 174.35646,909.65748 2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path207"
+         d="m 177.15682,909.65748 0,2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path209"
+         d="m 177.15682,911.75784 49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path211"
+         d="m 226.21168,911.75784 0,-2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path213"
+         d="m 226.21168,909.65748 2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path215"
+         d="m 229.01183,909.65748 0,-44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path217"
+         d="m 229.01183,864.8035 -2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path219"
+         d="m 226.21168,864.8035 0,-2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path221"
+         d="m 226.21168,862.70795 -49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path223"
+         d="m 243.90214,862.70795 0,2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path225"
+         d="m 243.90214,864.8035 -2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path227"
+         d="m 241.10164,864.8035 0,44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path229"
+         d="m 241.10164,909.65748 2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path231"
+         d="m 243.90214,909.65748 0,2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path233"
+         d="m 243.90214,911.75784 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path235"
+         d="m 292.9562,911.75784 0,-2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path237"
+         d="m 292.9562,909.65748 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path239"
+         d="m 295.75704,909.65748 0,-44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path241"
+         d="m 295.75704,864.8035 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path243"
+         d="m 292.9562,864.8035 0,-2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path245"
+         d="m 292.9562,862.70795 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path247"
+         d="m 310.64736,862.70795 0,2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path249"
+         d="m 310.64736,864.8035 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path251"
+         d="m 307.84651,864.8035 0,44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path253"
+         d="m 307.84651,909.65748 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path255"
+         d="m 310.64736,909.65748 0,2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path257"
+         d="m 310.64736,911.75784 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path259"
+         d="m 359.70141,911.75784 0,-2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path261"
+         d="m 359.70141,909.65748 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path263"
+         d="m 362.50226,909.65748 0,-44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path265"
+         d="m 362.50226,864.8035 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path267"
+         d="m 359.70141,864.8035 0,-2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path269"
+         d="m 359.70141,862.70795 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path271"
+         d="m 377.39257,862.70795 0,2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path273"
+         d="m 377.39257,864.8035 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path275"
+         d="m 374.59173,864.8035 0,44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path277"
+         d="m 374.59173,909.65748 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path279"
+         d="m 377.39257,909.65748 0,2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path281"
+         d="m 377.39257,911.75784 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path283"
+         d="m 426.44663,911.75784 0,-2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path285"
+         d="m 426.44663,909.65748 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path287"
+         d="m 429.24747,909.65748 0,-44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path289"
+         d="m 429.24747,864.8035 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path291"
+         d="m 426.44663,864.8035 0,-2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path293"
+         d="m 426.44663,862.70795 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path295"
+         d="m 444.13779,862.70795 0,2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path297"
+         d="m 444.13779,864.8035 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path299"
+         d="m 441.33694,864.8035 0,44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path301"
+         d="m 441.33694,909.65748 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path303"
+         d="m 444.13779,909.65748 0,2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path305"
+         d="m 444.13779,911.75784 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path307"
+         d="m 493.19184,911.75784 0,-2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path309"
+         d="m 493.19184,909.65748 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path311"
+         d="m 495.99269,909.65748 0,-44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path313"
+         d="m 495.99269,864.8035 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path315"
+         d="m 493.19184,864.8035 0,-2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path317"
+         d="m 493.19184,862.70795 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path319"
+         d="m 510.88301,862.70795 0,2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path321"
+         d="m 510.88301,864.8035 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path323"
+         d="m 508.08216,864.8035 0,44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path325"
+         d="m 508.08216,909.65748 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path327"
+         d="m 510.88301,909.65748 0,2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path329"
+         d="m 510.88301,911.75784 49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path331"
+         d="m 559.93356,911.75784 0,-2.10036"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path333"
+         d="m 559.93356,909.65748 2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path335"
+         d="m 562.73651,909.65748 0,-44.85398"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path337"
+         d="m 562.73651,864.8035 -2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path339"
+         d="m 559.93356,864.8035 0,-2.09555"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path341"
+         d="m 559.93356,862.70795 -49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path343"
+         d="m 177.15682,795.96308 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path345"
+         d="m 177.15682,798.06284 -2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path347"
+         d="m 174.35646,798.06284 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path349"
+         d="m 174.35646,842.91212 2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path351"
+         d="m 177.15682,842.91212 0,2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path353"
+         d="m 177.15682,845.01258 49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path355"
+         d="m 226.21168,845.01258 0,-2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path357"
+         d="m 226.21168,842.91212 2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path359"
+         d="m 229.01183,842.91212 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path361"
+         d="m 229.01183,798.06284 -2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path363"
+         d="m 226.21168,798.06284 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path365"
+         d="m 226.21168,795.96308 -49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path367"
+         d="m 243.90214,795.96308 0,2.57589"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path369"
+         d="m 243.90214,798.53897 -2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path371"
+         d="m 241.10164,798.53897 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path373"
+         d="m 241.10164,843.38825 2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path375"
+         d="m 243.90214,843.38825 0,1.62969"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path377"
+         d="m 243.90214,845.01794 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path379"
+         d="m 292.9562,845.01794 0,-2.10045"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path381"
+         d="m 292.9562,842.91749 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path383"
+         d="m 295.75704,842.91749 0,-44.85465"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path385"
+         d="m 295.75704,798.06284 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path387"
+         d="m 292.9562,798.06284 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path389"
+         d="m 292.9562,795.96308 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path391"
+         d="m 310.64736,795.96308 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path393"
+         d="m 310.64736,798.06284 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path395"
+         d="m 307.84651,798.06284 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path397"
+         d="m 307.84651,842.91212 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path399"
+         d="m 310.64736,842.91212 0,2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path401"
+         d="m 310.64736,845.01258 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path403"
+         d="m 359.70141,845.01258 0,-2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path405"
+         d="m 359.70141,842.91212 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path407"
+         d="m 362.50226,842.91212 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path409"
+         d="m 362.50226,798.06284 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path411"
+         d="m 359.70141,798.06284 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path413"
+         d="m 359.70141,795.96308 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path415"
+         d="m 377.39257,795.96308 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path417"
+         d="m 377.39257,798.06284 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path419"
+         d="m 374.59173,798.06284 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path421"
+         d="m 374.59173,842.91212 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path423"
+         d="m 377.39257,842.91212 0,2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path425"
+         d="m 377.39257,845.01258 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path427"
+         d="m 426.44663,845.01258 0,-2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path429"
+         d="m 426.44663,842.91212 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path431"
+         d="m 429.24747,842.91212 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path433"
+         d="m 429.24747,798.06284 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path435"
+         d="m 426.44663,798.06284 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path437"
+         d="m 426.44663,795.96308 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path439"
+         d="m 444.13779,795.96308 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path441"
+         d="m 444.13779,798.06284 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path443"
+         d="m 441.33694,798.06284 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path445"
+         d="m 441.33694,842.91212 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path447"
+         d="m 444.13779,842.91212 0,2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path449"
+         d="m 444.13779,845.01258 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path451"
+         d="m 493.19184,845.01258 0,-2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path453"
+         d="m 493.19184,842.91212 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path455"
+         d="m 495.99269,842.91212 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path457"
+         d="m 495.99269,798.06284 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path459"
+         d="m 493.19184,798.06284 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path461"
+         d="m 493.19184,795.96308 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path463"
+         d="m 510.88301,795.96308 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path465"
+         d="m 510.88301,798.06284 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path467"
+         d="m 508.08216,798.06284 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path469"
+         d="m 508.08216,842.91212 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path471"
+         d="m 510.88301,842.91212 0,2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path473"
+         d="m 510.88301,845.01258 49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path475"
+         d="m 559.93356,845.01258 0,-2.10046"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path477"
+         d="m 559.93356,842.91212 2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path479"
+         d="m 562.73651,842.91212 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path481"
+         d="m 562.73651,798.06284 -2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path483"
+         d="m 559.93356,798.06284 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path485"
+         d="m 559.93356,795.96308 -49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path487"
+         d="m 177.15682,729.21787 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path489"
+         d="m 177.15682,731.31763 -2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path491"
+         d="m 174.35646,731.31763 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path493"
+         d="m 174.35646,776.16691 2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path495"
+         d="m 177.15682,776.16691 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path497"
+         d="m 177.15682,778.26667 49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path499"
+         d="m 226.21168,778.26667 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path501"
+         d="m 226.21168,776.16691 2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path503"
+         d="m 229.01183,776.16691 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path505"
+         d="m 229.01183,731.31763 -2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path507"
+         d="m 226.21168,731.31763 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path509"
+         d="m 226.21168,729.21787 -49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path511"
+         d="m 243.90214,729.21787 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path513"
+         d="m 243.90214,731.31763 -2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path515"
+         d="m 241.10164,731.31763 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path517"
+         d="m 241.10164,776.16691 2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path519"
+         d="m 243.90214,776.16691 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path521"
+         d="m 243.90214,778.26667 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path523"
+         d="m 292.9562,778.26667 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path525"
+         d="m 292.9562,776.16691 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path527"
+         d="m 295.75704,776.16691 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path529"
+         d="m 295.75704,731.31763 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path531"
+         d="m 292.9562,731.31763 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path533"
+         d="m 292.9562,729.21787 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path535"
+         d="m 310.64736,729.21787 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path537"
+         d="m 310.64736,731.31763 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path539"
+         d="m 307.84651,731.31763 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path541"
+         d="m 307.84651,776.16691 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path543"
+         d="m 310.64736,776.16691 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path545"
+         d="m 310.64736,778.26667 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path547"
+         d="m 359.70141,778.26667 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path549"
+         d="m 359.70141,776.16691 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path551"
+         d="m 362.50226,776.16691 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path553"
+         d="m 362.50226,731.31763 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path555"
+         d="m 359.70141,731.31763 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path557"
+         d="m 359.70141,729.21787 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path559"
+         d="m 377.39257,729.21787 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path561"
+         d="m 377.39257,731.31763 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path563"
+         d="m 374.59173,731.31763 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path565"
+         d="m 374.59173,776.16691 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path567"
+         d="m 377.39257,776.16691 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path569"
+         d="m 377.39257,778.26667 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path571"
+         d="m 426.44663,778.26667 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path573"
+         d="m 426.44663,776.16691 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path575"
+         d="m 429.24747,776.16691 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path577"
+         d="m 429.24747,731.31763 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path579"
+         d="m 426.44663,731.31763 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path581"
+         d="m 426.44663,729.21787 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path583"
+         d="m 444.13779,729.21787 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path585"
+         d="m 444.13779,731.31763 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path587"
+         d="m 441.33694,731.31763 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path589"
+         d="m 441.33694,776.16691 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path591"
+         d="m 444.13779,776.16691 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path593"
+         d="m 444.13779,778.26667 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path595"
+         d="m 493.19184,778.26667 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path597"
+         d="m 493.19184,776.16691 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path599"
+         d="m 495.99269,776.16691 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path601"
+         d="m 495.99269,731.31763 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path603"
+         d="m 493.19184,731.31763 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path605"
+         d="m 493.19184,729.21787 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path607"
+         d="m 510.88301,729.21787 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path609"
+         d="m 510.88301,731.31763 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path611"
+         d="m 508.08216,731.31763 0,44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path613"
+         d="m 508.08216,776.16691 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path615"
+         d="m 510.88301,776.16691 0,2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path617"
+         d="m 510.88301,778.26667 49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path619"
+         d="m 559.93356,778.26667 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path621"
+         d="m 559.93356,776.16691 2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path623"
+         d="m 562.73651,776.16691 0,-44.84928"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path625"
+         d="m 562.73651,731.31763 -2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path627"
+         d="m 559.93356,731.31763 0,-2.09976"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path629"
+         d="m 559.93356,729.21787 -49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path631"
+         d="m 177.15682,662.46659 0,2.10582"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path633"
+         d="m 177.15682,664.57241 -2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path635"
+         d="m 174.35646,664.57241 0,44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path637"
+         d="m 174.35646,709.41679 2.80036,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path639"
+         d="m 177.15682,709.41679 0,2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path641"
+         d="m 177.15682,711.52145 49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path643"
+         d="m 226.21168,711.52145 0,-2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path645"
+         d="m 226.21168,709.41679 2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path647"
+         d="m 229.01183,709.41679 0,-44.84519"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path649"
+         d="m 229.01183,664.5716 -2.80015,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path651"
+         d="m 226.21168,664.5716 0,-2.10501"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path653"
+         d="m 226.21168,662.46659 -49.05486,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path655"
+         d="m 243.90214,662.46659 0,2.58538"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path657"
+         d="m 243.90214,665.05197 -2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path659"
+         d="m 241.10164,665.05197 0,44.84437"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path661"
+         d="m 241.10164,709.89634 2.8005,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path663"
+         d="m 243.90214,709.89634 0,1.62511"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path665"
+         d="m 243.90214,711.52145 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path667"
+         d="m 292.9562,711.52145 0,-2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path669"
+         d="m 292.9562,709.41679 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path671"
+         d="m 295.75704,709.41679 0,-44.84519"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path673"
+         d="m 295.75704,664.5716 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path675"
+         d="m 292.9562,664.5716 0,-2.10501"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path677"
+         d="m 292.9562,662.46659 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path679"
+         d="m 310.64736,662.46739 0,2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path681"
+         d="m 310.64736,664.57241 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path683"
+         d="m 307.84651,664.57241 0,44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path685"
+         d="m 307.84651,709.41679 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path687"
+         d="m 310.64736,709.41679 0,2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path689"
+         d="m 310.64736,711.52145 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path691"
+         d="m 359.70141,711.52145 0,-2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path693"
+         d="m 359.70141,709.41679 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path695"
+         d="m 362.50226,709.41679 0,-44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path697"
+         d="m 362.50226,664.57241 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path699"
+         d="m 359.70141,664.57241 0,-2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path701"
+         d="m 359.70141,662.46739 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path703"
+         d="m 377.39257,662.46739 0,2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path705"
+         d="m 377.39257,664.57241 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path707"
+         d="m 374.59173,664.57241 0,44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path709"
+         d="m 374.59173,709.41679 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path711"
+         d="m 377.39257,709.41679 0,2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path713"
+         d="m 377.39257,711.52145 49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path715"
+         d="m 426.44663,711.52145 0,-2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path717"
+         d="m 426.44663,709.41679 2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path719"
+         d="m 429.24747,709.41679 0,-44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path721"
+         d="m 429.24747,664.57241 -2.80084,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path723"
+         d="m 426.44663,664.57241 0,-2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path725"
+         d="m 426.44663,662.46739 -49.05406,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path727"
+         d="m 444.13779,662.46739 0,2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path729"
+         d="m 444.13779,664.57241 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path731"
+         d="m 441.33694,664.57241 0,44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path733"
+         d="m 441.33694,709.41679 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path735"
+         d="m 444.13779,709.41679 0,2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path737"
+         d="m 444.13779,711.52145 49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path739"
+         d="m 493.19184,711.52145 0,-2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path741"
+         d="m 493.19184,709.41679 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path743"
+         d="m 495.99269,709.41679 0,-44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path745"
+         d="m 495.99269,664.57241 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path747"
+         d="m 493.19184,664.57241 0,-2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path749"
+         d="m 493.19184,662.46739 -49.05405,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path751"
+         d="m 510.88206,662.46739 0,2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path753"
+         d="m 510.88206,664.57241 -2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path755"
+         d="m 508.08121,664.57241 0,44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path757"
+         d="m 508.08121,709.41679 2.80085,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path759"
+         d="m 510.88206,709.41679 0,2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path761"
+         d="m 510.88206,711.52145 49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path763"
+         d="m 559.93261,711.52145 0,-2.10466"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path765"
+         d="m 559.93261,709.41679 2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path767"
+         d="m 562.73556,709.41679 0,-44.84438"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path769"
+         d="m 562.73556,664.57241 -2.80295,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path771"
+         d="m 559.93261,664.57241 0,-2.10502"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path773"
+         d="m 559.93261,662.46739 -49.05055,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path27-0"
+         d="m 441.39305,853.88036 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 0 0 10.51176,0 z"
+         style="display:inline;fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
+       id="g21-5"
+       inkscape:label="0"
+       transform="matrix(0.8,0,0,0.8,-113.89463,-231.54592)"
+       style="stroke:#0000ff;stroke-opacity:1;stroke-width:0.35433071;stroke-miterlimit:4;stroke-dasharray:none"><path
+         inkscape:connector-curvature="0"
+         id="path23-4"
+         d="m 240.31326,720.37047 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path25-4"
+         d="m 240.31326,853.86055 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path27-4"
+         d="m 507.29378,853.86055 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 1 0 10.51176,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path29-1"
+         d="m 516.30882,655.63475 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path31-6"
+         d="m 568.78387,625.5946 0.55008,0.0196"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path33-2"
+         d="m 569.33395,625.61422 0.54307,0.062"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path35-0"
+         d="m 569.87702,625.67624 0.54307,0.11107"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path37-1"
+         d="m 570.42009,625.78731 0.53256,0.1447"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path39-6"
+         d="m 570.95265,625.93201 0.51504,0.1941"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path41-9"
+         d="m 571.46769,626.12611 0.49753,0.2309"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path43-3"
+         d="m 571.96522,626.35701 0.4765,0.26593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path45-8"
+         d="m 572.44172,626.62294 0.45898,0.30902"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path47-2"
+         d="m 572.9007,626.93196 0.43446,0.34231"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path49-0"
+         d="m 573.33516,627.27427 0.40642,0.37209"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path51-9"
+         d="m 573.74158,627.64636 0.37139,0.40538"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path53-1"
+         d="m 574.11297,628.05174 0.34337,0.43025"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path55-7"
+         d="m 574.45634,628.48199 0.30482,0.45828"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path57-9"
+         d="m 574.76116,628.94027 0.26978,0.47861"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path59-0"
+         d="m 575.03094,629.41888 0.22774,0.50173"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path61-7"
+         d="m 575.25868,629.92061 0.1927,0.51153"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path63-1"
+         d="m 575.45138,630.43214 0.14365,0.53151"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path65-6"
+         d="m 575.59503,630.96365 0.11212,0.54027"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path67-0"
+         d="m 575.70715,631.50392 0.0631,0.54623"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path69-9"
+         d="m 575.77022,632.05015 0.0175,0.55007"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path71-2"
+         d="m 575.78774,632.60022 0,288.00768"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path73-7"
+         d="m 575.78774,920.6079 -0.0175,0.54559"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path75-4"
+         d="m 575.77022,921.15349 -0.0631,0.55043"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path77-6"
+         d="m 575.70715,921.70392 -0.11212,0.53593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path79-8"
+         d="m 575.59503,922.23985 -0.14365,0.53592"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path81-0"
+         d="m 575.45138,922.77577 -0.1927,0.51182"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path83-9"
+         d="m 575.25868,923.28759 -0.22774,0.49731"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path85-7"
+         d="m 575.03094,923.7849 -0.26978,0.48281"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path87-0"
+         d="m 574.76116,924.26771 -0.30482,0.45868"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path89-8"
+         d="m 574.45634,924.72639 -0.34337,0.42971"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path91-1"
+         d="m 574.11297,925.1561 -0.37139,0.40557"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path93-3"
+         d="m 573.74158,925.56167 -0.40642,0.37177"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path95-0"
+         d="m 573.33516,925.93344 -0.43446,0.3428"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path97-2"
+         d="m 572.9007,926.27624 -0.45898,0.30418"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path99-9"
+         d="m 572.44172,926.58042 -0.4765,0.27038"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path101-0"
+         d="m 571.96522,926.8508 -0.49753,0.22693"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path103-6"
+         d="m 571.46769,927.07773 -0.51504,0.19312"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path105-0"
+         d="m 570.95265,927.27085 -0.53256,0.14968"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path107-6"
+         d="m 570.42009,927.42053 -0.54307,0.10622"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path109-4"
+         d="m 569.87702,927.52675 -0.54307,0.0628"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path111-4"
+         d="m 569.33395,927.58952 -0.54658,0.0241"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path113-0"
+         d="m 568.78737,927.61366 -393.47009,0"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path115-3"
+         d="m 175.31728,927.61366 -0.55043,-0.0241"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path117-5"
+         d="m 174.76685,927.58952 -0.54556,-0.0628"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path119-9"
+         d="m 174.22129,927.52675 -0.54076,-0.10622"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path121-7"
+         d="m 173.68053,927.42053 -0.53112,-0.14968"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path123-5"
+         d="m 173.14941,927.27085 -0.51179,-0.19312"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path125-6"
+         d="m 172.63762,927.07773 -0.50214,-0.22693"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path127-2"
+         d="m 172.13548,926.8508 -0.47798,-0.27038"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path129-0"
+         d="m 171.6575,926.58042 -0.45869,-0.30418"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path131-4"
+         d="m 171.19881,926.27624 -0.42971,-0.3428"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path133-8"
+         d="m 170.7691,925.93344 -0.40557,-0.37177"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path135-3"
+         d="m 170.36353,925.56167 -0.37177,-0.40557"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path137-2"
+         d="m 169.99176,925.1561 -0.3428,-0.42971"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path139-1"
+         d="m 169.64896,924.72639 -0.30901,-0.45868"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path141-6"
+         d="M 169.33995,924.26771 169.0744,923.7849"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path143-7"
+         d="m 169.0744,923.7849 -0.23175,-0.49731"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path145-9"
+         d="m 168.84265,923.28759 -0.19314,-0.51182"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path147-5"
+         d="m 168.64951,922.77577 -0.14484,-0.53592"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path149-8"
+         d="m 168.50467,922.23985 -0.11105,-0.53593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path151-7"
+         d="m 168.39362,921.70392 -0.0628,-0.55043"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path153-0"
+         d="m 168.33085,921.15349 -0.0241,-0.54559"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path155-2"
+         d="m 168.30671,920.6079 0.005,-288.00768"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path157-8"
+         d="m 168.31154,632.60022 0.0193,-0.55007"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path159-7"
+         d="m 168.33085,632.05015 0.0628,-0.54623"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path161-9"
+         d="m 168.39362,631.50392 0.11105,-0.54027"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path163-8"
+         d="m 168.50467,630.96365 0.14484,-0.53151"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path165-3"
+         d="m 168.64951,630.43214 0.19314,-0.51153"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path167-0"
+         d="m 168.84265,629.92061 0.23175,-0.50173"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path169-2"
+         d="m 169.0744,629.41888 0.26555,-0.47861"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path171-4"
+         d="m 169.33995,628.94027 0.30901,-0.45828"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path173-2"
+         d="m 169.64896,628.48199 0.3428,-0.43025"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path175-2"
+         d="m 169.99176,628.05174 0.37177,-0.40538"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path177-8"
+         d="m 170.36353,627.64636 0.40557,-0.37209"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path179-1"
+         d="m 170.7691,627.27427 0.42971,-0.34231"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path181-5"
+         d="m 171.19881,626.93196 0.45869,-0.30902"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path183-8"
+         d="m 171.6575,626.62294 0.47798,-0.26593"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path185-5"
+         d="m 172.13548,626.35701 0.50214,-0.2309"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path187-6"
+         d="m 172.63762,626.12611 0.51179,-0.1941"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path189-8"
+         d="m 173.14941,625.93201 0.53112,-0.1447"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path191-8"
+         d="m 173.68053,625.78731 0.54076,-0.11107"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path193-7"
+         d="m 174.22129,625.67624 0.54556,-0.062"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path195-9"
+         d="m 174.76685,625.61422 0.55043,-0.0245"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path197-7"
+         d="m 175.31728,625.5897 393.46659,0.005"
+         style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+         inkscape:connector-curvature="0"
+         id="path27-4-7"
+         d="m 439.74973,853.92004 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 0 0 10.51176,0 z"
+         style="display:inline;fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></g></svg>
\ No newline at end of file
index 0d2d94b67260497ea07446db5cac2aa5dab8af26..6f1f71f5f88dd00da5cc59a32ef6b8669f019747 100644 (file)
@@ -42,10 +42,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 [_QWERTY] = KEYMAP( \
-  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
-  KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
-  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+  KC_LCTL, ADJUST, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  MT(MOD_LSFT, KC_SPC),  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
 ),
 
 /* Colemak
@@ -83,41 +83,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
   ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
 ),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |     |    \  |  |   |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = KEYMAP( \
-  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+[3] = KEYMAP( \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
   KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
   _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
-  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+  _______, _______, _______, _______, _______, KC_BSPC, MT(MOD_LSFT, KC_BSPC), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
 ),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = KEYMAP( \
-  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+[4] = KEYMAP( \
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, \
   KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
   _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______, \
-  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+  _______, _______, _______, _______, _______, KC_ENT, MT(MOD_LSFT, KC_ENT), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
 ),
 
 /* Adjust (Lower + Raise)
@@ -134,11 +110,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [_ADJUST] =  KEYMAP( \
   _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
   _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
-  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, _______, _______, _______, \
   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
 )
-
-
 };
 
 #ifdef AUDIO_ENABLE
diff --git a/keyboards/lets_split/keymaps/i2c/config.h b/keyboards/lets_split/keymaps/i2c/config.h
new file mode 100644 (file)
index 0000000..72e5ae6
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x3060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Wootpatoot
+#define PRODUCT         Lets Split
+#define DESCRIPTION     A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+#define CATERINA_BOOTLOADER
+
+#define USE_I2C
+
+// Use serial if not using I2C
+#ifndef USE_I2C
+#  define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/lets_split/keymaps/i2c/keymap.c b/keyboards/lets_split/keymaps/i2c/keymap.c
new file mode 100644 (file)
index 0000000..0d2d94b
--- /dev/null
@@ -0,0 +1,214 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP( \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP( \
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \
+  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = KEYMAP( \
+  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \
+  KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |     |    \  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = KEYMAP( \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = KEYMAP( \
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  KEYMAP( \
+  _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/serial/config.h b/keyboards/lets_split/keymaps/serial/config.h
new file mode 100644 (file)
index 0000000..b0ad522
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x3060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Wootpatoot
+#define PRODUCT         Lets Split
+#define DESCRIPTION     A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+#define CATERINA_BOOTLOADER
+
+// #define USE_I2C
+
+// Use serial if not using I2C
+#ifndef USE_I2C
+#  define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/lets_split/keymaps/serial/keymap.c b/keyboards/lets_split/keymaps/serial/keymap.c
new file mode 100644 (file)
index 0000000..0d2d94b
--- /dev/null
@@ -0,0 +1,214 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP( \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP( \
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \
+  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = KEYMAP( \
+  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \
+  KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |     |    \  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = KEYMAP( \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = KEYMAP( \
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  KEYMAP( \
+  _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
\ No newline at end of file
index 574c116a75463358cb61b7df14e55729b61223fa..117b727a85543f4d2abdfeb6df3fad9902c05ffb 100644 (file)
@@ -1,30 +1 @@
-#include "lets_split.h"
-
-#ifdef AUDIO_ENABLE
-    float tone_startup[][2] = SONG(STARTUP_SOUND);
-    float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
-#endif
-
-void matrix_init_kb(void) {
-
-    #ifdef AUDIO_ENABLE
-        _delay_ms(20); // gets rid of tick
-        PLAY_NOTE_ARRAY(tone_startup, false, 0);
-    #endif
-
-    // // green led on
-    // DDRD |= (1<<5);
-    // PORTD &= ~(1<<5);
-
-    // // orange led on
-    // DDRB |= (1<<0);
-    // PORTB &= ~(1<<0);
-
-       matrix_init_user();
-};
-
-void shutdown_user(void) {
-    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
-    _delay_ms(150);
-    stop_all_notes();
-}
+#include "lets_split.h"
\ No newline at end of file
index fe7ae076792f0001bc0184696cc27f15482929a7..2cdfb061f2db332e82faed77b6d6d85a2615c2d2 100644 (file)
@@ -1,25 +1,13 @@
 #ifndef LETS_SPLIT_H
 #define LETS_SPLIT_H
 
-#include "quantum.h"
-
-void promicro_bootloader_jmp(bool program);
+#ifdef SUBPROJECT_rev1
+    #include "rev1.h"
+#endif
+#ifdef SUBPROJECT_rev2
+    #include "rev2.h"
+#endif
 
-#define KEYMAP( \
-       k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
-       k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
-       k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
-       k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
-       ) \
-       { \
-               { k00, k01, k02, k03, k04, k05 }, \
-               { k10, k11, k12, k13, k14, k15 }, \
-               { k20, k21, k22, k23, k24, k25 }, \
-               { k30, k31, k32, k33, k34, k35 }, \
-               { k40, k41, k42, k43, k44, k45 }, \
-               { k50, k51, k52, k53, k54, k55 }, \
-               { k60, k61, k62, k63, k64, k65 }, \
-               { k70, k71, k72, k73, k74, k75 } \
-       }
+#include "quantum.h"
 
 #endif
\ No newline at end of file
index 1d768c59b32ed8e4c53a9ccf9d122fa05b28f7a4..13896900421f0654f29e75f46f9eeddc22ea1015 100644 (file)
@@ -28,14 +28,18 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "debug.h"
 #include "util.h"
 #include "matrix.h"
-#include "i2c.h"
-#include "serial.h"
 #include "split_util.h"
 #include "pro_micro.h"
 #include "config.h"
 
+#ifdef USE_I2C
+#  include "i2c.h"
+#else // USE_SERIAL
+#  include "serial.h"
+#endif
+
 #ifndef DEBOUNCE
-#   define DEBOUNCE    5
+#  define DEBOUNCE     5
 #endif
 
 #define ERROR_DISCONNECT_COUNT 5
@@ -145,6 +149,8 @@ uint8_t _matrix_scan(void)
     return 1;
 }
 
+#ifdef USE_I2C
+
 // Get rows from other half over i2c
 int i2c_transaction(void) {
     int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
@@ -176,7 +182,8 @@ i2c_error: // the cable is disconnceted, or something else went wrong
     return 0;
 }
 
-#ifndef USE_I2C
+#else // USE_SERIAL
+
 int serial_transaction(void) {
     int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
 
@@ -199,7 +206,7 @@ uint8_t matrix_scan(void)
 
 #ifdef USE_I2C
     if( i2c_transaction() ) {
-#else
+#else // USE_SERIAL
     if( serial_transaction() ) {
 #endif
         // turn on the indicator led when halves are disconnected
@@ -235,7 +242,7 @@ void matrix_slave_scan(void) {
         /* i2c_slave_buffer[i] = matrix[offset+i]; */
         i2c_slave_buffer[i] = matrix[offset+i];
     }
-#else
+#else // USE_SERIAL
     for (int i = 0; i < ROWS_PER_HAND; ++i) {
         serial_slave_buffer[i] = matrix[offset+i];
     }
@@ -290,7 +297,7 @@ static void  init_cols(void)
 static matrix_row_t read_cols(void)
 {
     matrix_row_t result = 0;
-    for(int x = 0; x < MATRIX_COLS; x++) {     
+    for(int x = 0; x < MATRIX_COLS; x++) {
         result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
     }
     return result;
@@ -298,7 +305,7 @@ static matrix_row_t read_cols(void)
 
 static void unselect_rows(void)
 {
-    for(int x = 0; x < ROWS_PER_HAND; x++) { 
+    for(int x = 0; x < ROWS_PER_HAND; x++) {
         _SFR_IO8((row_pins[x] >> 4) + 1) &=  ~_BV(row_pins[x] & 0xF);
         _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
     }
index 09e219b7b172a053f4b6e20bb82f2b3505edd2a3..f9e7ed75d9d5b6e878d4b279d5f23a5771329412 100644 (file)
@@ -111,18 +111,18 @@ static const uint8_t SCK  = 15;
 
 // Mapping of analog pins as digital I/O
 // A6-A11 share with digital pins
-static const uint8_t A0 = 18;
-static const uint8_t A1 = 19;
-static const uint8_t A2 = 20;
-static const uint8_t A3 = 21;
-static const uint8_t A4 = 22;
-static const uint8_t A5 = 23;
-static const uint8_t A6 = 24;   // D4
-static const uint8_t A7 = 25;   // D6
-static const uint8_t A8 = 26;   // D8
-static const uint8_t A9 = 27;   // D9
-static const uint8_t A10 = 28;  // D10
-static const uint8_t A11 = 29;  // D12
+static const uint8_t ADC0 = 18;
+static const uint8_t ADC1 = 19;
+static const uint8_t ADC2 = 20;
+static const uint8_t ADC3 = 21;
+static const uint8_t ADC4 = 22;
+static const uint8_t ADC5 = 23;
+static const uint8_t ADC6 = 24;   // D4
+static const uint8_t ADC7 = 25;   // D6
+static const uint8_t ADC8 = 26;   // D8
+static const uint8_t ADC9 = 27;   // D9
+static const uint8_t ADC10 = 28;  // D10
+static const uint8_t ADC11 = 29;  // D12
 
 #define digitalPinToPCICR(p)    ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
 #define digitalPinToPCICRbit(p) 0
@@ -220,26 +220,26 @@ const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
     PC, // D5 - PC6
     PD, // D6 - PD7
     PE, // D7 - PE6
-    
+
     PB, // D8 - PB4
     PB, // D9 - PB5
     PB, // D10 - PB6
     PB, // D11 - PB7
     PD, // D12 - PD6
     PC, // D13 - PC7
-    
+
     PB, // D14 - MISO - PB3
     PB, // D15 - SCK - PB1
     PB, // D16 - MOSI - PB2
     PB, // D17 - SS - PB0
-    
+
     PF, // D18 - A0 - PF7
     PF, // D19 - A1 - PF6
     PF, // D20 - A2 - PF5
     PF, // D21 - A3 - PF4
     PF, // D22 - A4 - PF1
     PF, // D23 - A5 - PF0
-    
+
     PD, // D24 - PD5
     PD, // D25 / D6 - A7 - PD7
     PB, // D26 / D8 - A8 - PB4
@@ -257,26 +257,26 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
     _BV(6), // D5 - PC6
     _BV(7), // D6 - PD7
     _BV(6), // D7 - PE6
-    
+
     _BV(4), // D8 - PB4
     _BV(5), // D9 - PB5
     _BV(6), // D10 - PB6
     _BV(7), // D11 - PB7
     _BV(6), // D12 - PD6
     _BV(7), // D13 - PC7
-    
+
     _BV(3), // D14 - MISO - PB3
     _BV(1), // D15 - SCK - PB1
     _BV(2), // D16 - MOSI - PB2
     _BV(0), // D17 - SS - PB0
-    
+
     _BV(7), // D18 - A0 - PF7
     _BV(6), // D19 - A1 - PF6
     _BV(5), // D20 - A2 - PF5
     _BV(4), // D21 - A3 - PF4
     _BV(1), // D22 - A4 - PF1
     _BV(0), // D23 - A5 - PF0
-    
+
     _BV(5), // D24 - PD5
     _BV(7), // D25 / D6 - A7 - PD7
     _BV(4), // D26 / D8 - A8 - PB4
@@ -286,24 +286,24 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
 };
 
 const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
-    NOT_ON_TIMER,   
+    NOT_ON_TIMER,
     NOT_ON_TIMER,
     NOT_ON_TIMER,
     TIMER0B,        /* 3 */
     NOT_ON_TIMER,
     TIMER3A,        /* 5 */
     TIMER4D,        /* 6 */
-    NOT_ON_TIMER,   
-    
-    NOT_ON_TIMER,   
+    NOT_ON_TIMER,
+
+    NOT_ON_TIMER,
     TIMER1A,        /* 9 */
     TIMER1B,        /* 10 */
     TIMER0A,        /* 11 */
-    
-    NOT_ON_TIMER,   
+
+    NOT_ON_TIMER,
     TIMER4A,        /* 13 */
-    
-    NOT_ON_TIMER,   
+
+    NOT_ON_TIMER,
     NOT_ON_TIMER,
     NOT_ON_TIMER,
     NOT_ON_TIMER,
@@ -324,11 +324,11 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
 
 const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
     7,  // A0               PF7                 ADC7
-    6,  // A1               PF6                 ADC6    
-    5,  // A2               PF5                 ADC5    
+    6,  // A1               PF6                 ADC6
+    5,  // A2               PF5                 ADC5
     4,  // A3               PF4                 ADC4
-    1,  // A4               PF1                 ADC1    
-    0,  // A5               PF0                 ADC0    
+    1,  // A4               PF1                 ADC1
+    0,  // A5               PF0                 ADC0
     8,  // A6       D4      PD4                 ADC8
     10, // A7       D6      PD7                 ADC10
     11, // A8       D8      PB4                 ADC11
index 73fdb0f789d5352cb4f82348e8c23c4c2b9a0e11..6e296737a23c350f44a94857248ecf32c5493ecb 100644 (file)
@@ -100,3 +100,16 @@ half to a computer by USB the keyboard will use QWERTY and Colemak when the
 right half is connected.
 
 
+Notes on Using Pro Micro 3.3V
+-----------------------------
+
+Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects
+the frequency on the 3.3V board.
+
+Also, if the slave board is producing weird characters in certain columns,
+update the following line in `matrix.c` to the following:
+
+```
+// _delay_us(30);  // without this wait read unstable value.
+_delay_us(300);  // without this wait read unstable value.
+```
diff --git a/keyboards/lets_split/rev1/Makefile b/keyboards/lets_split/rev1/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h
new file mode 100644 (file)
index 0000000..825e5ec
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x3060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Wootpatoot
+#define PRODUCT         Lets Split
+#define PRODUCT         Lets Split v1
+#define DESCRIPTION     A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+#define CATERINA_BOOTLOADER
+
+// #define USE_I2C
+// Use serial if not using I2C
+#ifndef USE_I2C
+#  define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/lets_split/rev1/rev1.c b/keyboards/lets_split/rev1/rev1.c
new file mode 100644 (file)
index 0000000..c505d3a
--- /dev/null
@@ -0,0 +1,32 @@
+#include "lets_split.h"
+
+#ifdef AUDIO_ENABLE
+    float tone_startup[][2] = SONG(STARTUP_SOUND);
+    float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void matrix_init_kb(void) {
+
+    #ifdef AUDIO_ENABLE
+        _delay_ms(20); // gets rid of tick
+        PLAY_NOTE_ARRAY(tone_startup, false, 0);
+    #endif
+
+    // // green led on
+    // DDRD |= (1<<5);
+    // PORTD &= ~(1<<5);
+
+    // // orange led on
+    // DDRB |= (1<<0);
+    // PORTB &= ~(1<<0);
+
+       matrix_init_user();
+};
+
+void shutdown_user(void) {
+    #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+       _delay_ms(150);
+       stop_all_notes();
+    #endif
+}
diff --git a/keyboards/lets_split/rev1/rev1.h b/keyboards/lets_split/rev1/rev1.h
new file mode 100644 (file)
index 0000000..4667c9f
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef REV1_H
+#define REV1_H
+
+#include "../lets_split.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+//void promicro_bootloader_jmp(bool program);
+
+#define KEYMAP( \
+       k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
+       k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
+       k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
+       k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
+       ) \
+       { \
+               { k00, k01, k02, k03, k04, k05 }, \
+               { k10, k11, k12, k13, k14, k15 }, \
+               { k20, k21, k22, k23, k24, k25 }, \
+               { k30, k31, k32, k33, k34, k35 }, \
+               { k40, k41, k42, k43, k44, k45 }, \
+               { k50, k51, k52, k53, k54, k55 }, \
+               { k60, k61, k62, k63, k64, k65 }, \
+               { k70, k71, k72, k73, k74, k75 } \
+       }
+
+#endif
\ No newline at end of file
diff --git a/keyboards/lets_split/rev1/rules.mk b/keyboards/lets_split/rev1/rules.mk
new file mode 100644 (file)
index 0000000..a0825b4
--- /dev/null
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/lets_split/rev2/Makefile b/keyboards/lets_split/rev2/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h
new file mode 100644 (file)
index 0000000..e9689d7
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x3060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Wootpatoot
+#define PRODUCT         Lets Split v2
+#define DESCRIPTION     A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
+
+#define CATERINA_BOOTLOADER
+
+// #define USE_I2C
+
+// Use serial if not using I2C
+#ifndef USE_I2C
+#  define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 12    // Number of LEDs
+#define ws2812_PORTREG  PORTD
+#define ws2812_DDRREG   DDRD
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+
+#endif
\ No newline at end of file
diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c
new file mode 100644 (file)
index 0000000..c505d3a
--- /dev/null
@@ -0,0 +1,32 @@
+#include "lets_split.h"
+
+#ifdef AUDIO_ENABLE
+    float tone_startup[][2] = SONG(STARTUP_SOUND);
+    float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void matrix_init_kb(void) {
+
+    #ifdef AUDIO_ENABLE
+        _delay_ms(20); // gets rid of tick
+        PLAY_NOTE_ARRAY(tone_startup, false, 0);
+    #endif
+
+    // // green led on
+    // DDRD |= (1<<5);
+    // PORTD &= ~(1<<5);
+
+    // // orange led on
+    // DDRB |= (1<<0);
+    // PORTB &= ~(1<<0);
+
+       matrix_init_user();
+};
+
+void shutdown_user(void) {
+    #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+       _delay_ms(150);
+       stop_all_notes();
+    #endif
+}
diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h
new file mode 100644 (file)
index 0000000..990976d
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef REV2_H
+#define REV2_H
+
+#include "../lets_split.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+//void promicro_bootloader_jmp(bool program);
+
+#define KEYMAP( \
+       k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \
+       k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \
+       k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \
+       k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \
+       ) \
+       { \
+               { k00, k01, k02, k03, k04, k05 }, \
+               { k10, k11, k12, k13, k14, k15 }, \
+               { k20, k21, k22, k23, k24, k25 }, \
+               { k30, k31, k32, k33, k34, k35 }, \
+               { k40, k41, k42, k43, k44, k45 }, \
+               { k50, k51, k52, k53, k54, k55 }, \
+               { k60, k61, k62, k63, k64, k65 }, \
+               { k70, k71, k72, k73, k74, k75 } \
+       }
+
+#endif
\ No newline at end of file
diff --git a/keyboards/lets_split/rev2/rules.mk b/keyboards/lets_split/rev2/rules.mk
new file mode 100644 (file)
index 0000000..80a942d
--- /dev/null
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk
new file mode 100644 (file)
index 0000000..1aee531
--- /dev/null
@@ -0,0 +1,75 @@
+SRC += matrix.c \
+          i2c.c \
+          split_util.c \
+          serial.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no         # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no      # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no       # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SUBPROJECT_rev1 ?= yes
+USE_I2C ?= yes
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
+
+CUSTOM_MATRIX = yes
index f439c2f20bf20d4b390af21e10a8a3676bd3ffcd..6faed09ce077c7b5d300b182d4705c8166e295fe 100644 (file)
 #include <avr/interrupt.h>
 #include <util/delay.h>
 #include <stdbool.h>
-
 #include "serial.h"
 
+#ifdef USE_SERIAL
+
 // Serial pulse period in microseconds. Its probably a bad idea to lower this
 // value.
 #define SERIAL_DELAY 24
@@ -223,3 +224,5 @@ int serial_update_buffers(void) {
   sei();
   return 0;
 }
+
+#endif
index 65003a71a46d6ea699eac1f4900ce499ba4e51ec..461921798f912215ac8b48173e424c9e641d39bd 100644 (file)
@@ -6,11 +6,15 @@
 #include <avr/eeprom.h>
 #include "split_util.h"
 #include "matrix.h"
-#include "i2c.h"
-#include "serial.h"
 #include "keyboard.h"
 #include "config.h"
 
+#ifdef USE_I2C
+#  include "i2c.h"
+#else
+#  include "serial.h"
+#endif
+
 volatile bool isLeftHand = true;
 
 static void setup_handedness(void) {
diff --git a/keyboards/maxipad/Makefile b/keyboards/maxipad/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h
new file mode 100644 (file)
index 0000000..d7a5ef5
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    wootpatoot
+#define PRODUCT         maxipad
+#define DESCRIPTION     A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+//Pro micro pinout
+       #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+       #define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 }
+       #define UNUSED_PINS
+//Teensy 2 pinout
+       //#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 }
+       //#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 }
+       //#define UNUSED_PINS
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..227cef7
--- /dev/null
@@ -0,0 +1,26 @@
+#include "maxipad.h"
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Base */
+  KC_ESC,  KC_1,    KC_2,  KC_3,  KC_4,  KC_5, \
+  KC_TAB,  KC_Q,    KC_W,  KC_E,  KC_R,  KC_T, \
+  MO(1),   KC_A,    KC_S,  KC_D,  KC_F,  KC_G, \
+  KC_LSFT, KC_Z,    KC_X,  KC_C,  KC_V,  KC_B, \
+  KC_LCTL, KC_LALT, MO(1), KC_ENT,KC_GRV,KC_SPC \
+),
+[1] = KEYMAP(
+  KC_GRV,  KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, \
+  KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, \
+  KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_SPC   \
+),
+};
+const uint16_t PROGMEM fn_actions[] = {
+};
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
+{
+    return MACRO_NONE;
+};
\ No newline at end of file
diff --git a/keyboards/maxipad/maxipad.c b/keyboards/maxipad/maxipad.c
new file mode 100644 (file)
index 0000000..a193b11
--- /dev/null
@@ -0,0 +1 @@
+#include "maxipad.h"
\ No newline at end of file
diff --git a/keyboards/maxipad/maxipad.h b/keyboards/maxipad/maxipad.h
new file mode 100644 (file)
index 0000000..4d8c642
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef MAXIPAD_H
+#define MAXIPAD_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+    k00, k01, k02, k03, k04, k05, \
+    k10, k11, k12, k13, k14, k15, \
+    k20, k21, k22, k23, k24, k25, \
+    k30, k31, k32, k33, k34, k35, \
+    k40, k41, k42, k43, k44, k45 \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05 }, \
+    { k10, k11, k12, k13, k14, k15 }, \
+    { k20, k21, k22, k23, k24, k25 }, \
+    { k30, k31, k32, k33, k34, k35 }, \
+    { k40, k41, k42, k43, k44, k45 } \
+}
+
+#endif
diff --git a/keyboards/maxipad/readme.md b/keyboards/maxipad/readme.md
new file mode 100644 (file)
index 0000000..861ea2b
--- /dev/null
@@ -0,0 +1,29 @@
+Maxipad keyboard firmware
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+If you are using a pro micro then make sure to enable USE_PRO_MICRO in the makefile
+Change the config.h pinout to match your mcu!!
+
+Download or clone the whole firmware and navigate to the keyboards/maxipad folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
+
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk
new file mode 100644 (file)
index 0000000..a5c7391
--- /dev/null
@@ -0,0 +1,76 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes  # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes           # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES           # MIDI controls
+# UNICODE_ENABLE ?= YES                # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+USE_PRO_MICRO ?= yes
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
diff --git a/keyboards/pegasushoof/Makefile b/keyboards/pegasushoof/Makefile
new file mode 100644 (file)
index 0000000..57b2ef6
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
diff --git a/keyboards/pegasushoof/README.md b/keyboards/pegasushoof/README.md
new file mode 100644 (file)
index 0000000..074222c
--- /dev/null
@@ -0,0 +1,24 @@
+pegasushoof keyboard firmware
+=============================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the `keyboard/pegasushoof` folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your `.hex` file.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build all keymaps, simply run `make`, the `.hex` files will end up in the top directory.
+
+### Specific Keymap
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>/keymap.c` in the `keymaps` folder, and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just enter the keymap directory and type `make`:
+```
+$ cd keymaps/default
+$ make
+```
diff --git a/keyboards/pegasushoof/config.h b/keyboards/pegasushoof/config.h
new file mode 100644 (file)
index 0000000..0dbec26
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6050
+#define DEVICE_VER      0x0104
+#define MANUFACTURER    Filco
+#define PRODUCT         Majestouch TKL \\w The Pegasus Hoof
+#define DESCRIPTION     QMK firmware for Majestouch TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+       keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#endif
diff --git a/keyboards/pegasushoof/keymaps/blowrak/Makefile b/keyboards/pegasushoof/keymaps/blowrak/Makefile
new file mode 100644 (file)
index 0000000..fec0d2d
--- /dev/null
@@ -0,0 +1,22 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+CUSTOM_MATRIX ?= yes         # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/pegasushoof/keymaps/blowrak/keymap.c
new file mode 100644 (file)
index 0000000..6faf4db
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "pegasushoof.h"
+
+#define _______ KC_TRNS
+
+/* Swedish keys */
+#define SE_HALF KC_GRV
+#define SE_PLUS KC_MINS
+#define SE_ACUT KC_EQL
+#define SE_AO   KC_LBRC
+#define SE_CIRC KC_RBRC
+#define SE_QUOT KC_BSLS
+#define SE_OE   KC_SCLN
+#define SE_AE   KC_QUOT
+#define SE_MINS KC_SLSH
+#define SE_LTGT KC_NUBS
+#define SE_LCBR RALT(KC_7)
+#define SE_LBRC RALT(KC_8)
+#define SE_RBRC RALT(KC_9)
+#define SE_RCBR RALT(KC_0)
+#define SE_PIPE RALT(SE_LTGT)
+#define SE_BSLS RALT(SE_PLUS)
+
+#define KM_BLOWRAK 0
+#define KM_QWERTY  1
+#define KM_MEDIA   2
+#define KM_HAXHAX  3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       /* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */
+       [KM_BLOWRAK] = KEYMAP( \
+               KC_ESC,          KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12,    KC_PSCR,KC_SLCK,KC_PAUS, \
+               SE_HALF, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   SE_PLUS,SE_ACUT,KC_BSPC,   KC_INS, KC_HOME,KC_PGUP, \
+               KC_TAB,  SE_AO,  SE_AE,  SE_OE,  KC_P,   KC_Y,   KC_F,   KC_G,   KC_C,   KC_R,   KC_L,   KC_COMM,SE_CIRC,SE_QUOT,   KC_DEL, KC_END, KC_PGDN, \
+               KC_LCTRL,KC_A,   KC_O,   KC_E,   KC_U,   KC_I,   KC_H,   KC_D,   KC_T,   KC_N,   KC_S,   SE_MINS,        KC_ENT,                             \
+               KC_LSFT, SE_LTGT,KC_DOT, KC_Q,   KC_J,   KC_K,   KC_B,   KC_X,   KC_M,   KC_W,   KC_V,   KC_Z,           KC_RSFT,           KC_UP,           \
+               KC_FN0,  KC_LGUI,KC_LALT,                       KC_SPC,                          KC_RALT,KC_RGUI,KC_MENU,KC_FN1,    KC_LEFT,KC_DOWN,KC_RGHT),
+       /* Layer 1: Standard ISO layer */
+       [KM_QWERTY] = KEYMAP( \
+               KC_ESC,          KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12,    KC_PSCR,KC_SLCK,KC_PAUS, \
+               SE_HALF, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   SE_PLUS,SE_ACUT,KC_BSPC,   KC_INS, KC_HOME,KC_PGUP, \
+               KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   SE_AO,  SE_CIRC,SE_QUOT,   KC_DEL, KC_END, KC_PGDN, \
+               KC_LCTRL,KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   SE_OE,  SE_AE,          KC_ENT,                             \
+               KC_LSFT, SE_LTGT,KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, SE_MINS,        KC_RSFT,           KC_UP,           \
+               KC_FN0,  KC_LGUI,KC_LALT,                       KC_SPC,                          KC_RALT,KC_RGUI,KC_MENU,KC_FN1,    KC_LEFT,KC_DOWN,KC_RGHT),
+       /* Layer 2: Media layer */
+       [KM_MEDIA] = KEYMAP( \
+               _______,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   KC_WAKE,KC_PWR, KC_SLEP, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,KC_VOLU, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   KC_MUTE,_______,KC_VOLD, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,                            \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,           KC_MPLY,         \
+               _______,_______,_______,                        _______,                        _______,_______,RESET  ,_______,   KC_MPRV,KC_MSTP,KC_MNXT),
+       /* Layer 3: Programming layer */
+       [KM_HAXHAX] = KEYMAP( \
+               _______,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______, \
+               _______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,_______, \
+               _______,SE_LBRC,SE_BSLS,SE_RBRC,_______,_______,_______,_______,_______,_______,_______,_______,        _______,                            \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,           _______,         \
+               _______,_______,_______,                        _______,                        _______,_______,_______,_______,   _______,_______,_______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA),
+       [1] = ACTION_LAYER_TOGGLE(KM_QWERTY)
+};
+
+void matrix_scan_user(void)
+{
+       uint8_t layer = biton32(layer_state);
+       switch (layer) {
+               case KM_BLOWRAK:
+                       ph_caps_led_on();
+                       ph_sclk_led_off();
+                       break;
+               case KM_QWERTY:
+                       ph_sclk_led_on();
+                       ph_caps_led_off();
+                       break;
+       }
+}
+
+/* Mixes in KM_HAXHAX via RALT modifier without shadowing the RALT key combinations. */
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       uint8_t modifiers = get_mods();
+       if (modifiers & MOD_BIT(KC_RALT) && record->event.pressed) {
+               uint16_t kc = keymap_key_to_keycode(KM_HAXHAX, record->event.key);
+               if (kc != KC_TRNS) {
+                       register_code(kc);
+                       unregister_code(kc);
+                       return false;
+               }
+       }
+       return true;
+}
diff --git a/keyboards/pegasushoof/keymaps/default/Makefile b/keyboards/pegasushoof/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..fec0d2d
--- /dev/null
@@ -0,0 +1,22 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+CUSTOM_MATRIX ?= yes         # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/pegasushoof/keymaps/default/keymap.c b/keyboards/pegasushoof/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..aa006b2
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "pegasushoof.h"
+
+#define _______ KC_TRNS
+
+#define KM_QWERTY  0
+#define KM_MEDIA   1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       /* Layer 0: Standard ISO layer */
+       [KM_QWERTY] = KEYMAP( \
+               KC_ESC,          KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12,   KC_PSCR,KC_SLCK,KC_PAUS, \
+               KC_GRV,  KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS,KC_EQL, KC_BSPC,  KC_INS, KC_HOME,KC_PGUP, \
+               KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,KC_RBRC,KC_BSLS,  KC_DEL, KC_END, KC_PGDN, \
+               KC_CLCK, KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,        KC_ENT,                            \
+               KC_LSFT, KC_NUBS,KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,        KC_RSFT,          KC_UP,           \
+               KC_LCTL, KC_LGUI,KC_LALT,                       KC_SPC,                          KC_RALT,KC_RGUI,KC_MENU,KC_FN0,   KC_LEFT,KC_DOWN,KC_RGHT),
+       /* Layer 1: Function layer */
+       [KM_MEDIA] = KEYMAP( \
+               _______,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   KC_WAKE,KC_PWR, KC_SLEP, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,KC_VOLU, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,   _______,_______,KC_VOLD, \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,                            \
+               _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,           KC_MPLY,         \
+               _______,_______,_______,                        _______,                        _______,_______,RESET  ,_______,   KC_MPRV,KC_MSTP,KC_MNXT)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA)
+};
+
+void led_set_user(uint8_t usb_led) {
+       if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+               ph_caps_led_on();
+       } else {
+               ph_caps_led_off();
+       }
+
+       if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+               ph_sclk_led_on();
+       } else {
+               ph_sclk_led_off();
+       }
+}
diff --git a/keyboards/pegasushoof/matrix.c b/keyboards/pegasushoof/matrix.c
new file mode 100644 (file)
index 0000000..d2a74b8
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+static uint8_t debouncing = DEBOUNCING_DELAY;
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t col);
+
+inline uint8_t matrix_rows(void)
+{
+       return MATRIX_ROWS;
+}
+
+inline uint8_t matrix_cols(void)
+{
+       return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+       /* Column output pins */
+       DDRD  |=  0b01111011;
+       /* Row input pins */
+       DDRC  &= ~0b10000000;
+       DDRB  &= ~0b01111111;
+       PORTC |=  0b10000000;
+       PORTB |=  0b01111111;
+
+       for (uint8_t i=0; i < MATRIX_ROWS; i++)  {
+               matrix[i] = 0;
+               matrix_debouncing[i] = 0;
+       }
+
+       matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+       for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+               select_row(col);
+               wait_us(30);
+               matrix_row_t rows = read_cols();
+               for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+                       bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+                       bool curr_bit = rows & (1<<row);
+                       if (prev_bit != curr_bit) {
+                               matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
+                               debouncing = DEBOUNCING_DELAY;
+                       }
+               }
+       }
+
+       if (debouncing) {
+               if (--debouncing) {
+                       wait_ms(1);
+               } else {
+                       for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+                               matrix[i] = matrix_debouncing[i];
+                       }
+               }
+       }
+
+       matrix_scan_quantum();
+
+       return 1;
+}
+
+bool matrix_is_modified(void)
+{
+       if (debouncing)
+               return false;
+       return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+       return matrix[row] & 1 << col;
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+       return matrix[row];
+}
+
+void matrix_print(void)
+{
+       print("\nr/c 0123456789ABCDEF\n");
+       for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+               phex(row); print(": ");
+               pbin_reverse16(matrix_get_row(row));
+               print("\n");
+       }
+}
+
+uint8_t matrix_key_count(void)
+{
+       uint8_t count = 0;
+       for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+               count += bitpop16(matrix[i]);
+       }
+       return count;
+}
+
+static matrix_row_t read_cols(void)
+{
+       return
+               (PINB & (1 << 5) ? 0 : 1 << 0) |
+               (PINC & (1 << 7) ? 0 : 1 << 1) |
+               (PINB & (1 << 4) ? 0 : 1 << 2) |
+               (PINB & (1 << 6) ? 0 : 1 << 3) |
+               (PINB & (1 << 1) ? 0 : 1 << 4) |
+               (PINB & (1 << 0) ? 0 : 1 << 5) |
+               (PINB & (1 << 3) ? 0 : 1 << 6) |
+               (PINB & (1 << 2) ? 0 : 1 << 7);
+}
+
+static void select_row(uint8_t col)
+{
+       switch (col) {
+               case 0:
+                       PORTD = (PORTD & ~0b01111011) | 0b00110011;
+                       break;
+               case 1:
+                       PORTD = (PORTD & ~0b01111011) | 0b01110000;
+                       break;
+               case 2:
+                       PORTD = (PORTD & ~0b01111011) | 0b00010011;
+                       break;
+               case 3:
+                       PORTD = (PORTD & ~0b01111011) | 0b01101000;
+                       break;
+               case 4:
+                       PORTD = (PORTD & ~0b01111011) | 0b00001011;
+                       break;
+               case 5:
+                       PORTD = (PORTD & ~0b01111011) | 0b00111011;
+                       break;
+               case 6:
+                       PORTD = (PORTD & ~0b01111011) | 0b01111000;
+                       break;
+               case 7:
+                       PORTD = (PORTD & ~0b01111011) | 0b01100001;
+                       break;
+               case 8:
+                       PORTD = (PORTD & ~0b01111011) | 0b01101001;
+                       break;
+               case 9:
+                       PORTD = (PORTD & ~0b01111011) | 0b01110001;
+                       break;
+               case 10:
+                       PORTD = (PORTD & ~0b01111011) | 0b01101010;
+                       break;
+               case 11:
+                       PORTD = (PORTD & ~0b01111011) | 0b01100010;
+                       break;
+               case 12:
+                       PORTD = (PORTD & ~0b01111011) | 0b01111001;
+                       break;
+               case 13:
+                       PORTD = (PORTD & ~0b01111011) | 0b01100000;
+                       break;
+               case 14:
+                       PORTD = (PORTD & ~0b01111011) | 0b01000011;
+                       break;
+               case 15:
+                       PORTD = (PORTD & ~0b01111011) | 0b00011011;
+                       break;
+               case 16:
+                       PORTD = (PORTD & ~0b01111011) | 0b00100011;
+                       break;
+               case 17:
+                       PORTD = (PORTD & ~0b01111011) | 0b00101011;
+                       break;
+       }
+}
diff --git a/keyboards/pegasushoof/pegasushoof.c b/keyboards/pegasushoof/pegasushoof.c
new file mode 100644 (file)
index 0000000..6bb249a
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "pegasushoof.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+    return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+}
+
+void matrix_init_kb(void) {
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+       return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       led_set_user(usb_led);
+}
diff --git a/keyboards/pegasushoof/pegasushoof.h b/keyboards/pegasushoof/pegasushoof.h
new file mode 100644 (file)
index 0000000..d031e3e
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PEGASUSHOOF_H
+#define PEGASUSHOOF_H
+
+#include "matrix.h"
+#include "quantum.h"
+
+#define  ___ KC_NO
+
+#define KEYMAP( \
+       KG6,      KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0,   KN5, KN7, KP7, \
+       KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2,   KR4, KC4, KE4, \
+       KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3,   KQ4, KC5, KE5, \
+       KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6,      KO1,                  \
+       KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0,      KB3,        KC6,      \
+       KP4, KD2, KN6,                KQ6,                KN0, KA3, KM0, KP1,   KC0, KQ0, KR0  \
+       ) { /*        00-A  01-B  02-C  03-D  04-E  05-F  06-G  07-H  08-I  09-J  10-K  11-L  12-M  13-N  14-O  15-P  16-Q  17-R */ \
+               /* 0 */  { ___ , ___ , KC0 , ___ , ___ , KF0 , ___ , ___ , ___ , KJ0 , KK0 , ___ , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \
+               /* 1 */  { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \
+               /* 2 */  { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \
+               /* 3 */  { KA3 , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \
+               /* 4 */  { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \
+               /* 5 */  { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \
+               /* 6 */  { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \
+               /* 7 */  { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , ___ , KP7 , ___ , ___ }, \
+       }
+
+inline void ph_caps_led_on(void)  { DDRC |=  (1<<6); PORTC &= ~(1<<6); }
+inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
+
+inline void ph_sclk_led_on(void)  { DDRC |=  (1<<5); PORTC &= ~(1<<5); }
+inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
+
+
+#endif
diff --git a/keyboards/pegasushoof/rules.mk b/keyboards/pegasushoof/rules.mk
new file mode 100644 (file)
index 0000000..b3eeebf
--- /dev/null
@@ -0,0 +1,67 @@
+# MCU name
+MCU = atmega32u2
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+
+CUSTOM_MATRIX ?= yes
+SRC = matrix.c
index 3a71fd0ee3e56db8271343a1db792e8f57f75f16..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,74 +1,3 @@
-
-
-SRC = led.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE ?=yes   # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE ?= no  # Enable keyboard backlight functionality (+1150)
-MIDI_ENABLE ?= no              # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no           # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
+endif
\ No newline at end of file
index 983a1d73f29868ac4c7a10e74559f7067b5fe068..71a33498b4fd9550216d247c4eea47b3657aa7e7 100644 (file)
@@ -63,7 +63,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* Underlight configuration
  */
 #define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 20     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c
new file mode 100644 (file)
index 0000000..4a15226
--- /dev/null
@@ -0,0 +1,104 @@
+#include "phantom.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _DV 1
+#define _CM 2
+#define _FL 3
+
+// Macro name shortcuts
+#define QWERTY M(_QW)
+#define DVORAK M(_DV)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QW] = { /* Layer 0: Qwerty */
+    {KC_ESC,  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS},
+    {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  XXXXXXX, KC_BSPC, KC_INS,  KC_HOME, KC_PGUP},
+    {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,  KC_END,  KC_PGDN},
+    {KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT,  XXXXXXX, XXXXXXX, XXXXXXX},
+    {KC_LSFT, XXXXXXX, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP,   XXXXXXX},
+    {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT}
+  },
+
+[_DV] = { /* Layer 1: Dvorak */
+    {KC_ESC,  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS},
+    {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, XXXXXXX, KC_BSPC, KC_INS,  KC_HOME, KC_PGUP},
+    {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH, KC_EQL,  KC_BSLS, KC_DEL,  KC_END,  KC_PGDN},
+    {KC_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS, XXXXXXX, KC_ENT,  XXXXXXX, XXXXXXX, XXXXXXX},
+    {KC_LSFT, XXXXXXX, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    XXXXXXX, KC_RSFT, XXXXXXX, KC_UP,   XXXXXXX},
+    {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT}
+  },
+
+[_CM] = { /* Layer 2: Colemak */
+    {KC_ESC,  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PSCR, KC_SLCK, KC_PAUS},
+    {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  XXXXXXX, KC_BSPC, KC_INS,  KC_HOME, KC_PGUP},
+    {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,  KC_END,  KC_PGDN},
+    {KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, XXXXXXX, KC_ENT,  XXXXXXX, XXXXXXX, XXXXXXX},
+    {KC_LSFT, XXXXXXX, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP,   XXXXXXX},
+    {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT}
+  },
+
+[_FL] = { /* Layer 3: Functions */
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, RESET,   KC_MPRV, KC_MPLY, KC_MNXT},
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU},
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX},
+    {_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX},
+    {QWERTY,  DVORAK,  COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______},
+  },
+
+
+};
+
+enum function_id {
+    SHIFT_ESC,
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _DV:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_DV);
+          }
+          break;
+        case _QW:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_QW);
+          }
+          break;
+        case _CM:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_CM);
+          }
+          break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md
new file mode 100644 (file)
index 0000000..190f738
--- /dev/null
@@ -0,0 +1,4 @@
+Phantom keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/phantom/rules.mk b/keyboards/phantom/rules.mk
new file mode 100644 (file)
index 0000000..c6b8ca6
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+SRC = led.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?=yes   # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= no  # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no              # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no           # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
index 23944f92ea3b5785ee452bf66d942951fa865cf6..7d49c5ef967d46e5f0beacd470bbc34e90b393c1 100644 (file)
@@ -1,74 +1,5 @@
-
 SUBPROJECT_DEFAULT = rev4
 
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no         # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no            # MIDI controls
-AUDIO_ENABLE ?= no           # Audio output on port C6
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..cf2c31f0fb5fddcacec28824e262e4a787696ca7 100644 (file)
@@ -1,4 +1,6 @@
-
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 # Build Options
 #   change to "no" to disable the options, or define them in the Makefile in 
diff --git a/keyboards/planck/keymaps/bone2planck/config.h b/keyboards/planck/keymaps/bone2planck/config.h
new file mode 100644 (file)
index 0000000..60aff6d
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+#endif
+
+#include "../../config.h"
+
+#define PREVENT_STUCK_MODIFIERS
\ No newline at end of file
index f40b08685b55bd3c77a43ce272728942b0f9747d..69d164b8c7a4d8a1b37d2de5bca51944bf0da27e 100644 (file)
-
-#include "planck.h"
+#include "planck.h"
 #ifdef BACKLIGHT_ENABLE
 #include "backlight.h"
 #endif
 #include "keymap_german.h"
 
+// for intellisense, has to be commented for building
+/*
+#include "..\..\..\..\quantum\keymap_extras\keymap_german.h"
+#include "..\..\..\..\quantum\keymap_common.h"
+#include "..\..\..\..\tmk_core\common\keycode.h"
+*/
+
+#define _______ KC_TRNS
+
 /* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
-   It has Umlauts and "ß" as it is optimized for a mix of German & English.
-   My favourite features are the placement of the special characters often used for programming right on the home row 
-   and the number & navigation block combo, so you never have to move your hands from their home position.
-   
-   Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
+It has "üäöß" as it is optimized for a mix of German & English.
+My favourite features are the placement of the special characters often used for programming right on the home row
+and the number & navigation block combo, so you never have to move your hands from their home position.
+
+Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
 */
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-       /* Bone2
-       * ,-----------------------------------------------------------------------------------.
-       * | Q    |   J  |   D  |   U  |   A  |   X  |   P  |   H  |   L  |   M  |   W  |  ẞ   |
-       * |------+------+------+------+------+-------------+------+------+------+------+------|
-       * | M1   |   C  |   T  |   I  |   E  |   O  |   B  |   N  |   R  |   S  |   G  |  M1  |
-       * |------+------+------+------+------+------|------+------+------+------+------+------|
-       * | Shift|   F  |   V  |   Ü  |   Ä  |   Ö  |   Y  |   Z  |   ,  |   .  |   K  |Shift |
-       * |------+------+------+------+------+------+------+------+------+------+------+------|
-       * | Ctrl | GUI  | Alt  |  M3  |  M2  |    Space    |  M2  |  M3  |  Esc |  Tab |Enter |
-       * `-----------------------------------------------------------------------------------'
-       */
-       [0] = {
-               { DE_Q,    DE_J,        DE_D,    DE_U,    DE_A,    DE_X,    DE_P,    DE_H,    DE_L,    DE_M,    DE_W,    DE_SS  },
-               { MO(1),   DE_C,    DE_T,    DE_I,    DE_E,    DE_O,    DE_B,    DE_N,    DE_R,    DE_S,    DE_G,    MO(1)  },
-               { DE_S,    DE_F,    DE_V,    DE_UE,   DE_AE,   DE_OE,   DE_Y,    DE_Z,    DE_COMM, DE_DOT,  DE_K,    DE_S   },
-               { KC_LCTL, KC_LGUI, KC_LALT, MO(3),   MO(2),   KC_SPC,  KC_SPC,  MO(2),   MO(3),   KC_ESC,  KC_TAB,  KC_ENT }
-       },
-
-       /* M1 Special Characters
-       * ,-----------------------------------------------------------------------------------.
-       * | °    |   @  |   _  |   [  |   ]  |   ^  |   !  |   <  |   >  |   =  |   &  |      |
-       * |------+------+------+------+------+-------------+------+------+------+------+------|
-       * | M1   |   \  |   /  |   {  |   }  |   *  |   ?  |   (  |   )  |   -  |   :  |  M1  |
-       * |------+------+------+------+------+------|------+------+------+------+------+------|
-       * |      |   #  |   $  |   |  |   ~  |   €  |   +  |   %  |   "  |   '  |   ;  |      |
-       * |------+------+------+------+------+------+------+------+------+------+------+------|
-       * | Ctrl | GUI  | Alt  |  M3  |  M2  |    Space    |  M2  |  M3  |  Esc |  Tab |Enter |
-       * `-----------------------------------------------------------------------------------'
-       */
-       [1] = {
-               { DE_RING, DE_AT,   DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL,  DE_AMPR, KC_NO   },
-               { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST,  DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS },
-               { KC_NO  , DE_HASH, DE_DLR,  DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO   },
-               { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
-       },
-
-       /* Navigation & Number Blocks
-       * ,-----------------------------------------------------------------------------------.
-       * |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |   7  |   8  |   9  |      |      |
-       * |------+------+------+------+------+-------------+------+------+------+------+------|
-       * |      | Home |  Lft | Down | Right| End  |   .  |   4  |   5  |   6  |   ,  |      |
-       * |------+------+------+------+------+------|------+------+------+------+------+------|
-       * | Shift|      |  Tab | Ins  | Enter|      |   0  |   1  |   2  |   3  |   ;  |Shift |
-       * |------+------+------+------+------+------+------+------+------+------+------+------|
-       * | Ctrl | GUI  | Alt  |  M3  |  M2  |    Space    |  M2  |  M3  |  Esc |  Tab |Enter |
-       * `-----------------------------------------------------------------------------------'
-       */
-       [2] = {
-               { KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO,   DE_7,    DE_8,    DE_9,    KC_NO,   KC_NO   },
-               { KC_NO,   KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  DE_DOT,  DE_4,    DE_5,    DE_6,    DE_COMM, KC_NO   },
-               { DE_S,    KC_NO,   KC_TAB,  KC_INS,  KC_ENT,  KC_NO,   KC_0,    DE_1,    DE_2,    DE_3,    DE_SCLN, DE_S    },
-               { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
-       },
-
-       /* Function & Media Keys
-       * ,-----------------------------------------------------------------------------------.
-       * |      |      | Print|Scroll|Pause |      |      |  F7  |  F8  |  F9  |  F12 |      |
-       * |------+------+------+------+------+-------------+------+------+------+------+------|
-       * |      |      | Mute | Vol- | Vol+ |      |   ³  |  F4  |  F5  |  F6  |  F11 |      |
-       * |------+------+------+------+------+------|------+------+------+------+------+------|
-       * | Shift|      | Prev | Play | Next |      |   ²  |  F1  |  F2  |  F3  |  F10 |Shift |
-       * |------+------+------+------+------+------+------+------+------+------+------+------|
-       * | Ctrl | GUI  | Alt  |  M3  |      |    Space    |      |  M3  |  Esc |  Tab |Enter |
-       * `-----------------------------------------------------------------------------------'
-       */
-       [3] = {
-               { KC_NO,   KC_NO,   KC_PSCR, KC_SLCK, KC_PAUS, KC_NO,   KC_NO,   KC_F7,   KC_F8,   KC_F9,   KC_F12,  KC_NO      },
-               { KC_NO,   KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,   DE_SQ3,  KC_F4,   KC_F5,   KC_F6,   KC_F11,  KC_NO  },
-               { KC_TRNS, KC_NO,   KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,   DE_SQ2,  KC_F1,   KC_F2,   KC_F3,   KC_F10,  KC_TRNS},
-               { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,   KC_TRNS, KC_TRNS, KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
-       }
+/* Bone2
+* ,-----------------------------------------------------------------------------------.
+* | Q    |   J  |   D  |   U  |   A  |   X  |   P  |   H  |   L  |   M  |   W  |  ẞ   |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |M1/Tab|   C  |   T  |   I  |   E  |   O  |   B  |   N  |   R  |   S  |   G  |M1/Ent|  //hold for M1, tap for Tab/Enter
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift|   F  |   V  |   Ü  |   Ä  |   Ö  |   Y  |   Z  |   ,  |   .  |   K  |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI  | Alt  |  M4  |  M2  |    Space    |  M2  |  M4  | Alt  | Esc  | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[0] = {
+       { DE_Q,         DE_J,    DE_D,    DE_U,  DE_A,  DE_X,   DE_P,   DE_H,  DE_L,    DE_M,    DE_W,    DE_SS        },
+       { LT(1,KC_TAB), DE_C,    DE_T,    DE_I,  DE_E,  DE_O,   DE_B,   DE_N,  DE_R,    DE_S,    DE_G,    LT(1,KC_ENT) },
+       { KC_LSFT,      DE_F,    DE_V,    DE_UE, DE_AE, DE_OE,  DE_Y,   DE_Z,  DE_COMM, DE_DOT,  DE_K,    KC_LSFT      },
+       { KC_LCTL,      KC_RGUI, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4),   KC_RALT, KC_ESC,  KC_RCTL      }
+},
+
+/* M1 Special Characters
+very ergonomic placement for coding
+* ,-----------------------------------------------------------------------------------.
+* | °    |   @  |   _  |   [  |   ]  |   ^  |   !  |   <  |   >  |   =  |   &  |  ´   |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |M1/Tab|   \  |   /  |   {  |   }  |   *  |   ?  |   (  |   )  |   -  |   :  |M1/Ent|  //hold for M1, tap for Tab/Enter
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift|   #  |   $  |   |  |   ~  |   €  |   +  |   %  |   "  |   '  |   ;  |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI  | Alt  |  M4  |  M2  |    Space    |  M2  |  M4  | Alt  | Esc  | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[1] = {
+       { DE_RING, DE_AT,   DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL,  DE_AMPR, DE_ACUT },
+       { _______, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST,  DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, _______ },
+       { _______, DE_HASH, DE_DLR,  DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, _______ },
+       { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+},
+
+/* Navigation & Number Blocks
+very easy to get used to & intuituve placement
+* ,-----------------------------------------------------------------------------------.
+* |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |   7  |   8  |   9  |      | Ins  |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |  Tab | Home |  Lft | Down | Right| End  |   .  |   4  |   5  |   6  |   ,  | Enter|
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift|      |  Tab |      | Enter|      |   0  |   1  |   2  |   3  |   ;  |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI  | Alt  |  M3  |  M2  |    Space    |  M2  |  M3  | Alt  | Esc  | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[2] = {
+       { KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO,   DE_7,    DE_8,  DE_9,    KC_NO,   KC_INS  },
+       { KC_TAB,  KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  DE_DOT,  DE_4,    DE_5,  DE_6,    DE_COMM, KC_ENT  },
+       { _______, KC_NO,   KC_TAB,  KC_NO,   KC_ENT,  KC_NO,   DE_0,    DE_1,    DE_2,  DE_3,    DE_SCLN, _______ },
+       { _______, _______, _______, MO(3),   _______, _______, _______, _______, MO(3), _______, _______, _______ }
+},
+
+/* Flipped Navigation & Number Blocks for one handed use
+accessed by sliding from M2 to M3 with thumb
+* ,-----------------------------------------------------------------------------------.
+* | Ins  |      |  7   |  8   |  9   |      | PgUp | Bksp |  Up  |  DEL | PgDn |      |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |  Tab |  .   |  4   |  5   |  6   |   ,  | Home | Left | Down | Right| End  | Enter|
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift|  0   |  1   |  2   |  3   |   ;  |      | Tab  |  Ins | Enter|      |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI  | Alt  |  M3  |      |    Space    |      |  M3  | Alt  | Esc  | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+
+[3] = {
+       { KC_INS,   KC_NO,   DE_7,    DE_8,    DE_9,  KC_NO,   KC_PGUP, KC_BSPC, KC_UP,   KC_DEL,  KC_PGDN, KC_NO   },
+       { _______, DE_DOT,  DE_4,    DE_5,    DE_6,  DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,  _______ },
+       { _______, DE_0,    DE_1,    DE_2,    DE_3,  DE_SCLN, KC_NO,   KC_TAB,  KC_INS,  KC_ENT,  KC_NO,   _______ },
+       { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO,   _______, _______, _______, _______ }
+},
+
+
+/* Function & Media Keys
+slide from m4 to m5 to access flipped version
+* ,-----------------------------------------------------------------------------------.
+* |      |      | Print|Scroll|Pause |      |      |  F7  |  F8  |  F9  |  F12 |      |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |      |      | Mute | Vol- | Vol+ |      |   ³  |  F4  |  F5  |  F6  |  F11 |      |
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift|      | Prev | Play | Next |      |   ²  |  F1  |  F2  |  F3  |  F10 |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI  | Alt  |  M4  |  M5  |    Space    |  M5  |  M4  | Alt  | Esc  | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[4] = {
+       { KC_NO,   KC_NO,   KC_PSCR, KC_SLCK, KC_PAUS, KC_NO,   KC_NO,   KC_F7, KC_F8,   KC_F9,   KC_F12,  KC_NO   },
+       { KC_NO,   KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,   DE_SQ3,  KC_F4, KC_F5,   KC_F6,   KC_F11,  KC_NO   },
+       { _______, KC_NO,   KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,   DE_SQ2,  KC_F1, KC_F2,   KC_F3,   KC_F10,  _______ },
+       { _______, _______, _______, _______, MO(5),   _______, _______, MO(5), _______, _______, _______, _______ }
+},
+
+
+/* flipped Function & Media Keys
+* ,-----------------------------------------------------------------------------------.
+* |      |      |  F7  |  F8  |  F9  |  F12 |      | Print|Scroll| Pause|      |      |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |      |  ³   |  F4  |  F5  |  F6  |  F11 |      | Mute | Vol- | Vol+ |      |      |
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift|  ²   |  F1  |  F2  |  F3  |  F10 |      | Prev | Play | Next |      |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI  | Alt  |      |  M5  |    Space    |  M5  |      | Alt  | Esc  | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[5] = {
+       { KC_NO,   KC_NO,   KC_F7,   KC_F8, KC_F9,   KC_F12,  KC_NO,   KC_PSCR, KC_SLCK, KC_PAUS, KC_NO,   KC_NO   },
+       { KC_NO,   DE_SQ3,  KC_F4,   KC_F5, KC_F6,   KC_F11,  KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,   KC_NO   },
+       { _______, DE_SQ2,  KC_F1,   KC_F2, KC_F3,   KC_F10,  KC_NO,   KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,   _______ },
+       { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO,   _______, _______, _______ }
+}
 };
 
 const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/planck/keymaps/bone2planck/readme.md b/keyboards/planck/keymaps/bone2planck/readme.md
new file mode 100644 (file)
index 0000000..3c425ef
--- /dev/null
@@ -0,0 +1,8 @@
+check keymap.c to the layers
+
+This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
+It has "üäöß" as it is optimized for a mix of German & English.
+My favourite features are the placement of the special characters often used for programming right on the home row
+and the number & navigation block combo, so you never have to move your hands from their home position.
+
+Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
\ No newline at end of file
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..cf2c31f0fb5fddcacec28824e262e4a787696ca7 100644 (file)
@@ -1,4 +1,6 @@
-
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 # Build Options
 #   change to "no" to disable the options, or define them in the Makefile in 
diff --git a/keyboards/planck/keymaps/callum/Makefile b/keyboards/planck/keymaps/callum/Makefile
new file mode 100644 (file)
index 0000000..1d76966
--- /dev/null
@@ -0,0 +1,25 @@
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
new file mode 100644 (file)
index 0000000..4d01517
--- /dev/null
@@ -0,0 +1,182 @@
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _MOVE 1
+#define _SYMB 2
+#define _MOUSE 3
+#define _FUNC 4
+
+enum planck_keycodes {
+  MOVE = SAFE_RANGE,
+  SYMB,
+  FUNC,
+  BELOW,
+  ABOVE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BASE
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  |  -   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Bksp |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Func | Ctrl |  Alt |  Cmd | Symb | Enter| Space| Move |  Cmd |  Alt | Ctrl | Func |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_BASE] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_MINS},
+  {KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT},
+  {FUNC,    KC_LCTL, KC_LALT, KC_LGUI, SYMB,    KC_ENT,  KC_SPC,  MOVE,    KC_RGUI, KC_RALT, KC_RCTL, FUNC   }
+},
+
+/* MOVE
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |      | Cmd-L|  Up  | Cmd-R|      |      | Cmd-L|  Up  | Cmd-R|      |  Esc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  Del | Caps | Left | Down | Right|      |      | Left | Down | Right| Caps |  Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      | Pg Up| Pg Dn| Above|      | Pg Dn| Pg Up|      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      | Below|      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MOVE] = {
+  {KC_ESC,  XXXXXXX, LGUI(KC_LEFT), KC_UP, LGUI(KC_RGHT), XXXXXXX, XXXXXXX, LGUI(KC_LEFT), KC_UP, LGUI(KC_RGHT), XXXXXXX, KC_ESC },
+  {KC_DEL,  KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL },
+  {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN,   ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______},
+  {_______, _______, _______, _______, _______,   BELOW, _______, _______, _______, _______, _______, _______}
+},
+
+/* SYMB
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   –  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  Del |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   £  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   ~  |   `  |   +  |   =  |   |  |   \  |   [  |   ]  |   {  |   }  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_SYMB] = {
+  {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    LALT(KC_MINS)},
+  {KC_DEL,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, LALT(KC_3)},
+  {_______, KC_TILD, KC_GRV,  KC_PLUS, KC_EQL,  KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* MOUSE
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      | ACC-2| ACC-1| ACC-0|      |      | SW-L |  M-U | SW-R |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      | MB-3 | MB-2 | MB-1 |      |      |  M-L |  M-D |  M-R |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      | SW-D | SW-U |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MOUSE] = {
+  {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX},
+  {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * | Reset|  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 | Vol+ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |  F11 |  F12 |  F13 |  F14 |  F15 |  F16 |  F17 |  F18 |  F19 |  F20 | Vol- |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |  F21 |  F22 |  F23 |  F24 |      |      | Power|      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      | Prev | Mute | Play | Next |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = {
+  {RESET,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_VOLU},
+  {XXXXXXX, KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_VOLD},
+  {_______, KC_F21,  KC_F22,  KC_F23,  KC_F24,  XXXXXXX, XXXXXXX, KC_POWER, XXXXXXX, XXXXXXX, XXXXXXX, _______},
+  {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______}
+}
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case MOVE:
+      if (record->event.pressed) {
+        layer_on(_MOVE);
+        update_tri_layer(_MOVE, _SYMB, _MOUSE);
+      } else {
+        layer_off(_MOVE);
+        update_tri_layer(_MOVE, _SYMB, _MOUSE);
+      }
+      return false;
+      break;
+    case SYMB:
+      if (record->event.pressed) {
+        layer_on(_SYMB);
+        update_tri_layer(_MOVE, _SYMB, _MOUSE);
+      } else {
+        layer_off(_SYMB);
+        update_tri_layer(_MOVE, _SYMB, _MOUSE);
+      }
+      return false;
+      break;
+    case FUNC:
+      if (record->event.pressed) {
+        layer_on(_FUNC);
+      } else {
+        layer_off(_FUNC);
+      }
+      return false;
+      break;
+    case BELOW:
+      if (record->event.pressed) {
+        register_code(KC_LGUI);
+        register_code(KC_RGHT);
+        unregister_code(KC_RGHT);
+        unregister_code(KC_LGUI);
+        register_code(KC_ENT);
+        unregister_code(KC_ENT);
+      }
+      return false;
+      break;
+    case ABOVE:
+      if (record->event.pressed) {
+        register_code(KC_LGUI);
+        register_code(KC_LEFT);
+        unregister_code(KC_LEFT);
+        unregister_code(KC_LGUI);
+        register_code(KC_ENT);
+        unregister_code(KC_ENT);
+        register_code(KC_UP);
+        unregister_code(KC_UP);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md
new file mode 100644 (file)
index 0000000..0baeba4
--- /dev/null
@@ -0,0 +1,71 @@
+# callum’s planck layout
+
+This is a layout for the grid planck, built with a few ideals in mind:
+
+- Minimal response times should be maintained. Keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided – they inevitably send their keycode later than a normal key – interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording as our only means of getting more than one symbol out of a single physical key.
+- The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible.
+- There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make.
+
+We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation.
+
+```
+/* BASE
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  |  -   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Bksp |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Func | Ctrl |  Alt |  Cmd | Symb | Enter| Space| Move |  Cmd |  Alt | Ctrl | Func |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* MOVE
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |      | Cmd-L|  Up  | Cmd-R|      |      | Cmd-L|  Up  | Cmd-R|      |  Esc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  Del | Caps | Left | Down | Right|      |      | Left | Down | Right| Caps |  Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      | Pg Up| Pg Dn| Above|      | Pg Dn| Pg Up|      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      | Below|      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* SYMB
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   –  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  Del |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   £  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   ~  |   `  |   +  |   =  |   |  |   \  |   [  |   ]  |   {  |   }  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* MOUSE
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      | ACC-2| ACC-1| ACC-0|      |      | SW-L |  M-U | SW-R |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      | MB-3 | MB-2 | MB-1 |      |      |  M-L |  M-D |  M-R |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      | SW-D | SW-U |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * | Reset|  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 | Vol+ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |  F11 |  F12 |  F13 |  F14 |  F15 |  F16 |  F17 |  F18 |  F19 |  F20 | Vol- |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |  F21 |  F22 |  F23 |  F24 |      |      | Lock |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      | Prev | Mute | Play | Next |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+```
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b1c70ace70e4a8b457bfa4c3234c4d7776271ea6 100644 (file)
@@ -5,8 +5,8 @@
 #   the appropriate keymap folder that will get included automatically
 #
 BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
 CONSOLE_ENABLE = no         # Console for debug(+400)
 COMMAND_ENABLE = yes        # Commands for debug and configuration
 NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
@@ -16,10 +16,11 @@ AUDIO_ENABLE = yes           # Audio output on port C6
 UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
 RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+API_SYSEX_ENABLE = yes      # Enable SYSEX API (+5390)
 
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index 2d3df59bd2f6af51644937fdc44235881e702a29..bd15fd5a22a12277f381616c7a711baabea47a94 100644 (file)
@@ -1,15 +1,24 @@
 #ifndef CONFIG_USER_H
 #define CONFIG_USER_H
 
+#define NO_DEBUG
+#define NO_PRINT
+
 #include "../../config.h"
 
+#define LEADER_TIMEOUT 300
+#define BACKLIGHT_BREATHING
+
 /* cbbrowne user configuration */
 
 #define randadd 53
 #define randmul 181
 #define randmod 167
 
-#endif
+/* Filler to make layering a bit clearer *
+ * borrowed from basic keymap            */
 
+#define _______ KC_TRNS
 
+#endif
 
index 14a5be1708263432a0ff4caa0aac4acef1cdafd1..2be4dab4b1f2b4e35260028fd75ec950cc8ebd5a 100644 (file)
@@ -1,9 +1,10 @@
 #include "planck.h"
 #ifdef BACKLIGHT_ENABLE
-  #include "backlight.h"
+#include "backlight.h"
 #endif
 #include "config.h"
 #include "quantum.h"
+#include "version.h"
 
 /* Each layer is given a name to aid in readability, which is then
    used in the keymap matrix below.  The underscores do not denote 
    - How about Alt-F1 thru Alt-F8?
    - What's the keystroke to get from X to console these days?
    - A layer for doing console switching would not be a bad idea
+   - I haven't got page-up/page-down, let's have that...
 */
 
 enum layers {
-  _QW = 0,  /* Qwerty mapping */
-  _LW, /* Lower layer, where top line has symbols !@#$%^&*() */
-  _RS, /* Raised layer, where top line has digits 1234567890 */
-  _KP, /* Key pad */
+  _QWERTY = 0,  /* Qwerty mapping */
+  _LOWER, /* Lower layer, where top line has symbols !@#$%^&*() */
+  _RAISE, /* Raised layer, where top line has digits 1234567890 */
+  _KEYPAD, /* Key pad */
+  _ADJUST, /* Special Adjust layer coming via tri-placement */
 };
 
 enum macro_id {
@@ -75,38 +78,64 @@ enum macro_id {
   M_USERNAME,
   M_RANDDIGIT,
   M_RANDLETTER,
-  M_VERSION
+  M_VERSION,
+  MACRO_UPPER,
+  MACRO_LOWER,
 };
 
+#define M_LOWER M(MACRO_LOWER)
+#define M_UPPER M(MACRO_UPPER)
+#define ROT_LED M(M_LED)   /* Rotate LED */
+#define QWERTY DF(_QWERTY)   /* Switch to QWERTY layout */
+#define KEYPAD DF(_KEYPAD)   /* Switch to keypad */
+#define USERNAME M(M_USERNAME) /* shortcut for username */
+#define RANDDIG M(M_RANDDIGIT)
+#define RANDALP M(M_RANDLETTER)
+#define CTLENTER MT(MOD_RCTL, KC_ENT)
+#define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT)
+#define ALTRIGHT MT(MOD_LALT, KC_RGHT)
+#define MVERSION M(M_VERSION)
+#define ALTSLASH LALT(KC_SLSH)
+
+
 /* Note that Planck has dimensions 4 rows x 12 columns */
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QW] = { /* Qwerty */
+[_QWERTY] = { /* Qwerty */
   {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
-  {KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT},
-  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_QUOT },
-  {KC_TAB,  M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC,  KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+  {KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, CTLENTER},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SHIFTQUOTE },
+  {KC_TAB,  KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC,  KC_SPC,  M_UPPER, KC_LEFT, KC_DOWN, KC_UP,   ALTRIGHT}
+  /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */
 },
-[_RS] = { /* RAISE */
+[_RAISE] = { /* RAISE */
   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
-  {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
-  {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_KP), DF(_KP), RESET,   KC_TRNS},
-  {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+  {_______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  QWERTY,  KEYPAD,  KEYPAD,  ALTSLASH,_______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP}
 },
-[_LW] = { /* LOWER */
+[_LOWER] = { /* LOWER */
   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
-  {KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
-  {KC_TRNS, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_KP), DF(_KP), RESET,   KC_TRNS},
-  {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+  {_______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  QWERTY,  KEYPAD,  KEYPAD, ALTSLASH,   _______},
+  {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP}
+    },
+[_KEYPAD] = { /* Key Pad */
+  {KC_ESC,  USERNAME,    MVERSION,   KC_F10,   KC_F11,  KC_F12,   KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC},
+  {KC_LCTL, RANDDIG,   KC_F5,   KC_F6,    KC_F7,   KC_F8,    KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE},
+  {KC_LSFT, RANDALP,   KC_F1,   KC_F2,    KC_F3,   KC_F4,    KC_DEL,  KC_KP_PLUS,  KC_1, KC_2,  KC_3, KC_ENTER},
+  {KC_TAB,  KC_LALT, ROT_LED, KC_LGUI,  M_LOWER,  KC_SPC,    KC_SPC,  QWERTY,   KC_LEFT, KC_DOWN, KC_UP,  KC_RIGHT}
 },
-[_KP] = { /* Key Pad */
-  {KC_ESC,  M(M_USERNAME),    M(M_VERSION),   KC_F10,   KC_F11,  KC_F12,   KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC},
-  {KC_LCTL, M(M_RANDDIGIT),   KC_F5,   KC_F6,    KC_F7,   KC_F8,    KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE},
-  {KC_LSFT, M(M_RANDLETTER),  KC_F1,   KC_F2,    KC_F3,   KC_F4,    KC_DEL,  KC_KP_PLUS,  KC_1, KC_2,  KC_3, KC_ENTER},
-  {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC,  KC_SPC,  DF(_QW),   KC_LEFT, KC_DOWN, KC_UP,  KC_RIGHT}
-}
+
+[_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */
+  {ROT_LED,USERNAME,MVERSION, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+  {_______, RANDDIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+  {_______, RANDALP, _______, _______, _______,   RESET,   RESET, _______, _______, _______, _______, _______ },
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+}  
 };
 
+/* What is fn_actions actually used for??? */
 const uint16_t PROGMEM fn_actions[] = {
 };
 
@@ -168,6 +197,39 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
       unregister_code (KC_A + rval);
     }
     break;
+  case MACRO_UPPER:
+    if (record->event.pressed)
+      {
+       layer_on(_RAISE);
+#ifdef BACKLIGHT_ENABLE
+       breathing_speed_set(2);
+       breathing_pulse();
+#endif
+       update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+    else
+      {
+       layer_off(_RAISE);
+       update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+    break;
+  case MACRO_LOWER:
+    if (record->event.pressed)
+      {
+       layer_on(_LOWER);
+#ifdef BACKLIGHT_ENABLE
+       breathing_speed_set(2);
+       breathing_pulse();
+#endif
+       update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+    else
+      {
+       layer_off(_LOWER);
+       update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+    break;
+    
   }
   return MACRO_NONE;
 };
index c676dd2c1c54fc1b745d2246c0a93792bed337b4..184142e0c1babb5fd632b22e50161018a7bbc9e0 100644 (file)
@@ -7,16 +7,10 @@ Christopher Browne
 This was originally based on the default keyboard map, but I have been
 doing sundry experimentation:
 
-1. Experiments
+1. Useful Experiments
 ----------------------------------------
 
- * To figure things out about the toolset
- * I'm an Emacs guy, so will be needing a fair bit of tuning
  * It made sense to mess around some with keyboard maps.
-   - I tried added Workman alongside Dvorak and Colemak
-     - Boy, oh boy, these don't help!!!
-     - I have done 30 years of learning of Emacs key mappings, and
-       these alternative keyboards massively mess me up
    - I added a keypad, originally based on keymaps/numpad.c, but
      mighty substantially revised, as that one seems to be rotated 90
      degrees from usual conventions for number pads
@@ -30,6 +24,26 @@ doing sundry experimentation:
    - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random
    - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random
    - Key [1][3] aka "e" spits out the keymap version number
+  * Trying out sgoodwin's "hold Enter down to get Shift"
+    - Liking this Quite Well Enough...
+    - Applied this to both Shift and Quote
+    - It seems likely that Alt should get a right-hand-side, akin to this...
+    - Alt needs to move, and get a RHS
+      - Hence ALTRIGHT, and shifted ROT_LED over
+      - Emacs likes this!!!  :-)
+    - I'm suspicious that I'll want to shift ROT_LED another location over,
+      so some modifier can replace the OS/KC_LGUI key
+  * I have added an alternate ADJUST layer that is activated via update_tri_layer()
+    - e.g. - LOWER+RAISE simultaneously
+    - This seems entirely more useful for handling my "special keys"
+      like the random numbers, user name, and such, than the keypad layer
+  * The _ADJUST layer provides a good place to have RESET
+    - But this isn't strictly enough; I want RESET somewhat accessible from
+      main layer lest an error hide that layer
+    - I never use the OS/KC_LGUI key (that's Command on MacOS, Windows
+      Key on Windows), so that's a good place to have it as a chord of
+      some sort
+        
 
 2. Some code structure ideas
 ---------------------------------------------------
@@ -48,8 +62,8 @@ doing sundry experimentation:
    only need to fit 4 symbols onto each line, rather than 12.
 
    I used enums to manage layer IDs and macro IDs so that I don't need
-   to care (beyond "start at 0", and arguably that's not needed) about
-   their values.
+   to care (beyond "start at 0", and arguably even that's not needed)
+   about their values.
 
 3. Things I did not like about the default mapping
 ---------------------------------------------------------
@@ -62,3 +76,38 @@ doing sundry experimentation:
      and shift ESC off the first column so KC_LCTL and KC_LALT can
      be on the first column.
    * I needed to swap ' and ENTER
+
+4. Unuseful experiments
+---------------------------------------------------------
+
+I have tried some things out that didn't turn out particularly well.
+I'll note some of these for posterity, hopefully helpful in not doing
+unwise things again...
+
+   * I tried added Workman alongside Dvorak and Colemak
+     - Boy, oh boy, these don't help!!!
+     - I have done 30 years of learning of Emacs key mappings, and
+       these alternative keyboards massively mess me up
+
+   * Space Cadet Shift; switching L_SHIFT to KC_LSP0, so that when I
+     just hit SHIFT, I get a left parens.  In principle, this is great
+     for Lisping.
+     - Unfortunately, there are times when mouse interfaces use SHIFT
+       to allow selecting multiple items, and this really interferes
+        with that
+
+5. TODO
+---------------------------------------------------------
+
+  * I use tmux quite a lot; the mollat keymap seems to have some
+    interesting helpers.  It might be interesting to add a "tmux
+    layer," or to have a few keys in a layer oriented towards that
+  * The mollat tmux layer also suggests some thoughts about Emacs
+    helpers.
+  * I do not presently have anything that handles X11 screen
+    switching, as with Control-Alt-various
+  * I ought to probably look into KC_LEAD, to have some key combos
+    that do not need to be concurrent
+  * The jeebak keymap seems to have some neat ideas:
+    - Number layer which is aggressive about having numbers in several places
+    - Touch layer seems interesting
diff --git a/keyboards/planck/keymaps/circuit/Makefile b/keyboards/planck/keymaps/circuit/Makefile
new file mode 100644 (file)
index 0000000..1ed0ff9
--- /dev/null
@@ -0,0 +1,25 @@
+
+# Build Options
+#   change to "no" to disable the options, or define them in the makefile.mk in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+TAP_DANCE_ENABLE = yes      # Enables the double-tap functionality of keys
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/circuit/Readme.md b/keyboards/planck/keymaps/circuit/Readme.md
new file mode 100644 (file)
index 0000000..cbdf5de
--- /dev/null
@@ -0,0 +1,44 @@
+##Design goals:
+1. Arrow keys always available.
+2. As close to a to my US layout 107-key QWERTY keyboard as I could manage, (i.e. as few arbitrary decisions as possible).
+3. Togglable DVORAK keyboard.
+4. most frequently used things in the easiest to reach places.
+5. Ability to game on it, just for fun.
+
+My layout differs from most in the placement the ARROW keys, `ESC`, VOL keys, use of double-tap `CAPS`, and the GAME LOCK function.
+
+I put the layer buttons in the usual spots. I originally wanted only function/symbols layer, but that proved detrimental. I use some timed press actions to save some space, but this has been accounted for, (see GAME LOCK below). I'm not fully satisfied with the current product (see NOTES below), so it may change in the future.
+
+##Effective layers:
+* Default later is obviously your letters and modifiers.
+* Lower layer [NUMBER] is your numbers and punctuation.
+* Upper layer [ACTION] is your symbols and actions.
+* Function layer is the infrequently used function keys, layout toggle, game lock, and reset.
+
+There is also a toggle for the DVORAK/QWERTY layers, but in normal typing this is not of concern.
+
+###Special keys:
+* `RSHFT` and `ENTER` are combined. Tap once for `ENTER` and hold for `RSHFT`. `ENTER` will be registered on release if released within 200 ms, else `RSHFT` is registered starting at 201 ms until release.
+* If for some reason, this interferes with the normal usage of the `ENTER` key in any way, (some problem that may never happen), I have added a regular non-modified `ENTER` key on the same key in the [ACTION] layer.
+* `LSHFT` and `CAPS` are also combined. The key works like a normal `LSHFT` unless double-tapped, in which case it counts as `CAPS`. This functionality unfortunately delays all key presses by at most 200 ms, but I have added ways to disable this both temporarily or permanently, described below.
+* A failsafe `CAPS` key is on the same key in the [ACTION] layer.
+* There are `UNDO`, `CUT`, `COPY`, and `PASTE` keys. This was intended to be a universal way to use these commands since in macOS cut is `⌘ + C` but in Windows it is `⌃ + C`. Unfortunately these special keys only work in Windows. ¯\\\_(ツ)\_/¯
+
+##Game lock:
+**TL;DR** the game lock toggle disables the double-tap `CAPS`, and disables `GUI` keys (WINDOWS key).
+
+I wished for this keyboard to be fully usable in the most demanding of games. The most demanding game I know of is ARMA 3 which has a binding to practically every individual key of a 107-key keyboard. This means I need to have pretty much every key possible somewhere. I also wanted the keyboard to be responsive in games for every critical keypress. This means having a way to disable features that introduce an inherent delay to registering keys, such as double-tap.
+
+I do not expect to see this used by the pros, but I enjoyed making it. As for use in ARMA 3, I got a little ways into the APEX campaign, but I found a few flaws. For Example, I cannot enable my HUD GPS since that requires `RCTRL`+`M` but `RCTRL` is not bound. The obvious fix is to rebind the action to a new key, but I still take this as a shortcoming of my layout.
+
+###If you wish to disable double-tap
+####Disable it temporarily
+Turn on the game lock. While on, it registers as normal `LSHFT` and has no delay. Whether in game mode or not, `CAPS` is on the same key in the [ACTION] layer.
+
+####Disable it permanently
+Open the `Makefile` and set `TAP_DANCE_ENABLE = no`. I wrote the layout to compensate for this change, and no further changes to the code should be necessary. Whether or not it's disabled, `CAPS` is on the same key in the [ACTION] layer.
+
+##Notes:
+* `ALT` and `GUI` are reversed compared to the normal US layout. I will also be using my Planck on my mac, and that's the standard in the Apple ecosystem. I may add a special compiler flag in the future to swap the two.
+* The DVORAK `Z` key is to the right of the `S` key instead of under it as part of a compromise I made to keep the ARROW keys available on the default layer. I prioritize the ARROW keys, so the DVORAK layout is the one to suffer.
+* I also support the little tones that the default Planck layout features, identical to them too, (minus those for layouts I don't support). To enable it, open the `Makefile` and set `AUDIO_ENABLE = yes`.
diff --git a/keyboards/planck/keymaps/circuit/config.h b/keyboards/planck/keymaps/circuit/config.h
new file mode 100644 (file)
index 0000000..22244f4
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* Tap-dance interval definition */
+#define TAPPING_TERM 200
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define MANUFACTURER    Ortholinear Keyboards
+#define PRODUCT         The Planck Keyboard
+#define DESCRIPTION     A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#ifdef SUBPROJECT_rev3
+    #include "rev3/config.h"
+#endif
+#ifdef SUBPROJECT_rev4
+    #include "rev4/config.h"
+#endif
+
+#endif
diff --git a/keyboards/planck/keymaps/circuit/keyboard-layout.png b/keyboards/planck/keymaps/circuit/keyboard-layout.png
new file mode 100644 (file)
index 0000000..e9296a6
Binary files /dev/null and b/keyboards/planck/keymaps/circuit/keyboard-layout.png differ
diff --git a/keyboards/planck/keymaps/circuit/keymap.c b/keyboards/planck/keymaps/circuit/keymap.c
new file mode 100644 (file)
index 0000000..63e01f3
--- /dev/null
@@ -0,0 +1,258 @@
+// Layout picture at http://www.keyboard-layout-editor.com/#/gists/125febfad6960add078e6f14256539b6
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _DVORAK 1
+#define _LOCKED 2
+#define _NUMBER 3
+#define _ACTION 4
+#define _FUNCTN 5
+
+enum planck_keycodes {
+       QWERTY = SAFE_RANGE,
+       DVORAK,
+       NUMBER,
+       ACTION
+};
+
+// Key code names
+#define SFT_ENT FUNC(0)        // Tap for enter, hold for right shift
+#define LOCK    FUNC(1)
+#define KC_PSTE KC_PASTE
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+#ifdef TAP_DANCE_ENABLE
+#define SFT_CAP TD(0)  // Left shift, double tap for caps
+#endif
+#ifndef TAP_DANCE_ENABLE
+#define SFT_CAP KC_LSFT // Regular left shift
+#endif
+
+// Tap Dance Definitions
+#ifdef TAP_DANCE_ENABLE
+qk_tap_dance_action_t tap_dance_actions[] = {
+       [0]  = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
+};
+#endif
+
+// Function definitions
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+       [1] = ACTION_LAYER_TOGGLE(_LOCKED)
+};
+
+// Layout definitions
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | BKSP |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |   '  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |*Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |  Up  |SftEnt|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl | Alt  | Cmd  | Vol- | ACTN |    Space    | NUMS | Vol+ | Left | Down | Left |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+       {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+       {KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+       {SFT_CAP, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   SFT_ENT},
+       {KC_LCTL, KC_LALT, KC_LGUI, KC_VOLD, ACTION,  KC_SPC,  KC_SPC,  NUMBER,  KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT}
+},
+
+/* DVORAK
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   '  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+       {_______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______},
+       {_______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_Z   },
+       {_______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    _______, _______},
+       {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+       
+/* LOCK
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      | NULL |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOCKED] = {
+       {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+       {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+       {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+       {_______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* NUMBERS
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   ~  | NULL | NULL | NULL |   |  |   _  |   +  |   {  |   }  |   ?  |   /  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   `  | NULL | NULL | NULL |   \  |   -  |   =  |   [  |   ]  |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |     NULL    |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMBER] = {
+       {_______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______},
+       {_______, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_QUES, KC_SLSH},
+       {_______, KC_GRV,  XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______, _______},
+       {_______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
+},
+
+/* ACTIONS
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |  Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | Undo |  Cut | Copy | Paste| NULL | NULL | NULL | NULL | NULL | PgUp | Enter|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      | Mute |      |     NULL    |      | NULL | Home | PgDn |  End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ACTION] = {
+       {_______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL },
+       {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+       {KC_CAPS, KC_UNDO, KC_CUT,  KC_COPY, KC_PSTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, KC_ENT },
+       {_______, _______, _______, KC_MUTE, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_HOME, KC_PGDN, KC_END }
+},
+
+/* FUNCTIONS
+ * ,-----------------------------------------------------------------------------------.
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  F13 |  F14 |  F15 |  F16 |  F17 |  F18 |  F19 |  F20 |  F21 |  F22 |  F23 |  F24 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | NULL | NULL | NULL | NULL | NULL |QWERTY|DVORAK| NULL | NULL | NULL | NULL | NULL |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Reset| NULL | Lock | NULL |      |     NULL    |      | NULL | NULL | NULL | NULL |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNCTN] = {
+       {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12 },
+       {KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24 },
+       {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY,  DVORAK,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+       {RESET,   XXXXXXX, LOCK,    XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+}
+       
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       switch (keycode) {
+               case QWERTY:
+                       if (record->event.pressed) {
+                               if (IS_LAYER_ON(_DVORAK)) {
+#ifdef AUDIO_ENABLE
+                                       PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+#endif
+                                       layer_off(_DVORAK);
+                               }
+                       }
+                       return false;
+                       break;
+               case DVORAK:
+                       if (record->event.pressed) {
+                               if (!IS_LAYER_ON(_DVORAK)) {
+#ifdef AUDIO_ENABLE
+                                       PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+#endif
+                                       layer_on(_DVORAK);
+                               }
+                       }
+                       return false;
+                       break;
+               case NUMBER:
+                       if (record->event.pressed) {
+                               layer_on(_NUMBER);
+                               update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+                       } else {
+                               layer_off(_NUMBER);
+                               update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+                       }
+                       return false;
+                       break;
+               case ACTION:
+                       if (record->event.pressed) {
+                               layer_on(_ACTION);
+                               update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+                       } else {
+                               layer_off(_ACTION);
+                               update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+                       }
+                       return false;
+                       break;
+       }
+       return true;
+}
+
+void matrix_init_user(void) {
+#ifdef AUDIO_ENABLE
+       startup_user();
+#endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+       _delay_ms(20); // gets rid of tick
+       PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+       PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+       _delay_ms(150);
+       stop_all_notes();
+}
+
+void music_on_user(void)
+{
+       music_scale_user();
+}
+
+void music_scale_user(void)
+{
+       PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c
new file mode 100644 (file)
index 0000000..33929cb
--- /dev/null
@@ -0,0 +1,234 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _MULTIMEDIA 3
+#define _ADJUST 4
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  BACKLIT
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define SFT_TAB  FUNC(0) // Tap for Enter, hold for Shift
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_TAP_KEY(_MULTIMEDIA, KC_TAB)
+ };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | AltGr| Alt  | Lower|    Space    | Raise| Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_ESC,  KC_Q,       KC_W,       KC_E,       KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {SFT_TAB, KC_A,       KC_S,       KC_D,       KC_F,   KC_G,   KC_H,   KC_J,   KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT, KC_Z,       KC_X,       KC_C,       KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {KC_LCTL, KC_LGUI,    KC_RALT,    KC_LALT,    LOWER,  KC_SPC, KC_SPC, RAISE,  KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |   (  |   )  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite|      |      |      |      |      |      |      |      |      |   {  |   }  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |   [  |   ]  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Home | PgDwn| PgUp | End  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {_______, _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    KC_LPRN,  KC_RPRN},
+  {BACKLIT, _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    KC_LCBR,  KC_RCBR},
+  {_______, _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    KC_LBRC,  KC_RBRC},
+  {_______, _______,  _______,  _______,  _______,  _______,  _______,  _______,  KC_HOME,  KC_PGDN,    KC_PGUP,  KC_END}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |  10  |   -  |   =  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |  `   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |   \  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* _MULTIMEDIA
+ * ,-----------------------------------------------------------------------------------.
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  | F10  | F11  | F12  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |  Psc |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      | Mute | Vol+ | Vol- |      |      |      |Insert|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Prev | Play | Next |  Del |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MULTIMEDIA] = {
+  {KC_F1,   KC_F2,      KC_F3,      KC_F4,      KC_F5,      KC_F6,      KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_F11,     KC_F12},
+  {_______, _______,    _______,    _______,    _______,    _______,    _______,    KC_PSCR,    _______,    _______,    _______,    _______},
+  {_______, _______,    _______,    _______,    _______,    KC_MUTE,    KC_VOLU,    KC_VOLD,    _______,    _______,    _______,    KC_INS},
+  {_______, _______,    _______,    _______,    _______,    _______,    _______,    _______,    KC_MPRV,    KC_MPLY,    KC_MNXT,    KC_DEL}
+},
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______, _______, _______, _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png
new file mode 100644 (file)
index 0000000..37b74cd
Binary files /dev/null and b/keyboards/planck/keymaps/dbroqua/layout.png differ
diff --git a/keyboards/planck/keymaps/dbroqua/readme.md b/keyboards/planck/keymaps/dbroqua/readme.md
new file mode 100644 (file)
index 0000000..777c76a
--- /dev/null
@@ -0,0 +1,14 @@
+# Dbroqua Layout
+
+![Layout](layout.png "Dbroqua Keymap")
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/e77306f9d14cc93fa26123b93b106474
+* Online keyboard layout editor (lower layer): http://www.keyboard-layout-editor.com/#/gists/786e03f6fbd274cb4f4e77a3d67f85fa
+* Online keyboard layout editor (raise layer): http://www.keyboard-layout-editor.com/#/gists/2e22c71f6910103c20d595d1caa713d6
+* Online keyboard layout editor (multimedia layer): http://www.keyboard-layout-editor.com/#/gists/132ebf8053508a7a81dfa8e0756edb40
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+```
\ No newline at end of file
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..17487ebbfc8fd64692d15608eb6021d57417b054 100644 (file)
@@ -5,21 +5,21 @@
 #   the appropriate keymap folder that will get included automatically
 #
 BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
 EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
 CONSOLE_ENABLE = no         # Console for debug(+400)
-COMMAND_ENABLE = yes        # Commands for debug and configuration
+COMMAND_ENABLE = no        # Commands for debug and configuration
 NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
-MIDI_ENABLE = no            # MIDI controls
+BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
+MIDI_ENABLE = yes            # MIDI controls
 AUDIO_ENABLE = yes           # Audio output on port C6
 UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight
 
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index 5f71ae7d19ab1850766e0029b5e3c41f0715e162..ddbe4d7b27ec7fa10a19cd57e4b5546080405b1f 100644 (file)
@@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [_LOWER] = {
   {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
-  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______},
   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
 },
 
@@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [_RAISE] = {
   {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
   {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
-  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______},
   {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
 },
 
index 877c4aed0ea55733160b627a5cb4fff3257c797b..3a8250a9b56355f8c6d5a43dba24058c674c5687 100644 (file)
@@ -16,6 +16,7 @@ AUDIO_ENABLE = no           # Audio output on port C6
 UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
 RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+ONEHAND_ENABLE = yes        # Enable one-hand typing
 
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
index 52acd1905ebebcdc69822434889b0935565096d5..cc093bee493cce874ea526978c57ff116ec20b08 100644 (file)
@@ -9,7 +9,7 @@
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN B1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index d9303fcae5940bf37e450aaafa89401ca5e1145c..569dbcc8aac396f8df88ae5f9df8499e4e63083d 100644 (file)
@@ -8,6 +8,7 @@
 #endif
 
 #include "eeconfig.h"
+#include "version.h"
 
 extern keymap_config_t keymap_config;
 
@@ -69,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
   {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
-  {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+  {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_FN0,  KC_FN0,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
 },
 
 /* Colemak
@@ -87,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
   {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
   {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
-  {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+  {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_FN0,  KC_FN0,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
 },
 
 /* Dvorak
@@ -105,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
   {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
   {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
-  {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+  {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_FN0,  KC_FN0,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
 },
 
 /* Lower
@@ -185,7 +186,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 
 const uint16_t PROGMEM fn_actions[] = {
-
+  ACTION_SWAP_HANDS_TAP_KEY(KC_SPC),
 };
 
 #ifdef AUDIO_ENABLE
diff --git a/keyboards/planck/keymaps/impossible/Makefile b/keyboards/planck/keymaps/impossible/Makefile
new file mode 100644 (file)
index 0000000..cf2c31f
--- /dev/null
@@ -0,0 +1,27 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c
new file mode 100644 (file)
index 0000000..503976f
--- /dev/null
@@ -0,0 +1,242 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _WORKMAN 0
+#define _FN 1
+#define _QWERTY 2
+#define _QW_FN 3
+#define _PLOVER 4
+#define _ADJ 5
+
+enum planck_keycodes {
+  WORKMAN = SAFE_RANGE,
+  QWERTY,
+  PLOVER
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Workman Alpha-numeric
+ * ,-----------------------------------------------------------------------------------------------.
+ * |   Q   |   D   |   R   |   W   |   B   |   F   |   U   |   P   |   J   |   7   |   8   |   9   |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |   A   |   S   |   H   |   T   |   G   |   N   |   E   |   O   |   I   |   4   |   5   |   6   |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |   Z   |   X   |   M   |   C   |   V   |   L   |   Y   |   K   |   Up  |   1   |   2   |   3   |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab|Gui/Esc|   ,   |CTL/Bsp| Fn/Ent|SFT/SPC|   .   |  Left |  Down | Right |   0   |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_WORKMAN] = {
+  {KC_Q,          KC_D,          KC_R,    KC_W,           KC_B,            KC_F,          KC_U,   KC_P,    KC_J,    KC_KP_7, KC_KP_8, KC_KP_9},
+  {KC_A,          KC_S,          KC_H,    KC_T,           KC_G,            KC_N,          KC_E,   KC_O,    KC_I,    KC_KP_4, KC_KP_5, KC_KP_6},
+  {KC_Z,          KC_X,          KC_M,    KC_C,           KC_V,            KC_L,          KC_Y,   KC_K,    KC_UP,   KC_KP_1, KC_KP_2, KC_KP_3},
+  {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENT), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJ, KC_ENT)}
+},
+
+/* FN-key held (Workman)
+ * ,-----------------------------------------------------------------------------------------------.
+ * |   !   |   @   |   #   |   $   |   %   |   ^   |   &   |   *   |  F12  |   F7  |   F8  |   F9  |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |  Tab  |   [   |   ]   |   -   |  Del  |   '   |   (   |   )   |  F11  |   F4  |   F5  |   F6  |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |  Menu |       |       |   =   |   \   |   /   |       |       |  PgUp |   F1  |   F2  |   F3  |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab|  Gui  |   ~   |CTL/Bsp| Fn/Ent|SFT/Spc|   ;   |  Home |  PgDn |  End  |  F10  |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_FN] = {
+  {KC_EXLM, KC_AT,       KC_HASH,     KC_DLR,   KC_PERC,   KC_CIRC, KC_AMPR,   KC_ASTR, KC_F12,  KC_F7,  KC_F8,  KC_F9},
+  {KC_TAB,  KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_QUOT, KC_LPRN,   KC_RPRN, KC_F11,  KC_F4,  KC_F5,  KC_F6},
+  {KC_MENU, _______,     _______,     KC_EQUAL, KC_BSLS,   KC_SLSH, XXXXXXX,   XXXXXXX, KC_PGUP, KC_F1,  KC_F2,  KC_F3},
+  {_______, KC_LGUI,     KC_GRAVE,    _______,  _______,   _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, _______}
+},
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------------.
+ * |Gui/Esc|   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   |   0   | Bksp  |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * | Ctrl  |   Q   |   W   |   E   |   R   |   T   |   Y   |   U   |   I   |   O   |   P   |   /   |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * | Shift |   A   |   S   |   D   |   F   |   G   |   H   |   J   |   K   |   L   |   ;   |   "   |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab|   Z   |   X   |   C   |   V   | Fn/SPC|   B   |   N   |   M   |   ,   |   .   |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_QWERTY] = {
+  {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5,               KC_6, KC_7, KC_8, KC_9,    KC_0,    KC_BSPC},
+  {KC_LCTL,       KC_Q, KC_W, KC_E, KC_R, KC_T,               KC_Y, KC_U, KC_I, KC_O,    KC_P,    KC_ENT},
+  {KC_LSFT,       KC_A, KC_S, KC_D, KC_F, KC_G,               KC_H, KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT},
+  {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QW_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT,  LT(_ADJ, KC_ENT)},
+},
+
+/* FN-key held (Qwerty)
+ * ,-----------------------------------------------------------------------------------------------.
+ * |  Gui  |   F1  |   F2  |   F3  |   F4  |   F5  |   F6  |   F7  |   F8  |   F9  |  F10  |  F11  |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |  Ctrl |   ~   |   [   |  PgUp |   ]   |       |       |   -   |   Up  |   =   |       |  F12  |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | Shift |  Tab  |  Home |  PgDn |  End  |  Del  |       |  Left |  Down | Right |       |       |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab|       |       |       |       | Fn/Spc|       |       |       |       |  Menu |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_QW_FN] = {
+  {KC_LGUI, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,     KC_F6,   KC_F7,   KC_F8,   KC_F9,    KC_F10,  KC_F11},
+  {_______, KC_GRAVE, KC_LBRC, KC_PGUP, KC_RBRC, XXXXXXX,   XXXXXXX, KC_MINS, KC_UP,   KC_EQUAL, XXXXXXX, KC_F12},
+  {_______, KC_TAB,   KC_HOME, KC_PGDN, KC_END,  KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX},
+  {_______, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, _______,   XXXXXXX, _______, _______, _______,  KC_MENU, _______}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------------------.
+ * |   S   |   T   |   P   |   H   |   *   |   F   |   P   |   L   |   T   |   D   |       |       |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |   S   |   K   |   W   |   R   |   *   |   R   |   B   |   G   |   S   |   Z   |       |       |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |   #   |   #   |   #   |   #   |       |   #   |   #   |   #   |   #   |   #   |       |       |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * |       |       |   A   |   O   |       |   E   |   U   |       |       |       |       |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+  {KC_Q,    KC_W,    KC_E, KC_R, KC_T,    KC_U, KC_I, KC_O,    KC_P,    KC_LBRC, XXXXXXX, XXXXXXX},
+  {KC_A,    KC_S,    KC_D, KC_F, KC_G,    KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT, XXXXXXX, XXXXXXX},
+  {KC_1,    KC_1,    KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1,    KC_1,    KC_1,    XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LT(_ADJ, KC_ENT)}
+},
+
+/* Adjust
+ * ,-----------------------------------------------------------------------------------------------.
+ * |       |       |       |       |       |       |       |       | Insert| PrtSc | Pause | RESET |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * |       |       |       |       |       |       |       | CapLk |Voice +| Audio |MIDIoff|       |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |       |       |       |       |       |       |       | ScrLk |Voice -| Music |MIDI on|       |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |       |       |       |       |       |       |       | Numlk |Workman| Qwerty| Plover|Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_ADJ] = {
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_INS,  KC_PSCR, KC_PAUSE, RESET},
+  {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN,  AU_TOG,  MI_OFF,   _______},
+  {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE,  MU_TOG,  MI_ON,    _______},
+  {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY,  PLOVER,   _______}
+}
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_goodbye[][2]    = SONG(GOODBYE_SOUND);
+
+float tone_workman[][2]    = SONG(QWERTY_SOUND);
+float tone_qwerty[][2]     = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case WORKMAN:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_workman, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_WORKMAN);
+      }
+      return false;
+      break;
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_plover, false, 0);
+        #endif
+        if (!eeconfig_is_enabled()) {
+          eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+        persistant_default_layer_set(1UL<<_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md
new file mode 100644 (file)
index 0000000..02c7191
--- /dev/null
@@ -0,0 +1,73 @@
+# The Impossible Layout
+
+The Impossible Layout is named such because it manages to fit in both a numpad and an inverted-T arrow cluster into the same layer as the alpha keys.
+
+## Main layout
+
+The Impossible Layout places the middle column of the alphas onto where the punctuation keys were, moving he most used punctuation to be accessed by the thumbs. Because removing the middle columns fits with the Workman layout's philosopy, Workman is used as the basis for the layout. This means the layout should be very easy to learn for Workman users, and reasonable for Colemak users. Other space gains are made by combining keys that are only ever chorded with other non symbol keys (with function-layer alternatives where needed).
+
+### Alpha-numeric layer
+
+|       |       |       |       |       |       |       |       |       |       |       |       |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|   Q   |   D   |   R   |   W   |   B   |   F   |   U   |   P   |   J   |   7   |   8   |   9   |
+|   A   |   S   |   H   |   T   |   G   |   N   |   E   |   O   |   I   |   4   |   5   |   6   |
+|   Z   |   X   |   M   |   C   |   V   |   L   |   Y   |   K   |   Up  |   1   |   2   |   3   |
+|Alt/Tab|Gui/Esc|   ,   |CTL/Bsp| Fn/Ent|SFT/SPC|   .   |  Left |  Down | Right |   0   |Adj/Ent|
+
+### Function layer
+
+|       |       |       |       |       |       |       |       |       |       |       |       |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|   !   |   @   |   #   |   $   |   %   |   ^   |   &   |   *   |  F12  |   F7  |   F8  |   F9  |
+|  Tab  |   [   |   ]   |   -   |  Del  |   '   |   (   |   )   |  F11  |   F4  |   F5  |   F6  |
+|  Menu |       |       |   =   |   \   |   /   |       |       |  PgUp |   F1  |   F2  |   F3  |
+|Alt/Tab|  Gui  |   ~   |CTL/Bsp| Fn/Ent|SFT/Spc|   ;   |  Home |  PgDn |  End  |  F10  |Adj/Ent|
+
+## Qwerty
+
+The Qwerty layer, mostly intended for gaming use, makes use of the doubled chorded/non-symbolic keys to obtain use of the entire alpha-numeric typing area.
+
+### Qwerty layer
+
+|       |       |       |       |       |       |       |       |       |       |       |       |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|Gui/Esc|   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9   |   0   | Bksp  |
+| Ctrl  |   Q   |   W   |   E   |   R   |   T   |   Y   |   U   |   I   |   O   |   P   |   /   |
+| Shift |   A   |   S   |   D   |   F   |   G   |   H   |   J   |   K   |   L   |   ;   |   "   |
+|Alt/Tab|   Z   |   X   |   C   |   V   | Fn/SPC|   B   |   N   |   M   |   ,   |   .   |Adj/Ent|
+
+### Qwerty Fn Layer
+
+|       |       |       |       |       |       |       |       |       |       |       |       |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|  Gui  |   F1  |   F2  |   F3  |   F4  |   F5  |   F6  |   F7  |   F8  |   F9  |  F10  |  F11  |
+|  Ctrl |   ~   |   [   |  PgUp |   ]   |       |       |   -   |   Up  |   =   |       |  F12  |
+| Shift |  Tab  |  Home |  PgDn |  End  |  Del  |       |  Left |  Down | Right |       |       |
+|Alt/Tab|       |       |       |       | Fn/Spc|       |       |       |       |  Menu |Adj/Ent|
+
+## Stenography
+
+The Steno/Plover layer moves the number row below the regular keys, providing a much more comfortable placement for the thumb keys. Using this layout will require a slightly different dictionary to account for different keys being adjacent to the number row.
+
+### Steno Layer
+
+|       |       |       |       |       |       |       |       |       |       |       |       |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|   S   |   T   |   P   |   H   |   *   |   F   |   P   |   L   |   T   |   D   |       |       |
+|   S   |   K   |   W   |   R   |   *   |   R   |   B   |   G   |   S   |   Z   |       |       |
+|   #   |   #   |   #   |   #   |       |   #   |   #   |   #   |   #   |   #   |       |       |
+|       |       |   A   |   O   |       |   E   |   U   |       |       |       |       |Adj/Ent|
+
+## Adjustments and Options
+
+In order to switch between layouts and change other keyboard settings, an adjustment layer is accessible from the same position over any layout.
+
+### Adjustment Layer
+
+|       |       |       |       |       |       |       |       |       |       |       |       |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|       |       |       |       |       |       |       |       | Insert| PrtSc | Pause | RESET |
+|       |       |       |       |       |       |       | CapLk |Voice +| Audio |MIDIoff|       |
+|       |       |       |       |       |       |       | ScrLk |Voice -| Music |MIDI on|       |
+|       |       |       |       |       |       |       | Numlk |Workman| Qwerty| Plover|Adj/Ent|
diff --git a/keyboards/planck/keymaps/jeebak/Makefile b/keyboards/planck/keymaps/jeebak/Makefile
new file mode 100644 (file)
index 0000000..cf2c31f
--- /dev/null
@@ -0,0 +1,27 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c
new file mode 100644 (file)
index 0000000..cb7ccb5
--- /dev/null
@@ -0,0 +1,459 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV
+};
+
+enum macro_keycodes {
+  KC_ALT_TAB,
+  KC_CMD_TAB,
+  KC_CTL_TAB,
+  KC_CMD_SLSH,
+  KC_AG_FIND,
+  KC_AG_AGAIN,
+  KC_AG_UNDO,
+  KC_AG_CUT,
+  KC_AG_COPY,
+  KC_AG_PASTE,
+  KC_AG_DESK_L,
+  KC_AG_DESK_R,
+  KC_AG_TAB_C,
+  KC_AG_TAB_N,
+  KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC     CTL_T(KC_ESC)               // Tap for Esc, hold for Ctrl
+#define SFT_ENT     SFT_T(KC_ENT)               // Tap for Enter, hold for Shift
+#define HPR_TAB     ALL_T(KC_TAB)               // Tap for Tab, hold for Hyper
+#define GUI_SEM     GUI_T(KC_SCLN)              // Tap for Semicolon, hold for GUI
+#define ALT_QUO     ALT_T(KC_QUOT)              // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC       LT(_TOUCHCURSOR, KC_SPC)    // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc)   LT(_MOUSECURSOR, kc)        // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB     M(KC_ALT_TAB)               // Macro for Alt-Tab
+#define CMD_TAB     M(KC_CMD_TAB)               // Macro for Cmd-Tab
+#define CTL_TAB     M(KC_CTL_TAB)               // Macro for Ctl-Tab
+#define CMD_SLSH    M(KC_CMD_SLSH)              // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND     M(KC_AG_FIND)               // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN    M(KC_AG_AGAIN)
+#define AG_UNDO     M(KC_AG_UNDO)
+#define AG_CUT      M(KC_AG_CUT)
+#define AG_COPY     M(KC_AG_COPY)
+#define AG_PASTE    M(KC_AG_PASTE)
+#define AG_D_L      M(KC_AG_DESK_L)             // For Virtual Desktop Switching: Left, and
+#define AG_D_R      M(KC_AG_DESK_R)             //                                Right
+#define AG_T_C      M(KC_AG_TAB_C)              // For Chrome, etc. Tab Close,
+#define AG_T_N      M(KC_AG_TAB_N)              //                  Tab New, and
+#define AG_T_R      M(KC_AG_TAB_R)              //                  Tab Reopen Closed
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  Bksp  |
+ * |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ * | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; | Alt/"  |
+ * |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ * | Shift    |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Sft/Ent |
+ * |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ * | PrntScrn | RGUI | Alt  | GUI  |Lower |  TC/Space   |Raise | Next | Vol- | Vol+ |  Play  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {HPR_TAB, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {CTL_ESC, KC_A,    KC_S, LT_MC(KC_D),KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    GUI_SEM, ALT_QUO},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SFT_ENT},
+  {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER,   LT_TC,   LT_TC,   RAISE,   KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------------.
+ * | Hyper/Tab|   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  |  Bksp  |
+ * |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ * | Ctrl/Esc |   A  |   R  | MC/S |   T  |   D  |   H  |   N  |   E  |   I  |   O  |   "    |
+ * |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ * | Shift    |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Sft/Ent |
+ * |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ * | PrntScrn | RGUI | Alt  | GUI  |Lower |  TC/Space   |Raise | Next | Vol- | Vol+ |  Play  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {HPR_TAB, KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {CTL_ESC, KC_A,    KC_R, LT_MC(KC_S),KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SFT_ENT},
+  {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER,   LT_TC,   LT_TC,   RAISE,   KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------------.
+ * | Hyper/Tab|   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |  Bksp  |
+ * |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ * | Ctrl/Esc |   A  |   O  | MC/E |   U  |   I  |   D  |   H  |   T  |   N  |   S  |   /    |
+ * |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ * | Shift    |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Sft/Ent |
+ * |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ * | PrntScrn | RGUI | Alt  | GUI  |Lower |  TC/Space   |Raise | Next | Vol- | Vol+ |  Play  |
+ * `-----------------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+  {HPR_TAB, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
+  {CTL_ESC, KC_A,    KC_O, LT_MC(KC_E),KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
+  {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    SFT_ENT},
+  {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER,   LT_TC,   LT_TC,   RAISE,   KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   [  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |   ]  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Brite |      |      |      |      |             |      | Prev | Stop | Slct | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+  {KC_LBRC, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {KC_RBRC, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   0  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   $  |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |   =  |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Brite |      |      |      |      |             |      | Prev | Stop | Slct | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_0,    KC_1,    KC_2,    KC_3,    KC_4,   KC_5,     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_DLR,  KC_4,    KC_5,    KC_6,    KC_DOT, KC_PLUS,  KC_DOT,  KC_4,    KC_5,    KC_6,    KC_ASTR, KC_PIPE},
+  {KC_EQL,  KC_7,    KC_8,    KC_9,    KC_0,   KC_MINS,  KC_DOT,  KC_1,    KC_2,    KC_3,    KC_SLSH, KC_BSLS},
+  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE}
+},
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,-----------------------------------------------------------------------------------.
+ * |AltTab|CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = {
+  {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_BSPC, _______},
+  {_______, KC_LALT, KC_SPC,  AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L,  AG_D_R },
+  {_______, AG_UNDO, AG_CUT,  AG_COPY, AG_PASTE,KC_GRV,  KC_PGDN, KC_DEL,  AG_T_N,  AG_T_R,  CMD_SLSH,_______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Mouse Layer
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_MOUSECURSOR] = {
+  {_______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______},
+  {_______, KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5},
+  {_______, _______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |Reset |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,   RESET}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_NOTE_ARRAY(tone_plover, false, 0);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+
+    bool use_cmd = true;    // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+    // quantum/quantum.c
+    if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+      use_cmd = false;      // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+    }
+
+    switch (id) {
+      case KC_ALT_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+      case KC_CMD_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+
+      case KC_CTL_TAB:
+        return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+      case KC_CMD_SLSH:
+        return (record->event.pressed ? MACRO( D(LGUI),  D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+      case KC_AG_FIND:
+        return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+      case KC_AG_AGAIN:
+        return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+      case KC_AG_UNDO:
+        return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+      case KC_AG_CUT:
+        return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+      case KC_AG_COPY:
+        return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+      case KC_AG_PASTE:
+        return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+      case KC_AG_DESK_L:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+      case KC_AG_DESK_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+      case KC_AG_TAB_C:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(W), END ) : MACRODOWN( D(LCTRL),            T(W), END );
+      case KC_AG_TAB_N:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(T), END ) : MACRODOWN( D(LCTRL),            T(T), END );
+      case KC_AG_TAB_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+    }
+
+    return MACRO_NONE;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md
new file mode 100644 (file)
index 0000000..e1dd1dc
--- /dev/null
@@ -0,0 +1,127 @@
+jeebak's layout
+=======================
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB     M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+  ,-----------------------------------------------------------------------------------------.
+  | Hyper/Tab|      |      |      |      |      |      |      |      |      |      |        |
+  |----------+------+------+------+------+-------------+------+------+------+------+--------|
+  | Ctrl/Esc |      |      |MC/kc |      |      |      |      |      |      |GUI/; | Alt/"  |
+  |----------+------+------+------+------+------|------+------+------+------+------+--------|
+  |          |      |      |      |      |      |      |      |      |      |      |Sft/Ent |
+  |----------+------+------+------+------+------+------+------+------+------+------+--------|
+  | PrntScrn | RGUI | Alt  | GUI  |Lower |  TC/Space   |Raise | Next | Vol- | Vol+ |  Play  |
+  `-----------------------------------------------------------------------------------------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+  ,-----------------------------------------------------------------------------------.
+  |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+  |------+------+------+------+------+-------------+------+------+------+------+------|
+  |   [  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+  |------+------+------+------+------+------|------+------+------+------+------+------|
+  |   ]  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |  \   |
+  |------+------+------+------+------+------+------+------+------+------+------+------|
+  |Brite |      |      |      |      |             |      | Prev | Stop | Slct | Mute |
+  `-----------------------------------------------------------------------------------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+  ,-----------------------------------------------------------------------------------.
+  |   0  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+  |------+------+------+------+------+-------------+------+------+------+------+------|
+  |   $  |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |  |   |
+  |------+------+------+------+------+------|------+------+------+------+------+------|
+  |   =  |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |  \   |
+  |------+------+------+------+------+------+------+------+------+------+------+------|
+  |Brite |      |      |      |      |             |      | Prev | Stop | Slct | Mute |
+  `-----------------------------------------------------------------------------------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+  ,-----------------------------------------------------------------------------------.
+  |AltTab|CmdTab|CtlTab|  GUI |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |
+  |------+------+------+------+------+-------------+------+------+------+------+------|
+  |      | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R|
+  |------+------+------+------+------+------|------+------+------+------+------+------|
+  |      | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|      |
+  |------+------+------+------+------+------+------+------+------+------+------+------|
+  |      |      |      |      |      |             |      |      |      |      |      |
+  `-----------------------------------------------------------------------------------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+  ,-----------------------------------------------------------------------------------.
+  |      |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |
+  |------+------+------+------+------+-------------+------+------+------+------+------|
+  |      |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+  |------+------+------+------+------+------|------+------+------+------+------+------|
+  |      |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |      |
+  |------+------+------+------+------+------+------+------+------+------+------+------|
+  |      |      |      |      |      |             |      |      |      |      |      |
+  `-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/planck/keymaps/jhenahan/Makefile b/keyboards/planck/keymaps/jhenahan/Makefile
new file mode 100644 (file)
index 0000000..83da2a7
--- /dev/null
@@ -0,0 +1,27 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/jhenahan/config.h b/keyboards/planck/keymaps/jhenahan/config.h
new file mode 100644 (file)
index 0000000..cd3adc4
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define FORCE_NKRO
+#define WORKMAN_SOUND COLEMAK_SOUND
+
+#endif
diff --git a/keyboards/planck/keymaps/jhenahan/keymap.c b/keyboards/planck/keymaps/jhenahan/keymap.c
new file mode 100644 (file)
index 0000000..2bda4b6
--- /dev/null
@@ -0,0 +1,314 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _WORKMAN 0
+#define _DEAD 1
+#define _QWERTY 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+enum planck_keycodes {
+  WORKMAN = SAFE_RANGE,
+  DEAD,
+  QWERTY,
+  LOWER,
+  RAISE,
+  PLOVER,
+  EXT_PLV,
+  TOG_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* Workman
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   D  |   R  |   W  |   B  |   J  |   F  |   U  |   P  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   H  |   T  |   G  |   Y  |   N  |   E  |   O  |   I  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   M  |   C  |   V  |   K  |   L  | Dead |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_WORKMAN] = {
+  {KC_TAB,              KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_BSPC},
+  {MT(MOD_LCTL,KC_ESC), KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT},
+  {KC_LSFT,             KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    DEAD,    KC_DOT,  KC_SLSH, KC_ENT},
+  {KC_LCTL,             KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Workman Dead Layer
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   %  |   &  |   ?  |   +  |   @  |   $  |   _  |   [  |   ]  |   !  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   /  |   (  |   =  |   0  |   {  |   }  |   1  |   *  |   )  |   -  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   6  |   7  |   8  |   9  |   |  |   \  |   2  |   3  |   4  |   5  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |   <  |   ~  |   `  |      ,      |   #  |   ^  |   >  |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DEAD] = {
+  {XXXXXXX,  KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT,   KC_DLR,  KC_UNDS, KC_LBRC, KC_RBRC,  KC_EXLM, XXXXXXX},
+  {XXXXXXX,  KC_SLSH, KC_LPRN, KC_EQL,  KC_0,    KC_LCBR, KC_RCBR, KC_1,    KC_ASTR, KC_RPRN,  KC_MINS, XXXXXXX},
+  {XXXXXXX,  KC_6,    KC_7,    KC_8,    KC_9,    KC_PIPE, KC_BSLS, KC_2,    KC_3,    KC_4,     KC_5,    XXXXXXX},
+  {XXXXXXX,  XXXXXXX, KC_LT,   KC_TILD, KC_GRV,  KC_COMM, KC_COMM, KC_HASH, KC_CIRC, KC_GT,    XXXXXXX, XXXXXXX}
+},
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      | Vol+ |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Prev | Next | Vol- | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS), _______, KC_VOLU, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV,    KC_MNXT, KC_VOLD, KC_MPLY}
+},
+
+/* Raise - KWM Interaction
+ * ,-----------------------------------------------------------------------------------.
+ * |Restrt|      |TgSplt|Flotng|Parent|FlScrn|InsMrk| InsW | InsS | InsN | InsE |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | Mark |Rotate|Prefix| Term | BSP  |SwpMrk|SwapW |SwapS |SwapN |SwapE |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |MarkW |MarkS |MarkN |MarkE |Monocl|Float |FocusW|FocusS|FocusN|FocusE|      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {LCAG(KC_Q), XXXXXXX,    LCAG(KC_S),       LCAG(KC_W),   LCAG(KC_D), LCAG(KC_F),        LCTL(S(KC_X)),    LCTL(S(KC_H)),    LCTL(S(KC_J)),     LCTL(S(KC_K)),    LCTL(S(KC_L)),    XXXXXXX},
+  {XXXXXXX,    LCAG(KC_M), LGUI(LCTL(KC_R)), LCAG(KC_DOT), LCAG(KC_T), LGUI(LCTL(KC_A)),  LCTL(LALT(KC_M)), LCTL(LALT(KC_H)), LCTL(LALT(KC_J)),  LCTL(LALT(KC_K)), LCTL(LALT(KC_L)), XXXXXXX},
+  {_______,    LCAG(KC_H), LCAG(KC_J),       LCAG(KC_K),   LCAG(KC_L), LGUI(LCTL(KC_S)),  LGUI(LCTL(KC_D)), LGUI(LALT(KC_H)), LGUI(LALT(KC_J)),  LGUI(LALT(KC_K)), LGUI(LALT(KC_L)), _______},
+  {_______,    _______,    _______,          _______,      _______,    _______,           _______,          _______,          _______,           _______,          _______,          _______}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_BSPC},
+  {TOG_PLV, KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_QUOT},
+  {EXT_PLV, XXXXXXX, XXXXXXX, KC_M,    KC_C,    XXXXXXX, XXXXXXX, KC_L,    KC_COMM, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Workmn|Plover|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  WORKMAN, PLOVER,  _______, _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_workman[][2]    = SONG(WORKMAN_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case WORKMAN:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_workman, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_WORKMAN);
+      }
+      return false;
+      break;
+    case DEAD:
+      if (record->event.pressed) {
+        layer_on(_DEAD);
+        set_oneshot_layer(_DEAD, ONESHOT_START);
+        clear_oneshot_layer_state(ONESHOT_PRESSED);
+      }
+      return false;
+      break;
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_NOTE_ARRAY(tone_plover, false, 0);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  case TOG_PLV:
+    if (record->event.pressed) {
+      register_code(KC_R);
+      register_code(KC_W);
+      register_code(KC_T);
+      register_code(KC_C);
+      register_code(KC_P);
+      register_code(KC_O);
+      clear_keyboard();
+    }
+    return false;
+    break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/jhenahan/readme.md b/keyboards/planck/keymaps/jhenahan/readme.md
new file mode 100644 (file)
index 0000000..a80506f
--- /dev/null
@@ -0,0 +1,41 @@
+# jhenahan's layout
+
+## Layout
+
+The base layer is based on the
+[Workman Dead](https://github.com/ojbucao/Workman/tree/master/mac) layout. The
+primary interaction layer is a slightly modified Workman layout with a 'dead'
+key on the third row under the middle finger. The dead key activates a layer of
+special characters.
+
+## [Layers](http://www.keyboard-layout-editor.com/#/gists/2b875f7d5d76fe4408c0a5b3bd76ddae)
+### Function Layer
+
+This is very slightly modified from the default, mainly just to rearrange the media keys.
+
+### [KWM](https://github.com/koekeishiya/kwm) Interaction Layer
+
+`kwm` is a tiling window manager for OS X. The keys defined in my keymap
+correspond to the settings I use in
+[my `kwmrc` file](https://github.com/jhenahan/dotfiles/blob/master/kwm/kwmrc).
+
+### QWERTY
+
+Just in case.
+
+### [Plover](http://www.openstenoproject.org/plover/)
+
+This layout functions exactly as a Workman layout unless you're running the Plover
+application. Includes a key for toggling Plover while it's running.
+
+Add this in the appropriate section of your `plover.cfg` to allow this altered layout:
+
+``` ini
+[System: English Stenotype]
+keymap[keyboard] = [["#", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="]], ["S-", ["q", "a"]], ["T-", ["d"]], ["K-", ["s"]], ["P-", ["r"]], ["W-", ["h"]], ["H-", ["w"]], ["R-", ["t"]], ["A-", ["m"]], ["O-", ["c"]], ["*", ["y", "g", "j", "b"]], ["-E", ["l"]], ["-U", [","]], ["-F", ["f"]], ["-R", ["n"]], ["-P", ["u"]], ["-B", ["e"]], ["-L", ["p"]], ["-G", ["o"]], ["-T", [";"]], ["-S", ["i"]], ["-D", ["BackSpace"]], ["-Z", ["'"]], ["no-op", ["\\", "]", "x", ".", "/"]], ["arpeggiate", ["space"]]]
+```
+
+### Adjust Layer
+
+This layer is only slightly modified from the default to remove Dvorak and
+Colemak and replace them with Workman.
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b2ca419445f96612a47a1d0d62f5adef5215a505 100644 (file)
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 
 # Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b2ca419445f96612a47a1d0d62f5adef5215a505 100644 (file)
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 
 # Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b2ca419445f96612a47a1d0d62f5adef5215a505 100644 (file)
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 
 # Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b2ca419445f96612a47a1d0d62f5adef5215a505 100644 (file)
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 
 # Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b2ca419445f96612a47a1d0d62f5adef5215a505 100644 (file)
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 
 # Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/premek/Makefile b/keyboards/planck/keymaps/premek/Makefile
new file mode 100644 (file)
index 0000000..b2ca419
--- /dev/null
@@ -0,0 +1,28 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/premek/keymap.c b/keyboards/planck/keymaps/premek/keymap.c
new file mode 100644 (file)
index 0000000..9b212ab
--- /dev/null
@@ -0,0 +1,231 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = {
+  {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_DEL,  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P   },
+  {KC_LSFT, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_TAB,  KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN},
+  {KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_BSPC, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH},
+  {KC_LGUI, _______, _______, KC_LALT, LOWER,   KC_SPC,  KC_ENT,  KC_SPC,  RAISE,   KC_RALT, _______, KC_RGUI}
+},
+[_COLEMAK] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+[_DVORAK] = {
+  {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
+  {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+[_LOWER] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0},
+  {_______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   _______, KC_F6,   KC_HOME, KC_PGDN, KC_PGUP, KC_END },
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  _______, KC_F12,  KC_PLUS, KC_PIPE, KC_LCBR, KC_RCBR},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+[_RAISE] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
+  {_______, _______, _______, KC_QUOT, KC_MINS, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT},
+  {_______, KC_TILD, KC_GRV,  KC_PLUS, KC_EQL,  KC_PIPE, _______, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+},
+[_ADJUST] = {
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_NOTE_ARRAY(tone_plover, false, 0);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/premek/readme.md b/keyboards/planck/keymaps/premek/readme.md
new file mode 100644 (file)
index 0000000..16debdd
--- /dev/null
@@ -0,0 +1,4 @@
+# Split Layout
+Inspired by TECK
+
+[Layout](http://www.keyboard-layout-editor.com/##@_switchMount=cherry&switchBrand=gateron&switchType=KS-3-Tea&pcb:true%3B&@_c=%23e6e6e6&t=%23757575&a:7&fa@:5%3B%3B&=Esc&_a:4&fa@:5&:0&:0&:0&:0&:0&:0&:0&:0&:5%3B%3B&=%0A%0A!%0A1%0A%0A%0A%0A%0A%0AQ&=%0A%0A%2F@%0A2%0A%0A%0A%0A%0A%0AW&=%0A%0A%23%0A3%0A%0A%0A%0A%0A%0AE&=%0A%0A$%0A4%0A%0A%0A%0A%0A%0AR&=%0A%0A%25%0A5%0A%0A%0A%0A%0A%0AT&_c=%23e3b02d&a:7%3B&=Del&_c=%23e6e6e6&a:4%3B&=%0A%0A%5E%0A6%0A%0A%0A%0A%0A%0AY&=%0A%0A%2F&%0A7%0A%0A%0A%0A%0A%0AU&=%0A%0A*%0A8%0A%0A%0A%0A%0A%0AI&=%0A%0A(%0A9%0A%0A%0A%0A%0A%0AO&=%0A%0A)%0A0%0A%0A%0A%0A%0A%0AP%3B&@_a:7%3B&=Shift&_a:4%3B&=%0A%0A%0AF1%0A%0A%0A%0A%0A%0AA&=%0A%0A%0AF2%0A%0A%0A%0A%0A%0AS&=%0A%0A'%0AF3%0A%0A%0A%0A%0A%0AD&_c=%23e3b02d&n:true%3B&=%0A%0A-%0AF4%0A%0A%0A%0A%0A%0AF&_c=%23e6e6e6%3B&=%0A%0A%0AF5%0A%0A%0A%0A%0A%0AG&_c=%23e3b02d&a:7%3B&=Tab&_c=%23e6e6e6&a:4%3B&=%0A%0A%0AF6%0A%0A%0A%0A%0A%0AH&_c=%23e3b02d&n:true%3B&=%0A%0A%2F&larr%2F%3B%0AHom%0A%0A%0A%0A%0A%0AJ&_c=%23e6e6e6%3B&=%0A%0A%2F&darr%2F%3B%0APgD%0A%0A%0A%0A%0A%0AK&=%0A%0A%2F&uarr%2F%3B%0APgU%0A%0A%0A%0A%0A%0AL&=%0A%0A%2F&rarr%2F%3B%0AEnd%0A%0A%0A%0A%0A%0A%2F%3B%3B&@_a:7%3B&=Ctrl&_a:4%3B&=%0A%0A~%0AF7%0A%0A%0A%0A%0A%0AZ&=%0A%0A%60%0AF8%0A%0A%0A%0A%0A%0AX&=%0A%0A+%0AF9%0A%0A%0A%0A%0A%0AC&=%0A%0A%2F=%0AF10%0A%0A%0A%0A%0A%0AV&=%0A%0A%7C%0AF11%0A%0A%0A%0A%0A%0AB&_c=%23e3b02d&a:7%3B&=BSp&_c=%23e6e6e6&a:4%3B&=%0A%0A%5C%0AF12%0A%0A%0A%0A%0A%0AN&=%0A%0A%5B%0A%0A%0A%0A%0A%0A%0AM&=%0A%0A%5D%0A%0A%0A%0A%0A%0A%0A,&=%0A%0A%7B%0A%0A%0A%0A%0A%0A%0A.&=%0A%0A%7D%0A%0A%0A%0A%0A%0A%0A%2F%2F%3B&@_a:7%3B&=&=&=&=Alt&_c=%23e3b02d%3B&=%2F&dArr%2F%3B&_c=%23e6e6e6%3B&=spc&_c=%23e3b02d%3B&=%2F&crarr%2F%3B&_c=%23e6e6e6%3B&=spc&_c=%23e3b02d%3B&=%2F&uArr%2F%3B&_c=%23e6e6e6%3B&=Alt&=&=)
diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile
new file mode 100644 (file)
index 0000000..d9d4f3d
--- /dev/null
@@ -0,0 +1,25 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = no         # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+UNICODEMAP_ENABLE = yes     # Unicode map
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+API_SYSEX_ENABLE = no
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c
new file mode 100644 (file)
index 0000000..6e7f4e7
--- /dev/null
@@ -0,0 +1,447 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+  #include "musical_notes.h"
+#endif
+#include "eeconfig.h"
+#include "process_unicode.h"
+#include "quantum.h"
+
+extern keymap_config_t keymap_config;
+
+enum layers {
+  _QWERTY,
+  _COLEMAK,
+  _WORKMAN,
+  _PUNC,
+  _NUM,
+  _FUNC,
+  _EMOJI,
+  _GUI,
+};
+
+enum planck_keycodes {
+  // layouts
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  WORKMAN,
+
+  // layer switchers
+  PUNC,
+  NUM,
+  FUNC,
+  EMOJI,
+  GUI,
+
+  // os switchers
+  LINUX,
+  WIN,
+  OSX,
+};
+
+// Fillers to make layering clearer
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// unicode map
+
+enum unicode_name {
+  GRIN, // grinning face 😊
+  TJOY, // tears of joy 😂
+  SMILE, // grining face with smiling eyes 😁
+  HEART, // heart ❤
+  EYERT, // smiling face with heart shaped eyes 😍
+  CRY, // crying face 😭
+  SMEYE, // smiling face with smiling eyes 😊
+  UNAMU, // unamused 😒
+  KISS, // kiss 😘
+  HART2, // two hearts 💕
+  WEARY, // weary 😩
+  OKHND, // ok hand sign 👌
+  PENSV, // pensive 😔
+  SMIRK, // smirk 😏
+  RECYC, // recycle ♻
+  WINK, // wink 😉
+  THMUP, // thumb up 👍
+  THMDN, // thumb down 👎
+  PRAY, // pray 🙏
+  PHEW, // relieved 😌
+  MUSIC, // musical notes
+  FLUSH, // flushed 😳
+  CELEB, // celebration 🙌
+  CRY2, // crying face 😢
+  COOL, // smile with sunglasses 😎
+  NOEVS, // see no evil
+  NOEVH, // hear no evil
+  NOEVK, // speak no evil
+  POO, // pile of poo
+  EYES, // eyes
+  VIC, // victory hand
+  BHART, // broken heart
+  SLEEP, // sleeping face
+  SMIL2, // smiling face with open mouth & sweat
+  HUNRD, // 100
+  CONFU, // confused
+  TONGU, // face with tongue & winking eye
+  DISAP, // disappointed
+  YUMMY, // face savoring delicious food
+  CLAP, // hand clapping
+  FEAR, // face screaming in fear
+  HORNS, // smiling face with horns
+  HALO, // smiling face with halo
+  BYE, // waving hand
+  SUN, // sun
+  MOON, // moon
+  SKULL, // skull
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+  [GRIN] = 0x1F600,
+  [TJOY] = 0x1F602,
+  [SMILE] = 0x1F601,
+  [HEART] = 0x2764,
+  [EYERT] = 0x1f60d,
+  [CRY] = 0x1f62d,
+  [SMEYE] = 0x1F60A,
+  [UNAMU] = 0x1F612,
+  [KISS] = 0x1F618,
+  [HART2] = 0x1F495,
+  [WEARY] = 0x1F629,
+  [OKHND] = 0x1F44C,
+  [PENSV] = 0x1F614,
+  [SMIRK] = 0x1F60F,
+  [RECYC] = 0x267B,
+  [WINK] = 0x1F609,
+  [THMUP] = 0x1F44D,
+  [THMDN] = 0x1F44E,
+  [PRAY] = 0x1F64F,
+  [PHEW] = 0x1F60C,
+  [MUSIC] = 0x1F3B6,
+  [FLUSH] = 0x1F633,
+  [CELEB] = 0x1F64C,
+  [CRY2] = 0x1F622,
+  [COOL] = 0x1F60E,
+  [NOEVS] = 0x1F648,
+  [NOEVH] = 0x1F649,
+  [NOEVK] = 0x1F64A,
+  [POO] = 0x1F4A9,
+  [EYES] = 0x1F440,
+  [VIC] = 0x270C,
+  [BHART] = 0x1F494,
+  [SLEEP] = 0x1F634,
+  [SMIL2] = 0x1F605,
+  [HUNRD] = 0x1F4AF,
+  [CONFU] = 0x1F615,
+  [TONGU] = 0x1F61C,
+  [DISAP] = 0x1F61E,
+  [YUMMY] = 0x1F60B,
+  [CLAP] = 0x1F44F,
+  [FEAR] = 0x1F631,
+  [HORNS] = 0x1F608,
+  [HALO] = 0x1F607,
+  [BYE] = 0x1F44B,
+  [SUN] = 0x2600,
+  [MOON] = 0x1F314,
+  [SKULL] = 0x1F480,
+};
+
+
+// hybrid shift - =
+// #undef KC_LSFT
+// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
+// #undef KC_RSFT
+// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
+
+
+// hybrid right-gui & scroll lock (mapped to Compose in OS)
+#undef KC_RCTL
+#define KC_RCTL MT(MOD_LCTL, KC_SLCK)
+
+// keymaps
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Punc | Num  |    Space    | Func |Emoji |AltGr | GUI  | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT },
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT},
+  {KC_LCTL, KC_LGUI, KC_LALT, PUNC,    NUM,     KC_SPC,  KC_SPC,  FUNC,    EMOJI,   KC_RALT, KC_RGUI, KC_RCTL}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Punc | Num  |    Space    | Func |Emoji |AltGr | GUI  | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_ENT },
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT},
+  {KC_LCTL, KC_LGUI, KC_LALT, PUNC,    NUM,     KC_SPC,  KC_SPC,  FUNC,    EMOJI,   KC_RALT, KC_RGUI, KC_RCTL}
+},
+
+/* Workman
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   D  |   R  |   W  |   B  |   J  |   F  |   U  |   P  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   H  |   T  |   G  |   Y  |   N  |   E  |   O  |   I  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   M  |   C  |   V  |   K  |   K  |   ,  |   .  |   /  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Punc | Num  |    Space    | Func |Emoji |AltGr | GUI  | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_WORKMAN] = {
+  {KC_TAB,  KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,    KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_H,    KC_T,    KC_G,    KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    KC_ENT },
+  {KC_LSFT, KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,    KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT},
+  {KC_LCTL, KC_LGUI, KC_LALT, PUNC,    NUM,     KC_SPC,  KC_SPC,  FUNC,    EMOJI,   KC_RALT, KC_RGUI, KC_RCTL}
+},
+
+/* Punc
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   `  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |   \  |   -  |   =  |   <  |   >  |   (  |   )  |   '  |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |   |  |   _  |   +  |   {  |   }  |   [  |   ]  |   "  |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PUNC] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV },
+  {XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS,  KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Num
+ * ,-----------------------------------------------------------------------------------.
+ * |  ^   |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |  @   |  A   |  B   |  C   |  (   |  )   |   4  |   5  |   6  |   :  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |  &   |  #   |  D   |  E   |  F   |  [   |  ]   |   1  |   2  |   3  |   /  |  *   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |  x   |      |             |   0  |   ,  |   .  |   +  |  -   |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUM] = {
+  {KC_CIRC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC},
+  { KC_ESC,   KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN,    KC_4,    KC_5,    KC_6, KC_COLN,  KC_ENT},
+  {KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC,    KC_1,    KC_2,    KC_3, KC_SLSH, KC_ASTR},
+  {_______, _______, _______,    KC_X, _______,  KC_SPC,  KC_SPC,    KC_0, KC_COMM,  KC_DOT, KC_PLUS, KC_MINS}
+},
+
+/* Func
+ * ,-----------------------------------------------------------------------------------.
+ * |      |  F1  |  F2  |  F3  |  F4  |      |      | PgUp |  Up  | PgDn | PgUp | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  F5  |  F6  |  F7  |  F8  |PrtSc |      | Left | Down | Right| PgDn | Ins  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F9  |  F10 |  F11 |  F12 |      |      |      | Home |  End |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = {
+  {XXXXXXX,   KC_F1,   KC_F2,   KC_F3,   KC_F4, XXXXXXX, XXXXXXX, KC_PGUP,   KC_UP, KC_PGDN, KC_PGUP,  KC_DEL},
+  {XXXXXXX,   KC_F5,   KC_F6,   KC_F7,  KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,  KC_INS},
+  {_______,   KC_F9,  KC_F10,  KC_F11,  KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME,  KC_END, XXXXXXX, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Emoji
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_EMOJI] = {
+  {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)},
+  {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART),  X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)},
+  {X(THMDN),X(SLEEP), X(CLAP),  X(CRY),  X(VIC),X(BHART),  X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)},
+  {  X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)}
+},
+
+/* GUI
+ * ,-----------------------------------------------------------------------------------.
+ * |      |  D1  |  D2  |  D3  |  D4  |  D5  |  D6  |  D7  |  D8  |  D9  |  D10 |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Linux |      | Vol- | Mute | Vol+ |      |      |  D-  |      |  D+  |      |Qwerty|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Win  |      | Prev | Play | Next |      |      |      |      |      |      |Colmak|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | OSX  |      |      |      |      |  BL- |  BL+ |      |      |      |      |Workmn|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GUI] = {
+  {_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______},
+  {  LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY},
+  {    WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, COLEMAK},
+  {    OSX, _______, _______, _______, _______,  BL_DEC,  BL_INC, _______, _______, _______, _______, WORKMAN}
+},
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_workman[][2]    = SONG(DVORAK_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
+float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
+float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  // faux clicky
+  if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
+
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case WORKMAN:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_workman, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_WORKMAN);
+      }
+      return false;
+      break;
+    case PUNC:
+      if (record->event.pressed) {
+        layer_on(_PUNC);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+      } else {
+        layer_off(_PUNC);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+      }
+      return false;
+      break;
+    case EMOJI:
+      if (record->event.pressed) {
+        layer_on(_EMOJI);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+      } else {
+        layer_off(_EMOJI);
+        update_tri_layer(_PUNC, _EMOJI, _GUI);
+      }
+      return false;
+      break;
+    case NUM:
+      if (record->event.pressed) {
+        layer_on(_NUM);
+      } else {
+        layer_off(_NUM);
+      }
+      return false;
+      break;
+    case FUNC:
+      if (record->event.pressed) {
+        layer_on(_FUNC);
+      } else {
+        layer_off(_FUNC);
+      }
+      return false;
+      break;
+    case LINUX:
+      set_unicode_input_mode(UC_LNX);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_linux, false, 0);
+      #endif
+      return false;
+      break;
+    case WIN:
+      set_unicode_input_mode(UC_WINC);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_windows, false, 0);
+      #endif
+      return false;
+      break;
+    case OSX:
+      set_unicode_input_mode(UC_OSX);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_osx, false, 0);
+      #endif
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+  #ifdef AUDIO_ENABLE
+      startup_user();
+  #endif
+  set_unicode_input_mode(UC_LNX);
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/priyadi/readme.md b/keyboards/planck/keymaps/priyadi/readme.md
new file mode 100644 (file)
index 0000000..99bdd9d
--- /dev/null
@@ -0,0 +1,11 @@
+# Priyadi's Planck Layout
+
+Features:
+
+- Supports QWERTY, Colemak and Workman layouts.
+- Cursor and nav cluster on home row.
+- Hybrid number row and numpad, located on home row.
+- Number layer supports hexadecimal input.
+- Left and right side modifiers.
+- Emoji layer. An entire layer filled with common emojis.
+- Faux-clickey (poor man's replacement for Cherry blue switches)
\ No newline at end of file
index 0b2f060de409b8c1e27f6a6e9cf127bcbb6df43f..c92ca1bffafaff7ad9edcd9d4920cb860c3512d9 100644 (file)
@@ -1,12 +1,15 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 # Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
+#   change to "no" to disable the options, or define them in the Makefile in
 #   the appropriate keymap folder that will get included automatically
 #
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE  = yes # Mouse keys(+4700)
 EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
-CONSOLE_ENABLE   = no  # Console for debug(+400)
+CONSOLE_ENABLE   = yes # Console for debug(+400)
 COMMAND_ENABLE   = yes # Commands for debug and configuration
 NKRO_ENABLE      = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
@@ -21,4 +24,4 @@ SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
index c857a3e89dbea44c7b4ed80fd26becd75da09ac6..1004c8b99f54f8a2f2683dcee9ddfbcbe041b7c8 100644 (file)
@@ -59,13 +59,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
 )
 
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 28     // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
 
 /*
  * Feature disable options
@@ -73,10 +68,18 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 /* disable debug print */
-//#define NO_DEBUG
+#ifndef NO_DEBUG
+#  define NO_DEBUG
+#endif
 
 /* disable print */
-//#define NO_PRINT
+// #ifndef NO_PRINT
+// #  define NO_PRINT
+// #endif
+
+/* Only print user print statements */
+#define USER_PRINT
+
 
 /* disable action features */
 //#define NO_ACTION_LAYER
index 2fc5f0da16f7dfa913324c527f94574bb735b70b..6ad95832d24ae27f07070159a73c400a18ba822e 100644 (file)
@@ -2,48 +2,59 @@
 #include "action_layer.h"
 #include "eeconfig.h"
 #include "led.h"
+#include "mousekey.h"
 
 #ifdef AUDIO_ENABLE
     #include "audio.h"
     #include "song_list.h"
 #endif
 
-#define LAYER_QWERTY                     0
-#define LAYER_COLEMAK                    1
-#define LAYER_DVORAK                     2
-#define LAYER_UPPER                      3
-#define LAYER_LOWER                      4
-#define LAYER_FUNCTION                   5
-#define LAYER_MOUSE                      6
-#define LAYER_ADJUST                     7
-
-#define MACRO_QWERTY                     0
-#define MACRO_COLEMAK                    1
-#define MACRO_DVORAK                     2
-#define MACRO_UPPER                      3
-#define MACRO_LOWER                      4
-#define MACRO_FUNCTION                   5
-#define MACRO_MOUSE                      6
-#define MACRO_TIMBRE_1                   7
-#define MACRO_TIMBRE_2                   8
-#define MACRO_TIMBRE_3                   9
-#define MACRO_TIMBRE_4                  10
-#define MACRO_TEMPO_U                   11
-#define MACRO_TEMPO_D                   12
-#define MACRO_TONE_DEFAULT              13
-#define MACRO_MUSIC_TOGGLE              14
-#define MACRO_AUDIO_TOGGLE              16
-#define MACRO_INC_VOICE                 18
-#define MACRO_DEC_VOICE                 19
-#define MACRO_BACKLIGHT                 20
-#define MACRO_BREATH_TOGGLE             21
-#define MACRO_BREATH_SPEED_INC          23
-#define MACRO_BREATH_SPEED_DEC          24
-#define MACRO_BREATH_DEFAULT            25
+enum keyboard_layers {
+  LAYER_QWERTY = 0,
+  LAYER_UPPER,
+  LAYER_LOWER,
+  LAYER_FUNCTION,
+  LAYER_MOUSE,
+  LAYER_ADJUST,
+};
+enum keyboard_macros {
+  MACRO_QWERTY = 0,
+  MACRO_UPPER,
+  MACRO_LOWER,
+  MACRO_FUNCTION,
+  MACRO_MOUSE,
+  MACRO_TIMBRE_1,
+  MACRO_TIMBRE_2,
+  MACRO_TIMBRE_3,
+  MACRO_TIMBRE_4,
+  MACRO_TEMPO_U,
+  MACRO_TEMPO_D,
+  MACRO_TONE_DEFAULT,
+  MACRO_MUSIC_TOGGLE,
+  MACRO_AUDIO_TOGGLE,
+  MACRO_INC_VOICE,
+  MACRO_DEC_VOICE,
+  MACRO_BACKLIGHT,
+  MACRO_BREATH_TOGGLE,
+  MACRO_BREATH_SPEED_INC,
+  MACRO_BREATH_SPEED_DEC,
+  MACRO_BREATH_DEFAULT,
+  MACRO_MOUSE_MOVE_UL,
+  MACRO_MOUSE_MOVE_UR,
+  MACRO_MOUSE_MOVE_DL,
+  MACRO_MOUSE_MOVE_DR,
+  MACRO_HELP_1,
+  MACRO_HELP_2,
+  MACRO_HELP_3,
+  MACRO_HELP_4,
+  MACRO_HELP_5,
+  MACRO_HELP_6,
+  MACRO_HELP_7,
+  MACRO_HELP_8,
+  MACRO_HELP_9,
+};
 
 #define M_QWRTY             M(MACRO_QWERTY)
-#define M_COLMK             M(MACRO_COLEMAK)
-#define M_DVORK             M(MACRO_DVORAK)
 #define M_UPPER             M(MACRO_UPPER)
 #define M_LOWER             M(MACRO_LOWER)
 #define M_FUNCT             M(MACRO_FUNCTION)
 #define M_BSPDU             M(MACRO_BREATH_SPEED_INC)
 #define M_BSPDD             M(MACRO_BREATH_SPEED_DEC)
 #define M_BDFLT             M(MACRO_BREATH_DEFAULT)
+#define M_MS_UL             M(MACRO_MOUSE_MOVE_UL)
+#define M_MS_UR             M(MACRO_MOUSE_MOVE_UR)
+#define M_MS_DL             M(MACRO_MOUSE_MOVE_DL)
+#define M_MS_DR             M(MACRO_MOUSE_MOVE_DR)
+#define M_HELP1             M(MACRO_HELP_1)
+#define M_HELP2             M(MACRO_HELP_2)
+#define M_HELP3             M(MACRO_HELP_3)
+#define M_HELP4             M(MACRO_HELP_4)
+#define M_HELP5             M(MACRO_HELP_5)
+#define M_HELP6             M(MACRO_HELP_6)
+#define M_HELP7             M(MACRO_HELP_7)
+#define M_HELP8             M(MACRO_HELP_8)
+#define M_HELP9             M(MACRO_HELP_9)
 
 
 #define VC_UP               M(MACRO_INC_VOICE)
 #define SC_ACLS             LALT(KC_F4)
 #define SC_CCLS             LCTL(KC_F4)
 
+#define TG_NKRO             MAGIC_TOGGLE_NKRO
 #define OS_SHFT             KC_FN0
 
 #define _______             KC_TRNS
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-/* QWERTY
- * .-----------------------------------------------------------------------------------------------------------.
- * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | UP     | ENTER  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | SPACE  | SPACE  | LOWER  | SHIFT  | LEFT   | DOWN   | RIGHT  |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_QWERTY]       = {  // QWERTY
-  { KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC  },
-  { KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT  },
-  { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_ENT   },
-  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT  },
- },
-
-/* COLEMAK
- * .-----------------------------------------------------------------------------------------------------------.
- * | TAB    | Q      | W      | F      | P      | G      | J      | L      | U      | Y      | ;      | ESC    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | BACKSP | A      | R      | S      | T      | D      | H      | N      | E      | I      | O      | '      |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LSHIFT | Z      | X      | C      | V      | B      | K      | M      | ,      | .      | UP     | ENTER  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | SPACE  | SPACE  | LOWER  | SHIFT  | LEFT   | DOWN   | RIGHT  |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_COLEMAK]      = { // COLEMAK
-  { KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_ESC   },
-  { KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT  },
-  { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_ENT   },
-  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT  },
- },
-
-/* DVORAK
- * .-----------------------------------------------------------------------------------------------------------.
- * | TAB    | '      | ,      | .      | P      | Y      | F      | G      | C      | R      | L      | BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | ESC    | A      | O      | E      | U      | I      | D      | H      | T      | N      | S      | /      |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LSHIFT | ;      | Q      | J      | K      | X      | B      | M      | W      | V      | Z      | ENTER  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | SPACE  | SPACE  | LOWER  | UP     | DOWN   | LEFT   | RIGHT  |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_DVORAK]       = { // DVORAK
-  { KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC  },
-  { KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH  },
-  { KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT   },
-  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC,  KC_SPC,  M_LOWER, KC_UP,   KC_DOWN, KC_LEFT, KC_RGHT  },
- },
-
-/* UPPER
- * .-----------------------------------------------------------------------------------------------------------.
- * | PRINT  | F1     | F2     | F3     | F4     | NUM LK | /      | 7      | 8      | 9      | -      | DEL    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | CAP LK | F5     | F6     | F7     | F8     | SCR LK | *      | 4      | 5      | 6      | +      | INS    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | F9     | F10    | F11    | F12    | PAUSE  |        | 1      | 2      | 3      | ENTER  | HOME   |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * |        |        |        |        |        | 0      | 0      |        | RALT   | .      | ENTER  | END    |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_UPPER]        = { // UPPER
-  { KC_PSCR, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL   },
-  { KC_CAPS, KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS   },
-  { _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PAUS, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME  },
-  { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END   },
- },
-
-/* LOWER
- * .-----------------------------------------------------------------------------------------------------------.
- * |        | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      | PG UP  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | ^      | *      | +      | -      | ;      | :      | _      | '      | "      | `      | PG DN  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | |      | &      | !      | ~      | /      | \      | =      | <      | >      | ?      | HOME   |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * |        |        |        |        |        |        |        |        |        |        |        | END    |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_LOWER]        = { // LOWER
-  { _______, KC_DLR,  KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT,   KC_PGUP  },
-  { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT,  KC_GRV,  KC_PGDN  },
-  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL,  KC_LT,   KC_GT,   KC_QUES, KC_HOME  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END   },
- },
-
-
-/* FUNCTION
- * .-----------------------------------------------------------------------------------------------------------.
- * | NUM LK | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | PAUSE  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | CAP LK | F11    | F12    | F13    | F14    | F15    | F16    | F17    | F18    | F19    | F20    | PRINT  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE   |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL  | LWIN   | FN     | LALT   | UPPER  | PLAY   | PLAY   | LOWER  | VOL UP | VOL DN | NEXT   | PREV   |
- * '-----------------------------------------------------------------------------------------------------------'
- */
- [LAYER_FUNCTION]     = { // FUNCTION
-  { KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_PAUS  },
-  { KC_CAPS, KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_PSCR  },
-  { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE  },
-  { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT  },
- },
-
-#ifdef MOUSEKEY_ENABLE
-
- [LAYER_MOUSE]        = { // MOUSE
-  { KC_ESC,  KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC   },
-  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  },
-  { _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D  },
-  { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_MS_U, KC_MS_D, KC_MS_L, KC_MS_R  },
- },
-
-#endif
-
- [LAYER_ADJUST]       = { // ADJUST
-  { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, MU_TOG,  AU_TOG   },
-  { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______  },
-  { _______, _______, _______, _______, M_BACKL, RESET,   _______, M_MOUSE, _______, _______, MUV_IN,  _______  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MUV_DE,  _______  },
- },
-
-/*
- [LAYER_EMPTY]        = {
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  },
-  { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______,  },
- },
+/* LAYER = LAYER_QWERTY
+  .-----------------------------------------------------------------------------------------------------------.
+  | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | BACKSP |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | UP     | ENTER  |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | LCTRL  | LWIN   | FN     | LALT   | UPPER  | SPACE  | SPACE  | LOWER  | OSHIFT | LEFT   | DOWN   | RIGHT  |
+  '-----------------------------------------------------------------------------------------------------------'
 */
+[LAYER_QWERTY] = {
+  { KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_BSPC },
+  { KC_ESC , KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT },
+  { KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_UP  , KC_ENT  },
+  { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }
+},
+/* LAYER = LAYER_UPPER
+  .-----------------------------------------------------------------------------------------------------------.
+  | PRINT  | F1     | F2     | F3     | F4     | NUM LK | KP /   | KP 7   | KP 8   | KP 9   | KP -   | DEL    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | PAUSE  | F5     | F6     | F7     | F8     | SCR LK | KP *   | KP 4   | KP 5   | KP 6   | KP +   | INS    |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | F9     | F10    | F11    | F12    | PAUSE  | KP 0   | KP 1   | KP 2   | KP 3   | KP ENT | HOME   |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | ______ | ______ | UPPER  | KP 0   | KP 0   | ______ | RALT   | KP .   | KP ENT | END    |
+  '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_UPPER] = {
+  { KC_PSCR, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL  },
+  { KC_PAUS, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS  },
+  { _______, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_PAUS, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME },
+  { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END  }
+},
+/* LAYER = LAYER_LOWER
+  .-----------------------------------------------------------------------------------------------------------.
+  | ______ | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      | PG UP  |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      | PG DN  |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | HOME   |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | ______ | ______ | ______ | ______ | ______ | LOWER  | ______ | ______ | ______ | END    |
+  '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_LOWER] = {
+  { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT  , KC_PGUP },
+  { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , KC_PGDN },
+  { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT  , KC_GT  , KC_QUES, KC_HOME },
+  { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, KC_END  }
+},
+/* LAYER = LAYER_FUNCTION
+  .-----------------------------------------------------------------------------------------------------------.
+  | XXXXXX | F13    | F14    | F15    | F16    | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | F17    | F18    | F19    | F20    | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | F21    | F22    | F23    | F24    | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | VOL UP | MUTE   |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | FN     | ______ | ______ | PLAY   | PLAY   | ______ | ______ | PREV   | VOL DN | NEXT   |
+  '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_FUNCTION] = {
+  { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE },
+  { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
+},
+/* LAYER = LAYER_MOUSE
+  .-----------------------------------------------------------------------------------------------------------.
+  | ESC    | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL  | MS U   | MS UR  | MS WHL | MS WHR |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L   | XXXXXX | MS R   | XXXXXX | MS WHU |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL  | MS D   | MS DR  | MS U   | MS WHD |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | ______ | ______ | ______ | ______ | ______ | MS BT1 | MS BT1 | ______ | ______ | MS L   | MS D   | MS R   |
+  '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_MOUSE] = {
+  { KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, KC_WH_L, KC_WH_R },
+  { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, KC_WH_U },
+  { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, KC_MS_U, KC_WH_D },
+  { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
+},
+/* LAYER = LAYER_ADJUST
+  .-----------------------------------------------------------------------------------------------------------.
+  | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | MUSIC  | AUDIO  |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | BRTOG  | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET  | XXXXXX | MOUSE  | XXXXXX | XXXXXX | VOICE+ | XXXXXX |
+  |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER  | XXXXXX | XXXXXX | LOWER  | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
+  '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_ADJUST] = {
+  { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, MU_TOG , AU_TOG  },
+  { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+  { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET  , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX },
+  { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
+},
 
 };
 
@@ -234,10 +221,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 float tone_my_startup[][2] = SONG(ODE_TO_JOY);
 float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
 
-float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
-float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
-float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
-
 float tone_audio_on[][2]   = SONG(CLOSE_ENCOUNTERS_5_NOTE);
 float tone_music_on[][2]   = SONG(DOE_A_DEER);
 float tone_caps_on[][2]    = SONG(CAPS_LOCK_ON_SOUND);
@@ -257,7 +240,7 @@ void persistant_default_layer_set(uint16_t default_layer)
 }
 
 const uint16_t PROGMEM fn_actions[] = {
-    [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
+    [0] = ACTION_MODS_ONESHOT(MOD_RSFT),
 };
 
 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -267,46 +250,101 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
     switch(id)
     {
 
-        case MACRO_QWERTY:
+        case MACRO_HELP_1:
             if (record->event.pressed)
             {
-                persistant_default_layer_set(1UL<<LAYER_QWERTY);
-                               #ifdef AUDIO_ENABLE
-                       PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
-                               #endif /* AUDIO_ENABLE */
+                               uprintf("1");
             }
             break;
 
-        case MACRO_COLEMAK:
+        case MACRO_HELP_2:
             if (record->event.pressed)
             {
-                persistant_default_layer_set(1UL<<LAYER_COLEMAK);
-                               #ifdef AUDIO_ENABLE
-                       PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
-                               #endif /* AUDIO_ENABLE */
+                               uprintf("2");
             }
             break;
 
-        case MACRO_DVORAK:
+        case MACRO_HELP_3:
             if (record->event.pressed)
             {
-                persistant_default_layer_set(1UL<<LAYER_DVORAK);
-                               #ifdef AUDIO_ENABLE
-                   PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
-                               #endif /* AUDIO_ENABLE */
+                               uprintf("3");
             }
             break;
 
-        case MACRO_LOWER:
+        case MACRO_HELP_4:
             if (record->event.pressed)
             {
-                layer_on(LAYER_LOWER);
-                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+                               uprintf("4");
             }
-            else
+            break;
+
+        case MACRO_HELP_5:
+            if (record->event.pressed)
             {
-                layer_off(LAYER_LOWER);
-                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+                               uprintf("5");
+            }
+            break;
+
+        case MACRO_HELP_6:
+            if (record->event.pressed)
+            {
+                               uprintf("6");
+            }
+            break;
+
+        case MACRO_HELP_7:
+            if (record->event.pressed)
+            {
+                               uprintf("7");
+            }
+            break;
+
+        case MACRO_HELP_8:
+            if (record->event.pressed)
+            {
+                               uprintf("8");
+            }
+            break;
+
+        case MACRO_HELP_9:
+            if (record->event.pressed)
+            {
+                               uprintf("9");
+            }
+            break;
+
+        case MACRO_BREATH_TOGGLE:
+            if (record->event.pressed)
+            {
+                breathing_toggle();
+            }
+            break;
+
+        case MACRO_BREATH_SPEED_INC:
+            if (record->event.pressed)
+            {
+                breathing_speed_inc(1);
+            }
+            break;
+
+        case MACRO_BREATH_SPEED_DEC:
+            if (record->event.pressed)
+            {
+                breathing_speed_dec(1);
+            }
+            break;
+
+        case MACRO_BREATH_DEFAULT:
+            if (record->event.pressed)
+            {
+                breathing_defaults();
+            }
+            break;
+
+        case MACRO_QWERTY:
+            if (record->event.pressed)
+            {
+                persistant_default_layer_set(1UL<<LAYER_QWERTY);
             }
             break;
 
@@ -314,6 +352,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
             if (record->event.pressed)
             {
                 layer_on(LAYER_UPPER);
+                breathing_speed_set(2);
+                breathing_pulse();
                 update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
             }
             else
@@ -323,13 +363,32 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
             }
             break;
 
+        case MACRO_LOWER:
+            if (record->event.pressed)
+            {
+                layer_on(LAYER_LOWER);
+                breathing_speed_set(2);
+                breathing_pulse();
+                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+            }
+            else
+            {
+                layer_off(LAYER_LOWER);
+                update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+            }
+            break;
+
         case MACRO_FUNCTION:
             if (record->event.pressed)
             {
+                breathing_speed_set(3);
+                breathing_enable();
                 layer_on(LAYER_FUNCTION);
             }
             else
             {
+                breathing_speed_set(1);
+                breathing_self_disable();
                 layer_off(LAYER_FUNCTION);
             }
             break;
@@ -352,6 +411,58 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
             }
             break;
 
+        case MACRO_MOUSE_MOVE_UL:
+            if (record->event.pressed)
+            {
+              mousekey_on(KC_MS_UP);
+              mousekey_on(KC_MS_LEFT);
+            }
+            else
+            {
+              mousekey_off(KC_MS_UP);
+              mousekey_off(KC_MS_LEFT);
+            }
+            break;
+
+        case MACRO_MOUSE_MOVE_UR:
+            if (record->event.pressed)
+            {
+              mousekey_on(KC_MS_UP);
+              mousekey_on(KC_MS_RIGHT);
+            }
+            else
+            {
+              mousekey_off(KC_MS_UP);
+              mousekey_off(KC_MS_RIGHT);
+            }
+            break;
+
+        case MACRO_MOUSE_MOVE_DL:
+            if (record->event.pressed)
+            {
+              mousekey_on(KC_MS_DOWN);
+              mousekey_on(KC_MS_LEFT);
+            }
+            else
+            {
+              mousekey_off(KC_MS_DOWN);
+              mousekey_off(KC_MS_LEFT);
+            }
+            break;
+
+        case MACRO_MOUSE_MOVE_DR:
+            if (record->event.pressed)
+            {
+              mousekey_on(KC_MS_DOWN);
+              mousekey_on(KC_MS_RIGHT);
+            }
+            else
+            {
+              mousekey_off(KC_MS_DOWN);
+              mousekey_off(KC_MS_RIGHT);
+            }
+            break;
+
 #endif /* MOUSEKEY_ENABLE */
 
 #ifdef AUDIO_ENABLE
diff --git a/keyboards/planck/keymaps/sgoodwin/Makefile b/keyboards/planck/keymaps/sgoodwin/Makefile
new file mode 100644 (file)
index 0000000..b2ca419
--- /dev/null
@@ -0,0 +1,28 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/sgoodwin/keymap.c b/keyboards/planck/keymaps/sgoodwin/keymap.c
new file mode 100644 (file)
index 0000000..4d5d3d7
--- /dev/null
@@ -0,0 +1,233 @@
+// This is sgoodwin's layout file for the Quantum project.
+// It doesn't have Plover or Dvorak layers because he doesn't use that.
+// It Also doesn't allow for swapping alt with CMD because that only happens in error.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 1
+#define _COLEMAK 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum planck_keycodes {
+  COLEMAK = SAFE_RANGE,
+  QWERTY,
+  LOWER,
+  RAISE,
+  BACKLIT,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |SHEnt |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Hyper| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, MT(MOD_RSFT, KC_ENT) },
+  {ALL_T(KC_NO),  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |SHEnt |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Hyper| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, MT(MOD_RSFT, KC_ENT) },
+  {ALL_T(KC_NO),  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______},
+  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|      |      |Qwerty|Colemk|      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  _______, _______, QWERTY,  COLEMAK, _______, _______, _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/sgoodwin/readme.md b/keyboards/planck/keymaps/sgoodwin/readme.md
new file mode 100644 (file)
index 0000000..dfa88f3
--- /dev/null
@@ -0,0 +1,10 @@
+# sgoodwin's Planck Layout
+
+Includes:
+
+1. No Dvorak or Plover
+2. No alt-swapping
+3. Right enter is shift when held down, enter when tapped.
+4. Bottom left corner in normal layers is Hyper and not brightness control.
+5. Brightness is instead in the bottom corner on raise/lower.
+
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..b2ca419445f96612a47a1d0d62f5adef5215a505 100644 (file)
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
 
 
 # Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
 
 ifndef QUANTUM_DIR
        include ../../../../Makefile
-endif
\ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/thermal_printer/Makefile b/keyboards/planck/keymaps/thermal_printer/Makefile
new file mode 100644 (file)
index 0000000..9477d11
--- /dev/null
@@ -0,0 +1,29 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+PRINTING_ENABLE = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/thermal_printer/config.h b/keyboards/planck/keymaps/thermal_printer/config.h
new file mode 100644 (file)
index 0000000..430b649
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#      define SERIAL_UART_BAUD 19200
+#      define SERIAL_UART_DATA UDR1
+#      define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#      define SERIAL_UART_RXD_VECT USART1_RX_vect
+#      define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#      define SERIAL_UART_INIT() do { \
+            /* baud rate */ \
+            UBRR1L = SERIAL_UART_UBRR; \
+            /* baud rate */ \
+            UBRR1H = SERIAL_UART_UBRR >> 8; \
+            /* enable TX */ \
+            UCSR1B = _BV(TXEN1); \
+            /* 8-bit data */ \
+            UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+            sei(); \
+        } while(0)
+
+ #endif
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/thermal_printer/keymap.c b/keyboards/planck/keymaps/thermal_printer/keymap.c
new file mode 100644 (file)
index 0000000..e880597
--- /dev/null
@@ -0,0 +1,314 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+  {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH},
+  {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut|   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      | Print|no prnt |    |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, RESET,   _______, PRINT_ON, PRINT_OFF, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_NOTE_ARRAY(tone_plover, false, 0);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/thermal_printer/readme.md b/keyboards/planck/keymaps/thermal_printer/readme.md
new file mode 100644 (file)
index 0000000..de9680b
--- /dev/null
@@ -0,0 +1,2 @@
+# The Default Planck Layout
+
diff --git a/keyboards/planck/keymaps/tong92/Makefile b/keyboards/planck/keymaps/tong92/Makefile
new file mode 100644 (file)
index 0000000..e6608e7
--- /dev/null
@@ -0,0 +1,62 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device.
+#                Please customize your programmer settings(PROGRAM_CMD)
+#
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+# make dfu = Download the hex file to the device, using dfu-programmer (must
+#            have dfu-programmer installed).
+#
+# make flip = Download the hex file to the device, using Atmel FLIP (must
+#             have Atmel FLIP installed).
+#
+# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
+#               (must have dfu-programmer installed).
+#
+# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
+#                (must have Atmel FLIP installed).
+#
+# make debug = Start either simulavr or avarice as specified for debugging,
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+# Build Options
+#   change to "no" to disable the options, or define them in the makefile.mk in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE  = no # Audio control and System control(+450)
+CONSOLE_ENABLE   = no  # Console for debug(+400)
+COMMAND_ENABLE   = yes # Commands for debug and configuration
+NKRO_ENABLE      = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE      = no  # MIDI controls
+AUDIO_ENABLE     = no # Audio output on port C6
+UNICODE_ENABLE   = no  # Unicode
+BLUETOOTH_ENABLE = no  # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE  = no  # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/tong92/keymap.c b/keyboards/planck/keymaps/tong92/keymap.c
new file mode 100644 (file)
index 0000000..2be28fb
--- /dev/null
@@ -0,0 +1,146 @@
+//Author: tong92 <tong92power@gmail.com>
+
+#include "planck.h"
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define LOWER M(1)
+#define RAISE M(2)
+#define GO_DEFT M(99)
+#
+
+//MIT Layout
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* 0: Qwerty layer (Default)
+* ,-----------------------------------------------------------------------.
+* |Tab  | q   | w   | e   | r   | t   | y   | u   | i   | o   | p   | BS  |
+* |-----------------------------------------------------------------------|
+* |Ctrl | a   | s   | d   | f   | g   | h   | j   | k   | l   | ;   |enter|
+* |-----------------------------------------------------------------------|
+* |Shift| z   | x   | c   | v   | b   | n   | m   |  ,  |  .  |  /  |Shift|
+* |-----------------------------------------------------------------------|
+* | Fn  |Ctrl | Win | Alt |Lower|   Space   |Upper|  '  |  [  |  ]  | Alt |
+* `-----------------------------------------------------------------------'
+*/
+[0] ={
+{KC_TAB, KC_Q,   KC_W,   KC_E,   KC_R, KC_T,  KC_Y,  KC_U, KC_I,   KC_O,   KC_P,   KC_BSPC},
+{KC_LCTL,KC_A,   KC_S,   KC_D,   KC_F, KC_G,  KC_H,  KC_J, KC_K,   KC_L,   KC_SCLN,KC_ENT },
+{KC_LSFT,KC_Z,   KC_X,   KC_C,   KC_V, KC_B,  KC_N,  KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT},
+{MO(4),  KC_RCTL,KC_LGUI,KC_LALT,LOWER,KC_SPC,KC_SPC,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT}
+},
+/* 1: Lower layer
+* ,-----------------------------------------------------------------------.
+* |  `  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  | BS  |
+* |-----------------------------------------------------------------------|
+* |     | F1  | F2  | F3  | F4  | F5  | F6  |  -  |  +  |  [  |  ]  |  \  |
+* |-----------------------------------------------------------------------|
+* |     | F7  | F8  | F9  | F10 | F11 | F12 |     | HOME| PgUp|  UP | PgDo|
+* |-----------------------------------------------------------------------|
+* |     |     |     |     |     |   SPACE   |mouse| END | LEFT| DOWN|RIGHT|
+* `-----------------------------------------------------------------------'
+*/
+[1] ={
+{KC_GRV, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,  KC_6,  KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC },
+{_______,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS },
+{_______,KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11,KC_F12,_______,KC_HOME,KC_PGUP,KC_UP  ,KC_PGDN },
+{XXXXXXX,_______,_______,_______,_______,KC_SPC,KC_SPC,_______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
+},
+/* 2: Upper layer
+* ,-----------------------------------------------------------------------.
+* |  ~  |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  | BS  |
+* |-----------------------------------------------------------------------|
+* |     | F1  | F2  | F3  | F4  | F5  | F6  |  _  |  =  |  {  |  }  |  |  |
+* |-----------------------------------------------------------------------|
+* |     | F7  | F8  | F9  | F10 | F11 | F12 |     | HOME| PgUp|  UP | PgDo|
+* |-----------------------------------------------------------------------|
+* |     |     |     |     |mouse|   SPACE   |     | END | LEFT| DOWN|RIGHT|
+* `-----------------------------------------------------------------------'
+*/
+[2] ={
+{KC_TILD,KC_EXLM,KC_AT,  KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSPC },
+{_______,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE },
+{_______,KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP  ,KC_PGDN },
+{XXXXXXX,_______,_______,_______,_______,KC_SPC, KC_SPC, _______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
+},
+/* 4: fn layer (Window shortcuts)
+* ,-----------------------------------------------------------------------.
+* | ESC |WinOf|WinUp|     |     |Sh+Ca|     | PgUp| UP  | PgDo|PrtSc| DEL |
+* |-----------------------------------------------------------------------|
+* |     |WinLe|WinDo|WinRi|     |Al+Ca|CapsL| LEFT| DOWN|RIGHT|     |     |
+* |-----------------------------------------------------------------------|
+* |     |WinLW|WinRW|     |     |Ct+Ca|ScroL| HOME|     | END |     |     |
+* |-----------------------------------------------------------------------|
+* |     |DeskL|DeskR|DeskX|Task | ChangeLang|     |     |     |     | LED |
+* `-----------------------------------------------------------------------'
+*/
+[4] ={
+{KC_ESC ,LALT(KC_F4)        ,LGUI(KC_UP)         ,XXXXXXX          ,XXXXXXX    ,S(KC_CAPS)   ,XXXXXXX,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_DELT},
+{_______,LGUI(KC_LEFT)      ,LGUI(KC_DOWN)       ,LGUI(KC_RIGHT)   ,XXXXXXX    ,LALT(KC_CAPS),KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX},
+{_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX          ,XXXXXXX    ,LCTL(KC_CAPS),KC_SLCK,KC_HOME,XXXXXXX,KC_END,XXXXXXX,XXXXXXX},
+{KC_TRNS,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),LGUI(LCTL(KC_F4)),LCTL(LALT(KC_DELT)),LGUI(KC_SPC),LGUI(KC_SPC),XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,M(0)}
+},
+/* 10: mouse layer
+* ,-----------------------------------------------------------------------.
+* |     |     |     |Mo_Up|     |     |     |M_WhL|M_WhU|M_WhR|     |RESET|
+* |-----------------------------------------------------------------------|
+* |     |     |Mo_Le|Mo_Do|Mo_Ri|     |     |M_Bt1|M_WhD|M_Bt2|     |     |
+* |-----------------------------------------------------------------------|
+* |     |     |     |     |     |     |     |M_AC0|M_AC1|M_AC2|     |     |
+* |-----------------------------------------------------------------------|
+* |     |     |     |     |     |  GO_DEFT  |     |     |     |     |     |
+* `-----------------------------------------------------------------------'
+*/
+[10] ={
+{XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET},
+{XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX},
+{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX},
+{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,GO_DEFT,GO_DEFT,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX}
+}
+
+}; 
+//Layout END
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case 0:
+            if (record->event.pressed) {
+                #ifdef BACKLIGHT_ENABLE
+                    backlight_step();
+                #endif
+            }
+        break;
+        case 1:
+          if (record->event.pressed) {
+            layer_on(1);
+            update_tri_layer(1, 2, 10);
+          } else {
+            layer_off(1);
+            update_tri_layer(1, 2, 10);
+          }
+          break;
+        case 2:
+          if (record->event.pressed) {
+            layer_on(2);
+            update_tri_layer(1, 2, 10);
+          } else {
+            layer_off(2);
+            update_tri_layer(1, 2, 10);
+          }
+          break;
+        case 99:
+            if (record->event.pressed) {
+                layer_off(10);
+                layer_off(1);
+                layer_off(2);
+                layer_on(0);
+                update_tri_layer(0 ,1 ,2);
+            }
+        break;
+      }
+    return MACRO_NONE;
+};
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/tong92/readme.md b/keyboards/planck/keymaps/tong92/readme.md
new file mode 100644 (file)
index 0000000..328d005
--- /dev/null
@@ -0,0 +1,66 @@
+# The Tong92 Layout
+- MIT Layout
+- my keymap for WIndow User
+- Lower && Upper Hold -> Mouse Layer
+- Mouse Layer : space -> Default Layer
+- No Audio
+
+## 1. Default Layer - Qwerty 
+
+    ,-----------------------------------------------------------------------.
+    |Tab  | q   | w   | e   | r   | t   | y   | u   | i   | o   | p   | BS  |
+    |-----------------------------------------------------------------------|
+    |Ctrl | a   | s   | d   | f   | g   | h   | j   | k   | l   | ;   |enter|
+    |-----------------------------------------------------------------------|
+    |Shift| z   | x   | c   | v   | b   | n   | m   |  ,  |  .  |  /  |Shift|
+    |-----------------------------------------------------------------------|
+    | Fn  |Ctrl | Win | Alt |Lower|   Space   |Upper|  '  |  [  |  ]  | Alt |
+    `-----------------------------------------------------------------------'
+
+## 2. Lower Layer
+
+    ,-----------------------------------------------------------------------.
+    |  `  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  | BS  |
+    |-----------------------------------------------------------------------|
+    |     | F1  | F2  | F3  | F4  | F5  | F6  |  -  |  +  |  [  |  ]  |  \  |
+    |-----------------------------------------------------------------------|
+    |     | F7  | F8  | F9  | F10 | F11 | F12 |     | HOME| PgUp|  UP | PgDo|
+    |-----------------------------------------------------------------------|
+    |     |     |     |     |     |   SPACE   |mouse| END | LEFT| DOWN|RIGHT|
+    `-----------------------------------------------------------------------'
+
+## 3. Upper Layer
+
+    ,-----------------------------------------------------------------------.
+    |  ~  |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  | BS  |
+    |-----------------------------------------------------------------------|
+    |     | F1  | F2  | F3  | F4  | F5  | F6  |  _  |  =  |  {  |  }  |  |  |
+    |-----------------------------------------------------------------------|
+    |     | F7  | F8  | F9  | F10 | F11 | F12 |     | HOME| PgUp|  UP | PgDo|
+    |-----------------------------------------------------------------------|
+    |     |     |     |     |mouse|   SPACE   |     | END | LEFT| DOWN|RIGHT|
+    `-----------------------------------------------------------------------'
+
+## 4. Fn Layer -  Window Shortcuts
+
+    ,-----------------------------------------------------------------------.
+    | ESC |WinOf|WinUp|     |     |Sh+Ca|     | PgUp| UP  | PgDo|PrtSc| DEL |
+    |-----------------------------------------------------------------------|
+    |     |WinLe|WinDo|WinRi|     |Al+Ca|CapsL| LEFT| DOWN|RIGHT|     |     |
+    |-----------------------------------------------------------------------|
+    |     |WinLW|WinRW|     |     |Ct+Ca|ScroL| HOME|     | END |     |     |
+    |-----------------------------------------------------------------------|
+    |     |DeskL|DeskR|DeskX|Task | ChangeLang|     |     |     |     | LED |
+    `-----------------------------------------------------------------------'
+
+## 5. Mouse Layer
+
+    ,-----------------------------------------------------------------------.
+    |     |     |     |Mo_Up|     |     |     |M_WhL|M_WhU|M_WhR|     |RESET|
+    |-----------------------------------------------------------------------|
+    |     |     |Mo_Le|Mo_Do|Mo_Ri|     |     |M_Bt1|M_WhD|M_Bt2|     |     |
+    |-----------------------------------------------------------------------|
+    |     |     |     |     |     |     |     |M_AC0|M_AC1|M_AC2|     |     |
+    |-----------------------------------------------------------------------|
+    |     |     |     |     |     |GO_DEFAULT |     |     |     |     |     |
+    `-----------------------------------------------------------------------'
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/vifon/Makefile b/keyboards/planck/keymaps/vifon/Makefile
new file mode 100644 (file)
index 0000000..53660a2
--- /dev/null
@@ -0,0 +1,28 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/vifon/config.h b/keyboards/planck/keymaps/vifon/config.h
new file mode 100644 (file)
index 0000000..9cb0634
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define MANUFACTURER    Ortholinear Keyboards
+#define PRODUCT         The Planck Keyboard
+#define DESCRIPTION     A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/* prevent the modifiers from being stuck, sacrificing some memory */
+#define PREVENT_STUCK_MODIFIERS
+
+#ifdef SUBPROJECT_rev3
+    #include "rev3/config.h"
+#endif
+#ifdef SUBPROJECT_rev4
+    #include "rev4/config.h"
+#endif
+
+#endif
diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c
new file mode 100644 (file)
index 0000000..80c4a51
--- /dev/null
@@ -0,0 +1,187 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#ifdef BACKLIGHT_ENABLE
+#  include "backlight.h"
+#endif
+#include "timer.h"
+#include <bootloader.h>
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum userlayer {
+    _QW = 0,
+    _CM,
+    _PP,
+    _PPG,
+    _NM,
+    _LW,
+    _RS,
+    _DL,
+    _DYN,
+};
+
+enum planck_keycodes {
+    KM_LW = SAFE_RANGE,
+    KM_RS,
+    KM_SHLK,                    /* ShiftLock */
+    KM_RST,                     /* Reset */
+    KM_NUM,                     /* Numeric layer */
+    KM_SLP,                     /* Sleep 250 ms */
+    KM_PPLR,                    /* Pure Pro layer */
+    DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+    {KC_TAB,        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+    {CTL_T(KC_ESC), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+    {KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_FN0 },
+    {KC_LCTL,       MO(_DYN),KC_LGUI, KC_LALT, KM_LW,   KC_SPC, KC_SPC, KM_RS,   KC_RALT, KC_DOWN, KC_UP,   KC_RCTL}
+},
+[_CM] = { /* Colemak */
+    {KC_TAB,        KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+    {CTL_T(KC_ESC), KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+    {KC_LSFT,       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_FN0 },
+    {KC_LCTL,       MO(_DYN),KC_LGUI, KC_LALT, KM_LW,   KC_SPC,  KC_SPC,  KM_RS,   KC_RALT, KC_DOWN, KC_UP,   KC_RCTL}
+},
+[_PP] = { /* Pure Pro */
+    {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+    {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT },
+    {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_RSFT, KC_UP,   KC_RCTL},
+    {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW,   KC_SPC,  KC_SPC,  KM_RS,   KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT}
+},
+[_PPG] = { /* Pure Pro: Gaming */
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, DF(_RS), _______, _______},
+    {_______, _______, XXXXXXX, _______, KM_RS  , _______, _______, KM_LW  , _______, _______, _______, _______},
+},
+[_NM] = { /* Numeric */
+    {KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT,  _______, KC_FN0 },
+    {_______, _______, _______, _______, _______, KC_SPC,  KC_SPC,  _______, _______, _______, _______, _______}
+},
+[_LW]= { /* LOWER */
+    {KC_TILD, KC_EXLM,    KC_AT,      KC_HASH,    KC_DLR,     KC_PERC,    KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+    {KC_ESC,  LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM,  KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+    {_______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP,  KC_HOME, KC_PGDN, KC_PGUP, KC_END,  KC_ENT },
+    {_______, BL_TOGG,    _______,    _______,    _______,    KC_BTN1,    KC_BTN1, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+[_RS]= { /* RAISE */
+    {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL },
+    {KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+    {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  DF(_QW), DF(_CM), KM_PPLR, KM_RST,  KC_ENT },
+    {_______, BL_STEP, _______, _______, _______, KC_BTN2, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______}
+},
+[_DL]= { /* DUAL */
+    {_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,     _______,        KC_APP,  KC_INS,  _______, KC_PSCR, _______},
+    {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,     KC_LEFT,        KC_DOWN, KC_UP,   KC_RGHT, KC_ACL0, KC_ACL2},
+    {_______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______},
+    {_______, _______, KC_LGUI, KC_LALT, _______, _______,     _______,        _______, _______, _______, _______, _______}
+},
+[_DYN]= { /* special */
+    {_______,  DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, KC_INS,  _______, KC_PSCR, KC_PAUS},
+    {_______,  DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK},
+    {KM_SHLK,  _______,        _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______},
+    {_______,  _______,        _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+};
+
+#undef _______
+
+const uint16_t PROGMEM fn_actions[] = {
+    ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    static uint16_t key_timer;
+
+    if (!process_record_dynamic_macro(keycode, record)) {
+        return false;
+    }
+
+    switch (keycode) {
+    case KM_LW:
+        if (record->event.pressed) {
+            layer_on(_LW);
+        } else {
+            layer_off(_LW);
+        }
+        update_tri_layer(_LW, _RS, _DL);
+        return false;
+        break;
+    case KM_RS:
+        if (record->event.pressed) {
+            layer_on(_RS);
+        } else {
+            layer_off(_RS);
+        }
+        update_tri_layer(_LW, _RS, _DL);
+        return false;
+        break;
+    case KM_SHLK:
+        register_code(KC_LSFT);
+        break;
+    case KM_RST:
+        if (record->event.pressed) {
+            key_timer = timer_read();
+        } else {
+            if (timer_elapsed(key_timer) >= 500) {
+                clear_keyboard();
+                backlight_toggle();
+                _delay_ms(250);
+                backlight_toggle();
+                bootloader_jump();
+            }
+        }
+        break;
+    case KM_PPLR:
+        if (record->event.pressed) {
+            key_timer = timer_read();
+        } else {
+            if (timer_elapsed(key_timer) >= 250) {
+                default_layer_set((1UL << _PP) | (1UL << _PPG));
+                backlight_toggle();
+                _delay_ms(100);
+                backlight_toggle();
+            } else {
+                default_layer_set(1UL << _PP);
+            }
+        }
+        break;
+    case KM_NUM:
+        layer_on(_NM);
+        break;
+    case KM_SLP:
+        if (record->event.pressed) {
+            _delay_ms(250);
+        }
+        break;
+    }
+
+
+    if (record->event.pressed
+        && IS_LAYER_ON(_NM)
+        && keymap_key_to_keycode(_NM, record->event.key) == KC_TRNS) {
+
+        layer_off(_NM);
+    }
+
+    return true;
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    return MACRO_NONE;
+}
diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c
new file mode 100644 (file)
index 0000000..192933b
--- /dev/null
@@ -0,0 +1,262 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  BACKLIT
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |  /   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  -   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt  | Left |Right |Lower | Bksp |Space |Raise |  Up  | Down |  GUI |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+  {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH},
+  {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS},
+  {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    SFT_T(KC_ENT)},
+  {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER,   KC_BSPC, KC_SPC,  RAISE,   KC_UP,   KC_DOWN, KC_RGUI, KC_ENT }
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Mute | Vol- | Vol+ |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite|      | Home |  End |      |  Del |  Ins |      | PgUp | PgDN |      |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______},
+  {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MUTE, KC_VOLD, KC_VOLU, _______, _______},
+  {BACKLIT, _______, KC_HOME, KC_END,  _______, KC_DEL,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Prev | Play | Next |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite|      | Home |  End |      |  Del |  Ins |      | PgUp | PgDN |      |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______},
+  {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MPRV, KC_MPLY, KC_MNXT, _______, _______},
+  {BACKLIT, _______, KC_HOME, KC_END,  _______, KC_DEL,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk
new file mode 100644 (file)
index 0000000..93a89bb
--- /dev/null
@@ -0,0 +1,25 @@
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes          # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
index feb5a11901393757eca9df17e4501041e063116c..4ed19d76f901f3caa43bc485cec4f998e84c637b 100644 (file)
@@ -5,7 +5,7 @@
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 28     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
index 8d70bb4e5ab24a1951f0d55853971c0c6333c0e4..3980b02f503925f8b2bc2102e0f18af553f27ac9 100644 (file)
@@ -1,9 +1,19 @@
 #include "planck.h"
 
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+  {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+  {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+  {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+  {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+#endif
+
 void matrix_init_kb(void) {
        // Turn status LED on
        DDRE |= (1<<6);
        PORTE |= (1<<6);
 
        matrix_init_user();
-}
\ No newline at end of file
+}
index f89fdeb931a9da1f8fa02def16d41fa2de94b908..4b24a690e04d2d8f3632b89a1264decc5a114511 100644 (file)
@@ -13,15 +13,17 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
+
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
 
 ### Notable forks (which some of the keymap files are from)
diff --git a/keyboards/planck/rev3/Makefile b/keyboards/planck/rev3/Makefile
deleted file mode 100644 (file)
index 3ed1445..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-AUDIO_ENABLE ?= no           # Audio output on port C6
-
-ifndef QUANTUM_DIR
-       include ../../../Makefile
-endif
\ No newline at end of file
diff --git a/keyboards/planck/rev3/rules.mk b/keyboards/planck/rev3/rules.mk
new file mode 100644 (file)
index 0000000..3ed1445
--- /dev/null
@@ -0,0 +1,5 @@
+AUDIO_ENABLE ?= no           # Audio output on port C6
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
\ No newline at end of file
index ed09f85a4d49fb5ac4a2a1113f033255e2e6cab6..191c6bb664de85727cd5fb1c36ab6f14ab207d96 100644 (file)
@@ -1,5 +1,3 @@
-AUDIO_ENABLE ?= yes           # Audio output on port C6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../../Makefile
 endif
\ No newline at end of file
diff --git a/keyboards/planck/rev4/rules.mk b/keyboards/planck/rev4/rules.mk
new file mode 100644 (file)
index 0000000..ed09f85
--- /dev/null
@@ -0,0 +1,5 @@
+AUDIO_ENABLE ?= yes           # Audio output on port C6
+
+ifndef QUANTUM_DIR
+       include ../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk
new file mode 100644 (file)
index 0000000..fb24e82
--- /dev/null
@@ -0,0 +1,68 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no         # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no            # MIDI controls
+AUDIO_ENABLE ?= no           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+API_SYSEX_ENABLE = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
index 08e9205cbf1f30a6223dd98f0f40f094288556d8..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,73 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no         # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no            # MIDI controls
-AUDIO_ENABLE ?= no           # Audio output on port C6
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
 endif
\ No newline at end of file
index 3fb978c2f6bafe89b7b2262534004c804c802434..f88acf211109e0293a3a79f4da6803056cfc3f7e 100644 (file)
@@ -63,7 +63,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* ws2812 RGB LED */
 #define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 28     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/preonic/keymaps/0xdec/Makefile b/keyboards/preonic/keymaps/0xdec/Makefile
new file mode 100644 (file)
index 0000000..6600e36
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+
+BOOTMAGIC_ENABLE  = no  # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE   = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE   = yes # Audio control and System control(+450)
+CONSOLE_ENABLE    = no  # Console for debug(+400)
+COMMAND_ENABLE    = yes # Commands for debug and configuration
+NKRO_ENABLE       = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE  = yes # Enable keyboard backlight functionality
+MIDI_ENABLE       = no  # MIDI controls
+AUDIO_ENABLE      = yes # Audio output on port C6
+UNICODE_ENABLE    = no  # Unicode
+BLUETOOTH_ENABLE  = no  # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE   = no  # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE  = no  # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+  include ../../../../Makefile
+endif
diff --git a/keyboards/preonic/keymaps/0xdec/README.md b/keyboards/preonic/keymaps/0xdec/README.md
new file mode 100644 (file)
index 0000000..603d3d4
--- /dev/null
@@ -0,0 +1,30 @@
+Ergonomic Colemak Keymap
+========================
+An ergonomically optimized Colemak keymap for the grid-layout Preonic
+
+Modes
+----------
+
+#### Colemak
+
+> Base layer
+
+- All alphanumerics and symbols available on the base layer
+
+----------
+
+#### Game
+
+> QWERTY layout for use with games or number entry
+
+- Standard QWERTY layout
+- Integrated right-hand numpad in phone layout
+
+----------
+
+#### Function (Raise)
+
+> Functions and mode switching
+
+- Turns NEIO into arrow cluster, with nav cluster below (Home, Page Down, Page Up, End)
+- Reset key at lower left (Esc)
diff --git a/keyboards/preonic/keymaps/0xdec/config.h b/keyboards/preonic/keymaps/0xdec/config.h
new file mode 100644 (file)
index 0000000..5fc9b6f
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// Number of backlight levels
+#undef  BACKLIGHT_LEVELS
+#define BACKLIGHT_LEVELS 5
+
+#endif
diff --git a/keyboards/preonic/keymaps/0xdec/keymap.c b/keyboards/preonic/keymaps/0xdec/keymap.c
new file mode 100644 (file)
index 0000000..6c4b8a6
--- /dev/null
@@ -0,0 +1,173 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+
+// Layer names
+#define _COLEMAK 0
+#define _GAME 1
+#define _RAISE 2
+
+enum preonic_keycodes {
+  COLEMAK = SAFE_RANGE,
+  GAME,
+  RAISE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   \  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   =  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   [  |   ]  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   -  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |   '  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   ;  |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  | ENTER|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC  | ALT  | GUI  | SHIFT| CTRL | BKSP | SPACE| RAISE| SHIFT|      | DEL  | TAB  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {KC_GRV ,KC_1   ,KC_2   ,KC_3   ,KC_4   ,KC_5   ,KC_6   ,KC_7   ,KC_8   ,KC_9   ,KC_0   ,KC_BSLS},
+  {KC_EQL ,KC_Q   ,KC_W   ,KC_F   ,KC_P   ,KC_G   ,KC_J   ,KC_L   ,KC_U   ,KC_Y   ,KC_LBRC,KC_RBRC},
+  {KC_MINS,KC_A   ,KC_R   ,KC_S   ,KC_T   ,KC_D   ,KC_H   ,KC_N   ,KC_E   ,KC_I   ,KC_O   ,KC_QUOT},
+  {KC_SCLN,KC_Z   ,KC_X   ,KC_C   ,KC_V   ,KC_B   ,KC_K   ,KC_M   ,KC_COMM,KC_DOT ,KC_SLSH,KC_ENT },
+  {KC_ESC ,KC_LALT,KC_LGUI,KC_LSFT,KC_LCTL,KC_BSPC,KC_SPC ,RAISE  ,KC_RSFT,_______,KC_DEL ,KC_TAB }
+},
+
+/* Game
+ * ,-----------------------------------------------------------------------------------.
+ * | ESC  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |NUM LK|   ÷  |   ×  |   -  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | TAB  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   1  |   2  |   3  |   +  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | CTRL |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   4  |   5  |   6  |   =  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | SHIFT|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   7  |   8  |   9  | ENTER|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * |      | ALT  | GUI  | SPACE| CTRL | BKSP | SPACE| RAISE|   ,  |   0  |   .  | TAB  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] = {
+  {KC_ESC ,KC_1   ,KC_2   ,KC_3   ,KC_4   ,KC_5   ,KC_6   ,KC_7   ,KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS},
+  {KC_TAB ,KC_Q   ,KC_W   ,KC_E   ,KC_R   ,KC_T   ,KC_Y   ,KC_U   ,KC_P1  ,KC_P2  ,KC_P3  ,KC_PPLS},
+  {KC_LCTL,KC_A   ,KC_S   ,KC_D   ,KC_F   ,KC_G   ,KC_H   ,KC_J   ,KC_P4  ,KC_P5  ,KC_P6  ,KC_PEQL},
+  {KC_LSFT,KC_Z   ,KC_X   ,KC_C   ,KC_V   ,KC_B   ,KC_N   ,KC_M   ,KC_P7  ,KC_P8  ,KC_P9  ,KC_PENT},
+  {XXXXXXX,KC_LALT,KC_LGUI,KC_SPC ,KC_LCTL,KC_BSPC,KC_SPC ,RAISE  ,KC_PCMM,KC_P0  ,KC_PDOT,KC_TAB }
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | SLEEP|  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |PRTSCR|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | SYM  |  F11 |  F12 |      |AU TOG| VOL+ |BL INC|COLMAK| GAME | MUSIC| MENU |SCRLCK|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | PREV | STOP | PLAY | NEXT | VOL- |BL DEC| LEFT | DOWN |  UP  | RIGHT| PAUSE|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | BACK | STOP | RFRSH| FRWRD| MUTE |BL TOG| HOME | PGDN | PGUP | END  |INSERT|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RESET|      |      |      |      | DEL  |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_SLEP,KC_F1  ,KC_F2  ,KC_F3  ,KC_F4  ,KC_F5  ,KC_F6  ,KC_F7  ,KC_F8  ,KC_F9  ,KC_F10 ,KC_PSCR},
+  {XXXXXXX,KC_F11 ,KC_F12 ,XXXXXXX,AU_TOG ,KC_VOLU,BL_INC ,COLEMAK,GAME   ,MU_TOG ,KC_MENU,KC_SLCK},
+  {KC_CAPS,KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT,KC_VOLD,BL_DEC ,KC_LEFT,KC_DOWN,KC_UP  ,KC_RGHT,KC_PAUS},
+  {XXXXXXX,KC_WBAK,KC_WSTP,KC_WREF,KC_WFWD,KC_MUTE,BL_TOGG,KC_HOME,KC_PGDN,KC_PGUP,KC_END ,KC_INS },
+  {RESET  ,_______,_______,_______,_______,KC_DEL ,_______,_______,_______,_______,_______,_______}
+}
+
+};
+
+
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = {
+  {NOTE_B5, 20},
+  {NOTE_B6, 8},
+  {NOTE_DS6, 20},
+  {NOTE_B6, 8}
+};
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_game[][2]    = {
+  {NOTE_E6, 10}   ,{NOTE_E6, 10}  ,{NOTE_REST, 10} ,{NOTE_E6, 10}   ,
+  {NOTE_REST, 10} ,{NOTE_C6, 10}  ,{NOTE_E6, 10}   ,{NOTE_REST, 10} ,
+  {NOTE_G6, 10}   ,{NOTE_REST, 30},
+  {NOTE_G5, 10}   ,{NOTE_REST, 30}
+};
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float music_scale[][2]  = SONG(MUSIC_SCALE_SOUND);
+
+void startup_user() {
+  _delay_ms(20); // gets rid of tick
+  PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+void shutdown_user() {
+  PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+  _delay_ms(150);
+  stop_all_notes();
+}
+
+void music_on_user(void) {
+  music_scale_user();
+}
+void music_scale_user(void) {
+  PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
+
+
+
+void matrix_init_user(void) {
+  #ifdef AUDIO_ENABLE
+  startup_user();
+  #endif
+}
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_COLEMAK);
+      }
+      break;
+    case GAME:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_game, false, STACCATO);
+        #endif
+        persistant_default_layer_set(1UL<<_GAME);
+      }
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+      } else {
+        layer_off(_RAISE);
+      }
+      break;
+    default:
+      return true;
+      break;
+  }
+
+  return false;
+};
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/README.md b/keyboards/preonic/keymaps/CMD-Preonic/README.md
new file mode 100644 (file)
index 0000000..2b80c2b
--- /dev/null
@@ -0,0 +1,77 @@
+CMD-Preonic
+===================
+The CMD project seeks to improve productivity by optimizing usage of the left hand via clever use of the function layers. 
+
+>Note: This project is currently optimized for grid layout, and has not been confirmed to work 100% on MIT layout, although it is expected to work correctly.
+
+----------
+
+Modes
+-------------
+
+####  QWERTY
+
+>CMD-Qwerty is very similar to the default Preonic with a few key differences:
+
+ - Dual-role Raise/Enter Key at Caps Lock position. -Don't need to take your hand off the mouse to submit URLs
+ - Space_Function under left space (Grid layout) -Don't need to take your thumb off of the spacebar to use lower.
+ - Dedicated arrow keys replaced with ( - , = , [ , and ] ) - big improvement for programmers who are used to fn layer.
+
+----------
+
+#### Game
+
+> Disables extra features to facilitate easier usage of the Preonic while gaming. this mode is toggled in the adjust layer.
+
+ - Dual Role Function key becomes Caps Lock.
+ - Space_Function disabled and replaced with normal spacebar.
+ - Windows Key disabled.
+
+----------
+
+#### Numpad
+
+> Enables left-hand numpad
+
+ - Left-side numpad
+ - Can be toggled on in Adjust layer (under . key)
+
+----------
+
+####  Arrow - (Lower)
+
+> Makes arrow keys easily accessible to Left Hand, and much more.
+
+ - Arrow keys at WASD, Backspace at Q, Delete at E.
+ - Media Keys near arrow cluster, mute at A.
+ - Web Nav keys.
+ - Mouse cluster at YGHJ.
+ - Numpad in right side of board.
+ - Can be toggled on in Adjust layer (Under , key)
+
+----------
+
+####  Function- (Raise)
+
+> Basic Functions. Open Keys for customization.
+
+ - Turns WASD into Navigation cluster (Home, End, Page up and Page Down)
+ - Pok3r style right hand arrow cluster for accessibility (familiar for many users.)
+ - Doubles as shift key for top row numbers.
+ - Print Screen, Insert, etc.
+
+----------
+
+####  Adjust- (Raise + Lower)
+
+> Switch Modes
+
+ - Default modes moved to the left and new layer toggle modes located to the right.
+ - Sleep and Wake keys added.
+ - Reset button moved under Spacebar(s).
+
+Notes:
+-------------
+
+Please feel free to reach out to Commandlinedesign@gmail.com with suggestions.
+Special Thanks to Jack for QMK firmware and the Preonic!
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c
new file mode 100644 (file)
index 0000000..5d217e2
--- /dev/null
@@ -0,0 +1,332 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _GAME 3
+#define _ARROW 12
+#define _NUMPAD 13
+#define _LOWER 14
+#define _RAISE 15
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define GAME M(_GAME)
+#define ARROW M(_ARROW)
+#define NUMPAD M(_NUMPAD)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    | Raise|   -  |  =  |   [   |   ]  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                KC_6,    KC_7,    KC_8,     KC_9,     KC_0,     KC_BSPC},
+  {KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                KC_Y,    KC_U,    KC_I,     KC_O,     KC_P,     KC_BSLASH},
+  {LT(_RAISE, KC_ENT), KC_A,    KC_S,    KC_D,    KC_F,                KC_G,    KC_H,    KC_J,     KC_K,     KC_L,     KC_SCLN, KC_QUOT},
+  {KC_LSFT,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                KC_N,    KC_M,    KC_COMM,  KC_DOT,   KC_SLSH,  KC_ENT },
+  {M(M_BL),   KC_LCTL, KC_LALT, KC_LGUI, LOWER,   LT(_LOWER, KC_SPC),  KC_SPC,  RAISE,   KC_MINUS, KC_EQUAL, KC_LBRC,  KC_RBRC}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    | Raise|   -  |  =  |   [   |   ]  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______, KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, _______},
+  {_______, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {_______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    | Raise|   -  |  =  |   [   |   ]  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______},
+  {_______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    _______},
+  {_______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* GAME
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | XXX | Lower |    Space    | Raise|   -  |  =   |   [  |   ]  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] = {
+  {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,     KC_9,     KC_0,     KC_BSPC},
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,     KC_O,     KC_P,     KC_BSLASH},
+  {KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,     KC_L,     KC_SCLN,  KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM,  KC_DOT,   KC_SLSH,  KC_ENT },
+  {_______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______,   _______,  _______}
+},
+
+/* NUMPAD
+ * ,-----------------------------------------------------------------------------------.
+ * |  Esc |   /  |   *  |   -  |   4  |   5  |   6  |   7  |   8  |   9  |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   7  |   8  |   9  |   +  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   4  |   5  |   6  |   +  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   1  |   2  |   3  | Enter|   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   0  |   0  |  .   | Enter| Lower|    Space    | Raise|   -  |  =   |   [  |   ]  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = {
+  {KC_ESC, KC_PSLS, KC_PAST, KC_PMNS,  _______, _______, _______, _______, _______, _______, _______, _______},
+  {KC_P7,  KC_P8,   KC_P9,   KC_PPLS,  _______, _______, _______, _______, _______, _______, _______, _______},
+  {KC_P4,  KC_P5,   KC_P6,   KC_PPLS,  _______, _______, _______, _______, _______, _______, _______, _______},
+  {KC_P1,  KC_P2,   KC_P3,   KC_PENT,  _______, _______, _______, _______, _______, _______, _______, _______},
+  {KC_P0,  KC_P0,   KC_PDOT, KC_PENT,  _______, _______, _______, _______, _______, _______, _______, _______},
+},
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   F1 |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 | Del  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Mute | BkSpc|   Up |  Del | Forwd| MBtn1|   MUp| MBtn2|   /  |   7  |   8  |  9   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Left | Down | Right| Refr  MLeft|  MDn  |MRight|   *  |   4  |   5  |  6   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  Vol+| Prev | Play | Next | Back |  MWDn| MBtn3| MWUp |  -   |   1  |  2   |  3   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Vol- |      |      |      |      |             |      |   +  | Enter|  0   |  .   |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_GRV,  KC_F1,    KC_F2,   KC_F3,    KC_F4,          KC_F5,   KC_F6,   KC_F7,   KC_F8,    KC_F9,   KC_F10, KC_DEL},
+  {KC_MUTE, KC_BSPC,  KC_UP,   KC_DEL,   KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS,  KC_P7,   KC_P8,  KC_P9},
+  {_______, KC_LEFT,  KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST,  KC_P4,   KC_P5,  KC_P6},
+  {KC_VOLU, KC_MPRV,  KC_MPLY, KC_MNXT,  KC_WWW_BACK,    KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS,  KC_P1,   KC_P2,  KC_P3},
+  {KC_VOLD, _______,  _______, _______,  _______,        _______, _______, _______, KC_PPLS,  KC_PENT, KC_P0,  KC_PDOT}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Bksp | PgUp |  Del |      |      |      | PgUp |  Up  | PgDn |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Home | PgDn |  End |      |      | Home | Left | Down | Right|   ]  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Pause| Ins  |      |      | Print|Screen| End  |      |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_GRV, KC_EXLM, KC_AT,    KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN,  KC_RPRN, KC_BSPC},
+  {_______, KC_BSPC, KC_PGUP, KC_DEL,  _______, _______, _______, KC_PGUP, KC_UP,   _______,  _______, _______},
+  {_______, KC_HOME, KC_PGDN, KC_END,  _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______},
+  {_______, KC_PAUSE, KC_INS, _______, KC_PSCR, KC_PSCR, _______, KC_END,  _______, _______,  _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |qwerty|ColMak|Dvorak|      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |AGNorm|AGSwap|      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |Aud On|AudOff|MidiOn|MdiOff|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game |NUMPAD|      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |     Reset   |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______, _______,  QWERTY, COLEMAK,  DVORAK, _______,          _______,        _______, _______, _______, _______, _______},
+  {_______, RESET,   _______, AG_NORM, AG_SWAP, _______,          _______,        _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AU_ON,   AU_OFF,  MI_ON,            MI_OFF,         QWERTY,  COLEMAK,  DVORAK, _______, _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  KC_SYSTEM_SLEEP,  KC_SYSTEM_WAKE, ARROW,      GAME,  NUMPAD, _______, _______},
+  {_______, _______, _______, _______, _______, RESET,            RESET,          _______, _______, _______, _______, _______}
+}
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float start_up[][2] = {
+  {440.0*pow(2.0,(14)/12.0), 20},
+  {440.0*pow(2.0,(26)/12.0), 8},
+  {440.0*pow(2.0,(18)/12.0), 20},
+  {440.0*pow(2.0,(26)/12.0), 8}
+};
+
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _QWERTY:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_QWERTY);
+          }
+          break;
+        case _COLEMAK:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_COLEMAK);
+          }
+          break;
+        case _DVORAK:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_DVORAK);
+          }
+          break;
+        case _GAME:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_GAME);
+          }
+          break;
+        case _NUMPAD:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_NUMPAD);
+          }
+          break;
+        case _ARROW:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_LOWER);
+          }
+          break;
+        case _LOWER:
+          if (record->event.pressed) {
+            layer_on(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          break;
+        case _RAISE:
+          if (record->event.pressed) {
+            layer_on(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          break;
+        case M_BL:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+            #ifdef BACKLIGHT_ENABLE
+              backlight_step();
+            #endif
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+  #ifdef AUDIO_ENABLE
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(start_up, false, 0);
+  #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void play_goodbye_tone()
+{
+  PLAY_NOTE_ARRAY(goodbye, false, 0);
+  _delay_ms(150);
+}
+
+#endif
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/makefile b/keyboards/preonic/keymaps/CMD-Preonic/makefile
new file mode 100644 (file)
index 0000000..2f7787e
--- /dev/null
@@ -0,0 +1,23 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
index 581e08cd02aab5f0c0519f0a8c2a43486274fa39..3d4659ceb9a8b7425748ed250c5123d4e839e5d6 100644 (file)
@@ -1,25 +1,3 @@
-
-
-# Build Options
-#   change to "no" to disable the options, or define them in the Makefile in 
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
-CONSOLE_ENABLE = no         # Console for debug(+400)
-COMMAND_ENABLE = yes        # Commands for debug and configuration
-NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
-MIDI_ENABLE = no            # MIDI controls
-AUDIO_ENABLE = yes           # Audio output on port C6
-UNICODE_ENABLE = no         # Unicode
-BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
-
 ifndef QUANTUM_DIR
        include ../../../../Makefile
 endif
\ No newline at end of file
index 9a957f7ee186a58285bf88e1b337ba93d7cf92c6..78b4997a8f2ed01a580987743e8204adcc082829 100644 (file)
@@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+-------------+------+------+------+------+------|
  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
  * `-----------------------------------------------------------------------------------'
@@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+-------------+------+------+------+------+------|
  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
  * `-----------------------------------------------------------------------------------'
@@ -142,9 +142,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |      |      |      |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |      |      |      |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |      |Voice-|Voice+|Musoff|Mus on|      |      |      |      |      |      |      |
+ * |      |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff|      |      |      |      |      |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |      |      |      |      |      |             |      |      |      |      |      |
  * `-----------------------------------------------------------------------------------'
@@ -277,4 +277,4 @@ void music_scale_user(void)
     PLAY_NOTE_ARRAY(music_scale, false, 0);
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/keyboards/preonic/keymaps/jacwib/Makefile b/keyboards/preonic/keymaps/jacwib/Makefile
new file mode 100644 (file)
index 0000000..3e87d41
--- /dev/null
@@ -0,0 +1,20 @@
+
+
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes          # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h
new file mode 100644 (file)
index 0000000..b988831
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define FORCE_NKRO 1
+#define PREVENT_STUCK_MODIFIERS
+
+#endif
diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c
new file mode 100644 (file)
index 0000000..72ccc86
--- /dev/null
@@ -0,0 +1,293 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#include "keymap_nordic.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _MQWERTY 5
+#define _MLOWER 8
+#define _MRAISE 9
+#define _ADJUST 16
+
+enum preonic_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  MQWERTY,
+  MLOWER,
+  MRAISE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   +  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  Å   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   Ö  |  Ä   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   <  |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   .  |   ,  |  -   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt  | GUI  |AltGr |Lower | Space| Enter|Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    NO_PLUS, KC_BSPC},
+  {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    NO_AM  },
+  {KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    NO_AE,   NO_OSLH},
+  {KC_LSFT, NO_LESS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_DOT,  KC_COMM, NO_MINS},
+  {KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, LOWER,   KC_SPC,  KC_ENT,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   @  |   £  |   $  |      |      |   {  |   [  |   ]  |   }  |   \  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |VolUp |      |      |  ~   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |LastS |PauseP|NextS |      |  *   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   |  |      |      |      |      |      |      |VolDwn|      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |Bspc  |      |      |PgDn  |PgUp  |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {_______, NO_AT,   NO_PND,  NO_DLR,  _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},
+  {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)},
+  {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   !  |   "  |   #  |   ¤  |   %  |   &  |   /  |   (  |   )  |   =  |   ?  | Ins  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |Mouse^|      |      |      |      |ScrlUp|      |      |  ^   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |Mouse<|MouseV|Mouse>|      |      |MLC   |MMC   |MRC   |   '  |  ¨   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   >  |      |      |      |      |      |      |ScrlDown| :  |  ;   |  _   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |Bspc  |      |      |      | PgDn | PgUp |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL,  NO_QUES, KC_INS},
+  {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},
+  {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},
+  {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},
+  {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Mac Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   +  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  Å   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   Ö  |  Ä   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   <  |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   .  |   ,  |  -   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt  | GUI  |AltGr |Lower | Space| Enter|Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MQWERTY] = {
+  {KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    NO_PLUS, KC_BSPC},
+  {KC_ESC,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    NO_AM  },
+  {KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    NO_AE,   NO_OSLH},
+  {KC_LSFT, NO_LESS, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_DOT,  KC_COMM, NO_MINS},
+  {KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, MLOWER,  KC_SPC,  KC_ENT,  MRAISE,  KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Mac Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   @  |   £  |   $  |      |      |   {  |   [  |   ]  |   }  |   \  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |VolUp |      |      |  ~   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |LastS |PauseP|NextS |      |  *   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   |  |      |      |      |      |      |      |VolDwn|      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |Bspc  |      |      |PgDn  |PgUp  |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MLOWER] = {
+  {_______, NO_AT,   NO_PND,  NO_DLR,  _______, _______, LSFT(LALT(KC_8)), NO_LBRC, NO_RBRC, LSFT(LALT(KC_9)), LSFT(LALT(KC_7)), KC_DEL},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},
+  {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)},
+  {_______, NO_LBRC, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Mac Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   !  |   "  |   #  |   ¤  |   %  |   &  |   /  |   (  |   )  |   =  |   ?  | Ins  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |Mouse^|      |      |      |      |ScrlUp|      |      |  ^   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |Mouse<|MouseV|Mouse>|      |      |MLC   |MMC   |MRC   |   '  |  ¨   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   >  |      |      |      |      |      |      |ScrlDown| :  |  ;   |  _   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |Bspc  |      |      |      | PgDn | PgUp |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MRAISE] = {
+  {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL,  NO_QUES, KC_INS},
+  {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},
+  {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},
+  {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},
+  {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      | Reset|      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |Rshift|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |MusOn |MusOff|      |      |      |      |NrmMode|MacMode|    |      | Reset|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12},
+  {_______, _______, _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT},
+  {_______, MU_ON,   MU_OFF,  _______, _______, _______, _______, TO(0),   TO(5),   _______, _______, RESET  },
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = {
+  {NOTE_D5, 8},
+  {NOTE_E6, 8},
+  {NOTE_D6, 8},
+  {NOTE_E5, 8}
+};
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+        case QWERTY:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_QWERTY);
+          }
+          return false;
+          break;
+        case LOWER:
+          if (record->event.pressed) {
+            layer_on(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          return false;
+          break;
+        case RAISE:
+          if (record->event.pressed) {
+            layer_on(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          return false;
+          break;
+        case MQWERTY:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_MQWERTY);
+          }
+          return false;
+          break;
+        case MLOWER:
+          if (record->event.pressed) {
+            layer_on(_MLOWER);
+            update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+          } else {
+            layer_off(_MLOWER);
+            update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+          }
+          return false;
+          break;
+        case MRAISE:
+          if (record->event.pressed) {
+            layer_on(_MRAISE);
+            update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+          } else {
+            layer_off(_MRAISE);
+            update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+          }
+          return false;
+          break;
+      }
+    return true;
+};
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md
new file mode 100644 (file)
index 0000000..8658d6c
--- /dev/null
@@ -0,0 +1,15 @@
+# Jacwib's preonic keymap.
+
+Designed for use with a swedish language.
+
+Version 1.1:
+
+Added PgUp and PgDn keys.
+
+Also added "Mac mode". Unsure if it even works. Might however be able to test soon.
+
+Version 1.2:
+
+Changed around alt and super keys.
+
+Made "Mac mode" function, and tested it! (It works)
diff --git a/keyboards/preonic/keymaps/kinesis/Makefile b/keyboards/preonic/keymaps/kinesis/Makefile
new file mode 100644 (file)
index 0000000..6c8d289
--- /dev/null
@@ -0,0 +1,27 @@
+
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes          # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+TAP_DANCE_ENABLE = yes
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/preonic/keymaps/kinesis/config.h b/keyboards/preonic/keymaps/kinesis/config.h
new file mode 100644 (file)
index 0000000..e6099ce
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6061
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Ortholinear Keyboards
+#define PRODUCT         The Preonic Keyboard
+#define DESCRIPTION     A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D1
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 28     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+#define TAPPING_TERM 200
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c
new file mode 100644 (file)
index 0000000..9691be9
--- /dev/null
@@ -0,0 +1,144 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _FN 1
+#define _ULCK 2
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define HYP_TIC ALL_T(KC_GRV)
+#define EQ_LOCK TD(TD_EQ_LOCK)
+#define MIN_ULK TD(TD_MIN_ULOCK)
+
+//Tap Dance Declarations
+enum {
+  TD_EQ_LOCK = 0,
+  TD_MIN_ULOCK
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  /* Qwerty
+   * ,-----------------------------------------------------------------------------------.
+   * |   =  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |  -   |
+   * |------+------+------+------+------+------+------+------+------+------+------+------|
+   * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |  \   |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * | Ctrl |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Shift |
+   * |------+------+------+------+------+------+------+------+------+------+------+------|
+   * |  FN  |   `  | Alt  | LGUI | Back | ESC  |ENTER | SPCE | RGUI |   [  |  ]   |  FN  |
+   * `-----------------------------------------------------------------------------------'
+   */
+  [_QWERTY] = {
+    {EQ_LOCK, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    MIN_ULK },
+    {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS },
+    {KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT },
+    {KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC },
+    {MO(_FN), HYP_TIC, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC,  KC_ENT,  KC_SPC,  KC_RGUI, KC_LBRC, KC_RBRC, MO(_FN) }
+  },
+
+  /* Fn
+   * ,-----------------------------------------------------------------------------------.
+   * |      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |      |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * |      |  F11 |  F12 |  F13 |  F14 |  F15 |  F16 |  F17 |  F18 |  F19 |  F20 |      |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * |      | VOL- | VOL+ | MUTE |BLtogg|      | LEFT | DOWN |  UP  | RGHT |      |      |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * |      | BL-  | BL+  |Aud on|AudOff|AGnorm|AGswap|      |      |      |      |      |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * |      |Voice-|Voice+|Mus on|MusOff|      |      |PLY/PS|      | PREV | NEXT |      |
+   * `-----------------------------------------------------------------------------------'
+   */
+  [_FN] = {
+    {_______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______ },
+    {_______, KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  _______ },
+    {_______, KC_VOLD, KC_VOLU, KC_MUTE, BL_TOGG, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______ },
+    {_______, BL_DEC,  BL_INC,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______, _______, _______, _______ },
+    {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  _______, _______, KC_MPLY, _______, KC_MPRV, KC_MNXT, _______ }
+  }
+
+};
+
+float tone_startup[][2] = {
+  {NOTE_B5, 20},
+  {NOTE_B6, 8},
+  {NOTE_DS6, 20},
+  {NOTE_B6, 8}
+};
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float music_scale[][2]  = SONG(MUSIC_SCALE_SOUND);
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+/*bool process_record_user(uint16_t keycode, keyrecord_t *record) {*/
+  /*return true;*/
+  /*[>switch (keycode) {<]*/
+    /*[>case QWERTY:<]*/
+      /*[>return true;<]*/
+  /*[>}<]*/
+/*};*/
+
+void matrix_init_user(void) {
+  startup_user();
+}
+
+void startup_user()
+{
+  _delay_ms(20); // gets rid of tick
+  PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+  PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+  _delay_ms(150);
+  stop_all_notes();
+}
+
+void music_on_user(void)
+{
+  music_scale_user();
+}
+
+void music_scale_user(void)
+{
+  PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  //Tap once for equal, twice for hyper + X (alfred lock)
+  [TD_EQ_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_EQL,  HYPR(KC_X)),
+  //Tap once for minus, twice for time.heals.nothing
+  [TD_MIN_ULOCK] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, M(_ULCK))
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  switch(id) {
+    case _ULCK:
+      if (record->event.pressed) {
+        /* time.heals.nothing */
+        return MACRO( I(220), T(T), T(I), T(M), T(E), T(DOT), T(H), T(E), T(A), T(L), T(S), T(DOT), T(N), T(O), T(T), T(H), T(I), T(N), T(G), END);
+      }
+      break;
+  }
+  return MACRO_NONE;
+};
diff --git a/keyboards/preonic/keymaps/kinesis/readme.md b/keyboards/preonic/keymaps/kinesis/readme.md
new file mode 100644 (file)
index 0000000..e911968
--- /dev/null
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c
new file mode 100644 (file)
index 0000000..adc7392
--- /dev/null
@@ -0,0 +1,342 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _MUSIC 5
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+#define AUD_OFF M(6)
+#define AUD_ON M(7)
+#define MUS_OFF M(8)
+#define MUS_ON M(9)
+#define VC_IN M(10)
+#define VC_DE M(11)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |  -   |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl |  Alt | Left |Right |Lower |    Space    |Raise |  Up  | Down |  GUI |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL},
+  {KC_MINS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT},
+  {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_UP,   KC_DOWN, KC_RGUI, KC_ENT }
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL},
+  {KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT},
+  {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |  /   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  -   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt  | Left |Right |Lower |    Space    |Raise |  Up  | Down |  GUI |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+  {KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH},
+  {KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS},
+  {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT},
+  {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_UP,   KC_DOWN, KC_RGUI, KC_ENT }
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Mute | Vol- | Vol+ |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite|      | Home |  End |      |     Ins     |      | PgUp | PgDN |      |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
+  {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MUTE, KC_VOLD, KC_VOLU, _______, _______},
+  {M(M_BL), _______, KC_HOME, KC_END,  _______, KC_INS,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | Prev | Play | Next |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite|      | Home |  End |      |     Ins     |      | PgUp | PgDN |      |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC},
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
+  {KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_MPRV, KC_MPLY, KC_MNXT, _______, _______},
+  {M(M_BL), _______, KC_HOME, KC_END,  _______, KC_INS,  KC_INS,  _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Music (reserved for process_action_user)
+ *
+ */
+[_MUSIC] = {
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+  {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER,   XXXXXXX, XXXXXXX, RAISE,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Musoff|Mus on|      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12},
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+  {_______, _______, _______, AUD_ON,  AUD_OFF, AG_NORM, AG_SWAP,  QWERTY, COLEMAK, DVORAK,  _______, _______},
+  {_______, VC_DE,   VC_IN,   MUS_ON,  MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float start_up[][2] = {
+  {440.0*pow(2.0,(14)/12.0), 20},
+  {440.0*pow(2.0,(26)/12.0), 8},
+  {440.0*pow(2.0,(18)/12.0), 20},
+  {440.0*pow(2.0,(26)/12.0), 8}
+};
+
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _QWERTY:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_QWERTY);
+          }
+          break;
+        case _COLEMAK:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_COLEMAK);
+          }
+          break;
+        case _DVORAK:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+            #endif
+            persistant_default_layer_set(1UL<<_DVORAK);
+          }
+          break;
+        case _LOWER:
+          if (record->event.pressed) {
+            layer_on(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          break;
+        case _RAISE:
+          if (record->event.pressed) {
+            layer_on(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          break;
+        case M_BL:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+            #ifdef BACKLIGHT_ENABLE
+              backlight_step();
+            #endif
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+        case 6:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              audio_off();
+            #endif
+          }
+        break;
+        case 7:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              audio_on();
+              PLAY_NOTE_ARRAY(start_up, false, 0);
+            #endif
+          }
+        break;
+        case 8:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              layer_off(_MUSIC);
+              stop_all_notes();
+            #endif
+          }
+        break;
+        case 9:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              PLAY_NOTE_ARRAY(music_scale, false, 0);
+              layer_on(_MUSIC);
+            #endif
+          }
+        break;
+        case 10:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              voice_iterate();
+              PLAY_NOTE_ARRAY(music_scale, false, 0);
+            #endif
+          }
+        break;
+        case 11:
+          if (record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              voice_deiterate();
+              PLAY_NOTE_ARRAY(music_scale, false, 0);
+            #endif
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+  #ifdef AUDIO_ENABLE
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(start_up, false, 0);
+  #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+uint8_t starting_note = 0x0C;
+int offset = 7;
+
+void process_action_user(keyrecord_t *record) {
+
+  if (IS_LAYER_ON(_MUSIC)) {
+    if (record->event.pressed) {
+        play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+    } else {
+        stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+    }
+  }
+
+}
+
+void play_goodbye_tone()
+{
+  PLAY_NOTE_ARRAY(goodbye, false, 0);
+  _delay_ms(150);
+}
+
+#endif
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/xyverz/makefile.mk b/keyboards/preonic/keymaps/xyverz/makefile.mk
new file mode 100644 (file)
index 0000000..628167f
--- /dev/null
@@ -0,0 +1 @@
+AUDIO_ENABLE = yes
\ No newline at end of file
index 889c3fc8fd9e3b7eec24e3c93962f432ab638423..d9c119b8daca8e5546e4bbbebd29c7dce70b9595 100644 (file)
@@ -1,5 +1,16 @@
 #include "preonic.h"
 
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+  {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+  {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+  {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+  {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+  {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+};
+#endif
+
 void matrix_init_kb(void) {
 
     // Turn status LED on
index f0be255a0952ce08610358115d70cf428d276184..10763ee97a406bf61082ca80ce70f342c552c4b4 100644 (file)
@@ -13,13 +13,15 @@ Download or clone the whole firmware and navigate to the keyboards/preonic folde
 Depending on which keymap you would like to use, you will have to compile slightly differently.
 
 ### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
 ```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
+
 Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk
new file mode 100644 (file)
index 0000000..071bfdc
--- /dev/null
@@ -0,0 +1,70 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no         # Console for debug(+400)
+COMMAND_ENABLE ?= no        # Commands for debug and configuration
+NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
+MIDI_ENABLE ?= yes            # MIDI controls
+AUDIO_ENABLE ?= yes           # Audio output on port C6
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+API_SYSEX_ENABLE ?= yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
\ No newline at end of file
index e979865467bc22845fa07b1c68b68bce47534def..81a23c7e557326e86879f418783035fecc9d64f1 100644 (file)
@@ -9,37 +9,47 @@ These keyboards are manufactured by the maintainers of QMK.
 
 What makes OLKB keyboards shine is a combo of lean aesthetics, compact size, and killer tactile feel. These are available through [olkb.com](http://olkb.com) as well as through [Massdrop](http://massdrop.com) from time to time, as easy to assemble kits.
 
-* [Planck](/keyboards/planck/) - A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine.
-* [Preonic](/keyboards/preonic/) - Like the Planck, but bigger. 50%.
-* [Atomic](/keyboards/atomic/) - Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine _bigger_. That is the Atomic. A 60% keyboard.
+* [Planck](/keyboards/planck/) &mdash; A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine.
+* [Preonic](/keyboards/preonic/) &mdash; Like the Planck, but bigger. 50%.
+* [Atomic](/keyboards/atomic/) &mdash; Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine _bigger_. That is the Atomic. A 60% keyboard.
 
 ### ErgoDox EZ - Erez Zukerman
 
 Made in Taiwan using advanced robotic manufacturing, the ErgoDox EZ is a fully-assembled, premium ergonomic keyboard. Its split design allows you to place both halves shoulder width, and its custom-made wrist rests and tilt/tent kit make for incredibly comfortable typing. Available on [ergodox-ez.com](https://ergodox-ez.com).
 
-* [ErgoDox EZ](/keyboards/ergodox_ez/) - Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types.
+* [ErgoDox EZ](/keyboards/ergodox/) &mdash; Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types.
 
 ### Clueboard - Zach White
 
 Designed and built in Felton, CA, Clueboards keyboard emphasize quality and locally sourced components, available on [clueboard.co](http://clueboard.co)
 
-* [Clueboard](/keyboards/clueboard/) - The 66% custom keyboard.
-* [Cluepad](/keyboards/cluepad/) - A mechanical numpad with QMK superpowers.
+* [Clueboard](/keyboards/clueboard/) &mdash; The 66% custom keyboard.
+* [Cluecard](/keyboards/cluecard/) &mdash; A small board to help you hack on QMK.
+* [Cluepad](/keyboards/cluepad/) &mdash; A mechanical numpad with QMK superpowers.
 
 
 ## Community-supported QMK Keyboards
 
 These keyboards are part of the QMK repository, but their manufacturers are not official maintainers of the repository.
 
-* [alps64](/keyboards/alps64/) &mdash; A 60% keyboard for Alps keyswitches.
-* [arrow_pad](/keyboards/arrow_pad) &mdash; A custom creation by IBNobody.
-* [atreus](/keyboards/atreus) &mdash; Made by Technomancy.
-* [bantam44](/keyboards/bantam44) &mdash; It is a 44-key 40% staggered keyboard.
-* [gh60](/keyboards/gh60) &mdash; A 60% Geekhack community-driven project.
-* [hhkb](/keyboards/hhkb) &mdash; The Happy Hacking keyboard can be hacked with a custom controller to run QMK.
-* [jd45](/keyboards/jd45) &mdash; Another Geekhack community project, designed by jdcarpe.
-* [kc60](/keyboards/kc60) &mdash; A programmable Chinese-made keyboard, lost in the mists of time.
-* [phantom](/keyboards/phantom) &mdash; A tenkeyless kit by Teel, also from Geekhack.
-* [retro_refit](/keyboards/retro_refit) &mdash; Another creation by IBNobody.
-* [satan](/keyboards/satan) &mdash; A GH60 variant.
-* [sixkeyboard](/keyboards/sixkeyboard) &mdash; A 6-key keyboard made by TechKeys.
+* [Alps64](/keyboards/alps64) &mdash; A 60% keyboard for Alps keyswitches.
+* [AMJ60](/keyboards/amj60) &mdash; DIY/Assembled compact 60% keyboard.
+* [Arrow Pad](/keyboards/arrow_pad) &mdash; A custom creation by IBNobody.
+* [Atreus](/keyboards/atreus) &mdash; Made by Technomancy.
+* [Bantam44](/keyboards/bantam44) &mdash; It is a 44-key 40% staggered keyboard.
+* [Ergodox Infinity](/keyboards/ergodox) - Ergonomic Split Keyboard by Input Club.
+* [GH60](/keyboards/gh60) &mdash; A 60% Geekhack community-driven project.
+* [Happy Hacking Keyboard](/keyboards/hhkb) &mdash; The Happy Hacking keyboard can be hacked with a custom controller to run QMK.
+* [Infinity 60%](/keyboards/infinity60) - &mdash; Compact community keyboard by Input Club.
+* [JD45](/keyboards/jd45) &mdash; Another Geekhack community project, designed by jdcarpe.
+* [KC60](/keyboards/kc60) &mdash; A programmable Chinese-made keyboard, lost in the mists of time.
+* [Kinesis Advantage](/keyboards/kinesis) &mdash; Contoured ergonomic keyboard by Kinesis Computer Ergonomics.
+* [The Kitten Paw](/keyboards/kitten_paw) &mdash; A replacement controller (2016 revision) for the Filco Majestouch by [Bathroom Epiphanies](https://github.com/BathroomEpiphanies).
+* [Lets Split](/keyboards/lets_split) - Split ortholinear 40% keyboard.
+* [Phantom](/keyboards/phantom) &mdash; A tenkeyless kit by Teel, also from Geekhack.
+* [Retro Refit](/keyboards/retro_refit) &mdash; Another creation by IBNobody.
+* [S60-x](/keyboards/s60-x) &mdash; DIY compact keyboard designed by VinnyCordeiro for Sentraq.
+* [Satan](/keyboards/satan) &mdash; A GH60 variant.
+* [SixKeyBoard](/keyboards/sixkeyboard) &mdash; A 6-key keyboard made by TechKeys.
+* [TheVan 44](/keyboars/tv44) &mdash; A 44-key staggered keybard by Evangs.
+* [Vision Division](/keyboards/vision_division) &mdash; Full Size / Split Linear Keyboard by IBNobody.
diff --git a/keyboards/retro_refit/Makefile b/keyboards/retro_refit/Makefile
deleted file mode 100644 (file)
index 2dd8cc5..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes                # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes         # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes         # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes          # Console for debug(+400)
-COMMAND_ENABLE ?= yes          # Commands for debug and configuration
-KEYBOARD_LOCK_ENABLE ?= yes    # Allow locking of keyboard via magic key
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes      # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes                     # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
-# MIDI_ENABLE ?= YES                   # MIDI controls
-# UNICODE_ENABLE ?= YES                # Unicode
-# BLUETOOTH_ENABLE ?= yes      # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
-       include ../../Makefile
-endif
-
diff --git a/keyboards/retro_refit/config.h b/keyboards/retro_refit/config.h
deleted file mode 100644 (file)
index f2194e5..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6060
-#define DEVICE_VER      0x0001
-#define MANUFACTURER    Nobody
-#define PRODUCT         retro_refit
-#define DESCRIPTION     Retro Refit
-
-/* key matrix size */
-#define MATRIX_ROWS 11
-#define MATRIX_COLS 8
-
-// See note in retro_refit.h for an explanation of how this matrix is wired up
-#define MATRIX_ROW_PINS { D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 }
-#define MATRIX_COL_PINS { B0, B1, B2, B3, D2, D3, C7, D5 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 0
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-
-/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */
-#define FORCE_NKRO
-
-/*
- * Magic key options
- * These options allow the magic key functionality to be changed. This is useful
- * if your keyboard/keypad is missing keys and you want magic key support.
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
-    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* remap magic keys */
-//#define MAGIC_KEY_HELP1          H
-//#define MAGIC_KEY_HELP2          SLASH
-//#define MAGIC_KEY_DEBUG          D
-//#define MAGIC_KEY_DEBUG_MATRIX   X
-//#define MAGIC_KEY_DEBUG_KBD      K
-//#define MAGIC_KEY_DEBUG_MOUSE    M
-//#define MAGIC_KEY_VERSION        V
-//#define MAGIC_KEY_STATUS         S
-//#define MAGIC_KEY_CONSOLE        C
-//#define MAGIC_KEY_LAYER0_ALT1    ESC
-//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
-//#define MAGIC_KEY_LAYER0         0
-//#define MAGIC_KEY_LAYER1         1
-//#define MAGIC_KEY_LAYER2         2
-//#define MAGIC_KEY_LAYER3         3
-//#define MAGIC_KEY_LAYER4         4
-//#define MAGIC_KEY_LAYER5         5
-//#define MAGIC_KEY_LAYER6         6
-//#define MAGIC_KEY_LAYER7         7
-//#define MAGIC_KEY_LAYER8         8
-//#define MAGIC_KEY_LAYER9         9
-//#define MAGIC_KEY_BOOTLOADER     PAUSE
-#define MAGIC_KEY_LOCK             BSLS
-//#define MAGIC_KEY_EEPROM         E
-//#define MAGIC_KEY_NKRO           N
-//#define MAGIC_KEY_SLEEP_LED      Z
-
-/*
- * Feature disable options
- *  These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/retro_refit/keymaps/default/keymap.c b/keyboards/retro_refit/keymaps/default/keymap.c
deleted file mode 100644 (file)
index 405402d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-// this is the style you want to emulate.
-
-#include "retro_refit.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] =
-       KEYMAP( ESC,    F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,  F9,  F10, NLCK, SLCK, PSCR, PAUS, \
-                       GRV,     1,    2,    3,    4,    5,    6,    7,    8,   9,    0, MINS,  EQL, BSPC, HOME, \
-                       TAB,     Q,    W,    E,    R,    T,    Y,    U,    I,   O,    P, LBRC, RBRC,       PGUP, \
-                       BSLS,    A,    S,    D,    F,    G,    H,    J,    K,   L, SCLN, QUOT,        ENT, PGDN, \
-                       LSFT,          Z,    X,    C,    V,    B,    N,    M, COMM, DOT, SLSH, RSFT,   UP,  END, \
-                       LCTL, LGUI, LALT,        SPC,                               INS,  DEL, LEFT, DOWN, RGHT),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-          if (record->event.pressed) {
-            register_code(KC_RSFT);
-          } else {
-            unregister_code(KC_RSFT);
-          }
-        break;
-      }
-    return MACRO_NONE;
-};
diff --git a/keyboards/retro_refit/readme.md b/keyboards/retro_refit/readme.md
deleted file mode 100644 (file)
index b01a1a9..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-retro_refit keyboard firmware
-======================
-
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
-```
-$ make KEYMAP=[default|jack|<name>]
-```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
\ No newline at end of file
diff --git a/keyboards/retro_refit/retro_refit.c b/keyboards/retro_refit/retro_refit.c
deleted file mode 100644 (file)
index 3d610eb..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "retro_refit.h"
-#include "led.h"
-
-void matrix_init_kb(void) {
-    // put your keyboard start-up code here
-    // runs once when the firmware starts up
-
-    // Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS)
-    DDRD |= (1<<6);
-    PORTD |= (1<<6);
-
-    matrix_init_user();
-};
-
-void led_set_kb(uint8_t usb_led) {
-    // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
-    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
-        // output low
-        DDRD |= (1<<0);
-        PORTD &= ~(1<<0);
-    } else {
-        // Hi-Z
-        DDRD &= ~(1<<0);
-        PORTD &= ~(1<<0);
-    }
-    if (usb_led & (1<<USB_LED_NUM_LOCK)) {
-        // output low
-        DDRD |= (1<<1);
-        PORTD &= ~(1<<1);
-    } else {
-        // Hi-Z
-        DDRD &= ~(1<<1);
-        PORTD &= ~(1<<1);
-    }
-    if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
-        // output low
-        DDRC |= (1<<6);
-        PORTC &= ~(1<<6);
-    } else {
-        // Hi-Z
-        DDRC &= ~(1<<6);
-        PORTC &= ~(1<<6);
-    }
-
-    led_set_user(usb_led);
-};
\ No newline at end of file
diff --git a/keyboards/retro_refit/retro_refit.h b/keyboards/retro_refit/retro_refit.h
deleted file mode 100644 (file)
index 109acdc..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef RETRO_REFIT_H
-#define RETRO_REFIT_H
-
-#include "quantum.h"
-
-// This macro is an example of using a non-standard row-column matrix. The 
-// keyboard in question had 11 rows and 8 columns, but the rows were not all 
-// horizontal, and the columns were not all vertical. For example, row 2 
-// contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and
-// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", 
-// "Left Alt", "Up Arrow", and "Down Arrow".
-//
-// The macro makes programming the keys easier and in a more straight-forward
-// manner because it realigns the keys into a 6x15 sensible keyboard layout 
-// instead of the obtuse 11x8 matrix.
-
-#define KEYMAP( \
-       K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
-       K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
-       K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45,      K97, \
-       K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30,      K44, K87, \
-       K26,      K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
-       K10, K06, K25,                K07,                K86, K85, K95, K90, K93  \
-) { \
-{      KC_##K00,       KC_##K01,       KC_##K02,       KC_##K03,       KC_##K04,       KC_##K05,       KC_##K06,       KC_##K07,       }, \
-{      KC_##K10,       KC_##K11,       KC_##K12,       KC_##K13,       KC_##K14,       KC_##K15,       KC_##K16,       KC_##K17,       }, \
-{      KC_##K20,       KC_##K21,       KC_##K22,       KC_##K23,       KC_##K24,       KC_##K25,       KC_##K26,       KC_##K27,       }, \
-{      KC_##K30,       KC_##K31,       KC_##K32,       KC_##K33,       KC_##K34,       KC_##K35,       KC_##K36,       KC_##K37,       }, \
-{      KC_##K40,       KC_##K41,       KC_##K42,       KC_##K43,       KC_##K44,       KC_##K45,       KC_##K46,       KC_##K47,       }, \
-{      KC_##K50,       KC_##K51,       KC_##K52,       KC_##K53,       KC_##K54,       KC_##K55,       KC_##K56,       KC_##K57,       }, \
-{      KC_##K60,       KC_##K61,       KC_##K62,       KC_##K63,       KC_##K64,       KC_##K65,       KC_##K66,       KC_##K67,       }, \
-{      KC_##K70,       KC_##K71,       KC_##K72,       KC_##K73,       KC_##K74,       KC_##K75,       KC_##K76,       KC_##K77,       }, \
-{      KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_NO,          KC_##K85,       KC_##K86,       KC_##K87,       }, \
-{      KC_##K90,       KC_##K91,       KC_NO,          KC_##K93,       KC_##K94,       KC_##K95,       KC_NO,          KC_##K97,       }, \
-{      KC_##KA0,       KC_##KA1,       KC_##KA2,       KC_##KA3,       KC_##KA4,       KC_##KA5,       KC_##KA6,       KC_##KA7,       } \
-}
-
-#endif
\ No newline at end of file
diff --git a/keyboards/s60-x/Makefile b/keyboards/s60-x/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/s60-x/config.h b/keyboards/s60-x/config.h
new file mode 100644 (file)
index 0000000..ac7951c
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2016 Julien Pecqueur <julien@peclu.net>
+Copyright 2016 Felix Uhl <ifreilicht@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Massdrop
+#define PRODUCT         S60-X
+#define DESCRIPTION     q.m.k. keyboard firmware for S60-X
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B7, B3, B2, B1, B0 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, E6, F1 }
+#define UNUSED_PINS { F0 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/Makefile b/keyboards/s60-x/keymaps/ansi_qwertz/Makefile
new file mode 100644 (file)
index 0000000..6a078bc
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/config.h b/keyboards/s60-x/keymaps/ansi_qwertz/config.h
new file mode 100644 (file)
index 0000000..6c01d57
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// keymap needs oneshot functionality
+#undef NO_ACTION_ONESHOT
+
+#undef IS_COMMAND
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#endif
\ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png
new file mode 100644 (file)
index 0000000..168780c
Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg
new file mode 100644 (file)
index 0000000..f038589
--- /dev/null
@@ -0,0 +1,1046 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="900"
+   height="300"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.91 r13725"
+   version="1.0"
+   sodipodi:docname="KB_US-International-Alternative.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path5387"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path5390"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Tail"
+       style="overflow:visible">
+      <g
+         id="g5342"
+         transform="scale(-1.2)">
+        <path
+           id="path5344"
+           d="M -3.8048674,-3.9585227 L 0.54352094,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5346"
+           d="M -1.2866832,-3.9585227 L 3.0617053,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5348"
+           d="M 1.3053582,-3.9585227 L 5.6537466,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5350"
+           d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5352"
+           d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5354"
+           d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path5363"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path5369"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Send"
+       style="overflow:visible;">
+      <path
+         id="path5375"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.2) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Send"
+       style="overflow:visible;">
+      <path
+         id="path5357"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path5381"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path5372"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(-5,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="435.66801"
+     inkscape:cy="291.15819"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:grid-points="true"
+     showgrid="true"
+     gridtolerance="15px"
+     showborder="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1017"
+     inkscape:window-x="1912"
+     inkscape:window-y="-8"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-bbox="true"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0px"
+       originy="0px"
+       spacingx="7.5px"
+       spacingy="7.5px"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.12156863"
+       empopacity="0.25098039"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,0 L 60,0 L 60,60 L 0,60 L 0,0 z "
+       id="rect2186" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 60,0 L 120,0 L 120,60 L 60,60 L 60,0 z "
+       id="rect2218" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 120,0 L 180,0 L 180,60 L 120,60 L 120,0 z "
+       id="rect2222" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 180,0 L 240,0 L 240,60 L 180,60 L 180,0 z "
+       id="rect2228" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 240,0 L 300,0 L 300,60 L 240,60 L 240,0 z "
+       id="rect2230" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 300,0 L 360,0 L 360,60 L 300,60 L 300,0 z "
+       id="rect2232" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 360,0 L 420,0 L 420,60 L 360,60 L 360,0 z "
+       id="rect2234" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 420,0 L 480,0 L 480,60 L 420,60 L 420,0 z "
+       id="rect2236" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 480,0 L 540,0 L 540,60 L 480,60 L 480,0 z "
+       id="rect2238" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 540,0 L 600,0 L 600,60 L 540,60 L 540,0 z "
+       id="rect2240" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 600,0 L 660,0 L 660,60 L 600,60 L 600,0 z "
+       id="rect2242" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 660,0 L 720,0 L 720,60 L 660,60 L 660,0 z "
+       id="rect2244" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 720,0 L 780,0 L 780,60 L 720,60 L 720,0 z "
+       id="rect2246" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 780,0 L 900,0 L 900,60 L 780,60 L 780,0 z "
+       id="rect2248" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,60 L 90,60 L 90,120 L 0,120 L 0,60 z "
+       id="rect2250" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 90,60 L 150,60 L 150,120 L 90,120 L 90,60 z "
+       id="rect2252" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 150,60 L 210,60 L 210,120 L 150,120 L 150,60 z "
+       id="rect2254" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 210,60 L 270,60 L 270,120 L 210,120 L 210,60 z "
+       id="rect2256" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 270,60 L 330,60 L 330,120 L 270,120 L 270,60 z "
+       id="rect2258" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 330,60 L 390,60 L 390,120 L 330,120 L 330,60 z "
+       id="rect2262" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 390,60 L 450,60 L 450,120 L 390,120 L 390,60 z "
+       id="rect2264" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 450,60 L 510,60 L 510,120 L 450,120 L 450,60 z "
+       id="rect2266" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 510,60 L 570,60 L 570,120 L 510,120 L 510,60 z "
+       id="rect2270" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 570,60 L 630,60 L 630,120 L 570,120 L 570,60 z "
+       id="rect2272" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 630,60 L 690,60 L 690,120 L 630,120 L 630,60 z "
+       id="rect2274" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 690,60 L 750,60 L 750,120 L 690,120 L 690,60 z "
+       id="rect2278" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 750,60 L 810,60 L 810,120 L 750,120 L 750,60 z "
+       id="rect2280" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 810,60 L 900,60 L 900,120 L 810,120 L 810,60 z "
+       id="rect2284" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,120 L 105,120 L 105,180 L 0,180 L 0,120 z "
+       id="rect2286" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 105,120 L 165,120 L 165,180 L 105,180 L 105,120 z "
+       id="rect2292" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 165,120 L 225,120 L 225,180 L 165,180 L 165,120 z "
+       id="rect2296" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 225,120 L 285,120 L 285,180 L 225,180 L 225,120 z "
+       id="rect2298" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 285,120 L 345,120 L 345,180 L 285,180 L 285,120 z "
+       id="rect2300" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 345,120 L 405,120 L 405,180 L 345,180 L 345,120 z "
+       id="rect2302" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 405,120 L 465,120 L 465,180 L 405,180 L 405,120 z "
+       id="rect2306" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 465,120 L 525,120 L 525,180 L 465,180 L 465,120 z "
+       id="rect2308" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 525,120 L 585,120 L 585,180 L 525,180 L 525,120 z "
+       id="rect2312" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 585,120 L 645,120 L 645,180 L 585,180 L 585,120 z "
+       id="rect2314" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 645,120 L 705,120 L 705,180 L 645,180 L 645,120 z "
+       id="rect2316" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 705,120 L 765,120 L 765,180 L 705,180 L 705,120 z "
+       id="rect2318" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 765,120 L 900,120 L 900,180 L 765,180 L 765,120 z "
+       id="rect2320" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,180 L 135,180 L 135,240 L 0,240 L 0,180 z "
+       id="rect2322" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 135,180 L 195,180 L 195,240 L 135,240 L 135,180 z "
+       id="rect2324" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 195,180 L 255,180 L 255,240 L 195,240 L 195,180 z "
+       id="rect2326" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 255,180 L 315,180 L 315,240 L 255,240 L 255,180 z "
+       id="rect2330" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 315,180 L 375,180 L 375,240 L 315,240 L 315,180 z "
+       id="rect2334" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 375,180 L 435,180 L 435,240 L 375,240 L 375,180 z "
+       id="rect2336" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 435,180 L 495,180 L 495,240 L 435,240 L 435,180 z "
+       id="rect2338" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 495,180 L 555,180 L 555,240 L 495,240 L 495,180 z "
+       id="rect2340" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 555,180 L 615,180 L 615,240 L 555,240 L 555,180 z "
+       id="rect2342" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 615,180 L 675,180 L 675,240 L 615,240 L 615,180 z "
+       id="rect2344" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 675,180 L 735,180 L 735,240 L 675,240 L 675,180 z "
+       id="rect2346" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 735,180 L 900,180 L 900,240 L 735,240 L 735,180 z "
+       id="rect2348" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,240 L 90,240 L 90,300 L 0,300 L 0,240 z "
+       id="rect2350" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 810,240 L 900,240 L 900,300 L 810,300 L 810,240 z "
+       id="rect2352" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 150,240 L 240,240 L 240,300 L 150,300 L 150,240 z "
+       id="rect2354" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 600,240 L 690,240 L 690,300 L 600,300 L 600,240 z "
+       id="rect2360" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 240,240 L 600,240 L 600,300 L 240,300 L 240,240 z "
+       id="rect2362" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 90,240 L 150,240 L 150,300 L 90,300 L 90,240 z "
+       id="rect2364" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 690,240 L 750,240 L 750,300 L 690,300 L 690,240 z "
+       id="rect2366" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 750,240 L 810,240 L 810,300 L 750,300 L 750,240 z "
+       id="rect2368" />
+    <path
+       style=""
+       d=""
+       id="flowRoot4146" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 75.351563,18.826172 L 74.4375,11.056641 L 74.4375,6.3691406 L 78.046875,6.3691406 L 78.046875,11.056641 L 77.132813,18.826172 L 75.351563,18.826172 M 74.484375,23.630859 L 74.484375,20.173828 L 77.964844,20.173828 L 77.964844,23.630859 L 74.484375,23.630859 M 75.351563,53.630859 L 75.351563,42.158203 L 71.34375,42.158203 L 71.34375,39.802734 L 71.601563,39.802734 C 73.062496,39.802748 74.124995,39.576186 74.789063,39.123047 C 75.460931,38.669937 75.855462,37.912125 75.972656,36.849609 L 78.65625,36.849609 L 78.65625,53.630859 L 75.351563,53.630859"
+       id="text5091" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 23.34375,14.220703 L 23.34375,16.810547 C 22.531233,17.365241 21.761702,17.775396 21.035156,18.041016 C 20.316391,18.298833 19.605455,18.42774 18.902344,18.427734 C 18.542956,18.42774 18.183581,18.39649 17.824219,18.333984 C 17.464832,18.27149 17.105457,18.181646 16.746094,18.064453 C 16.558583,18.001959 16.281239,17.904303 15.914063,17.771484 C 14.203116,17.185553 12.902336,16.892585 12.011719,16.892578 C 11.34765,16.892585 10.652339,17.041022 9.9257813,17.337891 C 9.2070275,17.626959 8.3984345,18.091802 7.5,18.732422 L 7.5,16.142578 C 8.3359346,15.580086 9.1328088,15.162118 9.890625,14.888672 C 10.648432,14.607431 11.363275,14.466806 12.035156,14.466797 C 12.949211,14.466806 14.085929,14.693368 15.445313,15.146484 C 15.46874,15.154305 15.484365,15.158212 15.492188,15.158203 C 15.632802,15.205087 15.847646,15.279305 16.136719,15.380859 C 17.347644,15.810555 18.285143,16.025398 18.949219,16.025391 C 19.613267,16.025398 20.29686,15.880867 21,15.591797 C 21.703109,15.302743 22.484358,14.845712 23.34375,14.220703 M 11.988281,35.033203 L 15.011719,35.033203 L 17.320313,39.369141 L 15.65625,39.369141 L 11.988281,35.033203"
+       id="text5103" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 136.47578,20.443359 C 136.04608,21.099612 135.54999,21.583986 134.9875,21.896484 C 134.42499,22.201173 133.76093,22.353517 132.99532,22.353516 C 131.76093,22.353517 130.81953,22.01758 130.1711,21.345703 C 129.53047,20.673831 129.21015,19.681645 129.21016,18.369141 C 129.21015,16.50196 129.75312,14.935556 130.83907,13.669922 C 131.93281,12.404308 133.27656,11.771496 134.87032,11.771484 C 135.4953,11.771496 136.03827,11.900402 136.49922,12.158203 C 136.96015,12.416027 137.33905,12.798839 137.63594,13.306641 L 138.25703,12.158203 L 140.34297,12.158203 L 138.62032,19.166016 C 138.59686,19.251958 138.57733,19.341801 138.56172,19.435547 C 138.54608,19.521488 138.53827,19.591801 138.53828,19.646484 C 138.53827,19.919926 138.63202,20.126957 138.81953,20.267578 C 139.00702,20.400394 139.28436,20.4668 139.65157,20.466797 C 139.95624,20.4668 140.27264,20.388675 140.60078,20.232422 C 140.9367,20.076175 141.2492,19.857426 141.53828,19.576172 C 142.21014,18.951177 142.71795,18.220709 143.06172,17.384766 C 143.41326,16.548835 143.58904,15.630867 143.58907,14.630859 C 143.58904,12.75587 142.86248,11.216809 141.40938,10.013672 C 139.96405,8.8027492 138.09686,8.1972811 135.80782,8.1972656 C 134.70624,8.1972811 133.6789,8.3300934 132.72578,8.5957031 C 131.78046,8.8613429 130.92109,9.2558737 130.14766,9.7792969 C 128.81953,10.669935 127.79609,11.783215 127.07735,13.119141 C 126.36641,14.455087 126.01094,15.91993 126.01094,17.513672 C 126.01094,19.912113 126.81953,21.83008 128.43672,23.267578 C 130.0539,24.697265 132.21406,25.412108 134.91719,25.412109 C 136.1828,25.412108 137.41718,25.220702 138.62032,24.837891 C 139.83124,24.455077 140.95623,23.90039 141.99532,23.173828 L 142.95625,24.544922 C 141.76092,25.443358 140.49139,26.119138 139.14766,26.572266 C 137.81171,27.025387 136.41718,27.25195 134.96407,27.251953 C 133.46405,27.25195 132.08515,27.060543 130.82735,26.677734 C 129.56953,26.302732 128.45234,25.744139 127.47578,25.001953 C 126.26484,24.05664 125.35859,22.966798 124.75703,21.732422 C 124.15547,20.49805 123.85469,19.099614 123.85469,17.537109 C 123.85469,16.232429 124.05781,14.990243 124.46407,13.810547 C 124.87813,12.623058 125.48359,11.544934 126.28047,10.576172 C 127.43672,9.1621238 128.82734,8.0918124 130.45235,7.3652344 C 132.07734,6.6386889 133.88593,6.275408 135.87813,6.2753906 C 137.19843,6.275408 138.43671,6.4550953 139.59297,6.8144531 C 140.75702,7.1660321 141.76873,7.6660316 142.62813,8.3144531 C 143.68279,9.1347801 144.46795,10.072279 144.9836,11.126953 C 145.50701,12.17384 145.76873,13.357432 145.76875,14.677734 C 145.76873,15.966805 145.51092,17.15821 144.99532,18.251953 C 144.48748,19.337895 143.75311,20.267581 142.79219,21.041016 C 142.2453,21.478518 141.64764,21.814455 140.99922,22.048828 C 140.35858,22.275392 139.69061,22.388673 138.99532,22.388672 C 138.16718,22.388673 137.54218,22.224611 137.12032,21.896484 C 136.70624,21.568361 136.4914,21.083987 136.47578,20.443359 M 137.06172,15.427734 C 136.96015,14.794931 136.73358,14.314462 136.38203,13.986328 C 136.03827,13.650401 135.58124,13.482432 135.01094,13.482422 C 134.1203,13.482432 133.34687,13.966807 132.69063,14.935547 C 132.03437,15.904305 131.70624,17.068366 131.70625,18.427734 C 131.70624,19.146489 131.86249,19.693363 132.175,20.068359 C 132.49531,20.443363 132.95624,20.630862 133.55782,20.630859 C 134.20624,20.630862 134.79608,20.384769 135.32735,19.892578 C 135.8664,19.400395 136.23358,18.75977 136.42891,17.970703 L 137.06172,15.427734 M 128.56563,53.630859 C 128.58125,52.130861 128.90156,50.861331 129.52657,49.822266 C 130.15156,48.775395 131.26094,47.716803 132.85469,46.646484 C 133.09687,46.482429 133.44844,46.255867 133.90938,45.966797 C 136.01875,44.615243 137.07343,43.314463 137.07344,42.064453 C 137.07343,41.322278 136.85078,40.736341 136.40547,40.306641 C 135.96015,39.876967 135.35078,39.662123 134.57735,39.662109 C 133.73359,39.662123 133.08125,39.927748 132.62032,40.458984 C 132.16719,40.982435 131.94062,41.732434 131.94063,42.708984 L 131.94063,42.849609 L 128.84688,42.849609 C 128.84688,40.927747 129.3625,39.44728 130.39375,38.408203 C 131.425,37.369157 132.89375,36.849626 134.8,36.849609 C 136.52656,36.849626 137.90546,37.322282 138.93672,38.267578 C 139.96796,39.205093 140.48358,40.455091 140.4836,42.017578 C 140.48358,43.134776 140.21405,44.103525 139.675,44.923828 C 139.13593,45.744149 138.09296,46.677741 136.5461,47.724609 C 136.21796,47.951178 135.76484,48.248052 135.18672,48.615234 C 133.71797,49.560551 132.88984,50.2793 132.70235,50.771484 L 140.31953,50.771484 L 140.31953,53.630859 L 128.56563,53.630859"
+       id="text5127" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 195.28125,13.693359 L 194.25,16.552734 L 197.19141,16.552734 L 198.19922,13.693359 L 195.28125,13.693359 M 195.28125,6.4746094 L 197.87109,6.4746094 L 196.16016,11.337891 L 198.99609,11.337891 L 200.73047,6.4746094 L 203.32031,6.4746094 L 201.58594,11.337891 L 204.90234,11.337891 L 204.03516,13.693359 L 200.75391,13.693359 L 199.76953,16.529297 L 203.16797,16.529297 L 202.33594,18.873047 L 198.92578,18.873047 L 197.19141,23.748047 L 194.60156,23.748047 L 196.33594,18.873047 L 193.47656,18.873047 L 191.73047,23.748047 L 189.15234,23.748047 L 190.86328,18.873047 L 187.5,18.873047 L 188.39063,16.529297 L 191.69531,16.529297 L 192.70313,13.693359 L 189.19922,13.693359 L 190.06641,11.337891 L 193.54688,11.337891 L 195.28125,6.4746094 M 190.07813,48.521484 L 193.30078,48.521484 C 193.30859,49.458989 193.53515,50.166019 193.98047,50.642578 C 194.42578,51.111331 195.08593,51.345705 195.96094,51.345703 C 196.80468,51.345705 197.45312,51.126956 197.90625,50.689453 C 198.36718,50.244144 198.59765,49.607426 198.59766,48.779297 C 198.59765,47.951178 198.32812,47.326178 197.78906,46.904297 C 197.2578,46.474617 196.46484,46.259773 195.41016,46.259766 C 195.35546,46.259773 195.26953,46.263679 195.15234,46.271484 C 195.04296,46.279304 194.96093,46.28321 194.90625,46.283203 L 194.90625,43.962891 L 195.26953,43.962891 C 196.23827,43.9629 196.95312,43.7754 197.41406,43.400391 C 197.8828,43.017589 198.11718,42.435558 198.11719,41.654297 C 198.11718,41.005872 197.91796,40.494154 197.51953,40.119141 C 197.1289,39.736342 196.59374,39.544936 195.91406,39.544922 C 195.17187,39.544936 194.59765,39.763686 194.19141,40.201172 C 193.78515,40.638685 193.58203,41.259778 193.58203,42.064453 L 193.58203,42.205078 L 190.41797,42.205078 C 190.45703,40.486341 190.96094,39.169936 191.92969,38.255859 C 192.90625,37.334001 194.28125,36.873064 196.05469,36.873047 C 197.73437,36.873064 199.0664,37.283219 200.05078,38.103516 C 201.03514,38.923843 201.52733,40.02931 201.52734,41.419922 C 201.52733,42.154308 201.35936,42.798839 201.02344,43.353516 C 200.68749,43.908213 200.18358,44.365244 199.51172,44.724609 C 200.37108,45.099618 201.01952,45.619149 201.45703,46.283203 C 201.90233,46.93946 202.12499,47.724615 202.125,48.638672 C 202.12499,50.318363 201.57421,51.650393 200.47266,52.634766 C 199.37108,53.619141 197.86718,54.111328 195.96094,54.111328 C 194.07812,54.111328 192.625,53.634766 191.60156,52.681641 C 190.58594,51.720705 190.07812,50.357425 190.07813,48.591797 L 190.07813,48.521484"
+       id="text5139" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 254.46094,21.451172 C 255.10155,21.365237 255.58984,21.134768 255.92578,20.759766 C 256.26171,20.384769 256.42968,19.884769 256.42969,19.259766 C 256.42968,18.705083 256.26952,18.248052 255.94922,17.888672 C 255.63671,17.52149 255.14062,17.236335 254.46094,17.033203 L 254.46094,21.451172 M 253.06641,13.435547 L 253.06641,9.4511719 C 252.45703,9.529311 251.99218,9.7402483 251.67188,10.083984 C 251.35156,10.419935 251.1914,10.87306 251.19141,11.443359 C 251.1914,11.919934 251.33984,12.318371 251.63672,12.638672 C 251.9414,12.958995 252.41796,13.22462 253.06641,13.435547 M 253.06641,26.267578 L 253.06641,24.017578 C 251.30078,23.908203 249.98047,23.396485 249.10547,22.482422 C 248.23047,21.568361 247.79297,20.24805 247.79297,18.521484 L 250.93359,18.521484 C 250.97265,19.365239 251.16796,20.033207 251.51953,20.525391 C 251.8789,21.009768 252.39453,21.318362 253.06641,21.451172 L 253.06641,16.599609 C 251.2539,16.138679 249.96484,15.537117 249.19922,14.794922 C 248.43359,14.052744 248.05078,13.03712 248.05078,11.748047 C 248.05078,10.318373 248.5039,9.1660301 249.41016,8.2910156 C 250.32422,7.4160318 251.54296,6.959001 253.06641,6.9199219 L 253.06641,5.4199219 L 254.46094,5.4199219 L 254.46094,6.9199219 C 255.98437,6.9980635 257.17186,7.4590005 258.02344,8.3027344 C 258.87499,9.1386864 259.34374,10.318373 259.42969,11.841797 L 256.24219,11.841797 C 256.18749,11.115247 256.01171,10.56056 255.71484,10.177734 C 255.42577,9.7871232 255.0078,9.5683734 254.46094,9.5214844 L 254.46094,13.787109 C 256.39062,14.388681 257.74999,15.07618 258.53906,15.849609 C 259.32811,16.623054 259.72264,17.642584 259.72266,18.908203 C 259.72264,20.400394 259.26171,21.591799 258.33984,22.482422 C 257.42577,23.373047 256.1328,23.892578 254.46094,24.041016 L 254.46094,26.267578 L 253.06641,26.267578 M 254.64844,47.419922 L 254.64844,40.236328 L 250.08984,47.419922 L 254.64844,47.419922 M 254.57813,53.630859 L 254.57813,50.009766 L 247.5,50.009766 L 247.5,47.056641 L 253.6875,37.330078 L 257.84766,37.330078 L 257.84766,47.337891 L 259.79297,47.337891 L 259.79297,50.009766 L 257.84766,50.009766 L 257.84766,53.630859 L 254.57813,53.630859"
+       id="text5145" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 320.42578,19.740234 C 320.42577,20.263675 320.60155,20.705081 320.95313,21.064453 C 321.30467,21.416018 321.73827,21.591799 322.25391,21.591797 C 322.75389,21.591799 323.18358,21.412112 323.54297,21.052734 C 323.90233,20.68555 324.08201,20.24805 324.08203,19.740234 C 324.08201,19.240239 323.90233,18.814458 323.54297,18.462891 C 323.19139,18.103521 322.7617,17.923834 322.25391,17.923828 C 321.73827,17.923834 321.30467,18.099615 320.95313,18.451172 C 320.60155,18.794927 320.42577,19.224614 320.42578,19.740234 M 317.88281,19.740234 C 317.8828,18.521489 318.30468,17.494147 319.14844,16.658203 C 319.99217,15.822273 321.02733,15.404305 322.25391,15.404297 C 323.45701,15.404305 324.48045,15.830086 325.32422,16.681641 C 326.17576,17.525397 326.60154,18.544927 326.60156,19.740234 C 326.60154,20.943362 326.17576,21.974611 325.32422,22.833984 C 324.47264,23.685547 323.4492,24.111328 322.25391,24.111328 C 321.02733,24.111328 319.99217,23.689453 319.14844,22.845703 C 318.30468,22.001955 317.8828,20.9668 317.88281,19.740234 M 311.07422,24.111328 L 321.08203,6.8496094 L 322.96875,6.8496094 L 312.96094,24.111328 L 311.07422,24.111328 M 310.04297,11.220703 C 310.04297,11.73634 310.21484,12.169933 310.55859,12.521484 C 310.91015,12.873058 311.34375,13.048839 311.85938,13.048828 C 312.36718,13.048839 312.79687,12.873058 313.14844,12.521484 C 313.50781,12.162121 313.68749,11.728528 313.6875,11.220703 C 313.68749,10.720716 313.50781,10.294935 313.14844,9.9433594 C 312.79687,9.5839984 312.36718,9.4043111 311.85938,9.4042969 C 311.34375,9.4043111 310.91015,9.5800922 310.55859,9.9316406 C 310.21484,10.275404 310.04297,10.705091 310.04297,11.220703 M 307.5,11.220703 C 307.5,10.001967 307.92187,8.9707178 308.76563,8.1269531 C 309.60937,7.275407 310.64062,6.8496262 311.85938,6.8496094 C 313.06249,6.8496262 314.08593,7.2793132 314.92969,8.1386719 C 315.78124,8.990249 316.20702,10.017592 316.20703,11.220703 C 316.20702,12.423839 315.78124,13.451182 314.92969,14.302734 C 314.08593,15.146493 313.06249,15.568367 311.85938,15.568359 C 310.63281,15.568367 309.59765,15.150399 308.75391,14.314453 C 307.91797,13.478526 307.5,12.447277 307.5,11.220703 M 310.85156,49.119141 L 314.13281,49.119141 C 314.1875,49.853519 314.43359,50.423831 314.87109,50.830078 C 315.30859,51.228518 315.89453,51.427737 316.62891,51.427734 C 317.53515,51.427737 318.22655,51.162112 318.70313,50.630859 C 319.18749,50.099613 319.42968,49.337895 319.42969,48.345703 C 319.42968,47.416022 319.18358,46.685554 318.69141,46.154297 C 318.19921,45.615242 317.51952,45.345711 316.65234,45.345703 C 316.16796,45.345711 315.74218,45.443368 315.375,45.638672 C 315.00781,45.833992 314.69531,46.123054 314.4375,46.505859 L 311.41406,46.330078 L 312.50391,37.330078 L 322.14844,37.330078 L 322.14844,40.166016 L 314.87109,40.166016 L 314.4375,43.529297 C 314.80468,43.240245 315.22656,43.025401 315.70313,42.884766 C 316.17968,42.736339 316.71093,42.66212 317.29688,42.662109 C 318.96874,42.66212 320.3164,43.169932 321.33984,44.185547 C 322.37108,45.20118 322.88671,46.53321 322.88672,48.181641 C 322.88671,49.986332 322.3203,51.427737 321.1875,52.505859 C 320.05468,53.576172 318.53515,54.111328 316.62891,54.111328 C 314.89453,54.111328 313.51172,53.669922 312.48047,52.787109 C 311.45703,51.896486 310.91406,50.673831 310.85156,49.119141"
+       id="text5151" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 372.15234,48.298828 C 372.15234,49.25977 372.39062,50.021488 372.86719,50.583984 C 373.35156,51.146487 374.00781,51.427737 374.83594,51.427734 C 375.60937,51.427737 376.21484,51.154299 376.65234,50.607422 C 377.08983,50.06055 377.30858,49.298832 377.30859,48.322266 C 377.30858,47.423834 377.08202,46.724616 376.62891,46.224609 C 376.17577,45.724617 375.53905,45.474618 374.71875,45.474609 C 373.91406,45.474618 373.28515,45.724617 372.83203,46.224609 C 372.3789,46.724616 372.15234,47.416022 372.15234,48.298828 M 372.10547,43.916016 C 372.48828,43.525401 372.94921,43.232432 373.48828,43.037109 C 374.02734,42.833995 374.6289,42.732433 375.29297,42.732422 C 376.93358,42.732433 378.24608,43.232432 379.23047,44.232422 C 380.22264,45.23243 380.71874,46.56446 380.71875,48.228516 C 380.71874,49.994144 380.17968,51.419924 379.10156,52.505859 C 378.02343,53.591797 376.60155,54.134765 374.83594,54.134766 C 372.79687,54.134765 371.24609,53.431641 370.18359,52.025391 C 369.1289,50.619144 368.60156,48.560552 368.60156,45.849609 C 368.60156,42.935558 369.16797,40.708997 370.30078,39.169922 C 371.43359,37.623063 373.0664,36.849626 375.19922,36.849609 C 376.68358,36.849626 377.8789,37.236345 378.78516,38.009766 C 379.69921,38.783218 380.19921,39.830092 380.28516,41.150391 L 376.88672,41.150391 C 376.80858,40.611341 376.59765,40.205092 376.25391,39.931641 C 375.91015,39.658217 375.42968,39.521498 374.8125,39.521484 C 373.96874,39.521498 373.32031,39.888686 372.86719,40.623047 C 372.41406,41.349622 372.16015,42.447277 372.10547,43.916016"
+       id="text5157" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 432.85547,16.095703 L 431.96484,16.740234 C 431.60546,16.990241 431.33593,17.291022 431.15625,17.642578 C 430.97656,17.994146 430.88671,18.388677 430.88672,18.826172 C 430.88671,19.490239 431.11328,20.048832 431.56641,20.501953 C 432.01953,20.955081 432.58593,21.181643 433.26563,21.181641 C 433.76562,21.181643 434.24218,21.080081 434.69531,20.876953 C 435.15624,20.666019 435.58202,20.361331 435.97266,19.962891 L 432.85547,16.095703 M 433.79297,12.404297 L 434.20313,12.111328 C 434.57812,11.853527 434.85546,11.564465 435.03516,11.244141 C 435.21483,10.923841 435.30468,10.556654 435.30469,10.142578 C 435.30468,9.7441545 435.17968,9.4277486 434.92969,9.1933594 C 434.68749,8.958999 434.35546,8.8418117 433.93359,8.8417969 C 433.5039,8.8418117 433.16406,8.9629053 432.91406,9.2050781 C 432.66406,9.4394673 432.53906,9.7597795 432.53906,10.166016 C 432.53906,10.384779 432.59765,10.62306 432.71484,10.880859 C 432.83984,11.138684 433.01562,11.412122 433.24219,11.701172 L 433.79297,12.404297 M 431.15625,13.962891 L 430.47656,13.072266 C 430.125,12.603527 429.87109,12.166027 429.71484,11.759766 C 429.5664,11.345715 429.49218,10.912122 429.49219,10.458984 C 429.49218,9.2089988 429.89062,8.2168123 430.6875,7.4824219 C 431.49218,6.7402513 432.58203,6.3691579 433.95703,6.3691406 C 435.27733,6.3691579 436.3203,6.7090013 437.08594,7.3886719 C 437.85155,8.0683749 438.23436,8.9863428 438.23438,10.142578 C 438.23436,11.017591 438.0078,11.802746 437.55469,12.498047 C 437.10936,13.185557 436.40624,13.833994 435.44531,14.443359 L 437.91797,17.490234 C 438.15233,17.107428 438.33593,16.677741 438.46875,16.201172 C 438.60936,15.724617 438.70702,15.193368 438.76172,14.607422 L 441.80859,14.607422 C 441.72264,15.623055 441.5117,16.56446 441.17578,17.431641 C 440.83983,18.298833 440.37889,19.091801 439.79297,19.810547 L 442.93359,23.630859 L 438.94922,23.630859 L 437.77734,22.189453 C 437.08983,22.822266 436.33202,23.302735 435.50391,23.630859 C 434.68359,23.951172 433.82421,24.111328 432.92578,24.111328 C 431.33203,24.111328 430.02734,23.638672 429.01172,22.693359 C 428.0039,21.748049 427.5,20.541019 427.5,19.072266 C 427.5,17.978521 427.78125,17.037116 428.34375,16.248047 C 428.90625,15.458993 429.84375,14.697275 431.15625,13.962891 M 434.66016,53.630859 L 431.15625,53.630859 C 431.28125,51.341799 431.83203,49.07227 432.80859,46.822266 C 433.79296,44.572275 435.19531,42.361339 437.01563,40.189453 L 428.76563,40.189453 L 428.76563,37.330078 L 440.66016,37.330078 L 440.66016,39.849609 C 438.8164,41.880871 437.39843,44.029306 436.40625,46.294922 C 435.42187,48.560552 434.83984,51.005862 434.66016,53.630859"
+       id="text5163" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 493.5,13.212891 L 491.4375,16.119141 L 489.44531,14.724609 L 491.69531,11.900391 L 488.41406,10.986328 L 489.17578,8.6074219 L 492.32813,9.7324219 L 492.32813,6.3691406 L 494.64844,6.3691406 L 494.64844,9.7324219 L 497.80078,8.6308594 L 498.58594,11.009766 L 495.30469,11.900391 L 497.53125,14.701172 L 495.49219,16.166016 L 493.5,13.212891 M 490.875,48.755859 C 490.875,49.576176 491.10156,50.208988 491.55469,50.654297 C 492.01562,51.099612 492.67187,51.322268 493.52344,51.322266 C 494.33593,51.322268 494.97265,51.095706 495.43359,50.642578 C 495.90233,50.189457 496.13671,49.560551 496.13672,48.755859 C 496.13671,47.982428 495.89843,47.361334 495.42188,46.892578 C 494.9453,46.423835 494.31249,46.189461 493.52344,46.189453 C 492.73437,46.189461 492.09374,46.427742 491.60156,46.904297 C 491.11718,47.380866 490.875,47.998053 490.875,48.755859 M 491.14453,41.560547 C 491.14453,42.208996 491.34765,42.708995 491.75391,43.060547 C 492.16015,43.404307 492.74218,43.576182 493.5,43.576172 C 494.2578,43.576182 494.83984,43.400401 495.24609,43.048828 C 495.66015,42.697277 495.86718,42.201183 495.86719,41.560547 C 495.86718,40.93556 495.65624,40.443373 495.23438,40.083984 C 494.81249,39.724623 494.23437,39.544936 493.5,39.544922 C 492.78124,39.544936 492.20703,39.72853 491.77734,40.095703 C 491.35546,40.462904 491.14453,40.951185 491.14453,41.560547 M 489.9375,44.818359 C 489.23437,44.427744 488.72656,43.970713 488.41406,43.447266 C 488.10156,42.923839 487.94531,42.255871 487.94531,41.443359 C 487.94531,40.005873 488.4375,38.876968 489.42188,38.056641 C 490.40625,37.236345 491.76562,36.826189 493.5,36.826172 C 495.24999,36.826189 496.61718,37.236345 497.60156,38.056641 C 498.59374,38.869155 499.08983,39.998061 499.08984,41.443359 C 499.08983,42.216808 498.92186,42.888683 498.58594,43.458984 C 498.24999,44.021494 497.74608,44.474619 497.07422,44.818359 C 497.89452,45.20118 498.51171,45.73243 498.92578,46.412109 C 499.33983,47.083991 499.54686,47.904303 499.54688,48.873047 C 499.54686,50.505862 499.0078,51.787111 497.92969,52.716797 C 496.85936,53.646484 495.3828,54.111328 493.5,54.111328 C 491.59375,54.111328 490.11328,53.650391 489.05859,52.728516 C 488.0039,51.806642 487.47656,50.521487 487.47656,48.873047 C 487.47656,47.912115 487.67187,47.107428 488.0625,46.458984 C 488.46094,45.802742 489.08594,45.255868 489.9375,44.818359"
+       id="text5169" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 557.85938,6.3691406 C 556.78124,8.1347811 555.98046,9.9316543 555.45703,11.759766 C 554.93359,13.587901 554.67187,15.505868 554.67188,17.513672 C 554.67187,19.513676 554.93359,21.427737 555.45703,23.255859 C 555.98046,25.083983 556.78124,26.880856 557.85938,28.646484 L 555.38672,28.646484 C 554.01953,26.779294 552.98046,24.904296 552.26953,23.021484 C 551.5664,21.130862 551.21484,19.294926 551.21484,17.513672 C 551.21484,15.73243 551.5664,13.896494 552.26953,12.005859 C 552.98046,10.115248 554.01953,8.2363435 555.38672,6.3691406 L 557.85938,6.3691406 M 556.06641,42.685547 C 556.0664,41.724621 555.82421,40.96681 555.33984,40.412109 C 554.86327,39.849623 554.21093,39.568373 553.38281,39.568359 C 552.60156,39.568373 551.99218,39.837904 551.55469,40.376953 C 551.125,40.916028 550.91015,41.669934 550.91016,42.638672 C 550.91015,43.544932 551.13671,44.251963 551.58984,44.759766 C 552.04296,45.267586 552.67968,45.521492 553.5,45.521484 C 554.30468,45.521492 554.93359,45.271493 555.38672,44.771484 C 555.83983,44.271494 556.0664,43.576182 556.06641,42.685547 M 556.125,47.056641 C 555.73437,47.447272 555.27343,47.74024 554.74219,47.935547 C 554.21093,48.130865 553.61327,48.228521 552.94922,48.228516 C 551.30078,48.228521 549.98047,47.732428 548.98828,46.740234 C 547.99609,45.748055 547.5,44.419931 547.5,42.755859 C 547.5,40.990247 548.03906,39.564467 549.11719,38.478516 C 550.19531,37.392594 551.61718,36.849626 553.38281,36.849609 C 555.42968,36.849626 556.98436,37.556657 558.04688,38.970703 C 559.11718,40.376966 559.65233,42.431652 559.65234,45.134766 C 559.65233,48.041021 559.08202,50.267581 557.94141,51.814453 C 556.80077,53.361328 555.16015,54.134765 553.01953,54.134766 C 551.54296,54.134765 550.35156,53.751953 549.44531,52.986328 C 548.53906,52.212892 548.04297,51.162112 547.95703,49.833984 L 551.34375,49.845703 C 551.42187,50.384769 551.63281,50.787112 551.97656,51.052734 C 552.32031,51.318362 552.80468,51.451174 553.42969,51.451172 C 554.27343,51.451174 554.91796,51.083987 555.36328,50.349609 C 555.80858,49.615238 556.06249,48.517583 556.125,47.056641"
+       id="text5175" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 609.375,6.3691406 L 611.87109,6.3691406 C 613.23046,8.228531 614.26171,10.103529 614.96484,11.994141 C 615.66796,13.876963 616.01952,15.716805 616.01953,17.513672 C 616.01952,19.302739 615.66796,21.142581 614.96484,23.033203 C 614.26171,24.923827 613.23046,26.794919 611.87109,28.646484 L 609.375,28.646484 C 610.46094,26.873044 611.26562,25.072264 611.78906,23.244141 C 612.32031,21.408205 612.58593,19.498051 612.58594,17.513672 C 612.58593,15.521492 612.32031,13.611338 611.78906,11.783203 C 611.26562,9.9550918 610.46094,8.1504061 609.375,6.3691406 M 610.98047,45.474609 C 610.98046,47.513678 611.18359,48.994145 611.58984,49.916016 C 612.0039,50.837893 612.66015,51.29883 613.55859,51.298828 C 614.45702,51.29883 615.11327,50.833987 615.52734,49.904297 C 615.9414,48.974614 616.14843,47.498053 616.14844,45.474609 C 616.14843,43.44337 615.9414,41.966809 615.52734,41.044922 C 615.11327,40.12306 614.45702,39.662123 613.55859,39.662109 C 612.66015,39.662123 612.0039,40.12306 611.58984,41.044922 C 611.18359,41.958996 610.98046,43.435557 610.98047,45.474609 M 607.5,45.474609 C 607.5,42.591808 608,40.43556 609,39.005859 C 610.00781,37.568375 611.52734,36.849626 613.55859,36.849609 C 615.58202,36.849626 617.09765,37.572282 618.10547,39.017578 C 619.12108,40.455091 619.62889,42.615245 619.62891,45.498047 C 619.62889,48.380865 619.12499,50.533206 618.11719,51.955078 C 617.11718,53.376953 615.59765,54.08789 613.55859,54.087891 C 611.52734,54.08789 610.00781,53.373047 609,51.943359 C 608,50.513675 607.5,48.357427 607.5,45.474609"
+       id="text5181" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 667.5,26.900391 L 679.5,26.900391 L 679.5,29.291016 L 667.5,29.291016 L 667.5,26.900391 M 670.20703,48.849609 L 670.20703,45.638672 L 676.79297,45.638672 L 676.79297,48.849609 L 670.20703,48.849609"
+       id="text5187" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 733.33594,9.3222656 L 735.70313,9.3222656 L 735.70313,15.298828 L 741.53906,15.298828 L 741.53906,17.630859 L 735.70313,17.630859 L 735.70313,23.630859 L 733.33594,23.630859 L 733.33594,17.630859 L 727.5,17.630859 L 727.5,15.298828 L 733.33594,15.298828 L 733.33594,9.3222656 M 727.5,47.818359 L 741.53906,47.818359 L 741.53906,50.150391 L 727.5,50.150391 L 727.5,47.818359 M 727.5,42.779297 L 741.53906,42.779297 L 741.53906,45.111328 L 727.5,45.111328 L 727.5,42.779297"
+       id="text5201" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 11.070313,95.601563 L 11.070313,86.148438 L 7.65625,86.148438 L 7.65625,84.09375 L 16.828125,84.09375 L 16.828125,86.148438 L 13.4375,86.148438 L 13.4375,95.601563 L 11.070313,95.601563 M 22.859375,94.546875 C 22.572911,94.989584 22.197911,95.328125 21.734375,95.5625 C 21.270829,95.791666 20.731767,95.90625 20.117188,95.90625 C 19.294269,95.90625 18.658853,95.671875 18.210938,95.203125 C 17.768228,94.734376 17.546874,94.06771 17.546875,93.203125 C 17.546874,92.401045 17.768228,91.789066 18.210938,91.367188 C 18.658853,90.945317 19.395831,90.656255 20.421875,90.5 C 20.656246,90.463547 20.963538,90.42188 21.34375,90.375 C 22.307286,90.250005 22.789057,89.97136 22.789063,89.539063 C 22.789057,89.195319 22.682286,88.950527 22.46875,88.804688 C 22.255203,88.653653 21.898433,88.578132 21.398438,88.578125 C 20.9401,88.578132 20.588538,88.669278 20.34375,88.851563 C 20.098955,89.033861 19.97656,89.294277 19.976563,89.632813 L 19.976563,89.757813 L 17.851563,89.757813 L 17.851563,89.601563 C 17.851562,88.731778 18.158853,88.049487 18.773438,87.554688 C 19.388018,87.054696 20.236976,86.804696 21.320313,86.804688 C 22.507807,86.804696 23.41666,87.010425 24.046875,87.421875 C 24.682284,87.833341 24.999992,88.427091 25,89.203125 L 25,94.03125 C 24.999992,94.385418 25.03645,94.651043 25.109375,94.828125 C 25.182283,95.000001 25.304679,95.130209 25.476563,95.21875 L 25.476563,95.601563 L 23.109375,95.601563 C 23.031244,95.455729 22.971348,95.294271 22.929688,95.117188 C 22.888015,94.940105 22.864577,94.750001 22.859375,94.546875 M 22.820313,91.421875 C 22.450515,91.593754 22.023432,91.731775 21.539063,91.835938 C 21.059892,91.940108 20.812496,91.994795 20.796875,92 C 20.39583,92.114587 20.11458,92.257816 19.953125,92.429688 C 19.796872,92.601566 19.718747,92.838544 19.71875,93.140625 C 19.718747,93.453127 19.82031,93.703127 20.023438,93.890625 C 20.226559,94.072918 20.499997,94.164064 20.84375,94.164063 C 21.458329,94.164064 21.940099,93.992189 22.289063,93.648438 C 22.643224,93.299481 22.820307,92.825524 22.820313,92.226563 L 22.820313,91.421875 M 27.039063,84.09375 L 29.25,84.09375 L 29.25,88.164063 C 29.531246,87.721362 29.882809,87.388029 30.304688,87.164063 C 30.731766,86.934905 31.216141,86.820321 31.757813,86.820313 C 32.783847,86.820321 33.622388,87.2448 34.273438,88.09375 C 34.92447,88.937507 35.249991,90.036464 35.25,91.390625 C 35.249991,92.734378 34.92447,93.820314 34.273438,94.648438 C 33.622388,95.476563 32.773431,95.890625 31.726563,95.890625 C 31.179682,95.890625 30.70312,95.776041 30.296875,95.546875 C 29.895829,95.317709 29.531246,94.953126 29.203125,94.453125 L 29.203125,95.601563 L 27.039063,95.601563 L 27.039063,84.09375 M 32.992188,91.296875 C 32.992181,90.51563 32.828118,89.903652 32.5,89.460938 C 32.171869,89.013027 31.721348,88.789069 31.148438,88.789063 C 30.544266,88.789069 30.075517,89.007819 29.742188,89.445313 C 29.414059,89.87761 29.249997,90.494797 29.25,91.296875 C 29.249997,92.161462 29.406247,92.817711 29.71875,93.265625 C 30.036454,93.713544 30.497391,93.937502 31.101563,93.9375 C 31.71614,93.937502 32.18489,93.713544 32.507813,93.265625 C 32.830722,92.812503 32.992181,92.156253 32.992188,91.296875"
+       id="text5427" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 789.76563,44.369141 L 792.57031,44.369141 C 793.23176,44.369143 793.71353,44.249351 794.01563,44.009766 C 794.3177,43.770185 794.46874,43.392581 794.46875,42.876953 C 794.46874,42.340499 794.3203,41.955083 794.02344,41.720703 C 793.72656,41.481125 793.23697,41.361333 792.55469,41.361328 L 789.76563,41.361328 L 789.76563,44.369141 M 789.76563,39.392578 L 792.46875,39.392578 C 793.05208,39.392585 793.47916,39.293627 793.75,39.095703 C 794.02083,38.892586 794.15624,38.574878 794.15625,38.142578 C 794.15624,37.720712 794.02343,37.416025 793.75781,37.228516 C 793.49739,37.035817 793.06249,36.939463 792.45313,36.939453 L 789.76563,36.939453 L 789.76563,39.392578 M 787.5,46.447266 L 787.5,34.939453 L 792.92188,34.939453 C 794.09895,34.939465 794.99478,35.189464 795.60938,35.689453 C 796.22916,36.184255 796.53905,36.905609 796.53906,37.853516 C 796.53905,38.436857 796.42447,38.923836 796.19531,39.314453 C 795.96614,39.705085 795.62239,40.007168 795.16406,40.220703 C 795.7578,40.460292 796.20051,40.806646 796.49219,41.259766 C 796.78905,41.707687 796.93749,42.267582 796.9375,42.939453 C 796.93749,44.059247 796.57291,44.92383 795.84375,45.533203 C 795.11457,46.142578 794.08072,46.447266 792.74219,46.447266 L 787.5,46.447266 M 803.45313,45.392578 C 803.16666,45.835287 802.79166,46.173828 802.32813,46.408203 C 801.86458,46.63737 801.32552,46.751953 800.71094,46.751953 C 799.88802,46.751953 799.2526,46.517578 798.80469,46.048828 C 798.36198,45.580079 798.14062,44.913413 798.14063,44.048828 C 798.14062,43.246748 798.36198,42.634769 798.80469,42.212891 C 799.2526,41.79102 799.98958,41.501958 801.01563,41.345703 C 801.25,41.30925 801.55729,41.267583 801.9375,41.220703 C 802.90104,41.095708 803.38281,40.817063 803.38281,40.384766 C 803.38281,40.041022 803.27604,39.796231 803.0625,39.650391 C 802.84895,39.499356 802.49218,39.423835 801.99219,39.423828 C 801.53385,39.423835 801.18229,39.514981 800.9375,39.697266 C 800.69271,39.879564 800.57031,40.13998 800.57031,40.478516 L 800.57031,40.603516 L 798.44531,40.603516 L 798.44531,40.447266 C 798.44531,39.577481 798.7526,38.89519 799.36719,38.400391 C 799.98177,37.900399 800.83073,37.650399 801.91406,37.650391 C 803.10156,37.650399 804.01041,37.856128 804.64063,38.267578 C 805.27603,38.679044 805.59374,39.272794 805.59375,40.048828 L 805.59375,44.876953 C 805.59374,45.231121 805.6302,45.496746 805.70313,45.673828 C 805.77603,45.845704 805.89843,45.975912 806.07031,46.064453 L 806.07031,46.447266 L 803.70313,46.447266 C 803.62499,46.301432 803.5651,46.139974 803.52344,45.962891 C 803.48176,45.785808 803.45833,45.595704 803.45313,45.392578 M 803.41406,42.267578 C 803.04427,42.439457 802.61718,42.577478 802.13281,42.681641 C 801.65364,42.785811 801.40625,42.840498 801.39063,42.845703 C 800.98958,42.96029 800.70833,43.103519 800.54688,43.275391 C 800.39062,43.447269 800.3125,43.684248 800.3125,43.986328 C 800.3125,44.29883 800.41406,44.54883 800.61719,44.736328 C 800.82031,44.918621 801.09375,45.009767 801.4375,45.009766 C 802.05208,45.009767 802.53385,44.837892 802.88281,44.494141 C 803.23697,44.145185 803.41406,43.671227 803.41406,43.072266 L 803.41406,42.267578 M 812.71875,43.244141 L 814.96094,43.244141 C 814.86718,44.322268 814.47395,45.173829 813.78125,45.798828 C 813.08854,46.423828 812.19791,46.736328 811.10938,46.736328 C 809.875,46.736328 808.90625,46.335287 808.20313,45.533203 C 807.50521,44.725913 807.15625,43.611331 807.15625,42.189453 C 807.15625,40.772792 807.51302,39.663418 808.22656,38.861328 C 808.94531,38.054045 809.93229,37.650399 811.1875,37.650391 C 812.28645,37.650399 813.16666,37.942066 813.82813,38.525391 C 814.49478,39.108731 814.86718,39.92123 814.94531,40.962891 L 812.6875,40.962891 C 812.62499,40.509772 812.46614,40.163418 812.21094,39.923828 C 811.95572,39.684252 811.61979,39.56446 811.20313,39.564453 C 810.64062,39.56446 810.21875,39.785814 809.9375,40.228516 C 809.66146,40.67123 809.52343,41.335292 809.52344,42.220703 C 809.52343,43.038415 809.66666,43.668623 809.95313,44.111328 C 810.24479,44.54883 810.66145,44.76758 811.20313,44.767578 C 811.62499,44.76758 811.96354,44.639976 812.21875,44.384766 C 812.47395,44.12956 812.64062,43.749352 812.71875,43.244141 M 816.44531,46.447266 L 816.44531,34.939453 L 818.65625,34.939453 L 818.65625,40.978516 L 821.35938,37.955078 L 824.09375,37.955078 L 821.13281,41.103516 L 824.27344,46.447266 L 821.54688,46.447266 L 819.51563,42.830078 L 818.65625,43.759766 L 818.65625,46.447266 L 816.44531,46.447266 M 824.79688,43.681641 L 827.0625,43.681641 C 827.08333,44.113935 827.23958,44.436851 827.53125,44.650391 C 827.82291,44.858726 828.26041,44.962892 828.84375,44.962891 C 829.28645,44.962892 829.6276,44.889976 829.86719,44.744141 C 830.11197,44.593101 830.23437,44.382164 830.23438,44.111328 C 830.23437,43.725914 829.78124,43.436852 828.875,43.244141 C 828.5052,43.166019 828.21093,43.098311 827.99219,43.041016 C 826.88802,42.759769 826.11979,42.426436 825.6875,42.041016 C 825.26042,41.655604 825.04687,41.134771 825.04688,40.478516 C 825.04687,39.608731 825.35937,38.921231 825.98438,38.416016 C 826.61458,37.905608 827.46614,37.650399 828.53906,37.650391 C 829.67447,37.650399 830.5651,37.903003 831.21094,38.408203 C 831.86197,38.913419 832.20833,39.624356 832.25,40.541016 L 830.03906,40.541016 C 830.02343,40.181647 829.88541,39.903001 829.625,39.705078 C 829.36979,39.507168 829.01302,39.40821 828.55469,39.408203 C 828.12239,39.40821 827.79948,39.473314 827.58594,39.603516 C 827.3776,39.733731 827.27343,39.929043 827.27344,40.189453 C 827.27343,40.528001 827.83854,40.82748 828.96875,41.087891 C 829.22916,41.145188 829.43489,41.192063 829.58594,41.228516 C 830.71614,41.494146 831.48697,41.814458 831.89844,42.189453 C 832.3151,42.564457 832.52343,43.093102 832.52344,43.775391 C 832.52343,44.738934 832.18228,45.473308 831.5,45.978516 C 830.82291,46.483724 829.83593,46.736328 828.53906,46.736328 C 827.36718,46.736328 826.45052,46.473307 825.78906,45.947266 C 825.1276,45.421225 824.79687,44.697267 824.79688,43.775391 L 824.79688,43.681641 M 840.02344,42.251953 C 840.02343,41.397792 839.86197,40.74675 839.53906,40.298828 C 839.21614,39.84571 838.74739,39.619147 838.13281,39.619141 C 837.52864,39.619147 837.0677,39.843106 836.75,40.291016 C 836.4375,40.738938 836.28125,41.392583 836.28125,42.251953 C 836.28125,43.05404 836.44531,43.673831 836.77344,44.111328 C 837.10677,44.54883 837.57552,44.76758 838.17969,44.767578 C 838.7526,44.76758 839.20312,44.543622 839.53125,44.095703 C 839.85937,43.647789 840.02343,43.033207 840.02344,42.251953 M 834.07031,49.853516 L 834.07031,37.955078 L 836.23438,37.955078 L 836.23438,39.103516 C 836.5625,38.603523 836.92708,38.23894 837.32813,38.009766 C 837.73437,37.780608 838.21093,37.666024 838.75781,37.666016 C 839.80468,37.666024 840.65364,38.080086 841.30469,38.908203 C 841.95572,39.731127 842.28124,40.814459 842.28125,42.158203 C 842.28124,43.517581 841.95572,44.621747 841.30469,45.470703 C 840.65364,46.314453 839.8151,46.736328 838.78906,46.736328 C 838.24739,46.736328 837.76302,46.621745 837.33594,46.392578 C 836.91406,46.163412 836.5625,45.830079 836.28125,45.392578 L 836.28125,49.853516 L 834.07031,49.853516 M 848.70313,45.392578 C 848.41666,45.835287 848.04166,46.173828 847.57813,46.408203 C 847.11458,46.63737 846.57552,46.751953 845.96094,46.751953 C 845.13802,46.751953 844.5026,46.517578 844.05469,46.048828 C 843.61198,45.580079 843.39062,44.913413 843.39063,44.048828 C 843.39062,43.246748 843.61198,42.634769 844.05469,42.212891 C 844.5026,41.79102 845.23958,41.501958 846.26563,41.345703 C 846.5,41.30925 846.80729,41.267583 847.1875,41.220703 C 848.15104,41.095708 848.63281,40.817063 848.63281,40.384766 C 848.63281,40.041022 848.52604,39.796231 848.3125,39.650391 C 848.09895,39.499356 847.74218,39.423835 847.24219,39.423828 C 846.78385,39.423835 846.43229,39.514981 846.1875,39.697266 C 845.94271,39.879564 845.82031,40.13998 845.82031,40.478516 L 845.82031,40.603516 L 843.69531,40.603516 L 843.69531,40.447266 C 843.69531,39.577481 844.0026,38.89519 844.61719,38.400391 C 845.23177,37.900399 846.08073,37.650399 847.16406,37.650391 C 848.35156,37.650399 849.26041,37.856128 849.89063,38.267578 C 850.52603,38.679044 850.84374,39.272794 850.84375,40.048828 L 850.84375,44.876953 C 850.84374,45.231121 850.8802,45.496746 850.95313,45.673828 C 851.02603,45.845704 851.14843,45.975912 851.32031,46.064453 L 851.32031,46.447266 L 848.95313,46.447266 C 848.87499,46.301432 848.8151,46.139974 848.77344,45.962891 C 848.73176,45.785808 848.70833,45.595704 848.70313,45.392578 M 848.66406,42.267578 C 848.29427,42.439457 847.86718,42.577478 847.38281,42.681641 C 846.90364,42.785811 846.65625,42.840498 846.64063,42.845703 C 846.23958,42.96029 845.95833,43.103519 845.79688,43.275391 C 845.64062,43.447269 845.5625,43.684248 845.5625,43.986328 C 845.5625,44.29883 845.66406,44.54883 845.86719,44.736328 C 846.07031,44.918621 846.34375,45.009767 846.6875,45.009766 C 847.30208,45.009767 847.78385,44.837892 848.13281,44.494141 C 848.48697,44.145185 848.66406,43.671227 848.66406,43.072266 L 848.66406,42.267578 M 857.96875,43.244141 L 860.21094,43.244141 C 860.11718,44.322268 859.72395,45.173829 859.03125,45.798828 C 858.33854,46.423828 857.44791,46.736328 856.35938,46.736328 C 855.125,46.736328 854.15625,46.335287 853.45313,45.533203 C 852.75521,44.725913 852.40625,43.611331 852.40625,42.189453 C 852.40625,40.772792 852.76302,39.663418 853.47656,38.861328 C 854.19531,38.054045 855.18229,37.650399 856.4375,37.650391 C 857.53645,37.650399 858.41666,37.942066 859.07813,38.525391 C 859.74478,39.108731 860.11718,39.92123 860.19531,40.962891 L 857.9375,40.962891 C 857.87499,40.509772 857.71614,40.163418 857.46094,39.923828 C 857.20572,39.684252 856.86979,39.56446 856.45313,39.564453 C 855.89062,39.56446 855.46875,39.785814 855.1875,40.228516 C 854.91146,40.67123 854.77343,41.335292 854.77344,42.220703 C 854.77343,43.038415 854.91666,43.668623 855.20313,44.111328 C 855.49479,44.54883 855.91145,44.76758 856.45313,44.767578 C 856.87499,44.76758 857.21354,44.639976 857.46875,44.384766 C 857.72395,44.12956 857.89062,43.749352 857.96875,43.244141 M 866.88281,43.869141 L 869.14844,43.869141 C 868.91926,44.764976 868.45572,45.4681 867.75781,45.978516 C 867.0651,46.483724 866.21874,46.736328 865.21875,46.736328 C 863.98958,46.736328 863.01562,46.32487 862.29688,45.501953 C 861.57812,44.67383 861.21875,43.554039 861.21875,42.142578 C 861.21875,40.751959 861.57292,39.655606 862.28125,38.853516 C 862.98958,38.051441 863.95833,37.650399 865.1875,37.650391 C 866.48958,37.650399 867.49478,38.046232 868.20313,38.837891 C 868.91145,39.624356 869.26562,40.74675 869.26563,42.205078 C 869.26562,42.366541 869.26301,42.488936 869.25781,42.572266 C 869.2578,42.650394 869.2526,42.725915 869.24219,42.798828 L 863.57031,42.798828 C 863.60156,43.465498 863.76302,43.968101 864.05469,44.306641 C 864.35156,44.645184 864.77604,44.814455 865.32813,44.814453 C 865.71874,44.814455 866.03906,44.738934 866.28906,44.587891 C 866.53906,44.431643 866.73697,44.19206 866.88281,43.869141 M 863.57031,41.306641 L 866.91406,41.306641 C 866.89322,40.73373 866.73958,40.298834 866.45313,40.001953 C 866.17187,39.699877 865.76562,39.548835 865.23438,39.548828 C 864.73958,39.548835 864.34895,39.699877 864.0625,40.001953 C 863.78125,40.304043 863.61718,40.738938 863.57031,41.306641"
+       id="text5207" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 840,17.646484 L 797.02608,17.646484"
+       id="path5439" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 802.5,25.146484 L 802.5,10.146484 L 787.5,17.646484 L 802.5,25.146484 z "
+       id="path5441" />
+    <g
+       id="g5459"
+       transform="translate(0,7.5)">
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 82.50003,75 L 54.020182,75"
+         id="path5453" />
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+         id="path5455" />
+      <path
+         id="path5457"
+         d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5464"
+       transform="matrix(-1,9.581637e-17,-9.581637e-17,-1,127.5,172.5)">
+      <path
+         id="path5466"
+         d="M 82.50003,75 L 54.020182,75"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path5468"
+         d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+         id="path5470" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 107.0625,80.560547 L 105.23438,78.779297 L 107.17969,76.763672 L 109.05469,78.591797 C 109.30467,78.123052 109.49608,77.587897 109.62891,76.986328 C 109.7617,76.384773 109.82811,75.728524 109.82813,75.017578 C 109.82811,73.119151 109.40233,71.646496 108.55078,70.599609 C 107.69921,69.544936 106.5078,69.017593 104.97656,69.017578 C 103.46093,69.017593 102.28124,69.54103 101.4375,70.587891 C 100.59374,71.634778 100.17187,73.111339 100.17188,75.017578 C 100.17187,76.916022 100.59374,78.392583 101.4375,79.447266 C 102.28124,80.494144 103.46093,81.017581 104.97656,81.017578 C 105.36718,81.017581 105.73436,80.978518 106.07813,80.900391 C 106.42968,80.822268 106.7578,80.708987 107.0625,80.560547 M 109.55859,82.916016 C 108.97264,83.306641 108.28905,83.603516 107.50781,83.806641 C 106.73436,84.009765 105.89061,84.111328 104.97656,84.111328 C 102.39843,84.111328 100.34765,83.291016 98.824219,81.650391 C 97.308592,80.009769 96.55078,77.798834 96.550781,75.017578 C 96.55078,72.228527 97.308592,70.017592 98.824219,68.384766 C 100.34765,66.744158 102.39843,65.923846 104.97656,65.923828 C 107.55468,65.923846 109.60545,66.744158 111.12891,68.384766 C 112.66014,70.025404 113.42576,72.23634 113.42578,75.017578 C 113.42576,76.236336 113.26951,77.353522 112.95703,78.369141 C 112.64451,79.376957 112.18358,80.259769 111.57422,81.017578 L 113.44922,82.810547 L 111.52734,84.826172 L 109.55859,82.916016"
+       id="text5474" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 158.94141,83.630859 L 153.99609,66.369141 L 157.67578,66.369141 L 160.62891,78.544922 L 163.125,66.369141 L 166.91016,66.369141 L 169.40625,78.544922 L 172.35938,66.369141 L 176.00391,66.369141 L 171.07031,83.630859 L 167.68359,83.630859 L 165.01172,70.412109 L 162.32813,83.630859 L 158.94141,83.630859"
+       id="text5482" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 218.52539,83.630859 L 218.52539,66.369141 L 231.05273,66.369141 L 231.05273,69.369141 L 222.0293,69.369141 L 222.0293,73.048828 L 230.2793,73.048828 L 230.2793,76.001953 L 222.0293,76.001953 L 222.0293,80.443359 L 231.47461,80.443359 L 231.47461,83.630859 L 218.52539,83.630859"
+       id="text5492" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 281.4375,73.916016 L 285.60938,73.916016 C 286.51561,73.916025 287.17968,73.732432 287.60156,73.365234 C 288.03124,72.998058 288.24608,72.419933 288.24609,71.630859 C 288.24608,70.880872 288.03905,70.314466 287.625,69.931641 C 287.21093,69.54103 286.59374,69.345717 285.77344,69.345703 L 281.4375,69.345703 L 281.4375,73.916016 M 277.88672,83.630859 L 277.88672,66.369141 L 286.25391,66.369141 C 288.13671,66.369158 289.53124,66.771501 290.4375,67.576172 C 291.34373,68.380875 291.79686,69.611342 291.79688,71.267578 C 291.79686,72.322277 291.5742,73.201182 291.12891,73.904297 C 290.69139,74.607431 290.05858,75.087899 289.23047,75.345703 C 289.98045,75.611336 290.5117,76.017586 290.82422,76.564453 C 291.14452,77.111335 291.32811,77.962896 291.375,79.119141 L 291.44531,81.158203 C 291.4453,81.173831 291.4453,81.197268 291.44531,81.228516 C 291.46873,82.259767 291.69139,82.884766 292.11328,83.103516 L 292.11328,83.630859 L 288.22266,83.630859 C 288.09764,83.388672 287.99999,83.091797 287.92969,82.740234 C 287.86718,82.380861 287.82811,81.95508 287.8125,81.462891 L 287.76563,79.646484 C 287.72655,78.576177 287.52343,77.853521 287.15625,77.478516 C 286.79686,77.103522 286.14452,76.916022 285.19922,76.916016 L 281.4375,76.916016 L 281.4375,83.630859 L 277.88672,83.630859"
+       id="text5500" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 343.24219,83.630859 L 343.24219,69.451172 L 338.12109,69.451172 L 338.12109,66.369141 L 351.87891,66.369141 L 351.87891,69.451172 L 346.79297,69.451172 L 346.79297,83.630859 L 343.24219,83.630859"
+       id="text5504" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 407.06836,83.630859 L 403.51758,83.630859 L 403.51758,77.197266 L 397.24805,66.369141 L 401.5957,66.369141 L 405.28711,73.810547 L 408.69727,66.369141 L 412.75195,66.369141 L 407.06836,77.197266 L 407.06836,83.630859"
+       id="text5518" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 458.08594,66.105469 L 461.67188,66.105469 L 461.67188,76.933594 C 461.67187,78.269536 461.93749,79.246098 462.46875,79.863281 C 462.99999,80.472659 463.84374,80.777346 465,80.777344 C 466.17187,80.777346 467.02343,80.472659 467.55469,79.863281 C 468.09374,79.25391 468.36327,78.277349 468.36328,76.933594 L 468.36328,66.105469 L 471.91406,66.105469 L 471.91406,77.320313 C 471.91405,79.437504 471.3203,81.062502 470.13281,82.195313 C 468.95311,83.328125 467.24999,83.894531 465.02344,83.894531 C 462.78124,83.894531 461.0625,83.332031 459.86719,82.207031 C 458.67969,81.074221 458.08594,79.445316 458.08594,77.320313 L 458.08594,66.105469"
+       id="text5522" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 523.22461,83.630859 L 523.22461,66.369141 L 526.77539,66.369141 L 526.77539,83.630859 L 523.22461,83.630859"
+       id="text5526" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 580.18359,75 C 580.18359,76.898444 580.60546,78.375005 581.44922,79.429688 C 582.29296,80.476566 583.47265,81.000003 584.98828,81 C 586.51952,81.000003 587.71093,80.476566 588.5625,79.429688 C 589.41405,78.375005 589.83983,76.898444 589.83984,75 C 589.83983,73.101573 589.41405,71.628918 588.5625,70.582031 C 587.71093,69.527358 586.51952,69.000015 584.98828,69 C 583.47265,69.000015 582.29296,69.523452 581.44922,70.570313 C 580.60546,71.617199 580.18359,73.093761 580.18359,75 M 576.5625,75 C 576.5625,72.210949 577.32031,70.000014 578.83594,68.367188 C 580.35937,66.726579 582.41015,65.906268 584.98828,65.90625 C 587.56639,65.906268 589.61717,66.726579 591.14063,68.367188 C 592.67186,70.007826 593.43748,72.218761 593.4375,75 C 593.43748,77.781256 592.67186,79.992191 591.14063,81.632813 C 589.61717,83.273438 587.56639,84.09375 584.98828,84.09375 C 582.41015,84.09375 580.35937,83.273438 578.83594,81.632813 C 577.32031,79.992191 576.5625,77.781256 576.5625,75"
+       id="text5530" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 641.97656,74.361328 L 645.41016,74.361328 C 646.33983,74.361337 647.01561,74.166025 647.4375,73.775391 C 647.85936,73.376963 648.0703,72.740245 648.07031,71.865234 C 648.0703,71.044934 647.86327,70.423841 647.44922,70.001953 C 647.03515,69.580092 646.41796,69.369155 645.59766,69.369141 L 641.97656,69.369141 L 641.97656,74.361328 M 641.95313,77.490234 L 641.95313,83.630859 L 638.40234,83.630859 L 638.40234,66.369141 L 646.07813,66.369141 C 647.89061,66.369158 649.26171,66.841814 650.19141,67.787109 C 651.12889,68.724624 651.59764,70.103529 651.59766,71.923828 C 651.59764,73.705088 651.14061,75.080087 650.22656,76.048828 C 649.31249,77.009772 648.0078,77.490241 646.3125,77.490234 L 641.95313,77.490234"
+       id="text5534" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 709.24805,63.919922 L 709.24805,66.369141 C 709.17772,66.369155 709.08007,66.365249 708.95508,66.357422 C 708.83007,66.349624 708.74413,66.345718 708.69727,66.345703 C 707.90819,66.345718 707.37304,66.498062 707.0918,66.802734 C 706.81835,67.099624 706.68163,67.732435 706.68164,68.701172 L 706.68164,71.513672 C 706.68163,72.66993 706.50585,73.490242 706.1543,73.974609 C 705.80273,74.458991 705.16992,74.806647 704.25586,75.017578 C 705.16992,75.228522 705.80273,75.572271 706.1543,76.048828 C 706.50585,76.525395 706.68163,77.341801 706.68164,78.498047 L 706.68164,81.322266 C 706.68163,82.283202 706.81835,82.912108 707.0918,83.208984 C 707.36523,83.505857 707.90038,83.654294 708.69727,83.654297 C 708.74413,83.654294 708.83007,83.650388 708.95508,83.642578 C 709.08007,83.634763 709.17772,83.630857 709.24805,83.630859 L 709.24805,86.080078 C 709.13866,86.080073 708.98632,86.08398 708.79102,86.091797 C 708.59569,86.099605 708.45116,86.103511 708.35742,86.103516 C 707.57616,86.103511 706.92382,86.056636 706.40039,85.962891 C 705.87695,85.869136 705.43163,85.724605 705.06445,85.529297 C 704.61913,85.263668 704.30273,84.904293 704.11523,84.451172 C 703.93554,84.005857 703.8457,83.228514 703.8457,82.119141 L 703.8457,79.166016 C 703.8457,78.095706 703.64648,77.337895 703.24805,76.892578 C 702.84961,76.439458 702.17773,76.212896 701.23242,76.212891 C 701.18554,76.212896 701.10742,76.216802 700.99805,76.224609 C 700.88867,76.232427 700.80664,76.236333 700.75195,76.236328 L 700.75195,73.787109 C 700.80664,73.787117 700.88867,73.791023 700.99805,73.798828 C 701.10742,73.806648 701.18554,73.810554 701.23242,73.810547 C 702.16992,73.810554 702.83789,73.583992 703.23633,73.130859 C 703.64257,72.677743 703.8457,71.912119 703.8457,70.833984 L 703.8457,67.904297 C 703.8457,66.787124 703.93554,66.001968 704.11523,65.548828 C 704.30273,65.095719 704.61913,64.736345 705.06445,64.470703 C 705.43163,64.275408 705.87695,64.130876 706.40039,64.037109 C 706.92382,63.943377 707.57616,63.896502 708.35742,63.896484 C 708.45116,63.896502 708.59569,63.900408 708.79102,63.908203 C 708.98632,63.916033 709.13866,63.919939 709.24805,63.919922 M 703.0957,93.966797 L 709.01367,93.966797 L 709.01367,96.462891 L 706.25977,96.462891 L 706.25977,113.8418 L 709.01367,113.8418 L 709.01367,116.33789 L 703.0957,116.33789 L 703.0957,93.966797"
+       id="text5546" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 760.75195,63.908203 L 761.54883,63.908203 C 762.4082,63.90822 763.09961,63.955095 763.62305,64.048828 C 764.14648,64.142595 764.58398,64.291033 764.93555,64.494141 C 765.38085,64.744157 765.69335,65.103532 765.87305,65.572266 C 766.06054,66.033218 766.15429,66.806655 766.1543,67.892578 L 766.1543,70.845703 C 766.15429,71.916025 766.35351,72.677743 766.75195,73.130859 C 767.15038,73.57618 767.82226,73.798836 768.76758,73.798828 C 768.81444,73.798836 768.89257,73.794929 769.00195,73.787109 C 769.11132,73.779304 769.19335,73.775398 769.24805,73.775391 L 769.24805,76.224609 L 768.81445,76.224609 C 767.83788,76.224614 767.15038,76.443364 766.75195,76.880859 C 766.35351,77.318363 766.15429,78.076175 766.1543,79.154297 L 766.1543,82.107422 C 766.15429,83.224607 766.06054,84.009763 765.87305,84.462891 C 765.69335,84.916012 765.38085,85.267574 764.93555,85.517578 C 764.56835,85.712886 764.12304,85.857417 763.59961,85.951172 C 763.07617,86.044917 762.42382,86.091792 761.64258,86.091797 C 761.54883,86.091792 761.40429,86.087886 761.20898,86.080078 C 761.01367,86.072261 760.86133,86.068355 760.75195,86.068359 L 760.75195,83.619141 C 760.82226,83.619138 760.91992,83.623044 761.04492,83.630859 C 761.16992,83.638669 761.25586,83.642576 761.30273,83.642578 C 762.09179,83.642576 762.62304,83.490232 762.89648,83.185547 C 763.17773,82.88867 763.31836,82.263671 763.31836,81.310547 L 763.31836,78.509766 C 763.31836,77.337895 763.49414,76.513677 763.8457,76.037109 C 764.19726,75.55274 764.83007,75.20899 765.74414,75.005859 C 764.83007,74.794928 764.19726,74.447272 763.8457,73.962891 C 763.49414,73.478523 763.31836,72.658212 763.31836,71.501953 L 763.31836,68.666016 C 763.31836,67.712904 763.17773,67.087905 762.89648,66.791016 C 762.62304,66.486343 762.09179,66.333999 761.30273,66.333984 C 761.25586,66.333999 761.16992,66.337906 761.04492,66.345703 C 760.91992,66.35353 760.82226,66.357437 760.75195,66.357422 L 760.75195,63.908203 M 767.00977,93.955078 L 767.00977,116.32617 L 761.08008,116.32617 L 761.08008,113.83008 L 763.8457,113.83008 L 763.8457,96.451172 L 761.08008,96.451172 L 761.08008,93.955078 L 767.00977,93.955078"
+       id="text5554" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 823.79883,62.977287 L 826.21289,62.977287 L 826.21289,86.977287 L 823.79883,86.977287 L 823.79883,62.977287 M 827.10352,113.54369 L 821.29102,93.6101 L 822.87305,93.6101 L 828.70898,113.54369 L 827.10352,113.54369"
+       id="text5564" />
+    <g
+       id="g3597">
+      <path
+         id="text5570"
+         d="M 22.996094,139.10156 C 22.907541,140.40886 22.403635,141.44792 21.484375,142.21875 C 20.565095,142.98958 19.365878,143.375 17.886719,143.375 C 16.183589,143.375 14.859372,142.84375 13.914063,141.78125 C 12.968749,140.71875 12.496093,139.22917 12.496094,137.3125 C 12.496093,135.35417 12.977863,133.85418 13.941406,132.8125 C 14.904945,131.77084 16.29036,131.25001 18.097656,131.25 C 19.566398,131.25001 20.726554,131.60808 21.578125,132.32422 C 22.429677,133.04037 22.897124,134.05209 22.980469,135.35938 L 20.644531,135.35938 C 20.545564,134.70834 20.279939,134.21225 19.847656,133.87109 C 19.415357,133.52996 18.832024,133.35938 18.097656,133.35938 C 17.055984,133.35938 16.264318,133.69532 15.722656,134.36719 C 15.180986,135.03907 14.910153,136.02084 14.910156,137.3125 C 14.910153,138.5625 15.179684,139.52865 15.71875,140.21094 C 16.257808,140.89323 17.024734,141.23438 18.019531,141.23438 C 18.738274,141.23438 19.326815,141.05078 19.785156,140.68359 C 20.243481,140.31641 20.540356,139.78907 20.675781,139.10156 L 22.996094,139.10156 z M 29.558594,142 C 29.27213,142.44271 28.89713,142.77995 28.433594,143.01172 C 27.970048,143.24349 27.430986,143.35937 26.816406,143.35938 C 25.993487,143.35937 25.359373,143.125 24.914063,142.65625 C 24.468749,142.1875 24.246093,141.52083 24.246094,140.65625 C 24.246093,139.85417 24.468749,139.24219 24.914063,138.82031 C 25.359373,138.39844 26.09505,138.10938 27.121094,137.95313 C 27.355465,137.91667 27.662756,137.87501 28.042969,137.82813 C 29.006505,137.70313 29.488275,137.42448 29.488281,136.99219 C 29.488275,136.64844 29.381505,136.40235 29.167969,136.25391 C 28.954422,136.10548 28.597651,136.03126 28.097656,136.03125 C 27.639319,136.03126 27.287757,136.1224 27.042969,136.30469 C 26.798174,136.48699 26.675778,136.7474 26.675781,137.08594 L 26.675781,137.21094 L 24.550781,137.21094 L 24.550781,137.05469 C 24.55078,136.1849 24.858072,135.50131 25.472656,135.00391 C 26.087237,134.50652 26.936195,134.25782 28.019531,134.25781 C 29.207026,134.25782 30.117181,134.46355 30.75,134.875 C 31.382805,135.28647 31.699211,135.88022 31.699219,136.65625 L 31.699219,141.48438 C 31.699211,141.83854 31.735669,142.10287 31.808594,142.27734 C 31.881502,142.45182 32.003898,142.58333 32.175781,142.67188 L 32.175781,143.05469 L 29.808594,143.05469 C 29.730463,142.90885 29.670567,142.7474 29.628906,142.57031 C 29.587234,142.39323 29.563796,142.20313 29.558594,142 L 29.558594,142 z M 29.519531,138.875 C 29.149734,139.04688 28.723953,139.1849 28.242188,139.28906 C 27.760413,139.39323 27.511715,139.44792 27.496094,139.45313 C 27.095049,139.56771 26.815101,139.71094 26.65625,139.88281 C 26.497393,140.05469 26.417966,140.29167 26.417969,140.59375 C 26.417966,140.90625 26.519528,141.15495 26.722656,141.33984 C 26.925778,141.52474 27.199215,141.61719 27.542969,141.61719 C 28.157548,141.61719 28.64062,141.44401 28.992188,141.09766 C 29.343744,140.7513 29.519525,140.27865 29.519531,139.67969 L 29.519531,138.875 z M 39.691406,138.85938 C 39.691399,138.00521 39.529941,137.35287 39.207031,136.90234 C 38.884108,136.45183 38.415359,136.22657 37.800781,136.22656 C 37.19661,136.22657 36.736975,136.45053 36.421875,136.89844 C 36.106767,137.34636 35.949216,138.00001 35.949219,138.85938 C 35.949216,139.66146 36.11458,140.28125 36.445313,140.71875 C 36.776038,141.15625 37.243485,141.375 37.847656,141.375 C 38.420567,141.375 38.871088,141.15104 39.199219,140.70313 C 39.527337,140.25521 39.691399,139.64063 39.691406,138.85938 L 39.691406,138.85938 z M 33.738281,146.46094 L 33.738281,134.5625 L 35.902344,134.5625 L 35.902344,135.71094 C 36.230465,135.21095 36.59635,134.84636 37,134.61719 C 37.403641,134.38803 37.878901,134.27345 38.425781,134.27344 C 39.472649,134.27345 40.321607,134.68621 40.972656,135.51172 C 41.623689,136.33725 41.94921,137.42188 41.949219,138.76563 C 41.94921,140.125 41.623689,141.22787 40.972656,142.07422 C 40.321607,142.92057 39.483066,143.34375 38.457031,143.34375 C 37.915359,143.34375 37.432287,143.22917 37.007813,143 C 36.583329,142.77083 36.230465,142.4375 35.949219,142 L 35.949219,146.46094 L 33.738281,146.46094 z M 43.027344,140.28906 L 45.292969,140.28906 C 45.313799,140.72136 45.470049,141.04297 45.761719,141.25391 C 46.053382,141.46485 46.490881,141.57031 47.074219,141.57031 C 47.516922,141.57031 47.85937,141.4961 48.101563,141.34766 C 48.343744,141.19922 48.464838,140.98959 48.464844,140.71875 C 48.464838,140.33334 48.011713,140.04427 47.105469,139.85156 C 46.735673,139.77344 46.441402,139.70573 46.222656,139.64844 C 45.118487,139.36719 44.351561,139.03386 43.921875,138.64844 C 43.492187,138.26303 43.277343,137.74219 43.277344,137.08594 C 43.277343,136.21615 43.591145,135.52735 44.21875,135.01953 C 44.846352,134.51173 45.696611,134.25782 46.769531,134.25781 C 47.904943,134.25782 48.796869,134.51043 49.445313,135.01563 C 50.093742,135.52084 50.438794,136.23178 50.480469,137.14844 L 48.269531,137.14844 C 48.253901,136.78907 48.117182,136.51042 47.859375,136.3125 C 47.601557,136.11459 47.243485,136.01563 46.785156,136.01563 C 46.352861,136.01563 46.031246,136.08074 45.820313,136.21094 C 45.609372,136.34115 45.503903,136.53646 45.503906,136.79688 C 45.503903,137.13542 46.069007,137.4349 47.199219,137.69531 C 47.45963,137.75261 47.665359,137.79948 47.816406,137.83594 C 48.946608,138.10157 49.718743,138.42188 50.132813,138.79688 C 50.546867,139.17188 50.753898,139.70052 50.753906,140.38281 C 50.753898,141.34636 50.414055,142.08073 49.734375,142.58594 C 49.054681,143.09115 48.066401,143.34375 46.769531,143.34375 C 45.597653,143.34375 44.680987,143.08073 44.019531,142.55469 C 43.358072,142.02865 43.027343,141.30469 43.027344,140.38281 L 43.027344,140.28906 z M 57.011719,143.05469 L 57.011719,131.54688 L 59.378906,131.54688 L 59.378906,140.92969 L 64.996094,140.92969 L 64.996094,143.05469 L 57.011719,143.05469 z M 67.972656,138.79688 C 67.972653,139.64063 68.14583,140.29167 68.492188,140.75 C 68.838538,141.20834 69.332027,141.4375 69.972656,141.4375 C 70.602859,141.4375 71.09114,141.20834 71.4375,140.75 C 71.783847,140.29167 71.957024,139.64063 71.957031,138.79688 C 71.957024,137.95834 71.78515,137.3112 71.441406,136.85547 C 71.09765,136.39975 70.608067,136.17188 69.972656,136.17188 C 69.332027,136.17188 68.838538,136.39975 68.492188,136.85547 C 68.14583,137.3112 67.972653,137.95834 67.972656,138.79688 L 67.972656,138.79688 z M 65.667969,138.79688 C 65.667968,137.38542 66.05078,136.27605 66.816406,135.46875 C 67.582029,134.66147 68.634111,134.25782 69.972656,134.25781 C 71.305983,134.25782 72.356764,134.66147 73.125,135.46875 C 73.89322,136.27605 74.277335,137.38542 74.277344,138.79688 C 74.277335,140.21354 73.89322,141.32552 73.125,142.13281 C 72.356764,142.9401 71.305983,143.34375 69.972656,143.34375 C 68.634111,143.34375 67.582029,142.9401 66.816406,142.13281 C 66.05078,141.32552 65.667968,140.21354 65.667969,138.79688 L 65.667969,138.79688 z M 80.949219,139.85156 L 83.191406,139.85156 C 83.097648,140.92969 82.704419,141.78125 82.011719,142.40625 C 81.319004,143.03125 80.42838,143.34375 79.339844,143.34375 C 78.105465,143.34375 77.138019,142.94141 76.4375,142.13672 C 75.736978,141.33203 75.386718,140.21875 75.386719,138.79688 C 75.386718,137.38021 75.744791,136.26954 76.460938,135.46484 C 77.177081,134.66016 78.162757,134.25782 79.417969,134.25781 C 80.516921,134.25782 81.398431,134.54949 82.0625,135.13281 C 82.726555,135.71615 83.097648,136.52865 83.175781,137.57031 L 80.917969,137.57031 C 80.855463,137.11719 80.696609,136.77084 80.441406,136.53125 C 80.186193,136.29167 79.850255,136.17188 79.433594,136.17188 C 78.87109,136.17188 78.450517,136.39324 78.171875,136.83594 C 77.893226,137.27865 77.753903,137.94271 77.753906,138.82813 C 77.753903,139.64584 77.898434,140.27474 78.1875,140.71484 C 78.476559,141.15495 78.891923,141.375 79.433594,141.375 C 79.855464,141.375 80.194005,141.2474 80.449219,140.99219 C 80.704421,140.73698 80.871088,140.35677 80.949219,139.85156 L 80.949219,139.85156 z M 84.675781,143.05469 L 84.675781,131.54688 L 86.886719,131.54688 L 86.886719,137.58594 L 89.589844,134.5625 L 92.324219,134.5625 L 89.363281,137.71094 L 92.503906,143.05469 L 89.777344,143.05469 L 87.746094,139.4375 L 86.886719,140.36719 L 86.886719,143.05469 L 84.675781,143.05469 z "
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+      <path
+         id="path5584"
+         d="M 23.746094,146.25 L 12.496094,161.25 L 19.996094,161.25 L 19.996094,168.75 L 27.496094,168.75 L 27.496094,161.25 L 34.996094,161.25 L 23.746094,146.25 z M 22.714844,150.46875 L 24.746094,150.46875 L 27.871094,159.09375 L 25.996094,159.09375 L 25.402344,157.3125 L 22.058594,157.3125 L 21.496094,159.09375 L 19.621094,159.09375 L 22.714844,150.46875 z M 23.746094,152.1875 L 22.527344,155.84375 L 24.933594,155.84375 L 23.746094,152.1875 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 119.9707,129.82617 L 117.58008,137.17383 L 122.37305,137.17383 L 119.9707,129.82617 M 117.9082,126.36914 L 122.00977,126.36914 L 128.23242,143.63086 L 124.50586,143.63086 L 123.33398,140.08008 L 116.64258,140.08008 L 115.50586,143.63086 L 111.76758,143.63086 L 117.9082,126.36914"
+       id="text5641" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 172.98047,138.29297 L 176.48438,138.29297 C 176.61718,139.23829 177.0039,139.94141 177.64453,140.40234 C 178.28515,140.85547 179.21093,141.08203 180.42188,141.08203 C 181.45312,141.08203 182.23046,140.89844 182.75391,140.53125 C 183.27733,140.16407 183.53905,139.6211 183.53906,138.90234 C 183.53905,137.85547 182.03515,136.98829 179.02734,136.30078 C 178.98827,136.29298 178.95312,136.28516 178.92188,136.27734 C 178.84374,136.26173 178.72265,136.23438 178.55859,136.19531 C 176.94921,135.84376 175.80078,135.44923 175.11328,135.01172 C 174.5039,134.6211 174.03906,134.09767 173.71875,133.44141 C 173.39844,132.77735 173.23828,131.99611 173.23828,131.09766 C 173.23828,129.41798 173.80859,128.13283 174.94922,127.24219 C 176.08984,126.34377 177.73828,125.89455 179.89453,125.89453 C 181.91015,125.89455 183.48436,126.37111 184.61719,127.32422 C 185.7578,128.27736 186.35936,129.62111 186.42188,131.35547 L 183.01172,131.35547 C 182.94921,130.51954 182.6289,129.88283 182.05078,129.44531 C 181.47265,129.00783 180.64843,128.78908 179.57813,128.78906 C 178.64843,128.78908 177.92968,128.97267 177.42188,129.33984 C 176.92187,129.69923 176.67187,130.21486 176.67188,130.88672 C 176.67187,131.80079 177.65234,132.48439 179.61328,132.9375 C 180.14452,133.06251 180.55859,133.16017 180.85547,133.23047 C 182.11327,133.55079 183.0039,133.80079 183.52734,133.98047 C 184.05858,134.16017 184.51952,134.35938 184.91016,134.57813 C 185.61327,134.96876 186.14061,135.48829 186.49219,136.13672 C 186.84374,136.77735 187.01952,137.54688 187.01953,138.44531 C 187.01952,140.24219 186.41405,141.63672 185.20313,142.62891 C 183.99218,143.61328 182.28515,144.10547 180.08203,144.10547 C 177.91015,144.10547 176.20703,143.60156 174.97266,142.59375 C 173.73828,141.58594 173.07422,140.15235 172.98047,138.29297"
+       id="text5645" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 236.16211,140.51367 L 239.00977,140.51367 C 240.65819,140.51367 241.8496,140.08399 242.58398,139.22461 C 243.32616,138.35743 243.69725,136.95508 243.69727,135.01758 C 243.69725,133.0879 243.3535,131.66993 242.66602,130.76367 C 241.9785,129.85744 240.90429,129.40431 239.44336,129.4043 L 236.16211,129.4043 L 236.16211,140.51367 M 232.68164,143.63086 L 232.68164,126.36914 L 239.44336,126.36914 C 242.09179,126.36916 244.06444,127.084 245.36133,128.51367 C 246.666,129.94337 247.31834,132.11134 247.31836,135.01758 C 247.31834,136.59571 247.07616,137.98633 246.5918,139.18945 C 246.11522,140.39258 245.41991,141.36133 244.50586,142.0957 C 243.81835,142.64258 243.0371,143.03711 242.16211,143.2793 C 241.2871,143.51367 240.06054,143.63086 238.48242,143.63086 L 232.68164,143.63086"
+       id="text5649" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 293.97656,143.63086 L 293.97656,126.36914 L 306.02344,126.36914 L 306.02344,129.36914 L 297.48047,129.36914 L 297.48047,133.2832 L 304.96875,133.2832 L 304.96875,136.2832 L 297.48047,136.2832 L 297.48047,143.63086 L 293.97656,143.63086"
+       id="text5653" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 365.17969,141.57422 C 364.53905,142.44141 363.80858,143.07813 362.98828,143.48438 C 362.17577,143.89062 361.21874,144.09375 360.11719,144.09375 C 357.70312,144.09375 355.74609,143.25781 354.24609,141.58594 C 352.7539,139.90625 352.00781,137.70313 352.00781,134.97656 C 352.00781,132.22657 352.7539,130.02736 354.24609,128.37891 C 355.73828,126.73049 357.72656,125.90627 360.21094,125.90625 C 362.37499,125.90627 364.14061,126.4258 365.50781,127.46484 C 366.87498,128.49611 367.68748,129.91798 367.94531,131.73047 L 364.32422,131.73047 C 364.10546,130.83204 363.65624,130.14845 362.97656,129.67969 C 362.30468,129.21095 361.42577,128.97658 360.33984,128.97656 C 358.89452,128.97658 357.75781,129.50783 356.92969,130.57031 C 356.10937,131.62501 355.69921,133.08595 355.69922,134.95313 C 355.69921,136.82813 356.1289,138.29688 356.98828,139.35938 C 357.84765,140.42188 359.02734,140.95313 360.52734,140.95313 C 361.65233,140.95313 362.59374,140.6211 363.35156,139.95703 C 364.10936,139.29297 364.57811,138.38282 364.75781,137.22656 L 360.84375,137.22656 L 360.84375,134.27344 L 367.99219,134.27344 L 367.99219,143.61328 L 365.61328,143.61328 L 365.17969,141.57422"
+       id="text5657" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 412.86328,143.63086 L 412.86328,126.36914 L 416.4375,126.36914 L 416.4375,132.80273 L 423.5625,132.80273 L 423.5625,126.36914 L 427.13672,126.36914 L 427.13672,143.63086 L 423.5625,143.63086 L 423.5625,135.97852 L 416.4375,135.97852 L 416.4375,143.63086 L 412.86328,143.63086"
+       id="text5661" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 474.48047,136.95703 L 477.91406,136.95703 L 477.91406,139.04297 C 477.91406,139.64453 478.09375,140.10547 478.45313,140.42578 C 478.8125,140.73828 479.32812,140.89453 480,140.89453 C 480.73437,140.89453 481.24609,140.70313 481.53516,140.32031 C 481.82421,139.9375 481.96874,139.21875 481.96875,138.16406 L 481.96875,126.12891 L 485.51953,126.12891 L 485.51953,138.32813 C 485.51952,139.42188 485.45311,140.22657 485.32031,140.74219 C 485.1953,141.25 484.98436,141.69922 484.6875,142.08984 C 484.23436,142.66797 483.61327,143.10938 482.82422,143.41406 C 482.03515,143.71875 481.10937,143.87109 480.04688,143.87109 C 479.07031,143.87109 478.20703,143.73828 477.45703,143.47266 C 476.70703,143.20703 476.08203,142.8125 475.58203,142.28906 C 475.18359,141.86719 474.89844,141.39844 474.72656,140.88281 C 474.5625,140.35938 474.48047,139.5 474.48047,138.30469 L 474.48047,136.95703"
+       id="text5665" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 532.32422,143.63086 L 532.32422,126.36914 L 535.875,126.36914 L 535.875,133.45898 L 542.61328,126.36914 L 547.05469,126.36914 L 540.16406,133.35352 L 547.67578,143.63086 L 543.33984,143.63086 L 537.71484,135.73242 L 535.875,137.56055 L 535.875,143.63086 L 532.32422,143.63086"
+       id="text5669" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 594.01172,143.63086 L 594.01172,126.36914 L 597.5625,126.36914 L 597.5625,140.44336 L 605.98828,140.44336 L 605.98828,143.63086 L 594.01172,143.63086"
+       id="text5673" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 143.15039,203.63086 L 143.15039,200.63086 L 152.53711,189.49805 L 143.33789,189.49805 L 143.33789,186.36914 L 156.84961,186.36914 L 156.84961,189.36914 L 147.43945,200.51367 L 156.63867,200.51367 L 156.63867,203.63086 L 143.15039,203.63086"
+       id="text5679" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 202.37109,203.63086 L 207.79688,194.81836 L 202.37109,186.36914 L 206.47266,186.36914 L 210,192.4043 L 213.50391,186.36914 L 217.62891,186.36914 L 212.20313,194.79492 L 217.62891,203.63086 L 213.52734,203.63086 L 210,197.6543 L 206.47266,203.63086 L 202.37109,203.63086"
+       id="text5683" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 277.875,197.68359 C 277.74217,199.64454 276.98436,201.20313 275.60156,202.35938 C 274.22655,203.51563 272.42968,204.09375 270.21094,204.09375 C 267.65624,204.09375 265.66796,203.29688 264.24609,201.70313 C 262.83203,200.10938 262.125,197.87501 262.125,195 C 262.125,192.06251 262.84765,189.81251 264.29297,188.25 C 265.73828,186.68752 267.8164,185.90627 270.52734,185.90625 C 272.73046,185.90627 274.46874,186.44533 275.74219,187.52344 C 277.02342,188.59377 277.72655,190.10939 277.85156,192.07031 L 274.34766,192.07031 C 274.19921,191.09376 273.80077,190.35158 273.15234,189.84375 C 272.50389,189.32814 271.6289,189.07033 270.52734,189.07031 C 268.96484,189.07033 267.77734,189.57423 266.96484,190.58203 C 266.15234,191.58986 265.74609,193.06251 265.74609,195 C 265.74609,196.87501 266.14843,198.32422 266.95313,199.34766 C 267.76562,200.3711 268.91796,200.88282 270.41016,200.88281 C 271.48827,200.88282 272.37108,200.60938 273.05859,200.0625 C 273.74608,199.50782 274.19139,198.71485 274.39453,197.68359 L 277.875,197.68359"
+       id="text5687" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 328.33594,203.63086 L 322.38281,186.36914 L 326.32031,186.36914 L 329.98828,199.2832 L 333.72656,186.36914 L 337.61719,186.36914 L 331.73438,203.63086 L 328.33594,203.63086"
+       id="text5691" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 386.32031,200.51367 L 390.52734,200.51367 C 391.51952,200.51367 392.24218,200.33399 392.69531,199.97461 C 393.14843,199.61524 393.37499,199.04883 393.375,198.27539 C 393.37499,197.47071 393.15233,196.89258 392.70703,196.54102 C 392.26171,196.18165 391.52733,196.00196 390.50391,196.00195 L 386.32031,196.00195 L 386.32031,200.51367 M 386.32031,193.04883 L 390.375,193.04883 C 391.24999,193.04884 391.89061,192.9004 392.29688,192.60352 C 392.70311,192.29884 392.90624,191.82228 392.90625,191.17383 C 392.90624,190.54103 392.70702,190.084 392.30859,189.80273 C 391.91796,189.51369 391.26561,189.36915 390.35156,189.36914 L 386.32031,189.36914 L 386.32031,193.04883 M 382.92188,203.63086 L 382.92188,186.36914 L 391.05469,186.36914 C 392.8203,186.36916 394.16405,186.74416 395.08594,187.49414 C 396.01561,188.23634 396.48045,189.31837 396.48047,190.74023 C 396.48045,191.61525 396.30858,192.34571 395.96484,192.93164 C 395.62108,193.51759 395.10545,193.97071 394.41797,194.29102 C 395.30858,194.6504 395.97264,195.16993 396.41016,195.84961 C 396.85545,196.52149 397.07811,197.36133 397.07813,198.36914 C 397.07811,200.04883 396.53123,201.34571 395.4375,202.25977 C 394.34374,203.17383 392.79296,203.63086 390.78516,203.63086 L 382.92188,203.63086"
+       id="text5695" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 442.88672,203.63086 L 442.88672,186.36914 L 446.60156,186.36914 L 453.60938,198.22852 L 453.60938,186.36914 L 457.11328,186.36914 L 457.11328,203.63086 L 453.44531,203.63086 L 446.39063,191.77148 L 446.39063,203.63086 L 442.88672,203.63086"
+       id="text5699" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 501.32813,203.63086 L 501.32813,186.36914 L 506.57813,186.36914 L 510.01172,199.50586 L 513.39844,186.36914 L 518.67188,186.36914 L 518.67188,203.63086 L 515.34375,203.63086 L 515.34375,189.70898 L 511.83984,203.63086 L 508.20703,203.63086 L 504.65625,189.70898 L 504.65625,203.63086 L 501.32813,203.63086"
+       id="text5703" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 658.22461,134.6543 L 658.22461,131.10352 L 661.77539,131.10352 L 661.77539,134.6543 L 658.22461,134.6543 M 658.22461,143.63086 L 658.22461,140.10352 L 661.77539,140.10352 L 661.77539,143.63086 L 658.22461,143.63086 M 658.24805,164.6543 L 658.24805,161.10352 L 661.77539,161.10352 L 661.77539,164.6543 L 658.24805,164.6543 M 658.24805,177.68555 L 658.24805,176.31445 C 658.90429,176.12695 659.38867,175.83789 659.70117,175.44727 C 660.01367,175.05664 660.16992,174.54883 660.16992,173.92383 L 660.16992,173.63086 L 658.22461,173.63086 L 658.22461,170.10352 L 661.77539,170.10352 L 661.77539,173.49023 C 661.77539,174.66211 661.47851,175.59961 660.88477,176.30273 C 660.29101,177.01367 659.41211,177.47461 658.24805,177.68555"
+       id="text5725" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 720.78516,126.7793 L 723.03516,126.7793 L 723.03516,133.33008 L 720.78516,133.33008 L 720.78516,126.7793 M 716.96484,126.7793 L 719.21484,126.7793 L 719.21484,133.33008 L 716.96484,133.33008 L 716.96484,126.7793 M 718.88672,156.7793 L 721.13672,156.7793 L 721.13672,163.33008 L 718.88672,163.33008 L 718.88672,156.7793"
+       id="text5731" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 772.5,140.60938 L 772.5,129.10156 L 780.85156,129.10156 L 780.85156,131.10156 L 774.83594,131.10156 L 774.83594,133.55469 L 780.33594,133.55469 L 780.33594,135.52344 L 774.83594,135.52344 L 774.83594,138.48438 L 781.13281,138.48438 L 781.13281,140.60938 L 772.5,140.60938 M 782.74219,140.60938 L 782.74219,132.11719 L 784.96875,132.11719 L 784.96875,133.125 C 785.28645,132.71355 785.66145,132.40626 786.09375,132.20313 C 786.52604,131.9948 787.00781,131.89063 787.53906,131.89063 C 788.47656,131.89063 789.17708,132.13543 789.64063,132.625 C 790.10937,133.10938 790.34374,133.84115 790.34375,134.82031 L 790.34375,140.60938 L 788.07031,140.60938 L 788.07031,135.47656 C 788.07031,134.86719 787.96614,134.4323 787.75781,134.17188 C 787.55468,133.91147 787.22135,133.78126 786.75781,133.78125 C 786.22135,133.78126 785.79687,133.94271 785.48438,134.26563 C 785.17187,134.58334 785.01562,135.01823 785.01563,135.57031 L 785.01563,140.60938 L 782.74219,140.60938 M 796.07813,140.67188 C 795.86979,140.67708 795.61979,140.6849 795.32813,140.69531 C 795.04166,140.71094 794.85937,140.71875 794.78125,140.71875 C 793.91146,140.71875 793.3151,140.55729 792.99219,140.23438 C 792.67448,139.90625 792.51562,139.26302 792.51563,138.30469 L 792.51563,133.71094 L 791.39063,133.71094 L 791.39063,132.11719 L 792.51563,132.11719 L 792.51563,129.79688 L 794.76563,129.79688 L 794.76563,132.11719 L 796.07813,132.11719 L 796.07813,133.71094 L 794.76563,133.71094 L 794.76563,138.41406 C 794.76562,138.63802 794.8151,138.78646 794.91406,138.85938 C 795.01302,138.92709 795.21614,138.96094 795.52344,138.96094 L 796.07813,138.96094 L 796.07813,140.67188 M 802.63281,138.03125 L 804.89844,138.03125 C 804.66926,138.92709 804.20572,139.63021 803.50781,140.14063 C 802.8151,140.64583 801.96874,140.89844 800.96875,140.89844 C 799.73958,140.89844 798.76562,140.48698 798.04688,139.66406 C 797.32812,138.83594 796.96875,137.71615 796.96875,136.30469 C 796.96875,134.91407 797.32292,133.81772 798.03125,133.01563 C 798.73958,132.21355 799.70833,131.81251 800.9375,131.8125 C 802.23958,131.81251 803.24478,132.20834 803.95313,133 C 804.66145,133.78647 805.01562,134.90886 805.01563,136.36719 C 805.01562,136.52865 805.01301,136.65105 805.00781,136.73438 C 805.0078,136.8125 805.0026,136.88802 804.99219,136.96094 L 799.32031,136.96094 C 799.35156,137.62761 799.51302,138.13021 799.80469,138.46875 C 800.10156,138.80729 800.52604,138.97656 801.07813,138.97656 C 801.46874,138.97656 801.78906,138.90104 802.03906,138.75 C 802.28906,138.59375 802.48697,138.35417 802.63281,138.03125 M 799.32031,135.46875 L 802.66406,135.46875 C 802.64322,134.89584 802.48958,134.46094 802.20313,134.16406 C 801.92187,133.86199 801.51562,133.71094 800.98438,133.71094 C 800.48958,133.71094 800.09895,133.86199 799.8125,134.16406 C 799.53125,134.46615 799.36718,134.90105 799.32031,135.46875 M 806.52344,140.60938 L 806.52344,132.11719 L 808.63281,132.11719 L 808.63281,133.57031 C 808.92968,132.98699 809.27604,132.5599 809.67188,132.28906 C 810.0677,132.01303 810.53906,131.87501 811.08594,131.875 C 811.17447,131.87501 811.24218,131.87761 811.28906,131.88281 C 811.34114,131.88282 811.38281,131.88543 811.41406,131.89063 L 811.42188,134.19531 L 810.66406,134.19531 C 810.04427,134.19532 809.57812,134.35678 809.26563,134.67969 C 808.95312,135.00261 808.79687,135.48178 808.79688,136.11719 L 808.79688,140.60938 L 806.52344,140.60938"
+       id="text5737" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 787.5,172.5 L 787.5,157.5 L 772.5,165 L 787.5,172.5 z "
+       id="path5745" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 810,150 L 810,165 L 780,165"
+       id="path5747" />
+    <g
+       id="g3601">
+      <path
+         id="text5753"
+         d="M 12.496094,197.64063 L 14.832032,197.64063 C 14.92057,198.27084 15.178382,198.73828 15.605469,199.04297 C 16.032548,199.34766 16.649735,199.5 17.457032,199.5 C 18.144525,199.5 18.662754,199.37761 19.011719,199.13281 C 19.36067,198.88802 19.535149,198.52604 19.535157,198.04688 C 19.535149,197.34896 18.532546,196.77084 16.527344,196.3125 C 16.501298,196.3073 16.47786,196.30209 16.457032,196.29688 C 16.404944,196.28646 16.324215,196.26823 16.214844,196.24219 C 15.141924,196.00782 14.3763,195.7448 13.917969,195.45313 C 13.511717,195.19271 13.201822,194.84245 12.988282,194.40234 C 12.774739,193.96225 12.667968,193.44272 12.667969,192.84375 C 12.667968,191.72397 13.048176,190.8659 13.808594,190.26953 C 14.569008,189.67319 15.667965,189.37501 17.105469,189.375 C 18.449212,189.37501 19.499993,189.69272 20.257813,190.32813 C 21.015616,190.96355 21.415355,191.85938 21.457032,193.01563 L 19.183594,193.01563 C 19.14192,192.45834 18.928379,192.03386 18.542969,191.74219 C 18.157546,191.45053 17.608067,191.3047 16.894532,191.30469 C 16.274735,191.3047 15.796871,191.42579 15.460938,191.66797 C 15.124997,191.91017 14.957028,192.25522 14.957032,192.70313 C 14.957028,193.31251 15.610674,193.76824 16.917969,194.07031 C 17.27213,194.15365 17.548172,194.21876 17.746094,194.26563 C 18.584629,194.47917 19.17968,194.64584 19.53125,194.76563 C 19.882805,194.88542 20.188794,195.01824 20.449219,195.16406 C 20.91796,195.42448 21.269522,195.76954 21.503907,196.19922 C 21.738272,196.62891 21.855459,197.14323 21.855469,197.74219 C 21.855459,198.94011 21.451814,199.86849 20.644532,200.52734 C 19.837232,201.1862 18.699212,201.51562 17.230469,201.51563 C 15.782548,201.51562 14.647133,201.17969 13.824219,200.50781 C 13.001301,199.83594 12.558593,198.88021 12.496094,197.64063 L 12.496094,197.64063 z M 23.566407,201.19531 L 23.566407,189.6875 L 25.824219,189.6875 L 25.824219,193.64063 C 26.131507,193.25522 26.497392,192.96485 26.921875,192.76953 C 27.34635,192.57423 27.82161,192.47657 28.347657,192.47656 C 28.84765,192.47657 29.299473,192.56251 29.703125,192.73438 C 30.106764,192.90626 30.433586,193.15105 30.683594,193.46875 C 30.855461,193.6823 30.976554,193.92709 31.046875,194.20313 C 31.117179,194.47917 31.152335,194.92188 31.152344,195.53125 L 31.152344,195.6875 L 31.152344,201.19531 L 28.894532,201.19531 L 28.894532,196.75 C 28.894525,195.69792 28.798171,195.03777 28.605469,194.76953 C 28.412755,194.50131 28.066401,194.36719 27.566407,194.36719 C 27.029944,194.36719 26.605465,194.52735 26.292969,194.84766 C 25.980466,195.16797 25.824216,195.60417 25.824219,196.15625 L 25.824219,201.19531 L 23.566407,201.19531 z M 33.191407,191.75781 L 33.191407,189.6875 L 35.464844,189.6875 L 35.464844,191.75781 L 33.191407,191.75781 z M 33.191407,201.19531 L 33.191407,192.70313 L 35.464844,192.70313 L 35.464844,201.19531 L 33.191407,201.19531 z M 37.886719,201.19531 L 37.886719,194.29688 L 36.675782,194.29688 L 36.675782,192.70313 L 37.886719,192.70313 L 37.886719,191.91406 C 37.886718,191.12241 38.091144,190.54038 38.5,190.16797 C 38.908852,189.79558 39.553383,189.60939 40.433594,189.60938 C 40.595048,189.60939 40.765621,189.61329 40.945313,189.62109 C 41.124996,189.62892 41.316402,189.64324 41.519532,189.66406 L 41.519532,191.46875 L 40.925782,191.46875 C 40.587236,191.46876 40.36458,191.51303 40.257813,191.60156 C 40.151038,191.69011 40.097653,191.85938 40.097657,192.10938 L 40.097657,192.70313 L 41.519532,192.70313 L 41.519532,194.29688 L 40.113282,194.29688 L 40.113282,201.19531 L 37.886719,201.19531 z M 46.449219,201.25781 C 46.240881,201.26302 45.992183,201.27214 45.703125,201.28516 C 45.414059,201.29818 45.230465,201.30469 45.152344,201.30469 C 44.28255,201.30469 43.687498,201.14193 43.367188,200.81641 C 43.046874,200.49089 42.886718,199.84896 42.886719,198.89063 L 42.886719,194.29688 L 41.761719,194.29688 L 41.761719,192.70313 L 42.886719,192.70313 L 42.886719,190.38281 L 45.136719,190.38281 L 45.136719,192.70313 L 46.449219,192.70313 L 46.449219,194.29688 L 45.136719,194.29688 L 45.136719,199 C 45.136716,199.22396 45.186195,199.3711 45.285157,199.44141 C 45.384111,199.51172 45.587236,199.54688 45.894532,199.54688 L 46.449219,199.54688 L 46.449219,201.25781 z "
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+      <path
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 24.746094,207.125 L 13.496094,222.125 L 20.996094,222.125 L 20.996094,229.625 L 28.496094,229.625 L 28.496094,222.125 L 35.996094,222.125 L 24.746094,207.125 z "
+         id="path5757" />
+    </g>
+    <g
+       id="g5795"
+       transform="translate(727.5,0)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5797"
+         y="201.19531"
+         x="31.8125"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+         xml:space="preserve"><tspan
+           y="201.19531"
+           x="31.8125"
+           id="tspan5799"
+           sodipodi:role="line">Shift</tspan></text>
+      <path
+         id="path5801"
+         d="M 27.25,207.125 L 16,222.125 L 23.5,222.125 L 23.5,229.625 L 31,229.625 L 31,222.125 L 38.5,222.125 L 27.25,207.125 z "
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 576.90234,189.63867 L 576.90234,192.20508 L 566.4375,196.48242 L 576.90234,200.74805 L 576.90234,203.31445 L 563.09766,197.63086 L 563.09766,195.29883 L 576.90234,189.63867 M 568.21875,237.68555 L 568.21875,236.31445 C 568.875,236.12695 569.35937,235.83789 569.67188,235.44727 C 569.98437,235.05664 570.14062,234.54883 570.14063,233.92383 L 570.14063,233.63086 L 568.21875,233.63086 L 568.21875,230.10352 L 571.76953,230.10352 L 571.76953,233.49023 C 571.76953,234.6543 571.46875,235.59179 570.86719,236.30273 C 570.27343,237.01367 569.39062,237.47461 568.21875,237.68555"
+       id="text5803" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 623.09766,189.63867 L 636.90234,195.29883 L 636.90234,197.63086 L 623.09766,203.31445 L 623.09766,200.74805 L 633.58594,196.48242 L 623.09766,192.20508 L 623.09766,189.63867 M 628.21875,233.63086 L 628.21875,230.10352 L 631.74609,230.10352 L 631.74609,233.63086 L 628.21875,233.63086"
+       id="text5813" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 688.44727,198.61523 C 688.44726,198.5293 688.44335,198.41602 688.43555,198.27539 C 688.42773,198.12696 688.42382,198.01758 688.42383,197.94727 C 688.42382,197.25977 688.49804,196.68946 688.64648,196.23633 C 688.79492,195.7754 689.0332,195.34571 689.36133,194.94727 C 689.61132,194.6504 689.98242,194.31056 690.47461,193.92773 C 690.9746,193.54493 691.29882,193.26759 691.44727,193.0957 C 691.75976,192.74415 691.9746,192.42775 692.0918,192.14648 C 692.20898,191.86525 692.26757,191.55665 692.26758,191.2207 C 692.26757,190.47853 692.06054,189.9004 691.64648,189.48633 C 691.23241,189.07228 690.65429,188.86525 689.91211,188.86523 C 689.16992,188.86525 688.58398,189.11525 688.1543,189.61523 C 687.73242,190.10744 687.50195,190.80275 687.46289,191.70117 L 684.1582,191.70117 L 684.1582,191.33789 C 684.1582,189.68947 684.67773,188.37697 685.7168,187.40039 C 686.76367,186.41603 688.16992,185.92385 689.93555,185.92383 C 691.74023,185.92385 693.17382,186.38869 694.23633,187.31836 C 695.30663,188.24025 695.84178,189.47853 695.8418,191.0332 C 695.84178,191.58009 695.77928,192.07228 695.6543,192.50977 C 695.5371,192.93946 695.3535,193.33399 695.10352,193.69336 C 694.78319,194.14649 694.2871,194.63868 693.61523,195.16992 C 692.95116,195.69337 692.54882,196.01759 692.4082,196.14258 C 692.11132,196.43165 691.89648,196.73634 691.76367,197.05664 C 691.63866,197.37696 691.57616,197.75977 691.57617,198.20508 C 691.57616,198.24415 691.58007,198.31055 691.58789,198.4043 C 691.59569,198.49805 691.5996,198.56836 691.59961,198.61523 L 688.44727,198.61523 M 688.2832,203.63086 L 688.2832,200.19727 L 691.74023,200.19727 L 691.74023,203.63086 L 688.2832,203.63086 M 686.31445,235.85742 L 692.12695,215.92383 L 693.73242,215.92383 L 687.89648,235.85742 L 686.31445,235.85742"
+       id="text5819" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 18,271.78906 C 17.911447,273.09636 17.406239,274.13542 16.484375,274.90625 C 15.5677,275.67708 14.369784,276.0625 12.890625,276.0625 C 11.187496,276.0625 9.8619761,275.53125 8.9140625,274.46875 C 7.971353,273.40625 7.4999993,271.91667 7.5,270 C 7.4999993,268.04167 7.9817696,266.54168 8.9453125,265.5 C 9.9088511,264.45834 11.294266,263.93751 13.101563,263.9375 C 14.570305,263.93751 15.729158,264.29689 16.578125,265.01563 C 17.432281,265.72918 17.901031,266.73959 17.984375,268.04688 L 15.648438,268.04688 C 15.54947,267.39584 15.283846,266.90105 14.851563,266.5625 C 14.419263,266.21876 13.83593,266.04688 13.101563,266.04688 C 12.059891,266.04688 11.268225,266.38282 10.726563,267.05469 C 10.184892,267.72657 9.9140594,268.70834 9.9140625,270 C 9.9140594,271.25 10.182288,272.21615 10.71875,272.89844 C 11.260412,273.58073 12.028641,273.92188 13.023438,273.92188 C 13.742181,273.92188 14.330722,273.73959 14.789063,273.375 C 15.247387,273.00521 15.544262,272.47657 15.679688,271.78906 L 18,271.78906 M 23.46875,275.80469 C 23.260412,275.8099 23.010412,275.81771 22.71875,275.82813 C 22.432288,275.84375 22.249996,275.85156 22.171875,275.85156 C 21.302081,275.85156 20.705727,275.6901 20.382813,275.36719 C 20.065103,275.03906 19.906249,274.39583 19.90625,273.4375 L 19.90625,268.84375 L 18.78125,268.84375 L 18.78125,267.25 L 19.90625,267.25 L 19.90625,264.92969 L 22.15625,264.92969 L 22.15625,267.25 L 23.46875,267.25 L 23.46875,268.84375 L 22.15625,268.84375 L 22.15625,273.54688 C 22.156247,273.77084 22.205726,273.91927 22.304688,273.99219 C 22.403642,274.0599 22.606767,274.09375 22.914063,274.09375 L 23.46875,274.09375 L 23.46875,275.80469 M 24.789063,275.74219 L 24.789063,267.25 L 26.898438,267.25 L 26.898438,268.70313 C 27.195309,268.1198 27.541663,267.69272 27.9375,267.42188 C 28.333329,267.14584 28.804682,267.00782 29.351563,267.00781 C 29.440099,267.00782 29.507807,267.01043 29.554688,267.01563 C 29.606765,267.01563 29.648432,267.01824 29.679688,267.02344 L 29.6875,269.32813 L 28.929688,269.32813 C 28.309891,269.32813 27.843746,269.48959 27.53125,269.8125 C 27.218747,270.13542 27.062497,270.61459 27.0625,271.25 L 27.0625,275.74219 L 24.789063,275.74219 M 31.023438,275.74219 L 31.023438,264.23438 L 33.296875,264.23438 L 33.296875,275.74219 L 31.023438,275.74219"
+       id="text5827" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 162.96875,266.49609 L 161.375,271.39453 L 164.57031,271.39453 L 162.96875,266.49609 M 161.59375,264.19141 L 164.32813,264.19141 L 168.47656,275.69922 L 165.99219,275.69922 L 165.21094,273.33203 L 160.75,273.33203 L 159.99219,275.69922 L 157.5,275.69922 L 161.59375,264.19141 M 169.53906,275.69922 L 169.53906,264.19141 L 171.8125,264.19141 L 171.8125,275.69922 L 169.53906,275.69922 M 177.64063,275.76172 C 177.43229,275.76693 177.18229,275.77474 176.89063,275.78516 C 176.60416,275.80078 176.42187,275.80859 176.34375,275.80859 C 175.47396,275.80859 174.8776,275.64714 174.55469,275.32422 C 174.23698,274.99609 174.07812,274.35287 174.07813,273.39453 L 174.07813,268.80078 L 172.95313,268.80078 L 172.95313,267.20703 L 174.07813,267.20703 L 174.07813,264.88672 L 176.32813,264.88672 L 176.32813,267.20703 L 177.64063,267.20703 L 177.64063,268.80078 L 176.32813,268.80078 L 176.32813,273.50391 C 176.32812,273.72787 176.3776,273.8763 176.47656,273.94922 C 176.57552,274.01693 176.77864,274.05078 177.08594,274.05078 L 177.64063,274.05078 L 177.64063,275.76172"
+       id="text5831" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 612.96875,266.53906 L 611.375,271.4375 L 614.57031,271.4375 L 612.96875,266.53906 M 611.59375,264.23438 L 614.32813,264.23438 L 618.47656,275.74219 L 615.99219,275.74219 L 615.21094,273.375 L 610.75,273.375 L 609.99219,275.74219 L 607.5,275.74219 L 611.59375,264.23438 M 619.53906,275.74219 L 619.53906,264.23438 L 621.8125,264.23438 L 621.8125,275.74219 L 619.53906,275.74219 M 627.64063,275.80469 C 627.43229,275.8099 627.18229,275.81771 626.89063,275.82813 C 626.60416,275.84375 626.42187,275.85156 626.34375,275.85156 C 625.47396,275.85156 624.8776,275.6901 624.55469,275.36719 C 624.23698,275.03906 624.07812,274.39583 624.07813,273.4375 L 624.07813,268.84375 L 622.95313,268.84375 L 622.95313,267.25 L 624.07813,267.25 L 624.07813,264.92969 L 626.32813,264.92969 L 626.32813,267.25 L 627.64063,267.25 L 627.64063,268.84375 L 626.32813,268.84375 L 626.32813,273.54688 C 626.32812,273.77084 626.3776,273.91927 626.47656,273.99219 C 626.57552,274.0599 626.77864,274.09375 627.08594,274.09375 L 627.64063,274.09375 L 627.64063,275.80469 M 642,274.38281 C 641.57291,274.96094 641.08593,275.38542 640.53906,275.65625 C 639.99739,275.92708 639.35937,276.0625 638.625,276.0625 C 637.01562,276.0625 635.71093,275.50521 634.71094,274.39063 C 633.71614,273.27084 633.21875,271.80209 633.21875,269.98438 C 633.21875,268.15105 633.71614,266.6849 634.71094,265.58594 C 635.70573,264.48699 637.03125,263.93751 638.6875,263.9375 C 640.1302,263.93751 641.30728,264.28387 642.21875,264.97656 C 643.1302,265.66407 643.67186,266.61199 643.84375,267.82031 L 641.42969,267.82031 C 641.28385,267.22136 640.98437,266.76563 640.53125,266.45313 C 640.08333,266.14063 639.49739,265.98438 638.77344,265.98438 C 637.80989,265.98438 637.05208,266.33855 636.5,267.04688 C 635.95312,267.75001 635.67968,268.72397 635.67969,269.96875 C 635.67968,271.21875 635.96614,272.19792 636.53906,272.90625 C 637.11197,273.61459 637.89843,273.96875 638.89844,273.96875 C 639.64843,273.96875 640.27603,273.7474 640.78125,273.30469 C 641.28645,272.86198 641.59895,272.25521 641.71875,271.48438 L 639.10938,271.48438 L 639.10938,269.51563 L 643.875,269.51563 L 643.875,275.74219 L 642.28906,275.74219 L 642,274.38281 M 645.96094,275.74219 L 645.96094,267.25 L 648.07031,267.25 L 648.07031,268.70313 C 648.36718,268.1198 648.71354,267.69272 649.10938,267.42188 C 649.5052,267.14584 649.97656,267.00782 650.52344,267.00781 C 650.61197,267.00782 650.67968,267.01043 650.72656,267.01563 C 650.77864,267.01563 650.82031,267.01824 650.85156,267.02344 L 650.85938,269.32813 L 650.10156,269.32813 C 649.48177,269.32813 649.01562,269.48959 648.70313,269.8125 C 648.39062,270.13542 648.23437,270.61459 648.23438,271.25 L 648.23438,275.74219 L 645.96094,275.74219"
+       id="text5835" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 828,271.78906 C 827.91145,273.09636 827.40624,274.13542 826.48438,274.90625 C 825.5677,275.67708 824.36978,276.0625 822.89063,276.0625 C 821.1875,276.0625 819.86198,275.53125 818.91406,274.46875 C 817.97135,273.40625 817.5,271.91667 817.5,270 C 817.5,268.04167 817.98177,266.54168 818.94531,265.5 C 819.90885,264.45834 821.29427,263.93751 823.10156,263.9375 C 824.5703,263.93751 825.72916,264.29689 826.57813,265.01563 C 827.43228,265.72918 827.90103,266.73959 827.98438,268.04688 L 825.64844,268.04688 C 825.54947,267.39584 825.28385,266.90105 824.85156,266.5625 C 824.41926,266.21876 823.83593,266.04688 823.10156,266.04688 C 822.05989,266.04688 821.26822,266.38282 820.72656,267.05469 C 820.18489,267.72657 819.91406,268.70834 819.91406,270 C 819.91406,271.25 820.18229,272.21615 820.71875,272.89844 C 821.26041,273.58073 822.02864,273.92188 823.02344,273.92188 C 823.74218,273.92188 824.33072,273.73959 824.78906,273.375 C 825.24739,273.00521 825.54426,272.47657 825.67969,271.78906 L 828,271.78906 M 833.46875,275.80469 C 833.26041,275.8099 833.01041,275.81771 832.71875,275.82813 C 832.43229,275.84375 832.25,275.85156 832.17188,275.85156 C 831.30208,275.85156 830.70573,275.6901 830.38281,275.36719 C 830.0651,275.03906 829.90625,274.39583 829.90625,273.4375 L 829.90625,268.84375 L 828.78125,268.84375 L 828.78125,267.25 L 829.90625,267.25 L 829.90625,264.92969 L 832.15625,264.92969 L 832.15625,267.25 L 833.46875,267.25 L 833.46875,268.84375 L 832.15625,268.84375 L 832.15625,273.54688 C 832.15625,273.77084 832.20573,273.91927 832.30469,273.99219 C 832.40364,274.0599 832.60677,274.09375 832.91406,274.09375 L 833.46875,274.09375 L 833.46875,275.80469 M 834.78906,275.74219 L 834.78906,267.25 L 836.89844,267.25 L 836.89844,268.70313 C 837.19531,268.1198 837.54166,267.69272 837.9375,267.42188 C 838.33333,267.14584 838.80468,267.00782 839.35156,267.00781 C 839.4401,267.00782 839.50781,267.01043 839.55469,267.01563 C 839.60677,267.01563 839.64843,267.01824 839.67969,267.02344 L 839.6875,269.32813 L 838.92969,269.32813 C 838.30989,269.32813 837.84375,269.48959 837.53125,269.8125 C 837.21875,270.13542 837.0625,270.61459 837.0625,271.25 L 837.0625,275.74219 L 834.78906,275.74219 M 841.02344,275.74219 L 841.02344,264.23438 L 843.29688,264.23438 L 843.29688,275.74219 L 841.02344,275.74219"
+       id="text5839" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 108.94531,264.01953 L 105.64844,252.51172 L 108.10156,252.51172 L 110.07031,260.62891 L 111.73438,252.51172 L 114.25781,252.51172 L 115.92188,260.62891 L 117.89063,252.51172 L 120.32031,252.51172 L 117.03125,264.01953 L 114.77344,264.01953 L 112.99219,255.20703 L 111.20313,264.01953 L 108.94531,264.01953 M 121.5,254.58203 L 121.5,252.51172 L 123.77344,252.51172 L 123.77344,254.58203 L 121.5,254.58203 M 121.5,264.01953 L 121.5,255.52734 L 123.77344,255.52734 L 123.77344,264.01953 L 121.5,264.01953 M 125.79688,264.01953 L 125.79688,255.52734 L 128.02344,255.52734 L 128.02344,256.53516 C 128.34114,256.12371 128.71614,255.81641 129.14844,255.61328 C 129.58072,255.40496 130.06249,255.30079 130.59375,255.30078 C 131.53124,255.30079 132.23176,255.54558 132.69531,256.03516 C 133.16405,256.51954 133.39843,257.25131 133.39844,258.23047 L 133.39844,264.01953 L 131.125,264.01953 L 131.125,258.88672 C 131.12499,258.27735 131.02083,257.84245 130.8125,257.58203 C 130.60937,257.32162 130.27604,257.19141 129.8125,257.19141 C 129.27604,257.19141 128.85156,257.35287 128.53906,257.67578 C 128.22656,257.9935 128.07031,258.42839 128.07031,258.98047 L 128.07031,264.01953 L 125.79688,264.01953 M 106.64844,284.01953 L 106.64844,272.51172 L 109.01563,272.51172 L 109.01563,277.23828 L 113.50781,272.51172 L 116.46875,272.51172 L 111.875,277.16797 L 116.88281,284.01953 L 113.99219,284.01953 L 110.24219,278.75391 L 109.01563,279.97266 L 109.01563,284.01953 L 106.64844,284.01953 M 122.9375,281.44141 L 125.20313,281.44141 C 124.97395,282.33724 124.51041,283.04037 123.8125,283.55078 C 123.11979,284.05599 122.27343,284.30859 121.27344,284.30859 C 120.04427,284.30859 119.07031,283.89714 118.35156,283.07422 C 117.63281,282.2461 117.27344,281.1263 117.27344,279.71484 C 117.27344,278.32422 117.6276,277.22787 118.33594,276.42578 C 119.04427,275.62371 120.01302,275.22267 121.24219,275.22266 C 122.54427,275.22267 123.54947,275.6185 124.25781,276.41016 C 124.96614,277.19662 125.3203,278.31902 125.32031,279.77734 C 125.3203,279.93881 125.3177,280.0612 125.3125,280.14453 C 125.31249,280.22266 125.30728,280.29818 125.29688,280.37109 L 119.625,280.37109 C 119.65625,281.03776 119.81771,281.54037 120.10938,281.87891 C 120.40625,282.21745 120.83073,282.38672 121.38281,282.38672 C 121.77343,282.38672 122.09374,282.3112 122.34375,282.16016 C 122.59374,282.00391 122.79166,281.76433 122.9375,281.44141 M 119.625,278.87891 L 122.96875,278.87891 C 122.94791,278.306 122.79426,277.8711 122.50781,277.57422 C 122.22656,277.27214 121.82031,277.1211 121.28906,277.12109 C 120.79427,277.1211 120.40364,277.27214 120.11719,277.57422 C 119.83593,277.87631 119.67187,278.3112 119.625,278.87891 M 127.16406,287.42578 L 127.16406,285.58984 C 127.23698,285.60026 127.3125,285.60807 127.39063,285.61328 C 127.46875,285.61849 127.57031,285.62109 127.69531,285.62109 C 128.14323,285.62109 128.47916,285.51432 128.70313,285.30078 C 128.92708,285.09245 129.03906,284.77734 129.03906,284.35547 C 129.03906,284.32422 129.03385,284.28516 129.02344,284.23828 C 129.01302,284.19141 129.0026,284.15234 128.99219,284.12109 L 125.92969,275.52734 L 128.42969,275.52734 L 130.21875,281.65234 L 131.96094,275.52734 L 134.35156,275.52734 L 130.85938,285.54297 C 130.59895,286.29297 130.27343,286.80338 129.88281,287.07422 C 129.49218,287.35026 128.90625,287.48828 128.125,287.48828 C 127.98437,287.48828 127.83333,287.48307 127.67188,287.47266 C 127.51041,287.46224 127.34114,287.44661 127.16406,287.42578"
+       id="text5872" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 708.94531,264.01953 L 705.64844,252.51172 L 708.10156,252.51172 L 710.07031,260.62891 L 711.73438,252.51172 L 714.25781,252.51172 L 715.92188,260.62891 L 717.89063,252.51172 L 720.32031,252.51172 L 717.03125,264.01953 L 714.77344,264.01953 L 712.99219,255.20703 L 711.20313,264.01953 L 708.94531,264.01953 M 721.5,254.58203 L 721.5,252.51172 L 723.77344,252.51172 L 723.77344,254.58203 L 721.5,254.58203 M 721.5,264.01953 L 721.5,255.52734 L 723.77344,255.52734 L 723.77344,264.01953 L 721.5,264.01953 M 725.79688,264.01953 L 725.79688,255.52734 L 728.02344,255.52734 L 728.02344,256.53516 C 728.34114,256.12371 728.71614,255.81641 729.14844,255.61328 C 729.58072,255.40496 730.06249,255.30079 730.59375,255.30078 C 731.53124,255.30079 732.23176,255.54558 732.69531,256.03516 C 733.16405,256.51954 733.39843,257.25131 733.39844,258.23047 L 733.39844,264.01953 L 731.125,264.01953 L 731.125,258.88672 C 731.12499,258.27735 731.02083,257.84245 730.8125,257.58203 C 730.60937,257.32162 730.27604,257.19141 729.8125,257.19141 C 729.27604,257.19141 728.85156,257.35287 728.53906,257.67578 C 728.22656,257.9935 728.07031,258.42839 728.07031,258.98047 L 728.07031,264.01953 L 725.79688,264.01953 M 706.64844,284.01953 L 706.64844,272.51172 L 709.01563,272.51172 L 709.01563,277.23828 L 713.50781,272.51172 L 716.46875,272.51172 L 711.875,277.16797 L 716.88281,284.01953 L 713.99219,284.01953 L 710.24219,278.75391 L 709.01563,279.97266 L 709.01563,284.01953 L 706.64844,284.01953 M 722.9375,281.44141 L 725.20313,281.44141 C 724.97395,282.33724 724.51041,283.04037 723.8125,283.55078 C 723.11979,284.05599 722.27343,284.30859 721.27344,284.30859 C 720.04427,284.30859 719.07031,283.89714 718.35156,283.07422 C 717.63281,282.2461 717.27344,281.1263 717.27344,279.71484 C 717.27344,278.32422 717.6276,277.22787 718.33594,276.42578 C 719.04427,275.62371 720.01302,275.22267 721.24219,275.22266 C 722.54427,275.22267 723.54947,275.6185 724.25781,276.41016 C 724.96614,277.19662 725.3203,278.31902 725.32031,279.77734 C 725.3203,279.93881 725.3177,280.0612 725.3125,280.14453 C 725.31249,280.22266 725.30728,280.29818 725.29688,280.37109 L 719.625,280.37109 C 719.65625,281.03776 719.81771,281.54037 720.10938,281.87891 C 720.40625,282.21745 720.83073,282.38672 721.38281,282.38672 C 721.77343,282.38672 722.09374,282.3112 722.34375,282.16016 C 722.59374,282.00391 722.79166,281.76433 722.9375,281.44141 M 719.625,278.87891 L 722.96875,278.87891 C 722.94791,278.306 722.79426,277.8711 722.50781,277.57422 C 722.22656,277.27214 721.82031,277.1211 721.28906,277.12109 C 720.79427,277.1211 720.40364,277.27214 720.11719,277.57422 C 719.83593,277.87631 719.67187,278.3112 719.625,278.87891 M 727.16406,287.42578 L 727.16406,285.58984 C 727.23698,285.60026 727.3125,285.60807 727.39063,285.61328 C 727.46875,285.61849 727.57031,285.62109 727.69531,285.62109 C 728.14323,285.62109 728.47916,285.51432 728.70313,285.30078 C 728.92708,285.09245 729.03906,284.77734 729.03906,284.35547 C 729.03906,284.32422 729.03385,284.28516 729.02344,284.23828 C 729.01302,284.19141 729.0026,284.15234 728.99219,284.12109 L 725.92969,275.52734 L 728.42969,275.52734 L 730.21875,281.65234 L 731.96094,275.52734 L 734.35156,275.52734 L 730.85938,285.54297 C 730.59895,286.29297 730.27343,286.80338 729.88281,287.07422 C 729.49218,287.35026 728.90625,287.48828 728.125,287.48828 C 727.98437,287.48828 727.83333,287.48307 727.67188,287.47266 C 727.51041,287.46224 727.34114,287.44661 727.16406,287.42578"
+       id="text5878" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 759.98438,275.60938 L 759.98438,264.10156 L 763.48438,264.10156 L 765.77344,272.85938 L 768.03125,264.10156 L 771.54688,264.10156 L 771.54688,275.60938 L 769.32813,275.60938 L 769.32813,266.32813 L 766.99219,275.60938 L 764.57031,275.60938 L 762.20313,266.32813 L 762.20313,275.60938 L 759.98438,275.60938 M 778.99219,273.03125 L 781.25781,273.03125 C 781.02864,273.92709 780.5651,274.63021 779.86719,275.14063 C 779.17447,275.64583 778.32812,275.89844 777.32813,275.89844 C 776.09896,275.89844 775.125,275.48698 774.40625,274.66406 C 773.6875,273.83594 773.32812,272.71615 773.32813,271.30469 C 773.32812,269.91407 773.68229,268.81772 774.39063,268.01563 C 775.09896,267.21355 776.06771,266.81251 777.29688,266.8125 C 778.59895,266.81251 779.60416,267.20834 780.3125,268 C 781.02083,268.78647 781.37499,269.90886 781.375,271.36719 C 781.37499,271.52865 781.37239,271.65105 781.36719,271.73438 C 781.36718,271.8125 781.36197,271.88802 781.35156,271.96094 L 775.67969,271.96094 C 775.71093,272.62761 775.87239,273.13021 776.16406,273.46875 C 776.46093,273.80729 776.88541,273.97656 777.4375,273.97656 C 777.82812,273.97656 778.14843,273.90104 778.39844,273.75 C 778.64843,273.59375 778.84635,273.35417 778.99219,273.03125 M 775.67969,270.46875 L 779.02344,270.46875 C 779.0026,269.89584 778.84895,269.46094 778.5625,269.16406 C 778.28124,268.86199 777.87499,268.71094 777.34375,268.71094 C 776.84895,268.71094 776.45833,268.86199 776.17188,269.16406 C 775.89062,269.46615 775.72656,269.90105 775.67969,270.46875 M 782.88281,275.60938 L 782.88281,267.11719 L 785.10938,267.11719 L 785.10938,268.125 C 785.42708,267.71355 785.80208,267.40626 786.23438,267.20313 C 786.66666,266.9948 787.14843,266.89063 787.67969,266.89063 C 788.61718,266.89063 789.3177,267.13543 789.78125,267.625 C 790.24999,268.10938 790.48437,268.84115 790.48438,269.82031 L 790.48438,275.60938 L 788.21094,275.60938 L 788.21094,270.47656 C 788.21093,269.86719 788.10676,269.4323 787.89844,269.17188 C 787.69531,268.91147 787.36197,268.78126 786.89844,268.78125 C 786.36197,268.78126 785.9375,268.94272 785.625,269.26563 C 785.3125,269.58334 785.15625,270.01823 785.15625,270.57031 L 785.15625,275.60938 L 782.88281,275.60938 M 800.01563,267.11719 L 800.01563,275.60938 L 797.78906,275.60938 L 797.78906,274.60156 C 797.46614,275.01302 797.08854,275.32292 796.65625,275.53125 C 796.22916,275.73437 795.74739,275.83594 795.21094,275.83594 C 794.27864,275.83594 793.57812,275.59115 793.10938,275.10156 C 792.64583,274.61198 792.41406,273.88021 792.41406,272.90625 L 792.41406,267.11719 L 794.6875,267.11719 L 794.6875,272.25 C 794.6875,272.85417 794.78906,273.28646 794.99219,273.54688 C 795.19531,273.80209 795.53125,273.92969 796,273.92969 C 796.53124,273.92969 796.95312,273.77084 797.26563,273.45313 C 797.58333,273.13021 797.74218,272.69271 797.74219,272.14063 L 797.74219,267.11719 L 800.01563,267.11719"
+       id="text5884" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 104.41406,17.103516 L 104.41406,10.212891 L 101.74219,10.212891 L 101.74219,8.7949219 L 101.94141,8.7949219 C 102.89453,8.7949367 103.58984,8.6621243 104.02734,8.3964844 C 104.47265,8.1308749 104.73828,7.6894691 104.82422,7.0722656 L 106.59375,7.0722656 L 106.59375,17.103516 L 104.41406,17.103516 M 106.72266,36.369141 L 106.72266,39.826172 L 103.24219,39.826172 L 103.24219,36.369141 L 106.72266,36.369141 M 105.89063,41.173828 L 106.80469,48.978516 L 106.80469,53.630859 L 103.19531,53.630859 L 103.19531,48.978516 L 104.10938,41.173828 L 105.89063,41.173828"
+       id="text5890" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 160.85156,47.103516 C 160.875,46.197273 161.08984,45.431649 161.49609,44.806641 C 161.91015,44.18165 162.63672,43.548838 163.67578,42.908203 C 163.82422,42.822276 164.03125,42.701183 164.29688,42.544922 C 165.74218,41.724621 166.46484,40.931653 166.46484,40.166016 C 166.46484,39.720717 166.32031,39.369155 166.03125,39.111328 C 165.74218,38.85353 165.34375,38.724624 164.83594,38.724609 C 164.27343,38.724624 163.83984,38.88478 163.53516,39.205078 C 163.23047,39.517592 163.07812,39.966811 163.07813,40.552734 L 163.07813,40.646484 L 161.03906,40.646484 C 161.03906,39.498061 161.37891,38.615249 162.05859,37.998047 C 162.73828,37.380876 163.71093,37.072282 164.97656,37.072266 C 166.11718,37.072282 167.02343,37.353532 167.69531,37.916016 C 168.37499,38.470718 168.71484,39.212905 168.71484,40.142578 C 168.71484,40.814466 168.53905,41.39259 168.1875,41.876953 C 167.83593,42.361339 167.14843,42.919933 166.125,43.552734 C 165.89843,43.701182 165.57812,43.896494 165.16406,44.138672 C 164.22656,44.685556 163.69922,45.115243 163.58203,45.427734 L 168.62109,45.427734 L 168.62109,47.103516 L 160.85156,47.103516"
+       id="text5910" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 220.92188,44.033203 L 223.05469,44.033203 C 223.07031,44.603525 223.22265,45.029305 223.51172,45.310547 C 223.80078,45.591805 224.23437,45.73243 224.8125,45.732422 C 225.36718,45.73243 225.79687,45.599617 226.10156,45.333984 C 226.40624,45.068368 226.55859,44.689462 226.55859,44.197266 C 226.55859,43.697276 226.38281,43.322276 226.03125,43.072266 C 225.67968,42.814464 225.15234,42.685558 224.44922,42.685547 L 224.10938,42.685547 L 224.10938,41.291016 L 224.35547,41.291016 C 225.0039,41.291028 225.48046,41.181653 225.78516,40.962891 C 226.09765,40.736341 226.2539,40.392591 226.25391,39.931641 C 226.2539,39.54103 226.12109,39.232436 225.85547,39.005859 C 225.58984,38.771499 225.23437,38.654312 224.78906,38.654297 C 224.29687,38.654312 223.91797,38.787124 223.65234,39.052734 C 223.38672,39.310561 223.2539,39.681655 223.25391,40.166016 L 223.25391,40.236328 L 221.16797,40.236328 C 221.19141,39.212905 221.51953,38.431656 222.15234,37.892578 C 222.79297,37.345719 223.70312,37.072282 224.88281,37.072266 C 225.99218,37.072282 226.86718,37.314469 227.50781,37.798828 C 228.15624,38.283218 228.48046,38.943374 228.48047,39.779297 C 228.48046,40.21681 228.36718,40.603529 228.14063,40.939453 C 227.92187,41.26759 227.59374,41.537121 227.15625,41.748047 C 227.72656,41.974621 228.15624,42.291027 228.44531,42.697266 C 228.74218,43.095714 228.89062,43.564463 228.89063,44.103516 C 228.89062,45.119149 228.52343,45.923836 227.78906,46.517578 C 227.06249,47.103522 226.07031,47.396491 224.8125,47.396484 C 223.57031,47.396491 222.60937,47.107428 221.92969,46.529297 C 221.25781,45.95118 220.92187,45.134774 220.92188,44.080078 L 220.92188,44.033203"
+       id="text5922" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 278.92969,21.685547 C 279.86719,21.037112 280.53125,20.439456 280.92188,19.892578 C 281.32031,19.345707 281.51953,18.75977 281.51953,18.134766 C 281.51953,17.837896 281.47265,17.525397 281.37891,17.197266 C 281.28515,16.861335 281.14843,16.509773 280.96875,16.142578 L 278.90625,16.142578 L 278.90625,14.841797 L 280.17188,14.841797 C 279.82812,14.162119 279.57812,13.556651 279.42188,13.025391 C 279.26562,12.494152 279.1875,11.998059 279.1875,11.537109 C 279.1875,10.146498 279.69531,9.021499 280.71094,8.1621094 C 281.73437,7.3027507 283.08203,6.8730636 284.75391,6.8730469 C 286.5664,6.8730636 287.98827,7.3379069 289.01953,8.2675781 C 290.05077,9.1972801 290.61327,10.517591 290.70703,12.228516 L 287.47266,12.228516 C 287.41015,11.345715 287.15624,10.669935 286.71094,10.201172 C 286.26562,9.7324358 285.65624,9.498061 284.88281,9.4980469 C 284.14843,9.498061 283.58203,9.6894671 283.18359,10.072266 C 282.79296,10.455091 282.59765,11.005872 282.59766,11.724609 C 282.59765,12.138683 282.84375,12.888683 283.33594,13.974609 C 283.50781,14.349619 283.63671,14.638681 283.72266,14.841797 L 287.0625,14.841797 L 287.0625,16.142578 L 284.20313,16.142578 C 284.27343,16.43946 284.32421,16.712898 284.35547,16.962891 C 284.38671,17.212897 284.40234,17.443366 284.40234,17.654297 C 284.40234,18.216802 284.22656,18.779302 283.875,19.341797 C 283.53124,19.896488 282.94531,20.548831 282.11719,21.298828 C 282.625,21.064456 283.08203,20.892581 283.48828,20.783203 C 283.90234,20.666019 284.27734,20.607425 284.61328,20.607422 C 285.01952,20.607425 285.57421,20.701175 286.27734,20.888672 C 286.98046,21.068362 287.48046,21.158206 287.77734,21.158203 C 288.16796,21.158206 288.55077,21.095706 288.92578,20.970703 C 289.30858,20.845706 289.68749,20.6543 290.0625,20.396484 L 291.09375,22.939453 C 290.4453,23.322266 289.82421,23.611328 289.23047,23.806641 C 288.63671,24.009765 288.08202,24.111328 287.56641,24.111328 C 286.97265,24.111328 286.16796,23.955078 285.15234,23.642578 C 284.14453,23.330078 283.41406,23.173829 282.96094,23.173828 C 282.48437,23.173829 282.01953,23.251954 281.56641,23.408203 C 281.12109,23.564453 280.6875,23.798828 280.26563,24.111328 L 278.92969,21.685547 M 284.94141,40.025391 C 284.05859,40.025404 283.29687,40.345716 282.65625,40.986328 C 282.01562,41.626965 281.69531,42.384777 281.69531,43.259766 C 281.69531,44.1504 282.01171,44.912118 282.64453,45.544922 C 283.27734,46.169929 284.04296,46.482429 284.94141,46.482422 C 285.82421,46.482429 286.58202,46.169929 287.21484,45.544922 C 287.85546,44.912118 288.17577,44.1504 288.17578,43.259766 C 288.17577,42.384777 287.85546,41.626965 287.21484,40.986328 C 286.58202,40.345716 285.82421,40.025404 284.94141,40.025391 M 279.65625,36.779297 L 282.05859,39.158203 C 282.48046,38.85353 282.92578,38.626968 283.39453,38.478516 C 283.86328,38.322281 284.37109,38.244156 284.91797,38.244141 C 285.46484,38.244156 285.97655,38.322281 286.45313,38.478516 C 286.93749,38.626968 287.39062,38.85353 287.8125,39.158203 L 290.19141,36.779297 L 291.42188,38.033203 L 289.04297,40.435547 C 289.33983,40.849622 289.56249,41.294934 289.71094,41.771484 C 289.85936,42.240246 289.93358,42.736339 289.93359,43.259766 C 289.93358,43.783213 289.85936,44.279306 289.71094,44.748047 C 289.56249,45.216805 289.33983,45.666024 289.04297,46.095703 L 291.42188,48.498047 L 290.19141,49.716797 L 287.8125,47.337891 C 287.39062,47.650397 286.9414,47.880865 286.46484,48.029297 C 285.98827,48.17774 285.48046,48.251959 284.94141,48.251953 C 284.3789,48.251959 283.85937,48.17774 283.38281,48.029297 C 282.91406,47.880865 282.47265,47.650397 282.05859,47.337891 L 279.65625,49.716797 L 278.4375,48.498047 L 280.80469,46.095703 C 280.50781,45.673836 280.28515,45.23243 280.13672,44.771484 C 279.99609,44.302744 279.92578,43.798838 279.92578,43.259766 C 279.92578,42.736339 279.99609,42.240246 280.13672,41.771484 C 280.28515,41.294934 280.50781,40.849622 280.80469,40.435547 L 278.4375,38.033203 L 279.65625,36.779297"
+       id="text5928" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 352.875,47.701172 C 352.74217,49.662113 351.98436,51.220706 350.60156,52.376953 C 349.22655,53.533203 347.42968,54.111328 345.21094,54.111328 C 342.65624,54.111328 340.66796,53.314453 339.24609,51.720703 C 337.83203,50.126957 337.125,47.892584 337.125,45.017578 C 337.125,42.08009 337.84765,39.830092 339.29297,38.267578 C 340.73828,36.705095 342.8164,35.923846 345.52734,35.923828 C 347.73046,35.923846 349.46874,36.462908 350.74219,37.541016 C 352.02342,38.611343 352.72655,40.126967 352.85156,42.087891 L 349.34766,42.087891 C 349.19921,41.111341 348.80077,40.369154 348.15234,39.861328 C 347.50389,39.345717 346.6289,39.087905 345.52734,39.087891 C 343.96484,39.087905 342.77734,39.591811 341.96484,40.599609 C 341.15234,41.607434 340.74609,43.080089 340.74609,45.017578 C 340.74609,46.892585 341.14843,48.341802 341.95313,49.365234 C 342.76562,50.388675 343.91796,50.900393 345.41016,50.900391 C 346.48827,50.900393 347.37108,50.626956 348.05859,50.080078 C 348.74608,49.525395 349.19139,48.732427 349.39453,47.701172 L 352.875,47.701172"
+       id="text5946" />
+    <path
+       transform="matrix(1.16233,0,-0.444745,0.860341,0,0)"
+       style="font-size:16.72912407px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 307.52845,53.268758 L 317.31434,53.268758 L 317.31434,54.894293 L 307.52845,54.894293 L 307.52845,53.268758 M 307.52845,49.756296 L 317.31434,49.756296 L 317.31434,51.381831 L 307.52845,51.381831 L 307.52845,49.756296"
+       id="text5956" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 411.45117,50.150391 L 411.45117,46.142578 L 408.63867,50.150391 L 411.45117,50.150391 M 411.45117,53.630859 L 411.45117,51.591797 L 406.98633,51.591797 L 406.98633,49.962891 L 410.90039,44.513672 L 413.51367,44.513672 L 413.51367,50.103516 L 414.73242,50.103516 L 414.73242,51.591797 L 413.51367,51.591797 L 413.51367,53.630859 L 411.45117,53.630859 M 398.58398,54.111328 L 408.7793,36.615234 L 410.70117,36.615234 L 400.48242,54.111328 L 398.58398,54.111328 M 397.78711,46.458984 L 397.78711,40.025391 L 395.26758,40.025391 L 395.26758,38.701172 L 395.44336,38.701172 C 396.36523,38.701187 397.0332,38.576187 397.44727,38.326172 C 397.86914,38.076187 398.11914,37.658219 398.19727,37.072266 L 399.88477,37.072266 L 399.88477,46.458984 L 397.78711,46.458984"
+       id="text5960" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 467.0918,53.630859 C 467.11522,52.779298 467.32225,52.064455 467.71289,51.486328 C 468.11131,50.900393 468.80663,50.31055 469.79883,49.716797 C 469.95506,49.630863 470.16991,49.50977 470.44336,49.353516 C 471.7949,48.595708 472.47068,47.861334 472.4707,47.150391 C 472.47068,46.736335 472.33006,46.40821 472.04883,46.166016 C 471.76756,45.923836 471.38475,45.802742 470.90039,45.802734 C 470.36912,45.802742 469.95506,45.95118 469.6582,46.248047 C 469.36913,46.544929 469.22459,46.966804 469.22461,47.513672 L 469.22461,47.607422 L 467.2793,47.607422 C 467.27928,46.529304 467.6035,45.70118 468.25195,45.123047 C 468.90038,44.537118 469.82616,44.24415 471.0293,44.244141 C 472.12303,44.24415 472.99412,44.505868 473.64258,45.029297 C 474.29881,45.552742 474.62693,46.251961 474.62695,47.126953 C 474.62693,47.751959 474.45506,48.294927 474.11133,48.755859 C 473.77537,49.208989 473.11522,49.72852 472.13086,50.314453 C 471.9199,50.439456 471.63084,50.607425 471.26367,50.818359 C 470.34959,51.341799 469.83397,51.744143 469.7168,52.025391 L 474.50977,52.025391 L 474.50977,53.630859 L 467.0918,53.630859 M 458.68945,54.111328 L 468.88477,36.615234 L 470.80664,36.615234 L 460.58789,54.111328 L 458.68945,54.111328 M 457.89258,46.458984 L 457.89258,40.025391 L 455.37305,40.025391 L 455.37305,38.701172 L 455.54883,38.701172 C 456.4707,38.701187 457.13867,38.576187 457.55273,38.326172 C 457.97461,38.076187 458.22461,37.658219 458.30273,37.072266 L 459.99023,37.072266 L 459.99023,46.458984 L 457.89258,46.458984"
+       id="text5967" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 531.83203,50.150391 L 531.83203,46.142578 L 529.01953,50.150391 L 531.83203,50.150391 M 531.83203,53.630859 L 531.83203,51.591797 L 527.36719,51.591797 L 527.36719,49.962891 L 531.28125,44.513672 L 533.89453,44.513672 L 533.89453,50.103516 L 535.11328,50.103516 L 535.11328,51.591797 L 533.89453,51.591797 L 533.89453,53.630859 L 531.83203,53.630859 M 518.96484,54.111328 L 529.16016,36.615234 L 531.08203,36.615234 L 520.86328,54.111328 L 518.96484,54.111328 M 514.88672,43.599609 L 516.89063,43.599609 C 516.91406,44.130869 517.0625,44.529306 517.33594,44.794922 C 517.61718,45.052743 518.03125,45.181649 518.57813,45.181641 C 519.10937,45.181649 519.51953,45.060555 519.80859,44.818359 C 520.09765,44.568368 520.24218,44.208994 520.24219,43.740234 C 520.24218,43.271495 520.07421,42.919933 519.73828,42.685547 C 519.40234,42.443371 518.90625,42.322277 518.25,42.322266 C 518.20312,42.322277 518.14453,42.326183 518.07422,42.333984 C 518.0039,42.341808 517.94922,42.345714 517.91016,42.345703 L 517.91016,41.033203 L 518.14453,41.033203 C 518.76171,41.033216 519.21484,40.931653 519.50391,40.728516 C 519.80078,40.517591 519.94921,40.193373 519.94922,39.755859 C 519.94921,39.388686 519.82421,39.099624 519.57422,38.888672 C 519.32421,38.669937 518.98437,38.560562 518.55469,38.560547 C 518.08593,38.560562 517.72265,38.685562 517.46484,38.935547 C 517.21484,39.177749 517.08984,39.525405 517.08984,39.978516 L 517.08984,40.048828 L 515.08594,40.048828 C 515.10156,39.087905 515.41797,38.353531 516.03516,37.845703 C 516.65234,37.330094 517.52343,37.072282 518.64844,37.072266 C 519.70312,37.072282 520.53906,37.302751 521.15625,37.763672 C 521.77343,38.216812 522.08202,38.833999 522.08203,39.615234 C 522.08202,40.02931 521.97655,40.392591 521.76563,40.705078 C 521.55468,41.009778 521.23827,41.263684 520.81641,41.466797 C 521.36327,41.677746 521.77343,41.970715 522.04688,42.345703 C 522.32812,42.712902 522.46874,43.154307 522.46875,43.669922 C 522.46874,44.607431 522.11718,45.349618 521.41406,45.896484 C 520.71874,46.443367 519.77343,46.716804 518.57813,46.716797 C 517.39062,46.716804 516.47656,46.451179 515.83594,45.919922 C 515.20312,45.380868 514.88672,44.615243 514.88672,43.623047 L 514.88672,43.599609"
+       id="text5973" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 586.63477,39.404297 L 586.63477,42.498047 L 583.36523,42.498047 L 583.36523,39.474609 C 583.36523,38.482437 583.66992,37.654313 584.2793,36.990234 C 584.88867,36.326189 585.67382,35.970721 586.63477,35.923828 L 586.63477,37.119141 C 586.04101,37.259782 585.59961,37.509782 585.31055,37.869141 C 585.02148,38.220719 584.87695,38.681656 584.87695,39.251953 L 584.87695,39.404297 L 586.63477,39.404297"
+       id="text5979" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 643.36523,39.474609 L 643.36523,36.369141 L 646.63477,36.369141 L 646.63477,39.427734 C 646.63476,40.412123 646.33007,41.240247 645.7207,41.912109 C 645.11132,42.576183 644.32617,42.931651 643.36523,42.978516 L 643.36523,41.771484 C 643.95898,41.630871 644.39648,41.384778 644.67773,41.033203 C 644.96679,40.673841 645.11132,40.201185 645.11133,39.615234 L 645.11133,39.474609 L 643.36523,39.474609"
+       id="text5985" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 706.89258,53.630859 L 703.50586,53.630859 L 703.50586,47.560547 L 703.27148,47.150391 L 698.00977,47.150391 L 698.00977,45.826172 L 702.49805,45.826172 L 701.64258,44.337891 L 698.00977,44.337891 L 698.00977,43.025391 L 700.86914,43.025391 L 697.61133,37.330078 L 701.41992,37.330078 L 705.19336,44.724609 L 708.69727,37.330078 L 712.27148,37.330078 L 709.27148,43.025391 L 712.00195,43.025391 L 712.00195,44.337891 L 708.58008,44.337891 L 707.7832,45.826172 L 712.00195,45.826172 L 712.00195,47.150391 L 707.0918,47.150391 L 706.89258,47.560547 L 706.89258,53.630859"
+       id="text5991" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 764.97656,19.306641 C 765.46093,19.306645 765.8789,19.482426 766.23047,19.833984 C 766.58202,20.18555 766.7578,20.603519 766.75781,21.087891 C 766.7578,21.564455 766.58202,21.974611 766.23047,22.318359 C 765.8789,22.66211 765.46093,22.833985 764.97656,22.833984 C 764.48437,22.833985 764.06249,22.666017 763.71094,22.330078 C 763.36718,21.994142 763.1953,21.58008 763.19531,21.087891 C 763.1953,20.595706 763.36718,20.177738 763.71094,19.833984 C 764.06249,19.482426 764.48437,19.306645 764.97656,19.306641 M 757.94531,15.298828 L 771.98438,15.298828 L 771.98438,17.630859 L 757.94531,17.630859 L 757.94531,15.298828 M 764.97656,10.095703 C 765.46093,10.095717 765.8789,10.271498 766.23047,10.623047 C 766.58202,10.96681 766.7578,11.380872 766.75781,11.865234 C 766.7578,12.357433 766.58202,12.779308 766.23047,13.130859 C 765.88671,13.47462 765.46874,13.646494 764.97656,13.646484 C 764.48437,13.646494 764.06249,13.47462 763.71094,13.130859 C 763.36718,12.779308 763.1953,12.357433 763.19531,11.865234 C 763.1953,11.373059 763.36718,10.955091 763.71094,10.611328 C 764.06249,10.267591 764.48437,10.095717 764.97656,10.095703 M 759.84375,39.544922 L 765.11719,44.818359 L 770.40234,39.544922 L 772.05469,41.173828 L 766.78125,46.482422 L 772.05469,51.755859 L 770.40234,53.396484 L 765.11719,48.111328 L 759.84375,53.396484 L 758.20313,51.755859 L 763.48828,46.482422 L 758.20313,41.173828 L 759.84375,39.544922"
+       id="text5997" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 134.9707,69.826172 L 132.58008,77.173828 L 137.37305,77.173828 L 134.9707,69.826172 M 132.9082,66.369141 L 137.00977,66.369141 L 143.23242,83.630859 L 139.50586,83.630859 L 138.33398,80.080078 L 131.64258,80.080078 L 130.50586,83.630859 L 126.76758,83.630859 L 132.9082,66.369141 M 135.70898,64.166016 L 135.70898,61.283203 L 138.35742,61.283203 L 138.35742,64.166016 L 135.70898,64.166016 M 131.63086,64.166016 L 131.63086,61.283203 L 134.2793,61.283203 L 134.2793,64.166016 L 131.63086,64.166016"
+       id="text6003" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 194.9707,62.126953 C 194.5957,62.126975 194.27538,62.267599 194.00977,62.548828 C 193.74413,62.822286 193.61132,63.154317 193.61133,63.544922 C 193.61132,63.927754 193.74023,64.251973 193.99805,64.517578 C 194.26366,64.783222 194.58788,64.916034 194.9707,64.916016 C 195.36132,64.916034 195.69335,64.783222 195.9668,64.517578 C 196.24804,64.24416 196.38866,63.919942 196.38867,63.544922 C 196.38866,63.16213 196.24804,62.830099 195.9668,62.548828 C 195.69335,62.267599 195.36132,62.126975 194.9707,62.126953 M 194.9707,60.521484 C 195.81444,60.521507 196.52929,60.814476 197.11523,61.400391 C 197.70116,61.978537 197.99413,62.685568 197.99414,63.521484 C 197.99413,64.357441 197.70116,65.068378 197.11523,65.654297 C 196.52929,66.232439 195.81444,66.521501 194.9707,66.521484 C 194.13476,66.521501 193.42773,66.232439 192.84961,65.654297 C 192.27929,65.07619 191.99414,64.365254 191.99414,63.521484 C 191.99414,62.677755 192.27929,61.966819 192.84961,61.388672 C 193.42773,60.81057 194.13476,60.521507 194.9707,60.521484 M 192.7207,67.072266 L 197.23242,67.072266 L 203.23242,83.630859 L 199.50586,83.630859 L 198.33398,80.080078 L 191.64258,80.080078 L 190.50586,83.630859 L 186.76758,83.630859 L 192.7207,67.072266 M 194.9707,69.826172 L 192.58008,77.173828 L 197.37305,77.173828 L 194.9707,69.826172"
+       id="text6007" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 248.52539,83.630859 L 248.52539,66.369141 L 261.05273,66.369141 L 261.05273,69.369141 L 252.0293,69.369141 L 252.0293,73.048828 L 260.2793,73.048828 L 260.2793,76.001953 L 252.0293,76.001953 L 252.0293,80.443359 L 261.47461,80.443359 L 261.47461,83.630859 L 248.52539,83.630859 M 258.24023,60.521484 L 254.57227,64.857422 L 252.9082,64.857422 L 255.2168,60.521484 L 258.24023,60.521484"
+       id="text6011" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 313.72266,101.49056 L 313.72266,104.29134 L 314.88281,104.29134 C 315.5703,104.29135 316.07421,104.18198 316.39453,103.96322 C 316.71483,103.74448 316.87499,103.40073 316.875,102.93197 C 316.87499,102.43979 316.70311,102.07651 316.35938,101.84212 C 316.01561,101.60776 315.48436,101.49057 314.76563,101.49056 L 313.72266,101.49056 M 311.37891,100.00228 L 315.16406,100.00228 C 316.53905,100.00229 317.5703,100.23667 318.25781,100.70541 C 318.95311,101.16636 319.30077,101.85776 319.30078,102.77962 C 319.30077,103.42026 319.11327,103.96713 318.73828,104.42025 C 318.36327,104.87338 317.84374,105.18198 317.17969,105.34603 L 319.34766,109.67025 L 316.72266,109.67025 L 314.88281,105.70931 L 313.72266,105.70931 L 313.72266,109.67025 L 311.37891,109.67025 L 311.37891,100.00228 M 315,97.717125 C 314.0078,97.717141 313.08593,97.892922 312.23438,98.244469 C 311.38281,98.588234 310.61718,99.099952 309.9375,99.779625 C 309.22656,100.49058 308.67968,101.29917 308.29688,102.20541 C 307.91406,103.10385 307.72265,104.03354 307.72266,104.99447 C 307.72265,105.96323 307.90234,106.8851 308.26172,107.76009 C 308.62109,108.62729 309.14062,109.40072 309.82031,110.08041 C 310.51562,110.79135 311.30859,111.33822 312.19922,111.72103 C 313.08984,112.09603 314.01562,112.28353 314.97656,112.28353 C 315.91405,112.28353 316.82421,112.09994 317.70703,111.73275 C 318.59764,111.36556 319.40624,110.83822 320.13281,110.15072 C 320.81248,109.49447 321.33983,108.72885 321.71484,107.85384 C 322.08983,106.97885 322.27733,106.0726 322.27734,105.13509 C 322.27733,104.09604 322.10155,103.13901 321.75,102.264 C 321.40623,101.38901 320.89061,100.60386 320.20313,99.908531 C 319.49999,99.181983 318.70702,98.635109 317.82422,98.267906 C 316.94921,97.900734 316.0078,97.717141 315,97.717125 M 314.97656,96.275719 C 316.17968,96.275736 317.31249,96.502298 318.375,96.955406 C 319.4453,97.400735 320.39842,98.049172 321.23438,98.900719 C 322.03905,99.713233 322.65233,100.64292 323.07422,101.68978 C 323.49608,102.73667 323.70701,103.84604 323.70703,105.01791 C 323.70701,106.20541 323.48826,107.33041 323.05078,108.39291 C 322.61326,109.4476 321.97655,110.37728 321.14063,111.18197 C 320.30467,112.00228 319.35155,112.63119 318.28125,113.06869 C 317.21874,113.50619 316.11718,113.72494 314.97656,113.72494 C 313.81249,113.72494 312.69921,113.49838 311.63672,113.04525 C 310.57421,112.59213 309.625,111.93978 308.78906,111.08822 C 307.97656,110.26791 307.35547,109.33822 306.92578,108.29916 C 306.5039,107.25229 306.29297,106.15854 306.29297,105.01791 C 306.29297,104.22104 306.39844,103.4476 306.60938,102.69759 C 306.82031,101.93979 307.13672,101.20151 307.55859,100.48275 C 308.34765,99.154639 309.39062,98.12339 310.6875,97.389 C 311.98437,96.646829 313.41405,96.275736 314.97656,96.275719"
+       id="text6015" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 372.0293,69.064453 L 376.06055,69.064453 C 377.84179,69.064468 379.18944,69.505874 380.10352,70.388672 C 381.01756,71.263684 381.47459,72.556652 381.47461,74.267578 C 381.47459,75.939461 381.02538,77.228522 380.12695,78.134766 C 379.23632,79.033208 377.95897,79.482426 376.29492,79.482422 L 372.0293,79.482422 L 372.0293,83.630859 L 368.52539,83.630859 L 368.52539,66.369141 L 372.0293,66.369141 L 372.0293,69.064453 M 372.05273,76.599609 L 375.47461,76.599609 C 376.4121,76.599616 377.09179,76.416023 377.51367,76.048828 C 377.93554,75.673836 378.14647,75.080087 378.14648,74.267578 C 378.14647,73.509776 377.93554,72.939464 377.51367,72.556641 C 377.09179,72.166027 376.47069,71.970715 375.65039,71.970703 L 372.05273,71.970703 L 372.05273,76.599609"
+       id="text6019" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 428.08594,66.322266 L 431.67188,66.322266 L 431.67188,77.150391 C 431.67187,78.486333 431.93749,79.462895 432.46875,80.080078 C 432.99999,80.689456 433.84374,80.994143 435,80.994141 C 436.17187,80.994143 437.02343,80.689456 437.55469,80.080078 C 438.09374,79.470707 438.36327,78.494146 438.36328,77.150391 L 438.36328,66.322266 L 441.91406,66.322266 L 441.91406,77.537109 C 441.91405,79.654301 441.3203,81.279299 440.13281,82.412109 C 438.95311,83.544922 437.24999,84.111328 435.02344,84.111328 C 432.78124,84.111328 431.0625,83.548828 429.86719,82.423828 C 428.67969,81.291018 428.08594,79.662113 428.08594,77.537109 L 428.08594,66.322266 M 435.73828,64.166016 L 435.73828,61.283203 L 438.38672,61.283203 L 438.38672,64.166016 L 435.73828,64.166016 M 431.66016,64.166016 L 431.66016,61.283203 L 434.30859,61.283203 L 434.30859,64.166016 L 431.66016,64.166016"
+       id="text6023" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 488.08594,66.105469 L 491.67188,66.105469 L 491.67188,76.933594 C 491.67187,78.269536 491.93749,79.246098 492.46875,79.863281 C 492.99999,80.472659 493.84374,80.777346 495,80.777344 C 496.17187,80.777346 497.02343,80.472659 497.55469,79.863281 C 498.09374,79.25391 498.36327,78.277349 498.36328,76.933594 L 498.36328,66.105469 L 501.91406,66.105469 L 501.91406,77.320313 C 501.91405,79.437504 501.3203,81.062502 500.13281,82.195313 C 498.95311,83.328125 497.24999,83.894531 495.02344,83.894531 C 492.78124,83.894531 491.0625,83.332031 489.86719,82.207031 C 488.67969,81.074221 488.08594,79.445316 488.08594,77.320313 L 488.08594,66.105469 M 498.45703,60.304688 L 494.78906,64.640625 L 493.125,64.640625 L 495.43359,60.304688 L 498.45703,60.304688"
+       id="text6029" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 552.43945,83.630859 L 552.43945,66.369141 L 555.99023,66.369141 L 555.99023,83.630859 L 552.43945,83.630859 M 557.66602,60.521484 L 553.99805,64.857422 L 552.33398,64.857422 L 554.64258,60.521484 L 557.66602,60.521484"
+       id="text6033" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 610.18359,75 C 610.18359,76.898444 610.60546,78.375005 611.44922,79.429688 C 612.29296,80.476566 613.47265,81.000003 614.98828,81 C 616.51952,81.000003 617.71093,80.476566 618.5625,79.429688 C 619.41405,78.375005 619.83983,76.898444 619.83984,75 C 619.83983,73.101573 619.41405,71.628918 618.5625,70.582031 C 617.71093,69.527358 616.51952,69.000015 614.98828,69 C 613.47265,69.000015 612.29296,69.523452 611.44922,70.570313 C 610.60546,71.617199 610.18359,73.093761 610.18359,75 M 606.5625,75 C 606.5625,72.210949 607.32031,70.000014 608.83594,68.367188 C 610.35937,66.726579 612.41015,65.906268 614.98828,65.90625 C 617.56639,65.906268 619.61717,66.726579 621.14063,68.367188 C 622.67186,70.007826 623.43748,72.218761 623.4375,75 C 623.43748,77.781256 622.67186,79.992191 621.14063,81.632813 C 619.61717,83.273438 617.56639,84.09375 614.98828,84.09375 C 612.41015,84.09375 610.35937,83.273438 608.83594,81.632813 C 607.32031,79.992191 606.5625,77.781256 606.5625,75 M 618.44531,60.503906 L 614.77734,64.839844 L 613.11328,64.839844 L 615.42188,60.503906 L 618.44531,60.503906"
+       id="text6037" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 670.18359,75.017578 C 670.18359,76.916022 670.60546,78.392583 671.44922,79.447266 C 672.29296,80.494144 673.47265,81.017581 674.98828,81.017578 C 676.51952,81.017581 677.71093,80.494144 678.5625,79.447266 C 679.41405,78.392583 679.83983,76.916022 679.83984,75.017578 C 679.83983,73.119151 679.41405,71.646496 678.5625,70.599609 C 677.71093,69.544936 676.51952,69.017593 674.98828,69.017578 C 673.47265,69.017593 672.29296,69.54103 671.44922,70.587891 C 670.60546,71.634778 670.18359,73.111339 670.18359,75.017578 M 666.5625,75.017578 C 666.5625,72.228527 667.32031,70.017592 668.83594,68.384766 C 670.35937,66.744158 672.41015,65.923846 674.98828,65.923828 C 677.56639,65.923846 679.61717,66.744158 681.14063,68.384766 C 682.67186,70.025404 683.43748,72.23634 683.4375,75.017578 C 683.43748,77.798834 682.67186,80.009769 681.14063,81.650391 C 679.61717,83.291016 677.56639,84.111328 674.98828,84.111328 C 672.41015,84.111328 670.35937,83.291016 668.83594,81.650391 C 667.32031,80.009769 666.5625,77.798834 666.5625,75.017578 M 675.72656,64.166016 L 675.72656,61.283203 L 678.375,61.283203 L 678.375,64.166016 L 675.72656,64.166016 M 671.64844,64.166016 L 671.64844,61.283203 L 674.29688,61.283203 L 674.29688,64.166016 L 671.64844,64.166016"
+       id="text6041" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 735.5332,106.35352 L 735.5332,103.35352 L 739.44727,99.966797 L 739.44727,102.75586 L 737.04492,104.8418 L 739.44727,106.92773 L 739.44727,109.74023 L 735.5332,106.35352 M 730.4707,106.35352 L 730.4707,103.35352 L 734.4082,99.966797 L 734.4082,102.75586 L 732.00586,104.8418 L 734.4082,106.92773 L 734.4082,109.74023 L 730.4707,106.35352"
+       id="text6045" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 799.44727,103.3418 L 799.44727,106.3418 L 795.5332,109.72852 L 795.5332,106.93945 L 797.93555,104.83008 L 795.5332,102.76758 L 795.5332,99.955078 L 799.44727,103.3418 M 794.4082,103.3418 L 794.4082,106.3418 L 790.4707,109.72852 L 790.4707,106.93945 L 792.86133,104.83008 L 790.4707,102.76758 L 790.4707,99.955078 L 794.4082,103.3418"
+       id="text6051" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 883.81641,76.535881 L 886.23047,76.535881 L 886.23047,85.418694 L 883.81641,85.418694 L 883.81641,76.535881 M 883.81641,64.535881 L 886.23047,64.535881 L 886.23047,73.418694 L 883.81641,73.418694 L 883.81641,64.535881 M 877.98047,101.19213 L 892.01953,101.19213 L 892.01953,107.07494 L 889.6875,107.07494 L 889.6875,103.48901 L 877.98047,103.48901 L 877.98047,101.19213"
+       id="text6057" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 149.9707,129.82617 L 147.58008,137.17383 L 152.37305,137.17383 L 149.9707,129.82617 M 147.9082,126.36914 L 152.00977,126.36914 L 158.23242,143.63086 L 154.50586,143.63086 L 153.33398,140.08008 L 146.64258,140.08008 L 145.50586,143.63086 L 141.76758,143.63086 L 147.9082,126.36914 M 153.42773,120.52148 L 149.75977,124.85742 L 148.0957,124.85742 L 150.4043,120.52148 L 153.42773,120.52148"
+       id="text6065" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 211.40625,137.91797 C 211.71874,137.73829 211.95312,137.53907 212.10938,137.32031 C 212.26562,137.10157 212.34374,136.86719 212.34375,136.61719 C 212.34374,136.31251 212.2539,136.0547 212.07422,135.84375 C 211.89452,135.62501 211.52343,135.3711 210.96094,135.08203 L 207.85547,133.47656 C 207.55078,133.65626 207.3164,133.85938 207.15234,134.08594 C 206.99609,134.31251 206.91797,134.5547 206.91797,134.8125 C 206.91797,135.1172 207.03125,135.38673 207.25781,135.62109 C 207.49218,135.84766 208.0039,136.16407 208.79297,136.57031 L 211.40625,137.91797 M 205.03125,141.75 L 207.92578,141.75 C 207.98828,142.35938 208.16796,142.8125 208.46484,143.10938 C 208.76953,143.40625 209.19921,143.55469 209.75391,143.55469 C 210.26952,143.55469 210.67968,143.43359 210.98438,143.19141 C 211.28905,142.94141 211.4414,142.60547 211.44141,142.18359 C 211.4414,141.83985 211.32812,141.54297 211.10156,141.29297 C 210.87499,141.03516 210.42577,140.74219 209.75391,140.41406 L 206.95313,138.99609 C 206.0625,138.55079 205.39844,138.03907 204.96094,137.46094 C 204.52344,136.88282 204.30469,136.23438 204.30469,135.51563 C 204.30469,134.82032 204.47266,134.21095 204.80859,133.6875 C 205.15234,133.15626 205.65625,132.71485 206.32031,132.36328 C 205.92969,132.01173 205.64062,131.62892 205.45313,131.21484 C 205.26562,130.79298 205.17187,130.32814 205.17188,129.82031 C 205.17187,128.64845 205.57422,127.70705 206.37891,126.99609 C 207.18359,126.27736 208.2539,125.91799 209.58984,125.91797 C 210.96484,125.91799 212.04296,126.26955 212.82422,126.97266 C 213.60546,127.6758 214.0078,128.64845 214.03125,129.89063 L 211.26563,129.89063 C 211.24999,129.3672 211.09374,128.96876 210.79688,128.69531 C 210.50781,128.42189 210.08984,128.28517 209.54297,128.28516 C 209.05859,128.28517 208.68359,128.39064 208.41797,128.60156 C 208.16015,128.81251 208.03125,129.10939 208.03125,129.49219 C 208.03125,129.8047 208.18359,130.09767 208.48828,130.37109 C 208.80078,130.63673 209.35937,130.95704 210.16406,131.33203 L 212.13281,132.24609 C 213.1328,132.72267 213.87108,133.25392 214.34766,133.83984 C 214.82421,134.41798 215.06249,135.08595 215.0625,135.84375 C 215.06249,136.55469 214.8828,137.17579 214.52344,137.70703 C 214.17186,138.23047 213.66405,138.63672 213,138.92578 C 213.45312,139.32422 213.79296,139.76563 214.01953,140.25 C 214.24608,140.73438 214.35936,141.26563 214.35938,141.84375 C 214.35936,143.04688 213.92968,144.03906 213.07031,144.82031 C 212.21093,145.60937 211.10546,146.0039 209.75391,146.00391 C 208.26953,146.0039 207.1289,145.64453 206.33203,144.92578 C 205.53515,144.20703 205.10156,143.14844 205.03125,141.75 M 203.97656,173.625 L 203.97656,160.59375 C 203.97656,159.29689 204.48047,158.25002 205.48828,157.45313 C 206.49609,156.64845 207.83984,156.24611 209.51953,156.24609 C 211.23046,156.24611 212.5703,156.63674 213.53906,157.41797 C 214.5078,158.19923 214.99217,159.27345 214.99219,160.64063 C 214.99217,161.48439 214.84764,162.17579 214.55859,162.71484 C 214.27733,163.25392 213.83983,163.66798 213.24609,163.95703 C 214.16796,164.32423 214.85936,164.86329 215.32031,165.57422 C 215.78905,166.28516 216.02342,167.16016 216.02344,168.19922 C 216.02342,169.94922 215.51952,171.36328 214.51172,172.44141 C 213.5039,173.51953 212.18358,174.05859 210.55078,174.05859 C 210.32421,174.05859 210.0703,174.04687 209.78906,174.02344 C 209.51562,174 209.21874,173.96484 208.89844,173.91797 L 208.89844,171.17578 C 208.99999,171.19141 209.10156,171.20313 209.20313,171.21094 C 209.31249,171.21875 209.47265,171.22266 209.68359,171.22266 C 210.60546,171.22266 211.3164,170.96875 211.81641,170.46094 C 212.3164,169.94532 212.5664,169.21485 212.56641,168.26953 C 212.5664,167.35548 212.29296,166.66016 211.74609,166.18359 C 211.20702,165.70704 210.41796,165.46876 209.37891,165.46875 L 209.0625,165.46875 L 209.07422,163.06641 C 209.12109,163.07423 209.17187,163.08204 209.22656,163.08984 C 209.28124,163.08985 209.36327,163.08985 209.47266,163.08984 C 210.16796,163.08985 210.6953,162.91798 211.05469,162.57422 C 211.42187,162.22267 211.60546,161.71486 211.60547,161.05078 C 211.60546,160.38673 211.41405,159.88283 211.03125,159.53906 C 210.65624,159.18751 210.10546,159.01173 209.37891,159.01172 C 208.70703,159.01173 208.19531,159.20705 207.84375,159.59766 C 207.49218,159.98048 207.3164,160.54298 207.31641,161.28516 L 207.31641,173.625 L 203.97656,173.625"
+       id="text6073" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 267.09961,140.51367 L 269.94727,140.51367 C 271.60351,140.51367 272.80272,140.08008 273.54492,139.21289 C 274.2871,138.34571 274.65819,136.94727 274.6582,135.01758 C 274.65819,133.09571 274.31053,131.68165 273.61523,130.77539 C 272.92772,129.86134 271.8496,129.40431 270.38086,129.4043 L 267.09961,129.4043 L 267.09961,133.23633 L 270.88477,133.23633 L 270.88477,135.47461 L 267.09961,135.47461 L 267.09961,140.51367 M 263.61914,143.63086 L 263.61914,135.47461 L 261.74414,135.47461 L 261.74414,133.23633 L 263.61914,133.23633 L 263.61914,126.36914 L 270.4043,126.36914 C 273.04491,126.36916 275.01366,127.084 276.31055,128.51367 C 277.60741,129.93556 278.25584,132.10353 278.25586,135.01758 C 278.25584,136.60352 278.01756,137.99805 277.54102,139.20117 C 277.07225,140.4043 276.38084,141.36914 275.4668,142.0957 C 274.77928,142.64258 273.99413,143.03711 273.11133,143.2793 C 272.23632,143.51367 271.00585,143.63086 269.41992,143.63086 L 263.61914,143.63086"
+       id="text6077" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 626.72461,139.55273 C 627.17773,140.04493 627.68945,140.41211 628.25977,140.6543 C 628.83007,140.89649 629.47069,141.01758 630.18164,141.01758 C 631.71288,141.01758 632.90428,140.49414 633.75586,139.44727 C 634.60741,138.39258 635.03319,136.91602 635.0332,135.01758 C 635.03319,134.24415 634.96288,133.54493 634.82227,132.91992 C 634.68163,132.28712 634.4785,131.73634 634.21289,131.26758 L 626.72461,139.55273 M 625.98633,138.36914 L 633.39258,130.21289 C 632.9785,129.81447 632.50585,129.51759 631.97461,129.32227 C 631.44335,129.11916 630.84569,129.01759 630.18164,129.01758 C 628.66601,129.01759 627.48632,129.54103 626.64258,130.58789 C 625.79882,131.63478 625.37695,133.11134 625.37695,135.01758 C 625.37695,135.72071 625.42382,136.34571 625.51758,136.89258 C 625.61914,137.43946 625.77539,137.93165 625.98633,138.36914 M 621.36914,143.36133 L 623.51367,140.9707 C 622.91992,140.16602 622.47851,139.27149 622.18945,138.28711 C 621.90039,137.29493 621.75586,136.20509 621.75586,135.01758 C 621.75586,132.22853 622.51367,130.01759 624.0293,128.38477 C 625.55273,126.74416 627.60351,125.92385 630.18164,125.92383 C 631.28319,125.92385 632.27147,126.06447 633.14648,126.3457 C 634.02928,126.62697 634.84178,127.06056 635.58398,127.64648 L 637.30664,125.70117 L 638.45508,126.73242 L 636.63867,128.70117 C 637.30272,129.5215 637.79881,130.45509 638.12695,131.50195 C 638.46287,132.54884 638.63084,133.72071 638.63086,135.01758 C 638.63084,137.79883 637.86912,140.00977 636.3457,141.65039 C 634.82225,143.29102 632.76757,144.11133 630.18164,144.11133 C 629.01757,144.11133 627.96679,143.94727 627.0293,143.61914 C 626.0996,143.29102 625.26367,142.79102 624.52148,142.11914 L 622.50586,144.4043 L 621.36914,143.36133"
+       id="text6081" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 690,127.98633 C 689.42968,127.98634 688.9414,128.18556 688.53516,128.58398 C 688.13672,128.98244 687.9375,129.4629 687.9375,130.02539 C 687.9375,130.60353 688.13672,131.09181 688.53516,131.49023 C 688.93359,131.88868 689.42187,132.0879 690,132.08789 C 690.5625,132.0879 691.04296,131.88478 691.44141,131.47852 C 691.83984,131.07228 692.03906,130.5879 692.03906,130.02539 C 692.03906,129.4629 691.83984,128.98244 691.44141,128.58398 C 691.04296,128.18556 690.5625,127.98634 690,127.98633 M 690,126.47461 C 690.98437,126.47463 691.82031,126.82619 692.50781,127.5293 C 693.20312,128.22462 693.55077,129.06447 693.55078,130.04883 C 693.55077,131.0254 693.20312,131.86134 692.50781,132.55664 C 691.81249,133.25196 690.96875,133.59962 689.97656,133.59961 C 688.99218,133.59962 688.15625,133.25587 687.46875,132.56836 C 686.78906,131.88087 686.44922,131.04103 686.44922,130.04883 C 686.44922,129.05666 686.79297,128.21291 687.48047,127.51758 C 688.17578,126.82228 689.01562,126.47463 690,126.47461 M 695.51953,156.29883 L 695.51953,157.59961 L 694.19531,157.59961 L 694.19531,173.63086 L 692.42578,173.63086 L 692.42578,157.59961 L 690.57422,157.59961 L 690.57422,173.63086 L 688.78125,173.63086 L 688.78125,164.44336 C 687.47656,164.39649 686.43359,164.00196 685.65234,163.25977 C 684.87109,162.51759 684.48047,161.56056 684.48047,160.38867 C 684.48047,159.15431 684.89844,158.16603 685.73438,157.42383 C 686.57031,156.67385 687.67968,156.29885 689.0625,156.29883 L 695.51953,156.29883"
+       id="text6085" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 373.13672,6.5214844 L 376.08984,6.5214844 L 381.72656,13.095703 L 378.97266,13.095703 L 374.625,8.7480469 L 370.25391,13.095703 L 367.5,13.095703 L 373.13672,6.5214844"
+       id="text6091" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 750.67969,128.67773 L 750.67969,125.79492 L 753.32813,125.79492 L 753.32813,128.67773 L 750.67969,128.67773 M 746.60156,128.67773 L 746.60156,125.79492 L 749.25,125.79492 L 749.25,128.67773 L 746.60156,128.67773 M 753.39844,155.0332 L 749.73047,159.36914 L 748.06641,159.36914 L 750.375,155.0332 L 753.39844,155.0332"
+       id="text6099" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 171.07031,197.29102 L 175.92188,197.29102 L 175.92188,189.29883 L 173.97656,189.29883 L 171.07031,197.29102 M 165,203.63086 L 171.80859,186.36914 L 187.81641,186.36914 L 187.81641,189.36914 L 179.34375,189.36914 L 179.34375,193.04883 L 187.05469,193.04883 L 187.05469,196.00195 L 179.34375,196.00195 L 179.34375,200.44336 L 188.25,200.44336 L 188.25,203.63086 L 175.92188,203.63086 L 175.92188,200.08008 L 170.0625,200.08008 L 168.76172,203.63086 L 165,203.63086"
+       id="text6105" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 300.46875,193.23633 C 300.32031,193.22071 300.20312,193.20899 300.11719,193.20117 C 300.03906,193.19337 299.96484,193.18946 299.89453,193.18945 C 299.05859,193.18946 298.42578,193.53321 297.99609,194.2207 C 297.5664,194.90821 297.35156,195.92384 297.35156,197.26758 C 297.35156,198.04102 297.4375,198.70899 297.60938,199.27148 C 297.78906,199.83399 298.04687,200.28711 298.38281,200.63086 L 300.46875,193.23633 M 296.68359,206.49023 L 297.48047,203.63086 C 296.30859,203.13867 295.42187,202.35352 294.82031,201.27539 C 294.21875,200.19727 293.91797,198.85352 293.91797,197.24414 C 293.91797,195.11134 294.45312,193.43946 295.52344,192.22852 C 296.60156,191.01759 298.07421,190.41212 299.94141,190.41211 C 300.15234,190.41212 300.35937,190.41994 300.5625,190.43555 C 300.76562,190.45119 300.96874,190.47462 301.17188,190.50586 L 301.69922,188.56055 L 302.97656,188.56055 L 302.34375,190.78711 C 303.32811,191.09181 304.09765,191.63478 304.65234,192.41602 C 305.20702,193.18946 305.52733,194.17774 305.61328,195.38086 L 302.32031,195.36914 C 302.28124,194.98634 302.1914,194.65821 302.05078,194.38477 C 301.91796,194.10353 301.72265,193.85743 301.46484,193.64648 L 299.36719,201.13477 C 299.38281,201.13477 299.40624,201.13867 299.4375,201.14648 C 299.67187,201.16992 299.85156,201.18164 299.97656,201.18164 C 300.66406,201.18164 301.19921,200.99024 301.58203,200.60742 C 301.97265,200.22461 302.23437,199.62305 302.36719,198.80273 L 305.66016,198.80273 C 305.54296,200.41993 304.96874,201.70117 303.9375,202.64648 C 302.91405,203.5918 301.59374,204.06445 299.97656,204.06445 C 299.76562,204.06445 299.55077,204.05664 299.33203,204.04102 C 299.11328,204.02539 298.88671,204.00195 298.65234,203.9707 L 297.96094,206.49023 L 296.68359,206.49023 M 304.19531,223.0957 L 301.99219,223.0957 C 301.92968,222.54884 301.72264,222.12696 301.37109,221.83008 C 301.01952,221.5254 300.55468,221.37306 299.97656,221.37305 C 299.26562,221.37306 298.70702,221.69337 298.30078,222.33398 C 297.89452,222.96681 297.6914,223.85353 297.69141,224.99414 C 297.6914,226.14259 297.89452,227.01758 298.30078,227.61914 C 298.70702,228.22071 299.29687,228.52149 300.07031,228.52148 C 300.64061,228.52149 301.09765,228.35743 301.44141,228.0293 C 301.78514,227.70118 301.99218,227.23633 302.0625,226.63477 L 304.32422,226.62305 C 304.2617,227.70899 303.83592,228.58008 303.04688,229.23633 C 302.2578,229.89258 301.24218,230.22071 300,230.2207 C 298.54687,230.22071 297.39843,229.75977 296.55469,228.83789 C 295.71874,227.91602 295.30078,226.65821 295.30078,225.06445 C 295.30078,223.45509 295.72656,222.17384 296.57813,221.2207 C 297.43749,220.25978 298.58593,219.77931 300.02344,219.7793 C 301.21093,219.77931 302.18749,220.084 302.95313,220.69336 C 303.72655,221.30275 304.14061,222.10353 304.19531,223.0957 M 300,217.7168 C 298.99999,217.71681 298.06249,217.8965 297.1875,218.25586 C 296.32031,218.61525 295.54687,219.13869 294.86719,219.82617 C 294.17187,220.52931 293.64062,221.32618 293.27344,222.2168 C 292.90625,223.09962 292.72265,224.0254 292.72266,224.99414 C 292.72265,225.97071 292.90625,226.89649 293.27344,227.77148 C 293.64062,228.64649 294.17187,229.43164 294.86719,230.12695 C 295.55468,230.81446 296.33984,231.3418 297.22266,231.70898 C 298.10546,232.07617 299.03124,232.25977 300,232.25977 C 300.96874,232.25977 301.89452,232.07617 302.77734,231.70898 C 303.66796,231.3418 304.46874,230.80664 305.17969,230.10352 C 305.86717,229.43164 306.3867,228.66211 306.73828,227.79492 C 307.09764,226.92774 307.27733,225.99415 307.27734,224.99414 C 307.27733,224.00978 307.09373,223.08009 306.72656,222.20508 C 306.36717,221.32228 305.84373,220.53712 305.15625,219.84961 C 304.46092,219.15431 303.67577,218.62697 302.80078,218.26758 C 301.92577,217.90041 300.99218,217.71681 300,217.7168 M 299.97656,216.27539 C 301.16405,216.27541 302.28514,216.49416 303.33984,216.93164 C 304.40233,217.36916 305.35155,218.00587 306.1875,218.8418 C 307.0078,219.66212 307.63279,220.60353 308.0625,221.66602 C 308.49217,222.72071 308.70701,223.8379 308.70703,225.01758 C 308.70701,226.20509 308.49217,227.31446 308.0625,228.3457 C 307.64061,229.37696 307.01561,230.29883 306.1875,231.11133 C 305.3203,231.95508 304.35155,232.60352 303.28125,233.05664 C 302.21093,233.50195 301.10936,233.72461 299.97656,233.72461 C 298.82812,233.72461 297.73046,233.50586 296.68359,233.06836 C 295.64453,232.62305 294.70312,231.97852 293.85938,231.13477 C 293.02343,230.30664 292.38672,229.36914 291.94922,228.32227 C 291.51172,227.26758 291.29297,226.16602 291.29297,225.01758 C 291.29297,223.85353 291.51172,222.74415 291.94922,221.68945 C 292.38672,220.62697 293.02343,219.66994 293.85938,218.81836 C 294.67968,217.99025 295.60937,217.36134 296.64844,216.93164 C 297.68749,216.49416 298.79687,216.27541 299.97656,216.27539"
+       id="text6109" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 472.88672,203.63086 L 472.88672,186.36914 L 476.60156,186.36914 L 483.60938,198.22852 L 483.60938,186.36914 L 487.11328,186.36914 L 487.11328,203.63086 L 483.44531,203.63086 L 476.39063,191.77148 L 476.39063,203.63086 L 472.88672,203.63086 M 483.82031,181.0957 C 483.61717,182.07229 483.31639,182.79494 482.91797,183.26367 C 482.51952,183.72463 482.0078,183.9551 481.38281,183.95508 C 481.21874,183.9551 481.0664,183.94729 480.92578,183.93164 C 480.78515,183.90822 480.64452,183.87307 480.50391,183.82617 L 479.48438,183.52148 C 479.33593,183.48244 479.19921,183.4551 479.07422,183.43945 C 478.94921,183.41604 478.82812,183.40432 478.71094,183.4043 C 478.44531,183.40432 478.23046,183.47463 478.06641,183.61523 C 477.90234,183.75588 477.77343,183.98635 477.67969,184.30664 L 476.39063,184.30664 C 476.57812,183.36135 476.86718,182.66604 477.25781,182.2207 C 477.64843,181.77541 478.15624,181.55276 478.78125,181.55273 C 478.9453,181.55276 479.10937,181.56838 479.27344,181.59961 C 479.43749,181.62307 479.60937,181.66213 479.78906,181.7168 L 480.87891,182.00977 C 480.97265,182.04104 481.0703,182.06447 481.17188,182.08008 C 481.28124,182.09572 481.39843,182.10354 481.52344,182.10352 C 481.77343,182.10354 481.98046,182.02151 482.14453,181.85742 C 482.3164,181.68557 482.4453,181.43166 482.53125,181.0957 L 483.82031,181.0957"
+       id="text6113" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 535.83398,220.83432 L 539.2207,220.83432 L 538.33008,225.93198 C 538.21289,226.55698 538.12304,227.15073 538.06055,227.71323 C 537.99804,228.26792 537.96679,228.72104 537.9668,229.0726 C 537.96679,229.79917 538.13085,230.34214 538.45898,230.70151 C 538.7871,231.05307 539.2871,231.22885 539.95898,231.22885 C 540.74023,231.22885 541.3457,230.90854 541.77539,230.26791 C 542.21288,229.62729 542.57616,228.49058 542.86523,226.85776 L 543.91992,220.83432 L 547.30664,220.83432 L 545.04492,233.6312 L 541.9043,233.6312 L 542.11523,232.2601 C 541.7871,232.86948 541.41991,233.31479 541.01367,233.59604 C 540.61523,233.87729 540.14257,234.01791 539.5957,234.01791 C 539.07226,234.01791 538.60742,233.90073 538.20117,233.66635 C 537.79492,233.43979 537.42773,233.08432 537.09961,232.59995 L 536.04492,238.76401 L 532.69336,238.76401 L 535.83398,220.83432"
+       id="text6117" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 607.875,197.70117 C 607.74217,199.66211 606.98436,201.22071 605.60156,202.37695 C 604.22655,203.5332 602.42968,204.11133 600.21094,204.11133 C 597.65624,204.11133 595.66796,203.31445 594.24609,201.7207 C 592.83203,200.12696 592.125,197.89258 592.125,195.01758 C 592.125,192.08009 592.84765,189.83009 594.29297,188.26758 C 595.73828,186.7051 597.8164,185.92385 600.52734,185.92383 C 602.73046,185.92385 604.46874,186.46291 605.74219,187.54102 C 607.02342,188.61134 607.72655,190.12697 607.85156,192.08789 L 604.34766,192.08789 C 604.19921,191.11134 603.80077,190.36915 603.15234,189.86133 C 602.50389,189.34572 601.6289,189.08791 600.52734,189.08789 C 598.96484,189.08791 597.77734,189.59181 596.96484,190.59961 C 596.15234,191.60743 595.74609,193.08009 595.74609,195.01758 C 595.74609,196.89258 596.14843,198.3418 596.95313,199.36523 C 597.76562,200.38868 598.91796,200.90039 600.41016,200.90039 C 601.48827,200.90039 602.37108,200.62696 603.05859,200.08008 C 603.74608,199.52539 604.19139,198.73243 604.39453,197.70117 L 607.875,197.70117 M 597.62109,208.76367 L 597.62109,207.25195 C 598.24609,207.41601 598.81249,207.54101 599.32031,207.62695 C 599.82812,207.71289 600.26171,207.75586 600.62109,207.75586 C 601.02733,207.75586 601.32421,207.68554 601.51172,207.54492 C 601.69921,207.41211 601.79296,207.19726 601.79297,206.90039 C 601.79296,206.60351 601.68358,206.39258 601.46484,206.26758 C 601.24608,206.14258 600.8828,206.08008 600.375,206.08008 C 600.1953,206.08008 600.05858,206.08008 599.96484,206.08008 C 599.87108,206.08789 599.78515,206.0957 599.70703,206.10352 L 599.70703,203.63086 L 600.90234,203.63086 L 600.90234,204.68555 L 601.07813,204.68555 C 601.99218,204.68555 602.67968,204.87305 603.14063,205.24805 C 603.60155,205.62304 603.83202,206.18164 603.83203,206.92383 C 603.83202,207.70507 603.57421,208.29101 603.05859,208.68164 C 602.54296,209.07226 601.76952,209.26757 600.73828,209.26758 C 600.33983,209.26757 599.87108,209.2246 599.33203,209.13867 C 598.80077,209.05273 598.23046,208.92773 597.62109,208.76367"
+       id="text6121" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 721.7168,216.36914 L 721.7168,219.82617 L 718.23633,219.82617 L 718.23633,216.36914 L 721.7168,216.36914 M 721.55273,221.39648 C 721.55273,221.47462 721.55663,221.5879 721.56445,221.73633 C 721.57226,221.88478 721.57616,221.99415 721.57617,222.06445 C 721.57616,222.74415 721.50194,223.31446 721.35352,223.77539 C 721.20507,224.23634 720.96679,224.66602 720.63867,225.06445 C 720.38085,225.36134 720.00195,225.70118 719.50195,226.08398 C 719.00976,226.4668 718.69335,226.74415 718.55273,226.91602 C 718.24804,227.25977 718.0332,227.57618 717.9082,227.86523 C 717.79101,228.1543 717.73242,228.4668 717.73242,228.80273 C 717.73242,229.55274 717.93554,230.13477 718.3418,230.54883 C 718.74804,230.95508 719.32226,231.15821 720.06445,231.1582 C 720.79882,231.15821 721.38085,230.91211 721.81055,230.41992 C 722.24023,229.91993 722.4746,229.22071 722.51367,228.32227 L 725.8418,228.32227 L 725.8418,228.68555 C 725.84178,230.3418 725.31835,231.66211 724.27148,232.64648 C 723.23241,233.62305 721.83007,234.11133 720.06445,234.11133 C 718.25976,234.11133 716.82226,233.64648 715.75195,232.7168 C 714.68945,231.7793 714.1582,230.53321 714.1582,228.97852 C 714.1582,228.40821 714.2168,227.90821 714.33398,227.47852 C 714.45117,227.04883 714.63086,226.65821 714.87305,226.30664 C 715.18554,225.86915 715.67773,225.39259 716.34961,224.87695 C 717.02148,224.36134 717.43554,224.03321 717.5918,223.89258 C 717.88867,223.60353 718.0996,223.29884 718.22461,222.97852 C 718.35742,222.6504 718.42382,222.25587 718.42383,221.79492 C 718.42382,221.75587 718.41992,221.69337 718.41211,221.60742 C 718.40429,221.51368 718.40039,221.44337 718.40039,221.39648 L 721.55273,221.39648"
+       id="text6131" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Matrix Unicode"
+       d=""
+       id="text6955" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="137.05411"
+       y="23.149496"
+       id="text4346"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348"
+         x="137.05411"
+         y="23.149496"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">             ˝ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="186.05411"
+       y="27.3995"
+       id="text4346-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-1"
+         x="186.05411"
+         y="27.3995"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ¯ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="482.80411"
+       y="24.6495"
+       id="text4346-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-7"
+         x="482.80411"
+         y="24.6495"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ˛ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="558.30408"
+       y="24.399498"
+       id="text4346-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-0"
+         x="558.30408"
+         y="24.399498"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">             ˘ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="626.55408"
+       y="11.1495"
+       id="text4346-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-09"
+         x="626.55408"
+         y="11.1495"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           id="tspan4483">             o</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="667.80408"
+       y="28.899498"
+       id="text4346-31"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-15"
+         x="667.80408"
+         y="28.899498"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     . </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="619.55408"
+       y="203.14951"
+       id="text4346-38"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-8"
+         x="619.55408"
+         y="203.14951"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ˇ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="620.30408"
+       y="232.14951"
+       id="text4346-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-6"
+         x="620.30408"
+         y="232.14951"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ˙ </tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Swis721 BT';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 402.88672,6.52148 2.95312,0 5.63672,6.574219 -2.7539,0 -4.34766,-4.3476565 -4.37109,4.3476565 -2.75391,0 5.63672,-6.574219"
+       id="text6091-3" />
+  </g>
+</svg>
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg
new file mode 100644 (file)
index 0000000..2304b2a
--- /dev/null
@@ -0,0 +1,1049 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="900"
+   height="300"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.91 r13725"
+   version="1.0"
+   sodipodi:docname="KB_US-International-Alternative.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="D:\Users\Felix\Source\Repos\qmk_firmware\keyboards\s60-x\keymaps\ansi_qwertz\docs\KB_US-International-Alternative.png"
+   inkscape:export-xdpi="79.910004"
+   inkscape:export-ydpi="79.910004">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path5387"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path5390"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Tail"
+       style="overflow:visible">
+      <g
+         id="g5342"
+         transform="scale(-1.2)">
+        <path
+           id="path5344"
+           d="M -3.8048674,-3.9585227 L 0.54352094,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5346"
+           d="M -1.2866832,-3.9585227 L 3.0617053,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5348"
+           d="M 1.3053582,-3.9585227 L 5.6537466,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5350"
+           d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5352"
+           d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5354"
+           d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path5363"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path5369"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Send"
+       style="overflow:visible;">
+      <path
+         id="path5375"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.2) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Send"
+       style="overflow:visible;">
+      <path
+         id="path5357"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path5381"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path5372"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(-5,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="435.66801"
+     inkscape:cy="291.15819"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:grid-points="true"
+     showgrid="true"
+     gridtolerance="15px"
+     showborder="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1017"
+     inkscape:window-x="1912"
+     inkscape:window-y="-8"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-bbox="true"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0px"
+       originy="0px"
+       spacingx="7.5px"
+       spacingy="7.5px"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.12156863"
+       empopacity="0.25098039"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,0 L 60,0 L 60,60 L 0,60 L 0,0 z "
+       id="rect2186" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 60,0 L 120,0 L 120,60 L 60,60 L 60,0 z "
+       id="rect2218" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 120,0 L 180,0 L 180,60 L 120,60 L 120,0 z "
+       id="rect2222" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 180,0 L 240,0 L 240,60 L 180,60 L 180,0 z "
+       id="rect2228" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 240,0 L 300,0 L 300,60 L 240,60 L 240,0 z "
+       id="rect2230" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 300,0 L 360,0 L 360,60 L 300,60 L 300,0 z "
+       id="rect2232" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 360,0 L 420,0 L 420,60 L 360,60 L 360,0 z "
+       id="rect2234" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 420,0 L 480,0 L 480,60 L 420,60 L 420,0 z "
+       id="rect2236" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 480,0 L 540,0 L 540,60 L 480,60 L 480,0 z "
+       id="rect2238" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 540,0 L 600,0 L 600,60 L 540,60 L 540,0 z "
+       id="rect2240" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 600,0 L 660,0 L 660,60 L 600,60 L 600,0 z "
+       id="rect2242" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 660,0 L 720,0 L 720,60 L 660,60 L 660,0 z "
+       id="rect2244" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 720,0 L 780,0 L 780,60 L 720,60 L 720,0 z "
+       id="rect2246" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 780,0 L 900,0 L 900,60 L 780,60 L 780,0 z "
+       id="rect2248" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,60 L 90,60 L 90,120 L 0,120 L 0,60 z "
+       id="rect2250" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 90,60 L 150,60 L 150,120 L 90,120 L 90,60 z "
+       id="rect2252" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 150,60 L 210,60 L 210,120 L 150,120 L 150,60 z "
+       id="rect2254" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 210,60 L 270,60 L 270,120 L 210,120 L 210,60 z "
+       id="rect2256" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 270,60 L 330,60 L 330,120 L 270,120 L 270,60 z "
+       id="rect2258" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 330,60 L 390,60 L 390,120 L 330,120 L 330,60 z "
+       id="rect2262" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 390,60 L 450,60 L 450,120 L 390,120 L 390,60 z "
+       id="rect2264" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 450,60 L 510,60 L 510,120 L 450,120 L 450,60 z "
+       id="rect2266" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 510,60 L 570,60 L 570,120 L 510,120 L 510,60 z "
+       id="rect2270" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 570,60 L 630,60 L 630,120 L 570,120 L 570,60 z "
+       id="rect2272" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 630,60 L 690,60 L 690,120 L 630,120 L 630,60 z "
+       id="rect2274" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 690,60 L 750,60 L 750,120 L 690,120 L 690,60 z "
+       id="rect2278" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 750,60 L 810,60 L 810,120 L 750,120 L 750,60 z "
+       id="rect2280" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 810,60 L 900,60 L 900,120 L 810,120 L 810,60 z "
+       id="rect2284" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,120 L 105,120 L 105,180 L 0,180 L 0,120 z "
+       id="rect2286" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 105,120 L 165,120 L 165,180 L 105,180 L 105,120 z "
+       id="rect2292" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 165,120 L 225,120 L 225,180 L 165,180 L 165,120 z "
+       id="rect2296" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 225,120 L 285,120 L 285,180 L 225,180 L 225,120 z "
+       id="rect2298" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 285,120 L 345,120 L 345,180 L 285,180 L 285,120 z "
+       id="rect2300" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 345,120 L 405,120 L 405,180 L 345,180 L 345,120 z "
+       id="rect2302" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 405,120 L 465,120 L 465,180 L 405,180 L 405,120 z "
+       id="rect2306" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 465,120 L 525,120 L 525,180 L 465,180 L 465,120 z "
+       id="rect2308" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 525,120 L 585,120 L 585,180 L 525,180 L 525,120 z "
+       id="rect2312" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 585,120 L 645,120 L 645,180 L 585,180 L 585,120 z "
+       id="rect2314" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 645,120 L 705,120 L 705,180 L 645,180 L 645,120 z "
+       id="rect2316" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 705,120 L 765,120 L 765,180 L 705,180 L 705,120 z "
+       id="rect2318" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 765,120 L 900,120 L 900,180 L 765,180 L 765,120 z "
+       id="rect2320" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,180 L 135,180 L 135,240 L 0,240 L 0,180 z "
+       id="rect2322" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 135,180 L 195,180 L 195,240 L 135,240 L 135,180 z "
+       id="rect2324" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 195,180 L 255,180 L 255,240 L 195,240 L 195,180 z "
+       id="rect2326" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 255,180 L 315,180 L 315,240 L 255,240 L 255,180 z "
+       id="rect2330" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 315,180 L 375,180 L 375,240 L 315,240 L 315,180 z "
+       id="rect2334" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 375,180 L 435,180 L 435,240 L 375,240 L 375,180 z "
+       id="rect2336" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 435,180 L 495,180 L 495,240 L 435,240 L 435,180 z "
+       id="rect2338" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 495,180 L 555,180 L 555,240 L 495,240 L 495,180 z "
+       id="rect2340" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 555,180 L 615,180 L 615,240 L 555,240 L 555,180 z "
+       id="rect2342" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 615,180 L 675,180 L 675,240 L 615,240 L 615,180 z "
+       id="rect2344" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 675,180 L 735,180 L 735,240 L 675,240 L 675,180 z "
+       id="rect2346" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 735,180 L 900,180 L 900,240 L 735,240 L 735,180 z "
+       id="rect2348" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,240 L 90,240 L 90,300 L 0,300 L 0,240 z "
+       id="rect2350" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 810,240 L 900,240 L 900,300 L 810,300 L 810,240 z "
+       id="rect2352" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 150,240 L 240,240 L 240,300 L 150,300 L 150,240 z "
+       id="rect2354" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 600,240 L 690,240 L 690,300 L 600,300 L 600,240 z "
+       id="rect2360" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 240,240 L 600,240 L 600,300 L 240,300 L 240,240 z "
+       id="rect2362" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 90,240 L 150,240 L 150,300 L 90,300 L 90,240 z "
+       id="rect2364" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 690,240 L 750,240 L 750,300 L 690,300 L 690,240 z "
+       id="rect2366" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 750,240 L 810,240 L 810,300 L 750,300 L 750,240 z "
+       id="rect2368" />
+    <path
+       style=""
+       d=""
+       id="flowRoot4146" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 75.351563,18.826172 L 74.4375,11.056641 L 74.4375,6.3691406 L 78.046875,6.3691406 L 78.046875,11.056641 L 77.132813,18.826172 L 75.351563,18.826172 M 74.484375,23.630859 L 74.484375,20.173828 L 77.964844,20.173828 L 77.964844,23.630859 L 74.484375,23.630859 M 75.351563,53.630859 L 75.351563,42.158203 L 71.34375,42.158203 L 71.34375,39.802734 L 71.601563,39.802734 C 73.062496,39.802748 74.124995,39.576186 74.789063,39.123047 C 75.460931,38.669937 75.855462,37.912125 75.972656,36.849609 L 78.65625,36.849609 L 78.65625,53.630859 L 75.351563,53.630859"
+       id="text5091" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 23.34375,14.220703 L 23.34375,16.810547 C 22.531233,17.365241 21.761702,17.775396 21.035156,18.041016 C 20.316391,18.298833 19.605455,18.42774 18.902344,18.427734 C 18.542956,18.42774 18.183581,18.39649 17.824219,18.333984 C 17.464832,18.27149 17.105457,18.181646 16.746094,18.064453 C 16.558583,18.001959 16.281239,17.904303 15.914063,17.771484 C 14.203116,17.185553 12.902336,16.892585 12.011719,16.892578 C 11.34765,16.892585 10.652339,17.041022 9.9257813,17.337891 C 9.2070275,17.626959 8.3984345,18.091802 7.5,18.732422 L 7.5,16.142578 C 8.3359346,15.580086 9.1328088,15.162118 9.890625,14.888672 C 10.648432,14.607431 11.363275,14.466806 12.035156,14.466797 C 12.949211,14.466806 14.085929,14.693368 15.445313,15.146484 C 15.46874,15.154305 15.484365,15.158212 15.492188,15.158203 C 15.632802,15.205087 15.847646,15.279305 16.136719,15.380859 C 17.347644,15.810555 18.285143,16.025398 18.949219,16.025391 C 19.613267,16.025398 20.29686,15.880867 21,15.591797 C 21.703109,15.302743 22.484358,14.845712 23.34375,14.220703 M 11.988281,35.033203 L 15.011719,35.033203 L 17.320313,39.369141 L 15.65625,39.369141 L 11.988281,35.033203"
+       id="text5103" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 136.47578,20.443359 C 136.04608,21.099612 135.54999,21.583986 134.9875,21.896484 C 134.42499,22.201173 133.76093,22.353517 132.99532,22.353516 C 131.76093,22.353517 130.81953,22.01758 130.1711,21.345703 C 129.53047,20.673831 129.21015,19.681645 129.21016,18.369141 C 129.21015,16.50196 129.75312,14.935556 130.83907,13.669922 C 131.93281,12.404308 133.27656,11.771496 134.87032,11.771484 C 135.4953,11.771496 136.03827,11.900402 136.49922,12.158203 C 136.96015,12.416027 137.33905,12.798839 137.63594,13.306641 L 138.25703,12.158203 L 140.34297,12.158203 L 138.62032,19.166016 C 138.59686,19.251958 138.57733,19.341801 138.56172,19.435547 C 138.54608,19.521488 138.53827,19.591801 138.53828,19.646484 C 138.53827,19.919926 138.63202,20.126957 138.81953,20.267578 C 139.00702,20.400394 139.28436,20.4668 139.65157,20.466797 C 139.95624,20.4668 140.27264,20.388675 140.60078,20.232422 C 140.9367,20.076175 141.2492,19.857426 141.53828,19.576172 C 142.21014,18.951177 142.71795,18.220709 143.06172,17.384766 C 143.41326,16.548835 143.58904,15.630867 143.58907,14.630859 C 143.58904,12.75587 142.86248,11.216809 141.40938,10.013672 C 139.96405,8.8027492 138.09686,8.1972811 135.80782,8.1972656 C 134.70624,8.1972811 133.6789,8.3300934 132.72578,8.5957031 C 131.78046,8.8613429 130.92109,9.2558737 130.14766,9.7792969 C 128.81953,10.669935 127.79609,11.783215 127.07735,13.119141 C 126.36641,14.455087 126.01094,15.91993 126.01094,17.513672 C 126.01094,19.912113 126.81953,21.83008 128.43672,23.267578 C 130.0539,24.697265 132.21406,25.412108 134.91719,25.412109 C 136.1828,25.412108 137.41718,25.220702 138.62032,24.837891 C 139.83124,24.455077 140.95623,23.90039 141.99532,23.173828 L 142.95625,24.544922 C 141.76092,25.443358 140.49139,26.119138 139.14766,26.572266 C 137.81171,27.025387 136.41718,27.25195 134.96407,27.251953 C 133.46405,27.25195 132.08515,27.060543 130.82735,26.677734 C 129.56953,26.302732 128.45234,25.744139 127.47578,25.001953 C 126.26484,24.05664 125.35859,22.966798 124.75703,21.732422 C 124.15547,20.49805 123.85469,19.099614 123.85469,17.537109 C 123.85469,16.232429 124.05781,14.990243 124.46407,13.810547 C 124.87813,12.623058 125.48359,11.544934 126.28047,10.576172 C 127.43672,9.1621238 128.82734,8.0918124 130.45235,7.3652344 C 132.07734,6.6386889 133.88593,6.275408 135.87813,6.2753906 C 137.19843,6.275408 138.43671,6.4550953 139.59297,6.8144531 C 140.75702,7.1660321 141.76873,7.6660316 142.62813,8.3144531 C 143.68279,9.1347801 144.46795,10.072279 144.9836,11.126953 C 145.50701,12.17384 145.76873,13.357432 145.76875,14.677734 C 145.76873,15.966805 145.51092,17.15821 144.99532,18.251953 C 144.48748,19.337895 143.75311,20.267581 142.79219,21.041016 C 142.2453,21.478518 141.64764,21.814455 140.99922,22.048828 C 140.35858,22.275392 139.69061,22.388673 138.99532,22.388672 C 138.16718,22.388673 137.54218,22.224611 137.12032,21.896484 C 136.70624,21.568361 136.4914,21.083987 136.47578,20.443359 M 137.06172,15.427734 C 136.96015,14.794931 136.73358,14.314462 136.38203,13.986328 C 136.03827,13.650401 135.58124,13.482432 135.01094,13.482422 C 134.1203,13.482432 133.34687,13.966807 132.69063,14.935547 C 132.03437,15.904305 131.70624,17.068366 131.70625,18.427734 C 131.70624,19.146489 131.86249,19.693363 132.175,20.068359 C 132.49531,20.443363 132.95624,20.630862 133.55782,20.630859 C 134.20624,20.630862 134.79608,20.384769 135.32735,19.892578 C 135.8664,19.400395 136.23358,18.75977 136.42891,17.970703 L 137.06172,15.427734 M 128.56563,53.630859 C 128.58125,52.130861 128.90156,50.861331 129.52657,49.822266 C 130.15156,48.775395 131.26094,47.716803 132.85469,46.646484 C 133.09687,46.482429 133.44844,46.255867 133.90938,45.966797 C 136.01875,44.615243 137.07343,43.314463 137.07344,42.064453 C 137.07343,41.322278 136.85078,40.736341 136.40547,40.306641 C 135.96015,39.876967 135.35078,39.662123 134.57735,39.662109 C 133.73359,39.662123 133.08125,39.927748 132.62032,40.458984 C 132.16719,40.982435 131.94062,41.732434 131.94063,42.708984 L 131.94063,42.849609 L 128.84688,42.849609 C 128.84688,40.927747 129.3625,39.44728 130.39375,38.408203 C 131.425,37.369157 132.89375,36.849626 134.8,36.849609 C 136.52656,36.849626 137.90546,37.322282 138.93672,38.267578 C 139.96796,39.205093 140.48358,40.455091 140.4836,42.017578 C 140.48358,43.134776 140.21405,44.103525 139.675,44.923828 C 139.13593,45.744149 138.09296,46.677741 136.5461,47.724609 C 136.21796,47.951178 135.76484,48.248052 135.18672,48.615234 C 133.71797,49.560551 132.88984,50.2793 132.70235,50.771484 L 140.31953,50.771484 L 140.31953,53.630859 L 128.56563,53.630859"
+       id="text5127" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 195.28125,13.693359 L 194.25,16.552734 L 197.19141,16.552734 L 198.19922,13.693359 L 195.28125,13.693359 M 195.28125,6.4746094 L 197.87109,6.4746094 L 196.16016,11.337891 L 198.99609,11.337891 L 200.73047,6.4746094 L 203.32031,6.4746094 L 201.58594,11.337891 L 204.90234,11.337891 L 204.03516,13.693359 L 200.75391,13.693359 L 199.76953,16.529297 L 203.16797,16.529297 L 202.33594,18.873047 L 198.92578,18.873047 L 197.19141,23.748047 L 194.60156,23.748047 L 196.33594,18.873047 L 193.47656,18.873047 L 191.73047,23.748047 L 189.15234,23.748047 L 190.86328,18.873047 L 187.5,18.873047 L 188.39063,16.529297 L 191.69531,16.529297 L 192.70313,13.693359 L 189.19922,13.693359 L 190.06641,11.337891 L 193.54688,11.337891 L 195.28125,6.4746094 M 190.07813,48.521484 L 193.30078,48.521484 C 193.30859,49.458989 193.53515,50.166019 193.98047,50.642578 C 194.42578,51.111331 195.08593,51.345705 195.96094,51.345703 C 196.80468,51.345705 197.45312,51.126956 197.90625,50.689453 C 198.36718,50.244144 198.59765,49.607426 198.59766,48.779297 C 198.59765,47.951178 198.32812,47.326178 197.78906,46.904297 C 197.2578,46.474617 196.46484,46.259773 195.41016,46.259766 C 195.35546,46.259773 195.26953,46.263679 195.15234,46.271484 C 195.04296,46.279304 194.96093,46.28321 194.90625,46.283203 L 194.90625,43.962891 L 195.26953,43.962891 C 196.23827,43.9629 196.95312,43.7754 197.41406,43.400391 C 197.8828,43.017589 198.11718,42.435558 198.11719,41.654297 C 198.11718,41.005872 197.91796,40.494154 197.51953,40.119141 C 197.1289,39.736342 196.59374,39.544936 195.91406,39.544922 C 195.17187,39.544936 194.59765,39.763686 194.19141,40.201172 C 193.78515,40.638685 193.58203,41.259778 193.58203,42.064453 L 193.58203,42.205078 L 190.41797,42.205078 C 190.45703,40.486341 190.96094,39.169936 191.92969,38.255859 C 192.90625,37.334001 194.28125,36.873064 196.05469,36.873047 C 197.73437,36.873064 199.0664,37.283219 200.05078,38.103516 C 201.03514,38.923843 201.52733,40.02931 201.52734,41.419922 C 201.52733,42.154308 201.35936,42.798839 201.02344,43.353516 C 200.68749,43.908213 200.18358,44.365244 199.51172,44.724609 C 200.37108,45.099618 201.01952,45.619149 201.45703,46.283203 C 201.90233,46.93946 202.12499,47.724615 202.125,48.638672 C 202.12499,50.318363 201.57421,51.650393 200.47266,52.634766 C 199.37108,53.619141 197.86718,54.111328 195.96094,54.111328 C 194.07812,54.111328 192.625,53.634766 191.60156,52.681641 C 190.58594,51.720705 190.07812,50.357425 190.07813,48.591797 L 190.07813,48.521484"
+       id="text5139" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 254.46094,21.451172 C 255.10155,21.365237 255.58984,21.134768 255.92578,20.759766 C 256.26171,20.384769 256.42968,19.884769 256.42969,19.259766 C 256.42968,18.705083 256.26952,18.248052 255.94922,17.888672 C 255.63671,17.52149 255.14062,17.236335 254.46094,17.033203 L 254.46094,21.451172 M 253.06641,13.435547 L 253.06641,9.4511719 C 252.45703,9.529311 251.99218,9.7402483 251.67188,10.083984 C 251.35156,10.419935 251.1914,10.87306 251.19141,11.443359 C 251.1914,11.919934 251.33984,12.318371 251.63672,12.638672 C 251.9414,12.958995 252.41796,13.22462 253.06641,13.435547 M 253.06641,26.267578 L 253.06641,24.017578 C 251.30078,23.908203 249.98047,23.396485 249.10547,22.482422 C 248.23047,21.568361 247.79297,20.24805 247.79297,18.521484 L 250.93359,18.521484 C 250.97265,19.365239 251.16796,20.033207 251.51953,20.525391 C 251.8789,21.009768 252.39453,21.318362 253.06641,21.451172 L 253.06641,16.599609 C 251.2539,16.138679 249.96484,15.537117 249.19922,14.794922 C 248.43359,14.052744 248.05078,13.03712 248.05078,11.748047 C 248.05078,10.318373 248.5039,9.1660301 249.41016,8.2910156 C 250.32422,7.4160318 251.54296,6.959001 253.06641,6.9199219 L 253.06641,5.4199219 L 254.46094,5.4199219 L 254.46094,6.9199219 C 255.98437,6.9980635 257.17186,7.4590005 258.02344,8.3027344 C 258.87499,9.1386864 259.34374,10.318373 259.42969,11.841797 L 256.24219,11.841797 C 256.18749,11.115247 256.01171,10.56056 255.71484,10.177734 C 255.42577,9.7871232 255.0078,9.5683734 254.46094,9.5214844 L 254.46094,13.787109 C 256.39062,14.388681 257.74999,15.07618 258.53906,15.849609 C 259.32811,16.623054 259.72264,17.642584 259.72266,18.908203 C 259.72264,20.400394 259.26171,21.591799 258.33984,22.482422 C 257.42577,23.373047 256.1328,23.892578 254.46094,24.041016 L 254.46094,26.267578 L 253.06641,26.267578 M 254.64844,47.419922 L 254.64844,40.236328 L 250.08984,47.419922 L 254.64844,47.419922 M 254.57813,53.630859 L 254.57813,50.009766 L 247.5,50.009766 L 247.5,47.056641 L 253.6875,37.330078 L 257.84766,37.330078 L 257.84766,47.337891 L 259.79297,47.337891 L 259.79297,50.009766 L 257.84766,50.009766 L 257.84766,53.630859 L 254.57813,53.630859"
+       id="text5145" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 320.42578,19.740234 C 320.42577,20.263675 320.60155,20.705081 320.95313,21.064453 C 321.30467,21.416018 321.73827,21.591799 322.25391,21.591797 C 322.75389,21.591799 323.18358,21.412112 323.54297,21.052734 C 323.90233,20.68555 324.08201,20.24805 324.08203,19.740234 C 324.08201,19.240239 323.90233,18.814458 323.54297,18.462891 C 323.19139,18.103521 322.7617,17.923834 322.25391,17.923828 C 321.73827,17.923834 321.30467,18.099615 320.95313,18.451172 C 320.60155,18.794927 320.42577,19.224614 320.42578,19.740234 M 317.88281,19.740234 C 317.8828,18.521489 318.30468,17.494147 319.14844,16.658203 C 319.99217,15.822273 321.02733,15.404305 322.25391,15.404297 C 323.45701,15.404305 324.48045,15.830086 325.32422,16.681641 C 326.17576,17.525397 326.60154,18.544927 326.60156,19.740234 C 326.60154,20.943362 326.17576,21.974611 325.32422,22.833984 C 324.47264,23.685547 323.4492,24.111328 322.25391,24.111328 C 321.02733,24.111328 319.99217,23.689453 319.14844,22.845703 C 318.30468,22.001955 317.8828,20.9668 317.88281,19.740234 M 311.07422,24.111328 L 321.08203,6.8496094 L 322.96875,6.8496094 L 312.96094,24.111328 L 311.07422,24.111328 M 310.04297,11.220703 C 310.04297,11.73634 310.21484,12.169933 310.55859,12.521484 C 310.91015,12.873058 311.34375,13.048839 311.85938,13.048828 C 312.36718,13.048839 312.79687,12.873058 313.14844,12.521484 C 313.50781,12.162121 313.68749,11.728528 313.6875,11.220703 C 313.68749,10.720716 313.50781,10.294935 313.14844,9.9433594 C 312.79687,9.5839984 312.36718,9.4043111 311.85938,9.4042969 C 311.34375,9.4043111 310.91015,9.5800922 310.55859,9.9316406 C 310.21484,10.275404 310.04297,10.705091 310.04297,11.220703 M 307.5,11.220703 C 307.5,10.001967 307.92187,8.9707178 308.76563,8.1269531 C 309.60937,7.275407 310.64062,6.8496262 311.85938,6.8496094 C 313.06249,6.8496262 314.08593,7.2793132 314.92969,8.1386719 C 315.78124,8.990249 316.20702,10.017592 316.20703,11.220703 C 316.20702,12.423839 315.78124,13.451182 314.92969,14.302734 C 314.08593,15.146493 313.06249,15.568367 311.85938,15.568359 C 310.63281,15.568367 309.59765,15.150399 308.75391,14.314453 C 307.91797,13.478526 307.5,12.447277 307.5,11.220703 M 310.85156,49.119141 L 314.13281,49.119141 C 314.1875,49.853519 314.43359,50.423831 314.87109,50.830078 C 315.30859,51.228518 315.89453,51.427737 316.62891,51.427734 C 317.53515,51.427737 318.22655,51.162112 318.70313,50.630859 C 319.18749,50.099613 319.42968,49.337895 319.42969,48.345703 C 319.42968,47.416022 319.18358,46.685554 318.69141,46.154297 C 318.19921,45.615242 317.51952,45.345711 316.65234,45.345703 C 316.16796,45.345711 315.74218,45.443368 315.375,45.638672 C 315.00781,45.833992 314.69531,46.123054 314.4375,46.505859 L 311.41406,46.330078 L 312.50391,37.330078 L 322.14844,37.330078 L 322.14844,40.166016 L 314.87109,40.166016 L 314.4375,43.529297 C 314.80468,43.240245 315.22656,43.025401 315.70313,42.884766 C 316.17968,42.736339 316.71093,42.66212 317.29688,42.662109 C 318.96874,42.66212 320.3164,43.169932 321.33984,44.185547 C 322.37108,45.20118 322.88671,46.53321 322.88672,48.181641 C 322.88671,49.986332 322.3203,51.427737 321.1875,52.505859 C 320.05468,53.576172 318.53515,54.111328 316.62891,54.111328 C 314.89453,54.111328 313.51172,53.669922 312.48047,52.787109 C 311.45703,51.896486 310.91406,50.673831 310.85156,49.119141"
+       id="text5151" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 372.15234,48.298828 C 372.15234,49.25977 372.39062,50.021488 372.86719,50.583984 C 373.35156,51.146487 374.00781,51.427737 374.83594,51.427734 C 375.60937,51.427737 376.21484,51.154299 376.65234,50.607422 C 377.08983,50.06055 377.30858,49.298832 377.30859,48.322266 C 377.30858,47.423834 377.08202,46.724616 376.62891,46.224609 C 376.17577,45.724617 375.53905,45.474618 374.71875,45.474609 C 373.91406,45.474618 373.28515,45.724617 372.83203,46.224609 C 372.3789,46.724616 372.15234,47.416022 372.15234,48.298828 M 372.10547,43.916016 C 372.48828,43.525401 372.94921,43.232432 373.48828,43.037109 C 374.02734,42.833995 374.6289,42.732433 375.29297,42.732422 C 376.93358,42.732433 378.24608,43.232432 379.23047,44.232422 C 380.22264,45.23243 380.71874,46.56446 380.71875,48.228516 C 380.71874,49.994144 380.17968,51.419924 379.10156,52.505859 C 378.02343,53.591797 376.60155,54.134765 374.83594,54.134766 C 372.79687,54.134765 371.24609,53.431641 370.18359,52.025391 C 369.1289,50.619144 368.60156,48.560552 368.60156,45.849609 C 368.60156,42.935558 369.16797,40.708997 370.30078,39.169922 C 371.43359,37.623063 373.0664,36.849626 375.19922,36.849609 C 376.68358,36.849626 377.8789,37.236345 378.78516,38.009766 C 379.69921,38.783218 380.19921,39.830092 380.28516,41.150391 L 376.88672,41.150391 C 376.80858,40.611341 376.59765,40.205092 376.25391,39.931641 C 375.91015,39.658217 375.42968,39.521498 374.8125,39.521484 C 373.96874,39.521498 373.32031,39.888686 372.86719,40.623047 C 372.41406,41.349622 372.16015,42.447277 372.10547,43.916016"
+       id="text5157" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 432.85547,16.095703 L 431.96484,16.740234 C 431.60546,16.990241 431.33593,17.291022 431.15625,17.642578 C 430.97656,17.994146 430.88671,18.388677 430.88672,18.826172 C 430.88671,19.490239 431.11328,20.048832 431.56641,20.501953 C 432.01953,20.955081 432.58593,21.181643 433.26563,21.181641 C 433.76562,21.181643 434.24218,21.080081 434.69531,20.876953 C 435.15624,20.666019 435.58202,20.361331 435.97266,19.962891 L 432.85547,16.095703 M 433.79297,12.404297 L 434.20313,12.111328 C 434.57812,11.853527 434.85546,11.564465 435.03516,11.244141 C 435.21483,10.923841 435.30468,10.556654 435.30469,10.142578 C 435.30468,9.7441545 435.17968,9.4277486 434.92969,9.1933594 C 434.68749,8.958999 434.35546,8.8418117 433.93359,8.8417969 C 433.5039,8.8418117 433.16406,8.9629053 432.91406,9.2050781 C 432.66406,9.4394673 432.53906,9.7597795 432.53906,10.166016 C 432.53906,10.384779 432.59765,10.62306 432.71484,10.880859 C 432.83984,11.138684 433.01562,11.412122 433.24219,11.701172 L 433.79297,12.404297 M 431.15625,13.962891 L 430.47656,13.072266 C 430.125,12.603527 429.87109,12.166027 429.71484,11.759766 C 429.5664,11.345715 429.49218,10.912122 429.49219,10.458984 C 429.49218,9.2089988 429.89062,8.2168123 430.6875,7.4824219 C 431.49218,6.7402513 432.58203,6.3691579 433.95703,6.3691406 C 435.27733,6.3691579 436.3203,6.7090013 437.08594,7.3886719 C 437.85155,8.0683749 438.23436,8.9863428 438.23438,10.142578 C 438.23436,11.017591 438.0078,11.802746 437.55469,12.498047 C 437.10936,13.185557 436.40624,13.833994 435.44531,14.443359 L 437.91797,17.490234 C 438.15233,17.107428 438.33593,16.677741 438.46875,16.201172 C 438.60936,15.724617 438.70702,15.193368 438.76172,14.607422 L 441.80859,14.607422 C 441.72264,15.623055 441.5117,16.56446 441.17578,17.431641 C 440.83983,18.298833 440.37889,19.091801 439.79297,19.810547 L 442.93359,23.630859 L 438.94922,23.630859 L 437.77734,22.189453 C 437.08983,22.822266 436.33202,23.302735 435.50391,23.630859 C 434.68359,23.951172 433.82421,24.111328 432.92578,24.111328 C 431.33203,24.111328 430.02734,23.638672 429.01172,22.693359 C 428.0039,21.748049 427.5,20.541019 427.5,19.072266 C 427.5,17.978521 427.78125,17.037116 428.34375,16.248047 C 428.90625,15.458993 429.84375,14.697275 431.15625,13.962891 M 434.66016,53.630859 L 431.15625,53.630859 C 431.28125,51.341799 431.83203,49.07227 432.80859,46.822266 C 433.79296,44.572275 435.19531,42.361339 437.01563,40.189453 L 428.76563,40.189453 L 428.76563,37.330078 L 440.66016,37.330078 L 440.66016,39.849609 C 438.8164,41.880871 437.39843,44.029306 436.40625,46.294922 C 435.42187,48.560552 434.83984,51.005862 434.66016,53.630859"
+       id="text5163" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 493.5,13.212891 L 491.4375,16.119141 L 489.44531,14.724609 L 491.69531,11.900391 L 488.41406,10.986328 L 489.17578,8.6074219 L 492.32813,9.7324219 L 492.32813,6.3691406 L 494.64844,6.3691406 L 494.64844,9.7324219 L 497.80078,8.6308594 L 498.58594,11.009766 L 495.30469,11.900391 L 497.53125,14.701172 L 495.49219,16.166016 L 493.5,13.212891 M 490.875,48.755859 C 490.875,49.576176 491.10156,50.208988 491.55469,50.654297 C 492.01562,51.099612 492.67187,51.322268 493.52344,51.322266 C 494.33593,51.322268 494.97265,51.095706 495.43359,50.642578 C 495.90233,50.189457 496.13671,49.560551 496.13672,48.755859 C 496.13671,47.982428 495.89843,47.361334 495.42188,46.892578 C 494.9453,46.423835 494.31249,46.189461 493.52344,46.189453 C 492.73437,46.189461 492.09374,46.427742 491.60156,46.904297 C 491.11718,47.380866 490.875,47.998053 490.875,48.755859 M 491.14453,41.560547 C 491.14453,42.208996 491.34765,42.708995 491.75391,43.060547 C 492.16015,43.404307 492.74218,43.576182 493.5,43.576172 C 494.2578,43.576182 494.83984,43.400401 495.24609,43.048828 C 495.66015,42.697277 495.86718,42.201183 495.86719,41.560547 C 495.86718,40.93556 495.65624,40.443373 495.23438,40.083984 C 494.81249,39.724623 494.23437,39.544936 493.5,39.544922 C 492.78124,39.544936 492.20703,39.72853 491.77734,40.095703 C 491.35546,40.462904 491.14453,40.951185 491.14453,41.560547 M 489.9375,44.818359 C 489.23437,44.427744 488.72656,43.970713 488.41406,43.447266 C 488.10156,42.923839 487.94531,42.255871 487.94531,41.443359 C 487.94531,40.005873 488.4375,38.876968 489.42188,38.056641 C 490.40625,37.236345 491.76562,36.826189 493.5,36.826172 C 495.24999,36.826189 496.61718,37.236345 497.60156,38.056641 C 498.59374,38.869155 499.08983,39.998061 499.08984,41.443359 C 499.08983,42.216808 498.92186,42.888683 498.58594,43.458984 C 498.24999,44.021494 497.74608,44.474619 497.07422,44.818359 C 497.89452,45.20118 498.51171,45.73243 498.92578,46.412109 C 499.33983,47.083991 499.54686,47.904303 499.54688,48.873047 C 499.54686,50.505862 499.0078,51.787111 497.92969,52.716797 C 496.85936,53.646484 495.3828,54.111328 493.5,54.111328 C 491.59375,54.111328 490.11328,53.650391 489.05859,52.728516 C 488.0039,51.806642 487.47656,50.521487 487.47656,48.873047 C 487.47656,47.912115 487.67187,47.107428 488.0625,46.458984 C 488.46094,45.802742 489.08594,45.255868 489.9375,44.818359"
+       id="text5169" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 557.85938,6.3691406 C 556.78124,8.1347811 555.98046,9.9316543 555.45703,11.759766 C 554.93359,13.587901 554.67187,15.505868 554.67188,17.513672 C 554.67187,19.513676 554.93359,21.427737 555.45703,23.255859 C 555.98046,25.083983 556.78124,26.880856 557.85938,28.646484 L 555.38672,28.646484 C 554.01953,26.779294 552.98046,24.904296 552.26953,23.021484 C 551.5664,21.130862 551.21484,19.294926 551.21484,17.513672 C 551.21484,15.73243 551.5664,13.896494 552.26953,12.005859 C 552.98046,10.115248 554.01953,8.2363435 555.38672,6.3691406 L 557.85938,6.3691406 M 556.06641,42.685547 C 556.0664,41.724621 555.82421,40.96681 555.33984,40.412109 C 554.86327,39.849623 554.21093,39.568373 553.38281,39.568359 C 552.60156,39.568373 551.99218,39.837904 551.55469,40.376953 C 551.125,40.916028 550.91015,41.669934 550.91016,42.638672 C 550.91015,43.544932 551.13671,44.251963 551.58984,44.759766 C 552.04296,45.267586 552.67968,45.521492 553.5,45.521484 C 554.30468,45.521492 554.93359,45.271493 555.38672,44.771484 C 555.83983,44.271494 556.0664,43.576182 556.06641,42.685547 M 556.125,47.056641 C 555.73437,47.447272 555.27343,47.74024 554.74219,47.935547 C 554.21093,48.130865 553.61327,48.228521 552.94922,48.228516 C 551.30078,48.228521 549.98047,47.732428 548.98828,46.740234 C 547.99609,45.748055 547.5,44.419931 547.5,42.755859 C 547.5,40.990247 548.03906,39.564467 549.11719,38.478516 C 550.19531,37.392594 551.61718,36.849626 553.38281,36.849609 C 555.42968,36.849626 556.98436,37.556657 558.04688,38.970703 C 559.11718,40.376966 559.65233,42.431652 559.65234,45.134766 C 559.65233,48.041021 559.08202,50.267581 557.94141,51.814453 C 556.80077,53.361328 555.16015,54.134765 553.01953,54.134766 C 551.54296,54.134765 550.35156,53.751953 549.44531,52.986328 C 548.53906,52.212892 548.04297,51.162112 547.95703,49.833984 L 551.34375,49.845703 C 551.42187,50.384769 551.63281,50.787112 551.97656,51.052734 C 552.32031,51.318362 552.80468,51.451174 553.42969,51.451172 C 554.27343,51.451174 554.91796,51.083987 555.36328,50.349609 C 555.80858,49.615238 556.06249,48.517583 556.125,47.056641"
+       id="text5175" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 609.375,6.3691406 L 611.87109,6.3691406 C 613.23046,8.228531 614.26171,10.103529 614.96484,11.994141 C 615.66796,13.876963 616.01952,15.716805 616.01953,17.513672 C 616.01952,19.302739 615.66796,21.142581 614.96484,23.033203 C 614.26171,24.923827 613.23046,26.794919 611.87109,28.646484 L 609.375,28.646484 C 610.46094,26.873044 611.26562,25.072264 611.78906,23.244141 C 612.32031,21.408205 612.58593,19.498051 612.58594,17.513672 C 612.58593,15.521492 612.32031,13.611338 611.78906,11.783203 C 611.26562,9.9550918 610.46094,8.1504061 609.375,6.3691406 M 610.98047,45.474609 C 610.98046,47.513678 611.18359,48.994145 611.58984,49.916016 C 612.0039,50.837893 612.66015,51.29883 613.55859,51.298828 C 614.45702,51.29883 615.11327,50.833987 615.52734,49.904297 C 615.9414,48.974614 616.14843,47.498053 616.14844,45.474609 C 616.14843,43.44337 615.9414,41.966809 615.52734,41.044922 C 615.11327,40.12306 614.45702,39.662123 613.55859,39.662109 C 612.66015,39.662123 612.0039,40.12306 611.58984,41.044922 C 611.18359,41.958996 610.98046,43.435557 610.98047,45.474609 M 607.5,45.474609 C 607.5,42.591808 608,40.43556 609,39.005859 C 610.00781,37.568375 611.52734,36.849626 613.55859,36.849609 C 615.58202,36.849626 617.09765,37.572282 618.10547,39.017578 C 619.12108,40.455091 619.62889,42.615245 619.62891,45.498047 C 619.62889,48.380865 619.12499,50.533206 618.11719,51.955078 C 617.11718,53.376953 615.59765,54.08789 613.55859,54.087891 C 611.52734,54.08789 610.00781,53.373047 609,51.943359 C 608,50.513675 607.5,48.357427 607.5,45.474609"
+       id="text5181" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 667.5,26.900391 L 679.5,26.900391 L 679.5,29.291016 L 667.5,29.291016 L 667.5,26.900391 M 670.20703,48.849609 L 670.20703,45.638672 L 676.79297,45.638672 L 676.79297,48.849609 L 670.20703,48.849609"
+       id="text5187" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 733.33594,9.3222656 L 735.70313,9.3222656 L 735.70313,15.298828 L 741.53906,15.298828 L 741.53906,17.630859 L 735.70313,17.630859 L 735.70313,23.630859 L 733.33594,23.630859 L 733.33594,17.630859 L 727.5,17.630859 L 727.5,15.298828 L 733.33594,15.298828 L 733.33594,9.3222656 M 727.5,47.818359 L 741.53906,47.818359 L 741.53906,50.150391 L 727.5,50.150391 L 727.5,47.818359 M 727.5,42.779297 L 741.53906,42.779297 L 741.53906,45.111328 L 727.5,45.111328 L 727.5,42.779297"
+       id="text5201" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 11.070313,95.601563 L 11.070313,86.148438 L 7.65625,86.148438 L 7.65625,84.09375 L 16.828125,84.09375 L 16.828125,86.148438 L 13.4375,86.148438 L 13.4375,95.601563 L 11.070313,95.601563 M 22.859375,94.546875 C 22.572911,94.989584 22.197911,95.328125 21.734375,95.5625 C 21.270829,95.791666 20.731767,95.90625 20.117188,95.90625 C 19.294269,95.90625 18.658853,95.671875 18.210938,95.203125 C 17.768228,94.734376 17.546874,94.06771 17.546875,93.203125 C 17.546874,92.401045 17.768228,91.789066 18.210938,91.367188 C 18.658853,90.945317 19.395831,90.656255 20.421875,90.5 C 20.656246,90.463547 20.963538,90.42188 21.34375,90.375 C 22.307286,90.250005 22.789057,89.97136 22.789063,89.539063 C 22.789057,89.195319 22.682286,88.950527 22.46875,88.804688 C 22.255203,88.653653 21.898433,88.578132 21.398438,88.578125 C 20.9401,88.578132 20.588538,88.669278 20.34375,88.851563 C 20.098955,89.033861 19.97656,89.294277 19.976563,89.632813 L 19.976563,89.757813 L 17.851563,89.757813 L 17.851563,89.601563 C 17.851562,88.731778 18.158853,88.049487 18.773438,87.554688 C 19.388018,87.054696 20.236976,86.804696 21.320313,86.804688 C 22.507807,86.804696 23.41666,87.010425 24.046875,87.421875 C 24.682284,87.833341 24.999992,88.427091 25,89.203125 L 25,94.03125 C 24.999992,94.385418 25.03645,94.651043 25.109375,94.828125 C 25.182283,95.000001 25.304679,95.130209 25.476563,95.21875 L 25.476563,95.601563 L 23.109375,95.601563 C 23.031244,95.455729 22.971348,95.294271 22.929688,95.117188 C 22.888015,94.940105 22.864577,94.750001 22.859375,94.546875 M 22.820313,91.421875 C 22.450515,91.593754 22.023432,91.731775 21.539063,91.835938 C 21.059892,91.940108 20.812496,91.994795 20.796875,92 C 20.39583,92.114587 20.11458,92.257816 19.953125,92.429688 C 19.796872,92.601566 19.718747,92.838544 19.71875,93.140625 C 19.718747,93.453127 19.82031,93.703127 20.023438,93.890625 C 20.226559,94.072918 20.499997,94.164064 20.84375,94.164063 C 21.458329,94.164064 21.940099,93.992189 22.289063,93.648438 C 22.643224,93.299481 22.820307,92.825524 22.820313,92.226563 L 22.820313,91.421875 M 27.039063,84.09375 L 29.25,84.09375 L 29.25,88.164063 C 29.531246,87.721362 29.882809,87.388029 30.304688,87.164063 C 30.731766,86.934905 31.216141,86.820321 31.757813,86.820313 C 32.783847,86.820321 33.622388,87.2448 34.273438,88.09375 C 34.92447,88.937507 35.249991,90.036464 35.25,91.390625 C 35.249991,92.734378 34.92447,93.820314 34.273438,94.648438 C 33.622388,95.476563 32.773431,95.890625 31.726563,95.890625 C 31.179682,95.890625 30.70312,95.776041 30.296875,95.546875 C 29.895829,95.317709 29.531246,94.953126 29.203125,94.453125 L 29.203125,95.601563 L 27.039063,95.601563 L 27.039063,84.09375 M 32.992188,91.296875 C 32.992181,90.51563 32.828118,89.903652 32.5,89.460938 C 32.171869,89.013027 31.721348,88.789069 31.148438,88.789063 C 30.544266,88.789069 30.075517,89.007819 29.742188,89.445313 C 29.414059,89.87761 29.249997,90.494797 29.25,91.296875 C 29.249997,92.161462 29.406247,92.817711 29.71875,93.265625 C 30.036454,93.713544 30.497391,93.937502 31.101563,93.9375 C 31.71614,93.937502 32.18489,93.713544 32.507813,93.265625 C 32.830722,92.812503 32.992181,92.156253 32.992188,91.296875"
+       id="text5427" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 789.76563,44.369141 L 792.57031,44.369141 C 793.23176,44.369143 793.71353,44.249351 794.01563,44.009766 C 794.3177,43.770185 794.46874,43.392581 794.46875,42.876953 C 794.46874,42.340499 794.3203,41.955083 794.02344,41.720703 C 793.72656,41.481125 793.23697,41.361333 792.55469,41.361328 L 789.76563,41.361328 L 789.76563,44.369141 M 789.76563,39.392578 L 792.46875,39.392578 C 793.05208,39.392585 793.47916,39.293627 793.75,39.095703 C 794.02083,38.892586 794.15624,38.574878 794.15625,38.142578 C 794.15624,37.720712 794.02343,37.416025 793.75781,37.228516 C 793.49739,37.035817 793.06249,36.939463 792.45313,36.939453 L 789.76563,36.939453 L 789.76563,39.392578 M 787.5,46.447266 L 787.5,34.939453 L 792.92188,34.939453 C 794.09895,34.939465 794.99478,35.189464 795.60938,35.689453 C 796.22916,36.184255 796.53905,36.905609 796.53906,37.853516 C 796.53905,38.436857 796.42447,38.923836 796.19531,39.314453 C 795.96614,39.705085 795.62239,40.007168 795.16406,40.220703 C 795.7578,40.460292 796.20051,40.806646 796.49219,41.259766 C 796.78905,41.707687 796.93749,42.267582 796.9375,42.939453 C 796.93749,44.059247 796.57291,44.92383 795.84375,45.533203 C 795.11457,46.142578 794.08072,46.447266 792.74219,46.447266 L 787.5,46.447266 M 803.45313,45.392578 C 803.16666,45.835287 802.79166,46.173828 802.32813,46.408203 C 801.86458,46.63737 801.32552,46.751953 800.71094,46.751953 C 799.88802,46.751953 799.2526,46.517578 798.80469,46.048828 C 798.36198,45.580079 798.14062,44.913413 798.14063,44.048828 C 798.14062,43.246748 798.36198,42.634769 798.80469,42.212891 C 799.2526,41.79102 799.98958,41.501958 801.01563,41.345703 C 801.25,41.30925 801.55729,41.267583 801.9375,41.220703 C 802.90104,41.095708 803.38281,40.817063 803.38281,40.384766 C 803.38281,40.041022 803.27604,39.796231 803.0625,39.650391 C 802.84895,39.499356 802.49218,39.423835 801.99219,39.423828 C 801.53385,39.423835 801.18229,39.514981 800.9375,39.697266 C 800.69271,39.879564 800.57031,40.13998 800.57031,40.478516 L 800.57031,40.603516 L 798.44531,40.603516 L 798.44531,40.447266 C 798.44531,39.577481 798.7526,38.89519 799.36719,38.400391 C 799.98177,37.900399 800.83073,37.650399 801.91406,37.650391 C 803.10156,37.650399 804.01041,37.856128 804.64063,38.267578 C 805.27603,38.679044 805.59374,39.272794 805.59375,40.048828 L 805.59375,44.876953 C 805.59374,45.231121 805.6302,45.496746 805.70313,45.673828 C 805.77603,45.845704 805.89843,45.975912 806.07031,46.064453 L 806.07031,46.447266 L 803.70313,46.447266 C 803.62499,46.301432 803.5651,46.139974 803.52344,45.962891 C 803.48176,45.785808 803.45833,45.595704 803.45313,45.392578 M 803.41406,42.267578 C 803.04427,42.439457 802.61718,42.577478 802.13281,42.681641 C 801.65364,42.785811 801.40625,42.840498 801.39063,42.845703 C 800.98958,42.96029 800.70833,43.103519 800.54688,43.275391 C 800.39062,43.447269 800.3125,43.684248 800.3125,43.986328 C 800.3125,44.29883 800.41406,44.54883 800.61719,44.736328 C 800.82031,44.918621 801.09375,45.009767 801.4375,45.009766 C 802.05208,45.009767 802.53385,44.837892 802.88281,44.494141 C 803.23697,44.145185 803.41406,43.671227 803.41406,43.072266 L 803.41406,42.267578 M 812.71875,43.244141 L 814.96094,43.244141 C 814.86718,44.322268 814.47395,45.173829 813.78125,45.798828 C 813.08854,46.423828 812.19791,46.736328 811.10938,46.736328 C 809.875,46.736328 808.90625,46.335287 808.20313,45.533203 C 807.50521,44.725913 807.15625,43.611331 807.15625,42.189453 C 807.15625,40.772792 807.51302,39.663418 808.22656,38.861328 C 808.94531,38.054045 809.93229,37.650399 811.1875,37.650391 C 812.28645,37.650399 813.16666,37.942066 813.82813,38.525391 C 814.49478,39.108731 814.86718,39.92123 814.94531,40.962891 L 812.6875,40.962891 C 812.62499,40.509772 812.46614,40.163418 812.21094,39.923828 C 811.95572,39.684252 811.61979,39.56446 811.20313,39.564453 C 810.64062,39.56446 810.21875,39.785814 809.9375,40.228516 C 809.66146,40.67123 809.52343,41.335292 809.52344,42.220703 C 809.52343,43.038415 809.66666,43.668623 809.95313,44.111328 C 810.24479,44.54883 810.66145,44.76758 811.20313,44.767578 C 811.62499,44.76758 811.96354,44.639976 812.21875,44.384766 C 812.47395,44.12956 812.64062,43.749352 812.71875,43.244141 M 816.44531,46.447266 L 816.44531,34.939453 L 818.65625,34.939453 L 818.65625,40.978516 L 821.35938,37.955078 L 824.09375,37.955078 L 821.13281,41.103516 L 824.27344,46.447266 L 821.54688,46.447266 L 819.51563,42.830078 L 818.65625,43.759766 L 818.65625,46.447266 L 816.44531,46.447266 M 824.79688,43.681641 L 827.0625,43.681641 C 827.08333,44.113935 827.23958,44.436851 827.53125,44.650391 C 827.82291,44.858726 828.26041,44.962892 828.84375,44.962891 C 829.28645,44.962892 829.6276,44.889976 829.86719,44.744141 C 830.11197,44.593101 830.23437,44.382164 830.23438,44.111328 C 830.23437,43.725914 829.78124,43.436852 828.875,43.244141 C 828.5052,43.166019 828.21093,43.098311 827.99219,43.041016 C 826.88802,42.759769 826.11979,42.426436 825.6875,42.041016 C 825.26042,41.655604 825.04687,41.134771 825.04688,40.478516 C 825.04687,39.608731 825.35937,38.921231 825.98438,38.416016 C 826.61458,37.905608 827.46614,37.650399 828.53906,37.650391 C 829.67447,37.650399 830.5651,37.903003 831.21094,38.408203 C 831.86197,38.913419 832.20833,39.624356 832.25,40.541016 L 830.03906,40.541016 C 830.02343,40.181647 829.88541,39.903001 829.625,39.705078 C 829.36979,39.507168 829.01302,39.40821 828.55469,39.408203 C 828.12239,39.40821 827.79948,39.473314 827.58594,39.603516 C 827.3776,39.733731 827.27343,39.929043 827.27344,40.189453 C 827.27343,40.528001 827.83854,40.82748 828.96875,41.087891 C 829.22916,41.145188 829.43489,41.192063 829.58594,41.228516 C 830.71614,41.494146 831.48697,41.814458 831.89844,42.189453 C 832.3151,42.564457 832.52343,43.093102 832.52344,43.775391 C 832.52343,44.738934 832.18228,45.473308 831.5,45.978516 C 830.82291,46.483724 829.83593,46.736328 828.53906,46.736328 C 827.36718,46.736328 826.45052,46.473307 825.78906,45.947266 C 825.1276,45.421225 824.79687,44.697267 824.79688,43.775391 L 824.79688,43.681641 M 840.02344,42.251953 C 840.02343,41.397792 839.86197,40.74675 839.53906,40.298828 C 839.21614,39.84571 838.74739,39.619147 838.13281,39.619141 C 837.52864,39.619147 837.0677,39.843106 836.75,40.291016 C 836.4375,40.738938 836.28125,41.392583 836.28125,42.251953 C 836.28125,43.05404 836.44531,43.673831 836.77344,44.111328 C 837.10677,44.54883 837.57552,44.76758 838.17969,44.767578 C 838.7526,44.76758 839.20312,44.543622 839.53125,44.095703 C 839.85937,43.647789 840.02343,43.033207 840.02344,42.251953 M 834.07031,49.853516 L 834.07031,37.955078 L 836.23438,37.955078 L 836.23438,39.103516 C 836.5625,38.603523 836.92708,38.23894 837.32813,38.009766 C 837.73437,37.780608 838.21093,37.666024 838.75781,37.666016 C 839.80468,37.666024 840.65364,38.080086 841.30469,38.908203 C 841.95572,39.731127 842.28124,40.814459 842.28125,42.158203 C 842.28124,43.517581 841.95572,44.621747 841.30469,45.470703 C 840.65364,46.314453 839.8151,46.736328 838.78906,46.736328 C 838.24739,46.736328 837.76302,46.621745 837.33594,46.392578 C 836.91406,46.163412 836.5625,45.830079 836.28125,45.392578 L 836.28125,49.853516 L 834.07031,49.853516 M 848.70313,45.392578 C 848.41666,45.835287 848.04166,46.173828 847.57813,46.408203 C 847.11458,46.63737 846.57552,46.751953 845.96094,46.751953 C 845.13802,46.751953 844.5026,46.517578 844.05469,46.048828 C 843.61198,45.580079 843.39062,44.913413 843.39063,44.048828 C 843.39062,43.246748 843.61198,42.634769 844.05469,42.212891 C 844.5026,41.79102 845.23958,41.501958 846.26563,41.345703 C 846.5,41.30925 846.80729,41.267583 847.1875,41.220703 C 848.15104,41.095708 848.63281,40.817063 848.63281,40.384766 C 848.63281,40.041022 848.52604,39.796231 848.3125,39.650391 C 848.09895,39.499356 847.74218,39.423835 847.24219,39.423828 C 846.78385,39.423835 846.43229,39.514981 846.1875,39.697266 C 845.94271,39.879564 845.82031,40.13998 845.82031,40.478516 L 845.82031,40.603516 L 843.69531,40.603516 L 843.69531,40.447266 C 843.69531,39.577481 844.0026,38.89519 844.61719,38.400391 C 845.23177,37.900399 846.08073,37.650399 847.16406,37.650391 C 848.35156,37.650399 849.26041,37.856128 849.89063,38.267578 C 850.52603,38.679044 850.84374,39.272794 850.84375,40.048828 L 850.84375,44.876953 C 850.84374,45.231121 850.8802,45.496746 850.95313,45.673828 C 851.02603,45.845704 851.14843,45.975912 851.32031,46.064453 L 851.32031,46.447266 L 848.95313,46.447266 C 848.87499,46.301432 848.8151,46.139974 848.77344,45.962891 C 848.73176,45.785808 848.70833,45.595704 848.70313,45.392578 M 848.66406,42.267578 C 848.29427,42.439457 847.86718,42.577478 847.38281,42.681641 C 846.90364,42.785811 846.65625,42.840498 846.64063,42.845703 C 846.23958,42.96029 845.95833,43.103519 845.79688,43.275391 C 845.64062,43.447269 845.5625,43.684248 845.5625,43.986328 C 845.5625,44.29883 845.66406,44.54883 845.86719,44.736328 C 846.07031,44.918621 846.34375,45.009767 846.6875,45.009766 C 847.30208,45.009767 847.78385,44.837892 848.13281,44.494141 C 848.48697,44.145185 848.66406,43.671227 848.66406,43.072266 L 848.66406,42.267578 M 857.96875,43.244141 L 860.21094,43.244141 C 860.11718,44.322268 859.72395,45.173829 859.03125,45.798828 C 858.33854,46.423828 857.44791,46.736328 856.35938,46.736328 C 855.125,46.736328 854.15625,46.335287 853.45313,45.533203 C 852.75521,44.725913 852.40625,43.611331 852.40625,42.189453 C 852.40625,40.772792 852.76302,39.663418 853.47656,38.861328 C 854.19531,38.054045 855.18229,37.650399 856.4375,37.650391 C 857.53645,37.650399 858.41666,37.942066 859.07813,38.525391 C 859.74478,39.108731 860.11718,39.92123 860.19531,40.962891 L 857.9375,40.962891 C 857.87499,40.509772 857.71614,40.163418 857.46094,39.923828 C 857.20572,39.684252 856.86979,39.56446 856.45313,39.564453 C 855.89062,39.56446 855.46875,39.785814 855.1875,40.228516 C 854.91146,40.67123 854.77343,41.335292 854.77344,42.220703 C 854.77343,43.038415 854.91666,43.668623 855.20313,44.111328 C 855.49479,44.54883 855.91145,44.76758 856.45313,44.767578 C 856.87499,44.76758 857.21354,44.639976 857.46875,44.384766 C 857.72395,44.12956 857.89062,43.749352 857.96875,43.244141 M 866.88281,43.869141 L 869.14844,43.869141 C 868.91926,44.764976 868.45572,45.4681 867.75781,45.978516 C 867.0651,46.483724 866.21874,46.736328 865.21875,46.736328 C 863.98958,46.736328 863.01562,46.32487 862.29688,45.501953 C 861.57812,44.67383 861.21875,43.554039 861.21875,42.142578 C 861.21875,40.751959 861.57292,39.655606 862.28125,38.853516 C 862.98958,38.051441 863.95833,37.650399 865.1875,37.650391 C 866.48958,37.650399 867.49478,38.046232 868.20313,38.837891 C 868.91145,39.624356 869.26562,40.74675 869.26563,42.205078 C 869.26562,42.366541 869.26301,42.488936 869.25781,42.572266 C 869.2578,42.650394 869.2526,42.725915 869.24219,42.798828 L 863.57031,42.798828 C 863.60156,43.465498 863.76302,43.968101 864.05469,44.306641 C 864.35156,44.645184 864.77604,44.814455 865.32813,44.814453 C 865.71874,44.814455 866.03906,44.738934 866.28906,44.587891 C 866.53906,44.431643 866.73697,44.19206 866.88281,43.869141 M 863.57031,41.306641 L 866.91406,41.306641 C 866.89322,40.73373 866.73958,40.298834 866.45313,40.001953 C 866.17187,39.699877 865.76562,39.548835 865.23438,39.548828 C 864.73958,39.548835 864.34895,39.699877 864.0625,40.001953 C 863.78125,40.304043 863.61718,40.738938 863.57031,41.306641"
+       id="text5207" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 840,17.646484 L 797.02608,17.646484"
+       id="path5439" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 802.5,25.146484 L 802.5,10.146484 L 787.5,17.646484 L 802.5,25.146484 z "
+       id="path5441" />
+    <g
+       id="g5459"
+       transform="translate(0,7.5)">
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 82.50003,75 L 54.020182,75"
+         id="path5453" />
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+         id="path5455" />
+      <path
+         id="path5457"
+         d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5464"
+       transform="matrix(-1,9.581637e-17,-9.581637e-17,-1,127.5,172.5)">
+      <path
+         id="path5466"
+         d="M 82.50003,75 L 54.020182,75"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path5468"
+         d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+         id="path5470" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 107.0625,80.560547 L 105.23438,78.779297 L 107.17969,76.763672 L 109.05469,78.591797 C 109.30467,78.123052 109.49608,77.587897 109.62891,76.986328 C 109.7617,76.384773 109.82811,75.728524 109.82813,75.017578 C 109.82811,73.119151 109.40233,71.646496 108.55078,70.599609 C 107.69921,69.544936 106.5078,69.017593 104.97656,69.017578 C 103.46093,69.017593 102.28124,69.54103 101.4375,70.587891 C 100.59374,71.634778 100.17187,73.111339 100.17188,75.017578 C 100.17187,76.916022 100.59374,78.392583 101.4375,79.447266 C 102.28124,80.494144 103.46093,81.017581 104.97656,81.017578 C 105.36718,81.017581 105.73436,80.978518 106.07813,80.900391 C 106.42968,80.822268 106.7578,80.708987 107.0625,80.560547 M 109.55859,82.916016 C 108.97264,83.306641 108.28905,83.603516 107.50781,83.806641 C 106.73436,84.009765 105.89061,84.111328 104.97656,84.111328 C 102.39843,84.111328 100.34765,83.291016 98.824219,81.650391 C 97.308592,80.009769 96.55078,77.798834 96.550781,75.017578 C 96.55078,72.228527 97.308592,70.017592 98.824219,68.384766 C 100.34765,66.744158 102.39843,65.923846 104.97656,65.923828 C 107.55468,65.923846 109.60545,66.744158 111.12891,68.384766 C 112.66014,70.025404 113.42576,72.23634 113.42578,75.017578 C 113.42576,76.236336 113.26951,77.353522 112.95703,78.369141 C 112.64451,79.376957 112.18358,80.259769 111.57422,81.017578 L 113.44922,82.810547 L 111.52734,84.826172 L 109.55859,82.916016"
+       id="text5474" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 158.94141,83.630859 L 153.99609,66.369141 L 157.67578,66.369141 L 160.62891,78.544922 L 163.125,66.369141 L 166.91016,66.369141 L 169.40625,78.544922 L 172.35938,66.369141 L 176.00391,66.369141 L 171.07031,83.630859 L 167.68359,83.630859 L 165.01172,70.412109 L 162.32813,83.630859 L 158.94141,83.630859"
+       id="text5482" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 218.52539,83.630859 L 218.52539,66.369141 L 231.05273,66.369141 L 231.05273,69.369141 L 222.0293,69.369141 L 222.0293,73.048828 L 230.2793,73.048828 L 230.2793,76.001953 L 222.0293,76.001953 L 222.0293,80.443359 L 231.47461,80.443359 L 231.47461,83.630859 L 218.52539,83.630859"
+       id="text5492" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 281.4375,73.916016 L 285.60938,73.916016 C 286.51561,73.916025 287.17968,73.732432 287.60156,73.365234 C 288.03124,72.998058 288.24608,72.419933 288.24609,71.630859 C 288.24608,70.880872 288.03905,70.314466 287.625,69.931641 C 287.21093,69.54103 286.59374,69.345717 285.77344,69.345703 L 281.4375,69.345703 L 281.4375,73.916016 M 277.88672,83.630859 L 277.88672,66.369141 L 286.25391,66.369141 C 288.13671,66.369158 289.53124,66.771501 290.4375,67.576172 C 291.34373,68.380875 291.79686,69.611342 291.79688,71.267578 C 291.79686,72.322277 291.5742,73.201182 291.12891,73.904297 C 290.69139,74.607431 290.05858,75.087899 289.23047,75.345703 C 289.98045,75.611336 290.5117,76.017586 290.82422,76.564453 C 291.14452,77.111335 291.32811,77.962896 291.375,79.119141 L 291.44531,81.158203 C 291.4453,81.173831 291.4453,81.197268 291.44531,81.228516 C 291.46873,82.259767 291.69139,82.884766 292.11328,83.103516 L 292.11328,83.630859 L 288.22266,83.630859 C 288.09764,83.388672 287.99999,83.091797 287.92969,82.740234 C 287.86718,82.380861 287.82811,81.95508 287.8125,81.462891 L 287.76563,79.646484 C 287.72655,78.576177 287.52343,77.853521 287.15625,77.478516 C 286.79686,77.103522 286.14452,76.916022 285.19922,76.916016 L 281.4375,76.916016 L 281.4375,83.630859 L 277.88672,83.630859"
+       id="text5500" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 343.24219,83.630859 L 343.24219,69.451172 L 338.12109,69.451172 L 338.12109,66.369141 L 351.87891,66.369141 L 351.87891,69.451172 L 346.79297,69.451172 L 346.79297,83.630859 L 343.24219,83.630859"
+       id="text5504" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 407.06836,83.630859 L 403.51758,83.630859 L 403.51758,77.197266 L 397.24805,66.369141 L 401.5957,66.369141 L 405.28711,73.810547 L 408.69727,66.369141 L 412.75195,66.369141 L 407.06836,77.197266 L 407.06836,83.630859"
+       id="text5518" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 458.08594,66.105469 L 461.67188,66.105469 L 461.67188,76.933594 C 461.67187,78.269536 461.93749,79.246098 462.46875,79.863281 C 462.99999,80.472659 463.84374,80.777346 465,80.777344 C 466.17187,80.777346 467.02343,80.472659 467.55469,79.863281 C 468.09374,79.25391 468.36327,78.277349 468.36328,76.933594 L 468.36328,66.105469 L 471.91406,66.105469 L 471.91406,77.320313 C 471.91405,79.437504 471.3203,81.062502 470.13281,82.195313 C 468.95311,83.328125 467.24999,83.894531 465.02344,83.894531 C 462.78124,83.894531 461.0625,83.332031 459.86719,82.207031 C 458.67969,81.074221 458.08594,79.445316 458.08594,77.320313 L 458.08594,66.105469"
+       id="text5522" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 523.22461,83.630859 L 523.22461,66.369141 L 526.77539,66.369141 L 526.77539,83.630859 L 523.22461,83.630859"
+       id="text5526" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 580.18359,75 C 580.18359,76.898444 580.60546,78.375005 581.44922,79.429688 C 582.29296,80.476566 583.47265,81.000003 584.98828,81 C 586.51952,81.000003 587.71093,80.476566 588.5625,79.429688 C 589.41405,78.375005 589.83983,76.898444 589.83984,75 C 589.83983,73.101573 589.41405,71.628918 588.5625,70.582031 C 587.71093,69.527358 586.51952,69.000015 584.98828,69 C 583.47265,69.000015 582.29296,69.523452 581.44922,70.570313 C 580.60546,71.617199 580.18359,73.093761 580.18359,75 M 576.5625,75 C 576.5625,72.210949 577.32031,70.000014 578.83594,68.367188 C 580.35937,66.726579 582.41015,65.906268 584.98828,65.90625 C 587.56639,65.906268 589.61717,66.726579 591.14063,68.367188 C 592.67186,70.007826 593.43748,72.218761 593.4375,75 C 593.43748,77.781256 592.67186,79.992191 591.14063,81.632813 C 589.61717,83.273438 587.56639,84.09375 584.98828,84.09375 C 582.41015,84.09375 580.35937,83.273438 578.83594,81.632813 C 577.32031,79.992191 576.5625,77.781256 576.5625,75"
+       id="text5530" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 641.97656,74.361328 L 645.41016,74.361328 C 646.33983,74.361337 647.01561,74.166025 647.4375,73.775391 C 647.85936,73.376963 648.0703,72.740245 648.07031,71.865234 C 648.0703,71.044934 647.86327,70.423841 647.44922,70.001953 C 647.03515,69.580092 646.41796,69.369155 645.59766,69.369141 L 641.97656,69.369141 L 641.97656,74.361328 M 641.95313,77.490234 L 641.95313,83.630859 L 638.40234,83.630859 L 638.40234,66.369141 L 646.07813,66.369141 C 647.89061,66.369158 649.26171,66.841814 650.19141,67.787109 C 651.12889,68.724624 651.59764,70.103529 651.59766,71.923828 C 651.59764,73.705088 651.14061,75.080087 650.22656,76.048828 C 649.31249,77.009772 648.0078,77.490241 646.3125,77.490234 L 641.95313,77.490234"
+       id="text5534" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 709.24805,63.919922 L 709.24805,66.369141 C 709.17772,66.369155 709.08007,66.365249 708.95508,66.357422 C 708.83007,66.349624 708.74413,66.345718 708.69727,66.345703 C 707.90819,66.345718 707.37304,66.498062 707.0918,66.802734 C 706.81835,67.099624 706.68163,67.732435 706.68164,68.701172 L 706.68164,71.513672 C 706.68163,72.66993 706.50585,73.490242 706.1543,73.974609 C 705.80273,74.458991 705.16992,74.806647 704.25586,75.017578 C 705.16992,75.228522 705.80273,75.572271 706.1543,76.048828 C 706.50585,76.525395 706.68163,77.341801 706.68164,78.498047 L 706.68164,81.322266 C 706.68163,82.283202 706.81835,82.912108 707.0918,83.208984 C 707.36523,83.505857 707.90038,83.654294 708.69727,83.654297 C 708.74413,83.654294 708.83007,83.650388 708.95508,83.642578 C 709.08007,83.634763 709.17772,83.630857 709.24805,83.630859 L 709.24805,86.080078 C 709.13866,86.080073 708.98632,86.08398 708.79102,86.091797 C 708.59569,86.099605 708.45116,86.103511 708.35742,86.103516 C 707.57616,86.103511 706.92382,86.056636 706.40039,85.962891 C 705.87695,85.869136 705.43163,85.724605 705.06445,85.529297 C 704.61913,85.263668 704.30273,84.904293 704.11523,84.451172 C 703.93554,84.005857 703.8457,83.228514 703.8457,82.119141 L 703.8457,79.166016 C 703.8457,78.095706 703.64648,77.337895 703.24805,76.892578 C 702.84961,76.439458 702.17773,76.212896 701.23242,76.212891 C 701.18554,76.212896 701.10742,76.216802 700.99805,76.224609 C 700.88867,76.232427 700.80664,76.236333 700.75195,76.236328 L 700.75195,73.787109 C 700.80664,73.787117 700.88867,73.791023 700.99805,73.798828 C 701.10742,73.806648 701.18554,73.810554 701.23242,73.810547 C 702.16992,73.810554 702.83789,73.583992 703.23633,73.130859 C 703.64257,72.677743 703.8457,71.912119 703.8457,70.833984 L 703.8457,67.904297 C 703.8457,66.787124 703.93554,66.001968 704.11523,65.548828 C 704.30273,65.095719 704.61913,64.736345 705.06445,64.470703 C 705.43163,64.275408 705.87695,64.130876 706.40039,64.037109 C 706.92382,63.943377 707.57616,63.896502 708.35742,63.896484 C 708.45116,63.896502 708.59569,63.900408 708.79102,63.908203 C 708.98632,63.916033 709.13866,63.919939 709.24805,63.919922 M 703.0957,93.966797 L 709.01367,93.966797 L 709.01367,96.462891 L 706.25977,96.462891 L 706.25977,113.8418 L 709.01367,113.8418 L 709.01367,116.33789 L 703.0957,116.33789 L 703.0957,93.966797"
+       id="text5546" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 760.75195,63.908203 L 761.54883,63.908203 C 762.4082,63.90822 763.09961,63.955095 763.62305,64.048828 C 764.14648,64.142595 764.58398,64.291033 764.93555,64.494141 C 765.38085,64.744157 765.69335,65.103532 765.87305,65.572266 C 766.06054,66.033218 766.15429,66.806655 766.1543,67.892578 L 766.1543,70.845703 C 766.15429,71.916025 766.35351,72.677743 766.75195,73.130859 C 767.15038,73.57618 767.82226,73.798836 768.76758,73.798828 C 768.81444,73.798836 768.89257,73.794929 769.00195,73.787109 C 769.11132,73.779304 769.19335,73.775398 769.24805,73.775391 L 769.24805,76.224609 L 768.81445,76.224609 C 767.83788,76.224614 767.15038,76.443364 766.75195,76.880859 C 766.35351,77.318363 766.15429,78.076175 766.1543,79.154297 L 766.1543,82.107422 C 766.15429,83.224607 766.06054,84.009763 765.87305,84.462891 C 765.69335,84.916012 765.38085,85.267574 764.93555,85.517578 C 764.56835,85.712886 764.12304,85.857417 763.59961,85.951172 C 763.07617,86.044917 762.42382,86.091792 761.64258,86.091797 C 761.54883,86.091792 761.40429,86.087886 761.20898,86.080078 C 761.01367,86.072261 760.86133,86.068355 760.75195,86.068359 L 760.75195,83.619141 C 760.82226,83.619138 760.91992,83.623044 761.04492,83.630859 C 761.16992,83.638669 761.25586,83.642576 761.30273,83.642578 C 762.09179,83.642576 762.62304,83.490232 762.89648,83.185547 C 763.17773,82.88867 763.31836,82.263671 763.31836,81.310547 L 763.31836,78.509766 C 763.31836,77.337895 763.49414,76.513677 763.8457,76.037109 C 764.19726,75.55274 764.83007,75.20899 765.74414,75.005859 C 764.83007,74.794928 764.19726,74.447272 763.8457,73.962891 C 763.49414,73.478523 763.31836,72.658212 763.31836,71.501953 L 763.31836,68.666016 C 763.31836,67.712904 763.17773,67.087905 762.89648,66.791016 C 762.62304,66.486343 762.09179,66.333999 761.30273,66.333984 C 761.25586,66.333999 761.16992,66.337906 761.04492,66.345703 C 760.91992,66.35353 760.82226,66.357437 760.75195,66.357422 L 760.75195,63.908203 M 767.00977,93.955078 L 767.00977,116.32617 L 761.08008,116.32617 L 761.08008,113.83008 L 763.8457,113.83008 L 763.8457,96.451172 L 761.08008,96.451172 L 761.08008,93.955078 L 767.00977,93.955078"
+       id="text5554" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 823.79883,62.977287 L 826.21289,62.977287 L 826.21289,86.977287 L 823.79883,86.977287 L 823.79883,62.977287 M 827.10352,113.54369 L 821.29102,93.6101 L 822.87305,93.6101 L 828.70898,113.54369 L 827.10352,113.54369"
+       id="text5564" />
+    <g
+       id="g3597">
+      <path
+         id="text5570"
+         d="M 22.996094,139.10156 C 22.907541,140.40886 22.403635,141.44792 21.484375,142.21875 C 20.565095,142.98958 19.365878,143.375 17.886719,143.375 C 16.183589,143.375 14.859372,142.84375 13.914063,141.78125 C 12.968749,140.71875 12.496093,139.22917 12.496094,137.3125 C 12.496093,135.35417 12.977863,133.85418 13.941406,132.8125 C 14.904945,131.77084 16.29036,131.25001 18.097656,131.25 C 19.566398,131.25001 20.726554,131.60808 21.578125,132.32422 C 22.429677,133.04037 22.897124,134.05209 22.980469,135.35938 L 20.644531,135.35938 C 20.545564,134.70834 20.279939,134.21225 19.847656,133.87109 C 19.415357,133.52996 18.832024,133.35938 18.097656,133.35938 C 17.055984,133.35938 16.264318,133.69532 15.722656,134.36719 C 15.180986,135.03907 14.910153,136.02084 14.910156,137.3125 C 14.910153,138.5625 15.179684,139.52865 15.71875,140.21094 C 16.257808,140.89323 17.024734,141.23438 18.019531,141.23438 C 18.738274,141.23438 19.326815,141.05078 19.785156,140.68359 C 20.243481,140.31641 20.540356,139.78907 20.675781,139.10156 L 22.996094,139.10156 z M 29.558594,142 C 29.27213,142.44271 28.89713,142.77995 28.433594,143.01172 C 27.970048,143.24349 27.430986,143.35937 26.816406,143.35938 C 25.993487,143.35937 25.359373,143.125 24.914063,142.65625 C 24.468749,142.1875 24.246093,141.52083 24.246094,140.65625 C 24.246093,139.85417 24.468749,139.24219 24.914063,138.82031 C 25.359373,138.39844 26.09505,138.10938 27.121094,137.95313 C 27.355465,137.91667 27.662756,137.87501 28.042969,137.82813 C 29.006505,137.70313 29.488275,137.42448 29.488281,136.99219 C 29.488275,136.64844 29.381505,136.40235 29.167969,136.25391 C 28.954422,136.10548 28.597651,136.03126 28.097656,136.03125 C 27.639319,136.03126 27.287757,136.1224 27.042969,136.30469 C 26.798174,136.48699 26.675778,136.7474 26.675781,137.08594 L 26.675781,137.21094 L 24.550781,137.21094 L 24.550781,137.05469 C 24.55078,136.1849 24.858072,135.50131 25.472656,135.00391 C 26.087237,134.50652 26.936195,134.25782 28.019531,134.25781 C 29.207026,134.25782 30.117181,134.46355 30.75,134.875 C 31.382805,135.28647 31.699211,135.88022 31.699219,136.65625 L 31.699219,141.48438 C 31.699211,141.83854 31.735669,142.10287 31.808594,142.27734 C 31.881502,142.45182 32.003898,142.58333 32.175781,142.67188 L 32.175781,143.05469 L 29.808594,143.05469 C 29.730463,142.90885 29.670567,142.7474 29.628906,142.57031 C 29.587234,142.39323 29.563796,142.20313 29.558594,142 L 29.558594,142 z M 29.519531,138.875 C 29.149734,139.04688 28.723953,139.1849 28.242188,139.28906 C 27.760413,139.39323 27.511715,139.44792 27.496094,139.45313 C 27.095049,139.56771 26.815101,139.71094 26.65625,139.88281 C 26.497393,140.05469 26.417966,140.29167 26.417969,140.59375 C 26.417966,140.90625 26.519528,141.15495 26.722656,141.33984 C 26.925778,141.52474 27.199215,141.61719 27.542969,141.61719 C 28.157548,141.61719 28.64062,141.44401 28.992188,141.09766 C 29.343744,140.7513 29.519525,140.27865 29.519531,139.67969 L 29.519531,138.875 z M 39.691406,138.85938 C 39.691399,138.00521 39.529941,137.35287 39.207031,136.90234 C 38.884108,136.45183 38.415359,136.22657 37.800781,136.22656 C 37.19661,136.22657 36.736975,136.45053 36.421875,136.89844 C 36.106767,137.34636 35.949216,138.00001 35.949219,138.85938 C 35.949216,139.66146 36.11458,140.28125 36.445313,140.71875 C 36.776038,141.15625 37.243485,141.375 37.847656,141.375 C 38.420567,141.375 38.871088,141.15104 39.199219,140.70313 C 39.527337,140.25521 39.691399,139.64063 39.691406,138.85938 L 39.691406,138.85938 z M 33.738281,146.46094 L 33.738281,134.5625 L 35.902344,134.5625 L 35.902344,135.71094 C 36.230465,135.21095 36.59635,134.84636 37,134.61719 C 37.403641,134.38803 37.878901,134.27345 38.425781,134.27344 C 39.472649,134.27345 40.321607,134.68621 40.972656,135.51172 C 41.623689,136.33725 41.94921,137.42188 41.949219,138.76563 C 41.94921,140.125 41.623689,141.22787 40.972656,142.07422 C 40.321607,142.92057 39.483066,143.34375 38.457031,143.34375 C 37.915359,143.34375 37.432287,143.22917 37.007813,143 C 36.583329,142.77083 36.230465,142.4375 35.949219,142 L 35.949219,146.46094 L 33.738281,146.46094 z M 43.027344,140.28906 L 45.292969,140.28906 C 45.313799,140.72136 45.470049,141.04297 45.761719,141.25391 C 46.053382,141.46485 46.490881,141.57031 47.074219,141.57031 C 47.516922,141.57031 47.85937,141.4961 48.101563,141.34766 C 48.343744,141.19922 48.464838,140.98959 48.464844,140.71875 C 48.464838,140.33334 48.011713,140.04427 47.105469,139.85156 C 46.735673,139.77344 46.441402,139.70573 46.222656,139.64844 C 45.118487,139.36719 44.351561,139.03386 43.921875,138.64844 C 43.492187,138.26303 43.277343,137.74219 43.277344,137.08594 C 43.277343,136.21615 43.591145,135.52735 44.21875,135.01953 C 44.846352,134.51173 45.696611,134.25782 46.769531,134.25781 C 47.904943,134.25782 48.796869,134.51043 49.445313,135.01563 C 50.093742,135.52084 50.438794,136.23178 50.480469,137.14844 L 48.269531,137.14844 C 48.253901,136.78907 48.117182,136.51042 47.859375,136.3125 C 47.601557,136.11459 47.243485,136.01563 46.785156,136.01563 C 46.352861,136.01563 46.031246,136.08074 45.820313,136.21094 C 45.609372,136.34115 45.503903,136.53646 45.503906,136.79688 C 45.503903,137.13542 46.069007,137.4349 47.199219,137.69531 C 47.45963,137.75261 47.665359,137.79948 47.816406,137.83594 C 48.946608,138.10157 49.718743,138.42188 50.132813,138.79688 C 50.546867,139.17188 50.753898,139.70052 50.753906,140.38281 C 50.753898,141.34636 50.414055,142.08073 49.734375,142.58594 C 49.054681,143.09115 48.066401,143.34375 46.769531,143.34375 C 45.597653,143.34375 44.680987,143.08073 44.019531,142.55469 C 43.358072,142.02865 43.027343,141.30469 43.027344,140.38281 L 43.027344,140.28906 z M 57.011719,143.05469 L 57.011719,131.54688 L 59.378906,131.54688 L 59.378906,140.92969 L 64.996094,140.92969 L 64.996094,143.05469 L 57.011719,143.05469 z M 67.972656,138.79688 C 67.972653,139.64063 68.14583,140.29167 68.492188,140.75 C 68.838538,141.20834 69.332027,141.4375 69.972656,141.4375 C 70.602859,141.4375 71.09114,141.20834 71.4375,140.75 C 71.783847,140.29167 71.957024,139.64063 71.957031,138.79688 C 71.957024,137.95834 71.78515,137.3112 71.441406,136.85547 C 71.09765,136.39975 70.608067,136.17188 69.972656,136.17188 C 69.332027,136.17188 68.838538,136.39975 68.492188,136.85547 C 68.14583,137.3112 67.972653,137.95834 67.972656,138.79688 L 67.972656,138.79688 z M 65.667969,138.79688 C 65.667968,137.38542 66.05078,136.27605 66.816406,135.46875 C 67.582029,134.66147 68.634111,134.25782 69.972656,134.25781 C 71.305983,134.25782 72.356764,134.66147 73.125,135.46875 C 73.89322,136.27605 74.277335,137.38542 74.277344,138.79688 C 74.277335,140.21354 73.89322,141.32552 73.125,142.13281 C 72.356764,142.9401 71.305983,143.34375 69.972656,143.34375 C 68.634111,143.34375 67.582029,142.9401 66.816406,142.13281 C 66.05078,141.32552 65.667968,140.21354 65.667969,138.79688 L 65.667969,138.79688 z M 80.949219,139.85156 L 83.191406,139.85156 C 83.097648,140.92969 82.704419,141.78125 82.011719,142.40625 C 81.319004,143.03125 80.42838,143.34375 79.339844,143.34375 C 78.105465,143.34375 77.138019,142.94141 76.4375,142.13672 C 75.736978,141.33203 75.386718,140.21875 75.386719,138.79688 C 75.386718,137.38021 75.744791,136.26954 76.460938,135.46484 C 77.177081,134.66016 78.162757,134.25782 79.417969,134.25781 C 80.516921,134.25782 81.398431,134.54949 82.0625,135.13281 C 82.726555,135.71615 83.097648,136.52865 83.175781,137.57031 L 80.917969,137.57031 C 80.855463,137.11719 80.696609,136.77084 80.441406,136.53125 C 80.186193,136.29167 79.850255,136.17188 79.433594,136.17188 C 78.87109,136.17188 78.450517,136.39324 78.171875,136.83594 C 77.893226,137.27865 77.753903,137.94271 77.753906,138.82813 C 77.753903,139.64584 77.898434,140.27474 78.1875,140.71484 C 78.476559,141.15495 78.891923,141.375 79.433594,141.375 C 79.855464,141.375 80.194005,141.2474 80.449219,140.99219 C 80.704421,140.73698 80.871088,140.35677 80.949219,139.85156 L 80.949219,139.85156 z M 84.675781,143.05469 L 84.675781,131.54688 L 86.886719,131.54688 L 86.886719,137.58594 L 89.589844,134.5625 L 92.324219,134.5625 L 89.363281,137.71094 L 92.503906,143.05469 L 89.777344,143.05469 L 87.746094,139.4375 L 86.886719,140.36719 L 86.886719,143.05469 L 84.675781,143.05469 z "
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+      <path
+         id="path5584"
+         d="M 23.746094,146.25 L 12.496094,161.25 L 19.996094,161.25 L 19.996094,168.75 L 27.496094,168.75 L 27.496094,161.25 L 34.996094,161.25 L 23.746094,146.25 z M 22.714844,150.46875 L 24.746094,150.46875 L 27.871094,159.09375 L 25.996094,159.09375 L 25.402344,157.3125 L 22.058594,157.3125 L 21.496094,159.09375 L 19.621094,159.09375 L 22.714844,150.46875 z M 23.746094,152.1875 L 22.527344,155.84375 L 24.933594,155.84375 L 23.746094,152.1875 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 119.9707,129.82617 L 117.58008,137.17383 L 122.37305,137.17383 L 119.9707,129.82617 M 117.9082,126.36914 L 122.00977,126.36914 L 128.23242,143.63086 L 124.50586,143.63086 L 123.33398,140.08008 L 116.64258,140.08008 L 115.50586,143.63086 L 111.76758,143.63086 L 117.9082,126.36914"
+       id="text5641" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 172.98047,138.29297 L 176.48438,138.29297 C 176.61718,139.23829 177.0039,139.94141 177.64453,140.40234 C 178.28515,140.85547 179.21093,141.08203 180.42188,141.08203 C 181.45312,141.08203 182.23046,140.89844 182.75391,140.53125 C 183.27733,140.16407 183.53905,139.6211 183.53906,138.90234 C 183.53905,137.85547 182.03515,136.98829 179.02734,136.30078 C 178.98827,136.29298 178.95312,136.28516 178.92188,136.27734 C 178.84374,136.26173 178.72265,136.23438 178.55859,136.19531 C 176.94921,135.84376 175.80078,135.44923 175.11328,135.01172 C 174.5039,134.6211 174.03906,134.09767 173.71875,133.44141 C 173.39844,132.77735 173.23828,131.99611 173.23828,131.09766 C 173.23828,129.41798 173.80859,128.13283 174.94922,127.24219 C 176.08984,126.34377 177.73828,125.89455 179.89453,125.89453 C 181.91015,125.89455 183.48436,126.37111 184.61719,127.32422 C 185.7578,128.27736 186.35936,129.62111 186.42188,131.35547 L 183.01172,131.35547 C 182.94921,130.51954 182.6289,129.88283 182.05078,129.44531 C 181.47265,129.00783 180.64843,128.78908 179.57813,128.78906 C 178.64843,128.78908 177.92968,128.97267 177.42188,129.33984 C 176.92187,129.69923 176.67187,130.21486 176.67188,130.88672 C 176.67187,131.80079 177.65234,132.48439 179.61328,132.9375 C 180.14452,133.06251 180.55859,133.16017 180.85547,133.23047 C 182.11327,133.55079 183.0039,133.80079 183.52734,133.98047 C 184.05858,134.16017 184.51952,134.35938 184.91016,134.57813 C 185.61327,134.96876 186.14061,135.48829 186.49219,136.13672 C 186.84374,136.77735 187.01952,137.54688 187.01953,138.44531 C 187.01952,140.24219 186.41405,141.63672 185.20313,142.62891 C 183.99218,143.61328 182.28515,144.10547 180.08203,144.10547 C 177.91015,144.10547 176.20703,143.60156 174.97266,142.59375 C 173.73828,141.58594 173.07422,140.15235 172.98047,138.29297"
+       id="text5645" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 236.16211,140.51367 L 239.00977,140.51367 C 240.65819,140.51367 241.8496,140.08399 242.58398,139.22461 C 243.32616,138.35743 243.69725,136.95508 243.69727,135.01758 C 243.69725,133.0879 243.3535,131.66993 242.66602,130.76367 C 241.9785,129.85744 240.90429,129.40431 239.44336,129.4043 L 236.16211,129.4043 L 236.16211,140.51367 M 232.68164,143.63086 L 232.68164,126.36914 L 239.44336,126.36914 C 242.09179,126.36916 244.06444,127.084 245.36133,128.51367 C 246.666,129.94337 247.31834,132.11134 247.31836,135.01758 C 247.31834,136.59571 247.07616,137.98633 246.5918,139.18945 C 246.11522,140.39258 245.41991,141.36133 244.50586,142.0957 C 243.81835,142.64258 243.0371,143.03711 242.16211,143.2793 C 241.2871,143.51367 240.06054,143.63086 238.48242,143.63086 L 232.68164,143.63086"
+       id="text5649" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 293.97656,143.63086 L 293.97656,126.36914 L 306.02344,126.36914 L 306.02344,129.36914 L 297.48047,129.36914 L 297.48047,133.2832 L 304.96875,133.2832 L 304.96875,136.2832 L 297.48047,136.2832 L 297.48047,143.63086 L 293.97656,143.63086"
+       id="text5653" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 365.17969,141.57422 C 364.53905,142.44141 363.80858,143.07813 362.98828,143.48438 C 362.17577,143.89062 361.21874,144.09375 360.11719,144.09375 C 357.70312,144.09375 355.74609,143.25781 354.24609,141.58594 C 352.7539,139.90625 352.00781,137.70313 352.00781,134.97656 C 352.00781,132.22657 352.7539,130.02736 354.24609,128.37891 C 355.73828,126.73049 357.72656,125.90627 360.21094,125.90625 C 362.37499,125.90627 364.14061,126.4258 365.50781,127.46484 C 366.87498,128.49611 367.68748,129.91798 367.94531,131.73047 L 364.32422,131.73047 C 364.10546,130.83204 363.65624,130.14845 362.97656,129.67969 C 362.30468,129.21095 361.42577,128.97658 360.33984,128.97656 C 358.89452,128.97658 357.75781,129.50783 356.92969,130.57031 C 356.10937,131.62501 355.69921,133.08595 355.69922,134.95313 C 355.69921,136.82813 356.1289,138.29688 356.98828,139.35938 C 357.84765,140.42188 359.02734,140.95313 360.52734,140.95313 C 361.65233,140.95313 362.59374,140.6211 363.35156,139.95703 C 364.10936,139.29297 364.57811,138.38282 364.75781,137.22656 L 360.84375,137.22656 L 360.84375,134.27344 L 367.99219,134.27344 L 367.99219,143.61328 L 365.61328,143.61328 L 365.17969,141.57422"
+       id="text5657" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 412.86328,143.63086 L 412.86328,126.36914 L 416.4375,126.36914 L 416.4375,132.80273 L 423.5625,132.80273 L 423.5625,126.36914 L 427.13672,126.36914 L 427.13672,143.63086 L 423.5625,143.63086 L 423.5625,135.97852 L 416.4375,135.97852 L 416.4375,143.63086 L 412.86328,143.63086"
+       id="text5661" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 474.48047,136.95703 L 477.91406,136.95703 L 477.91406,139.04297 C 477.91406,139.64453 478.09375,140.10547 478.45313,140.42578 C 478.8125,140.73828 479.32812,140.89453 480,140.89453 C 480.73437,140.89453 481.24609,140.70313 481.53516,140.32031 C 481.82421,139.9375 481.96874,139.21875 481.96875,138.16406 L 481.96875,126.12891 L 485.51953,126.12891 L 485.51953,138.32813 C 485.51952,139.42188 485.45311,140.22657 485.32031,140.74219 C 485.1953,141.25 484.98436,141.69922 484.6875,142.08984 C 484.23436,142.66797 483.61327,143.10938 482.82422,143.41406 C 482.03515,143.71875 481.10937,143.87109 480.04688,143.87109 C 479.07031,143.87109 478.20703,143.73828 477.45703,143.47266 C 476.70703,143.20703 476.08203,142.8125 475.58203,142.28906 C 475.18359,141.86719 474.89844,141.39844 474.72656,140.88281 C 474.5625,140.35938 474.48047,139.5 474.48047,138.30469 L 474.48047,136.95703"
+       id="text5665" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 532.32422,143.63086 L 532.32422,126.36914 L 535.875,126.36914 L 535.875,133.45898 L 542.61328,126.36914 L 547.05469,126.36914 L 540.16406,133.35352 L 547.67578,143.63086 L 543.33984,143.63086 L 537.71484,135.73242 L 535.875,137.56055 L 535.875,143.63086 L 532.32422,143.63086"
+       id="text5669" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 594.01172,143.63086 L 594.01172,126.36914 L 597.5625,126.36914 L 597.5625,140.44336 L 605.98828,140.44336 L 605.98828,143.63086 L 594.01172,143.63086"
+       id="text5673" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 143.15039,203.63086 L 143.15039,200.63086 L 152.53711,189.49805 L 143.33789,189.49805 L 143.33789,186.36914 L 156.84961,186.36914 L 156.84961,189.36914 L 147.43945,200.51367 L 156.63867,200.51367 L 156.63867,203.63086 L 143.15039,203.63086"
+       id="text5679" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 202.37109,203.63086 L 207.79688,194.81836 L 202.37109,186.36914 L 206.47266,186.36914 L 210,192.4043 L 213.50391,186.36914 L 217.62891,186.36914 L 212.20313,194.79492 L 217.62891,203.63086 L 213.52734,203.63086 L 210,197.6543 L 206.47266,203.63086 L 202.37109,203.63086"
+       id="text5683" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 277.875,197.68359 C 277.74217,199.64454 276.98436,201.20313 275.60156,202.35938 C 274.22655,203.51563 272.42968,204.09375 270.21094,204.09375 C 267.65624,204.09375 265.66796,203.29688 264.24609,201.70313 C 262.83203,200.10938 262.125,197.87501 262.125,195 C 262.125,192.06251 262.84765,189.81251 264.29297,188.25 C 265.73828,186.68752 267.8164,185.90627 270.52734,185.90625 C 272.73046,185.90627 274.46874,186.44533 275.74219,187.52344 C 277.02342,188.59377 277.72655,190.10939 277.85156,192.07031 L 274.34766,192.07031 C 274.19921,191.09376 273.80077,190.35158 273.15234,189.84375 C 272.50389,189.32814 271.6289,189.07033 270.52734,189.07031 C 268.96484,189.07033 267.77734,189.57423 266.96484,190.58203 C 266.15234,191.58986 265.74609,193.06251 265.74609,195 C 265.74609,196.87501 266.14843,198.32422 266.95313,199.34766 C 267.76562,200.3711 268.91796,200.88282 270.41016,200.88281 C 271.48827,200.88282 272.37108,200.60938 273.05859,200.0625 C 273.74608,199.50782 274.19139,198.71485 274.39453,197.68359 L 277.875,197.68359"
+       id="text5687" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 328.33594,203.63086 L 322.38281,186.36914 L 326.32031,186.36914 L 329.98828,199.2832 L 333.72656,186.36914 L 337.61719,186.36914 L 331.73438,203.63086 L 328.33594,203.63086"
+       id="text5691" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 386.32031,200.51367 L 390.52734,200.51367 C 391.51952,200.51367 392.24218,200.33399 392.69531,199.97461 C 393.14843,199.61524 393.37499,199.04883 393.375,198.27539 C 393.37499,197.47071 393.15233,196.89258 392.70703,196.54102 C 392.26171,196.18165 391.52733,196.00196 390.50391,196.00195 L 386.32031,196.00195 L 386.32031,200.51367 M 386.32031,193.04883 L 390.375,193.04883 C 391.24999,193.04884 391.89061,192.9004 392.29688,192.60352 C 392.70311,192.29884 392.90624,191.82228 392.90625,191.17383 C 392.90624,190.54103 392.70702,190.084 392.30859,189.80273 C 391.91796,189.51369 391.26561,189.36915 390.35156,189.36914 L 386.32031,189.36914 L 386.32031,193.04883 M 382.92188,203.63086 L 382.92188,186.36914 L 391.05469,186.36914 C 392.8203,186.36916 394.16405,186.74416 395.08594,187.49414 C 396.01561,188.23634 396.48045,189.31837 396.48047,190.74023 C 396.48045,191.61525 396.30858,192.34571 395.96484,192.93164 C 395.62108,193.51759 395.10545,193.97071 394.41797,194.29102 C 395.30858,194.6504 395.97264,195.16993 396.41016,195.84961 C 396.85545,196.52149 397.07811,197.36133 397.07813,198.36914 C 397.07811,200.04883 396.53123,201.34571 395.4375,202.25977 C 394.34374,203.17383 392.79296,203.63086 390.78516,203.63086 L 382.92188,203.63086"
+       id="text5695" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 442.88672,203.63086 L 442.88672,186.36914 L 446.60156,186.36914 L 453.60938,198.22852 L 453.60938,186.36914 L 457.11328,186.36914 L 457.11328,203.63086 L 453.44531,203.63086 L 446.39063,191.77148 L 446.39063,203.63086 L 442.88672,203.63086"
+       id="text5699" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 501.32813,203.63086 L 501.32813,186.36914 L 506.57813,186.36914 L 510.01172,199.50586 L 513.39844,186.36914 L 518.67188,186.36914 L 518.67188,203.63086 L 515.34375,203.63086 L 515.34375,189.70898 L 511.83984,203.63086 L 508.20703,203.63086 L 504.65625,189.70898 L 504.65625,203.63086 L 501.32813,203.63086"
+       id="text5703" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 658.22461,134.6543 L 658.22461,131.10352 L 661.77539,131.10352 L 661.77539,134.6543 L 658.22461,134.6543 M 658.22461,143.63086 L 658.22461,140.10352 L 661.77539,140.10352 L 661.77539,143.63086 L 658.22461,143.63086 M 658.24805,164.6543 L 658.24805,161.10352 L 661.77539,161.10352 L 661.77539,164.6543 L 658.24805,164.6543 M 658.24805,177.68555 L 658.24805,176.31445 C 658.90429,176.12695 659.38867,175.83789 659.70117,175.44727 C 660.01367,175.05664 660.16992,174.54883 660.16992,173.92383 L 660.16992,173.63086 L 658.22461,173.63086 L 658.22461,170.10352 L 661.77539,170.10352 L 661.77539,173.49023 C 661.77539,174.66211 661.47851,175.59961 660.88477,176.30273 C 660.29101,177.01367 659.41211,177.47461 658.24805,177.68555"
+       id="text5725" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 720.78516,126.7793 L 723.03516,126.7793 L 723.03516,133.33008 L 720.78516,133.33008 L 720.78516,126.7793 M 716.96484,126.7793 L 719.21484,126.7793 L 719.21484,133.33008 L 716.96484,133.33008 L 716.96484,126.7793 M 718.88672,156.7793 L 721.13672,156.7793 L 721.13672,163.33008 L 718.88672,163.33008 L 718.88672,156.7793"
+       id="text5731" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 772.5,140.60938 L 772.5,129.10156 L 780.85156,129.10156 L 780.85156,131.10156 L 774.83594,131.10156 L 774.83594,133.55469 L 780.33594,133.55469 L 780.33594,135.52344 L 774.83594,135.52344 L 774.83594,138.48438 L 781.13281,138.48438 L 781.13281,140.60938 L 772.5,140.60938 M 782.74219,140.60938 L 782.74219,132.11719 L 784.96875,132.11719 L 784.96875,133.125 C 785.28645,132.71355 785.66145,132.40626 786.09375,132.20313 C 786.52604,131.9948 787.00781,131.89063 787.53906,131.89063 C 788.47656,131.89063 789.17708,132.13543 789.64063,132.625 C 790.10937,133.10938 790.34374,133.84115 790.34375,134.82031 L 790.34375,140.60938 L 788.07031,140.60938 L 788.07031,135.47656 C 788.07031,134.86719 787.96614,134.4323 787.75781,134.17188 C 787.55468,133.91147 787.22135,133.78126 786.75781,133.78125 C 786.22135,133.78126 785.79687,133.94271 785.48438,134.26563 C 785.17187,134.58334 785.01562,135.01823 785.01563,135.57031 L 785.01563,140.60938 L 782.74219,140.60938 M 796.07813,140.67188 C 795.86979,140.67708 795.61979,140.6849 795.32813,140.69531 C 795.04166,140.71094 794.85937,140.71875 794.78125,140.71875 C 793.91146,140.71875 793.3151,140.55729 792.99219,140.23438 C 792.67448,139.90625 792.51562,139.26302 792.51563,138.30469 L 792.51563,133.71094 L 791.39063,133.71094 L 791.39063,132.11719 L 792.51563,132.11719 L 792.51563,129.79688 L 794.76563,129.79688 L 794.76563,132.11719 L 796.07813,132.11719 L 796.07813,133.71094 L 794.76563,133.71094 L 794.76563,138.41406 C 794.76562,138.63802 794.8151,138.78646 794.91406,138.85938 C 795.01302,138.92709 795.21614,138.96094 795.52344,138.96094 L 796.07813,138.96094 L 796.07813,140.67188 M 802.63281,138.03125 L 804.89844,138.03125 C 804.66926,138.92709 804.20572,139.63021 803.50781,140.14063 C 802.8151,140.64583 801.96874,140.89844 800.96875,140.89844 C 799.73958,140.89844 798.76562,140.48698 798.04688,139.66406 C 797.32812,138.83594 796.96875,137.71615 796.96875,136.30469 C 796.96875,134.91407 797.32292,133.81772 798.03125,133.01563 C 798.73958,132.21355 799.70833,131.81251 800.9375,131.8125 C 802.23958,131.81251 803.24478,132.20834 803.95313,133 C 804.66145,133.78647 805.01562,134.90886 805.01563,136.36719 C 805.01562,136.52865 805.01301,136.65105 805.00781,136.73438 C 805.0078,136.8125 805.0026,136.88802 804.99219,136.96094 L 799.32031,136.96094 C 799.35156,137.62761 799.51302,138.13021 799.80469,138.46875 C 800.10156,138.80729 800.52604,138.97656 801.07813,138.97656 C 801.46874,138.97656 801.78906,138.90104 802.03906,138.75 C 802.28906,138.59375 802.48697,138.35417 802.63281,138.03125 M 799.32031,135.46875 L 802.66406,135.46875 C 802.64322,134.89584 802.48958,134.46094 802.20313,134.16406 C 801.92187,133.86199 801.51562,133.71094 800.98438,133.71094 C 800.48958,133.71094 800.09895,133.86199 799.8125,134.16406 C 799.53125,134.46615 799.36718,134.90105 799.32031,135.46875 M 806.52344,140.60938 L 806.52344,132.11719 L 808.63281,132.11719 L 808.63281,133.57031 C 808.92968,132.98699 809.27604,132.5599 809.67188,132.28906 C 810.0677,132.01303 810.53906,131.87501 811.08594,131.875 C 811.17447,131.87501 811.24218,131.87761 811.28906,131.88281 C 811.34114,131.88282 811.38281,131.88543 811.41406,131.89063 L 811.42188,134.19531 L 810.66406,134.19531 C 810.04427,134.19532 809.57812,134.35678 809.26563,134.67969 C 808.95312,135.00261 808.79687,135.48178 808.79688,136.11719 L 808.79688,140.60938 L 806.52344,140.60938"
+       id="text5737" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 787.5,172.5 L 787.5,157.5 L 772.5,165 L 787.5,172.5 z "
+       id="path5745" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 810,150 L 810,165 L 780,165"
+       id="path5747" />
+    <g
+       id="g3601">
+      <path
+         id="text5753"
+         d="M 12.496094,197.64063 L 14.832032,197.64063 C 14.92057,198.27084 15.178382,198.73828 15.605469,199.04297 C 16.032548,199.34766 16.649735,199.5 17.457032,199.5 C 18.144525,199.5 18.662754,199.37761 19.011719,199.13281 C 19.36067,198.88802 19.535149,198.52604 19.535157,198.04688 C 19.535149,197.34896 18.532546,196.77084 16.527344,196.3125 C 16.501298,196.3073 16.47786,196.30209 16.457032,196.29688 C 16.404944,196.28646 16.324215,196.26823 16.214844,196.24219 C 15.141924,196.00782 14.3763,195.7448 13.917969,195.45313 C 13.511717,195.19271 13.201822,194.84245 12.988282,194.40234 C 12.774739,193.96225 12.667968,193.44272 12.667969,192.84375 C 12.667968,191.72397 13.048176,190.8659 13.808594,190.26953 C 14.569008,189.67319 15.667965,189.37501 17.105469,189.375 C 18.449212,189.37501 19.499993,189.69272 20.257813,190.32813 C 21.015616,190.96355 21.415355,191.85938 21.457032,193.01563 L 19.183594,193.01563 C 19.14192,192.45834 18.928379,192.03386 18.542969,191.74219 C 18.157546,191.45053 17.608067,191.3047 16.894532,191.30469 C 16.274735,191.3047 15.796871,191.42579 15.460938,191.66797 C 15.124997,191.91017 14.957028,192.25522 14.957032,192.70313 C 14.957028,193.31251 15.610674,193.76824 16.917969,194.07031 C 17.27213,194.15365 17.548172,194.21876 17.746094,194.26563 C 18.584629,194.47917 19.17968,194.64584 19.53125,194.76563 C 19.882805,194.88542 20.188794,195.01824 20.449219,195.16406 C 20.91796,195.42448 21.269522,195.76954 21.503907,196.19922 C 21.738272,196.62891 21.855459,197.14323 21.855469,197.74219 C 21.855459,198.94011 21.451814,199.86849 20.644532,200.52734 C 19.837232,201.1862 18.699212,201.51562 17.230469,201.51563 C 15.782548,201.51562 14.647133,201.17969 13.824219,200.50781 C 13.001301,199.83594 12.558593,198.88021 12.496094,197.64063 L 12.496094,197.64063 z M 23.566407,201.19531 L 23.566407,189.6875 L 25.824219,189.6875 L 25.824219,193.64063 C 26.131507,193.25522 26.497392,192.96485 26.921875,192.76953 C 27.34635,192.57423 27.82161,192.47657 28.347657,192.47656 C 28.84765,192.47657 29.299473,192.56251 29.703125,192.73438 C 30.106764,192.90626 30.433586,193.15105 30.683594,193.46875 C 30.855461,193.6823 30.976554,193.92709 31.046875,194.20313 C 31.117179,194.47917 31.152335,194.92188 31.152344,195.53125 L 31.152344,195.6875 L 31.152344,201.19531 L 28.894532,201.19531 L 28.894532,196.75 C 28.894525,195.69792 28.798171,195.03777 28.605469,194.76953 C 28.412755,194.50131 28.066401,194.36719 27.566407,194.36719 C 27.029944,194.36719 26.605465,194.52735 26.292969,194.84766 C 25.980466,195.16797 25.824216,195.60417 25.824219,196.15625 L 25.824219,201.19531 L 23.566407,201.19531 z M 33.191407,191.75781 L 33.191407,189.6875 L 35.464844,189.6875 L 35.464844,191.75781 L 33.191407,191.75781 z M 33.191407,201.19531 L 33.191407,192.70313 L 35.464844,192.70313 L 35.464844,201.19531 L 33.191407,201.19531 z M 37.886719,201.19531 L 37.886719,194.29688 L 36.675782,194.29688 L 36.675782,192.70313 L 37.886719,192.70313 L 37.886719,191.91406 C 37.886718,191.12241 38.091144,190.54038 38.5,190.16797 C 38.908852,189.79558 39.553383,189.60939 40.433594,189.60938 C 40.595048,189.60939 40.765621,189.61329 40.945313,189.62109 C 41.124996,189.62892 41.316402,189.64324 41.519532,189.66406 L 41.519532,191.46875 L 40.925782,191.46875 C 40.587236,191.46876 40.36458,191.51303 40.257813,191.60156 C 40.151038,191.69011 40.097653,191.85938 40.097657,192.10938 L 40.097657,192.70313 L 41.519532,192.70313 L 41.519532,194.29688 L 40.113282,194.29688 L 40.113282,201.19531 L 37.886719,201.19531 z M 46.449219,201.25781 C 46.240881,201.26302 45.992183,201.27214 45.703125,201.28516 C 45.414059,201.29818 45.230465,201.30469 45.152344,201.30469 C 44.28255,201.30469 43.687498,201.14193 43.367188,200.81641 C 43.046874,200.49089 42.886718,199.84896 42.886719,198.89063 L 42.886719,194.29688 L 41.761719,194.29688 L 41.761719,192.70313 L 42.886719,192.70313 L 42.886719,190.38281 L 45.136719,190.38281 L 45.136719,192.70313 L 46.449219,192.70313 L 46.449219,194.29688 L 45.136719,194.29688 L 45.136719,199 C 45.136716,199.22396 45.186195,199.3711 45.285157,199.44141 C 45.384111,199.51172 45.587236,199.54688 45.894532,199.54688 L 46.449219,199.54688 L 46.449219,201.25781 z "
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+      <path
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 24.746094,207.125 L 13.496094,222.125 L 20.996094,222.125 L 20.996094,229.625 L 28.496094,229.625 L 28.496094,222.125 L 35.996094,222.125 L 24.746094,207.125 z "
+         id="path5757" />
+    </g>
+    <g
+       id="g5795"
+       transform="translate(727.5,0)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5797"
+         y="201.19531"
+         x="31.8125"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+         xml:space="preserve"><tspan
+           y="201.19531"
+           x="31.8125"
+           id="tspan5799"
+           sodipodi:role="line">Shift</tspan></text>
+      <path
+         id="path5801"
+         d="M 27.25,207.125 L 16,222.125 L 23.5,222.125 L 23.5,229.625 L 31,229.625 L 31,222.125 L 38.5,222.125 L 27.25,207.125 z "
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 576.90234,189.63867 L 576.90234,192.20508 L 566.4375,196.48242 L 576.90234,200.74805 L 576.90234,203.31445 L 563.09766,197.63086 L 563.09766,195.29883 L 576.90234,189.63867 M 568.21875,237.68555 L 568.21875,236.31445 C 568.875,236.12695 569.35937,235.83789 569.67188,235.44727 C 569.98437,235.05664 570.14062,234.54883 570.14063,233.92383 L 570.14063,233.63086 L 568.21875,233.63086 L 568.21875,230.10352 L 571.76953,230.10352 L 571.76953,233.49023 C 571.76953,234.6543 571.46875,235.59179 570.86719,236.30273 C 570.27343,237.01367 569.39062,237.47461 568.21875,237.68555"
+       id="text5803" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 623.09766,189.63867 L 636.90234,195.29883 L 636.90234,197.63086 L 623.09766,203.31445 L 623.09766,200.74805 L 633.58594,196.48242 L 623.09766,192.20508 L 623.09766,189.63867 M 628.21875,233.63086 L 628.21875,230.10352 L 631.74609,230.10352 L 631.74609,233.63086 L 628.21875,233.63086"
+       id="text5813" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 688.44727,198.61523 C 688.44726,198.5293 688.44335,198.41602 688.43555,198.27539 C 688.42773,198.12696 688.42382,198.01758 688.42383,197.94727 C 688.42382,197.25977 688.49804,196.68946 688.64648,196.23633 C 688.79492,195.7754 689.0332,195.34571 689.36133,194.94727 C 689.61132,194.6504 689.98242,194.31056 690.47461,193.92773 C 690.9746,193.54493 691.29882,193.26759 691.44727,193.0957 C 691.75976,192.74415 691.9746,192.42775 692.0918,192.14648 C 692.20898,191.86525 692.26757,191.55665 692.26758,191.2207 C 692.26757,190.47853 692.06054,189.9004 691.64648,189.48633 C 691.23241,189.07228 690.65429,188.86525 689.91211,188.86523 C 689.16992,188.86525 688.58398,189.11525 688.1543,189.61523 C 687.73242,190.10744 687.50195,190.80275 687.46289,191.70117 L 684.1582,191.70117 L 684.1582,191.33789 C 684.1582,189.68947 684.67773,188.37697 685.7168,187.40039 C 686.76367,186.41603 688.16992,185.92385 689.93555,185.92383 C 691.74023,185.92385 693.17382,186.38869 694.23633,187.31836 C 695.30663,188.24025 695.84178,189.47853 695.8418,191.0332 C 695.84178,191.58009 695.77928,192.07228 695.6543,192.50977 C 695.5371,192.93946 695.3535,193.33399 695.10352,193.69336 C 694.78319,194.14649 694.2871,194.63868 693.61523,195.16992 C 692.95116,195.69337 692.54882,196.01759 692.4082,196.14258 C 692.11132,196.43165 691.89648,196.73634 691.76367,197.05664 C 691.63866,197.37696 691.57616,197.75977 691.57617,198.20508 C 691.57616,198.24415 691.58007,198.31055 691.58789,198.4043 C 691.59569,198.49805 691.5996,198.56836 691.59961,198.61523 L 688.44727,198.61523 M 688.2832,203.63086 L 688.2832,200.19727 L 691.74023,200.19727 L 691.74023,203.63086 L 688.2832,203.63086 M 686.31445,235.85742 L 692.12695,215.92383 L 693.73242,215.92383 L 687.89648,235.85742 L 686.31445,235.85742"
+       id="text5819" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 18,271.78906 C 17.911447,273.09636 17.406239,274.13542 16.484375,274.90625 C 15.5677,275.67708 14.369784,276.0625 12.890625,276.0625 C 11.187496,276.0625 9.8619761,275.53125 8.9140625,274.46875 C 7.971353,273.40625 7.4999993,271.91667 7.5,270 C 7.4999993,268.04167 7.9817696,266.54168 8.9453125,265.5 C 9.9088511,264.45834 11.294266,263.93751 13.101563,263.9375 C 14.570305,263.93751 15.729158,264.29689 16.578125,265.01563 C 17.432281,265.72918 17.901031,266.73959 17.984375,268.04688 L 15.648438,268.04688 C 15.54947,267.39584 15.283846,266.90105 14.851563,266.5625 C 14.419263,266.21876 13.83593,266.04688 13.101563,266.04688 C 12.059891,266.04688 11.268225,266.38282 10.726563,267.05469 C 10.184892,267.72657 9.9140594,268.70834 9.9140625,270 C 9.9140594,271.25 10.182288,272.21615 10.71875,272.89844 C 11.260412,273.58073 12.028641,273.92188 13.023438,273.92188 C 13.742181,273.92188 14.330722,273.73959 14.789063,273.375 C 15.247387,273.00521 15.544262,272.47657 15.679688,271.78906 L 18,271.78906 M 23.46875,275.80469 C 23.260412,275.8099 23.010412,275.81771 22.71875,275.82813 C 22.432288,275.84375 22.249996,275.85156 22.171875,275.85156 C 21.302081,275.85156 20.705727,275.6901 20.382813,275.36719 C 20.065103,275.03906 19.906249,274.39583 19.90625,273.4375 L 19.90625,268.84375 L 18.78125,268.84375 L 18.78125,267.25 L 19.90625,267.25 L 19.90625,264.92969 L 22.15625,264.92969 L 22.15625,267.25 L 23.46875,267.25 L 23.46875,268.84375 L 22.15625,268.84375 L 22.15625,273.54688 C 22.156247,273.77084 22.205726,273.91927 22.304688,273.99219 C 22.403642,274.0599 22.606767,274.09375 22.914063,274.09375 L 23.46875,274.09375 L 23.46875,275.80469 M 24.789063,275.74219 L 24.789063,267.25 L 26.898438,267.25 L 26.898438,268.70313 C 27.195309,268.1198 27.541663,267.69272 27.9375,267.42188 C 28.333329,267.14584 28.804682,267.00782 29.351563,267.00781 C 29.440099,267.00782 29.507807,267.01043 29.554688,267.01563 C 29.606765,267.01563 29.648432,267.01824 29.679688,267.02344 L 29.6875,269.32813 L 28.929688,269.32813 C 28.309891,269.32813 27.843746,269.48959 27.53125,269.8125 C 27.218747,270.13542 27.062497,270.61459 27.0625,271.25 L 27.0625,275.74219 L 24.789063,275.74219 M 31.023438,275.74219 L 31.023438,264.23438 L 33.296875,264.23438 L 33.296875,275.74219 L 31.023438,275.74219"
+       id="text5827" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 162.96875,266.49609 L 161.375,271.39453 L 164.57031,271.39453 L 162.96875,266.49609 M 161.59375,264.19141 L 164.32813,264.19141 L 168.47656,275.69922 L 165.99219,275.69922 L 165.21094,273.33203 L 160.75,273.33203 L 159.99219,275.69922 L 157.5,275.69922 L 161.59375,264.19141 M 169.53906,275.69922 L 169.53906,264.19141 L 171.8125,264.19141 L 171.8125,275.69922 L 169.53906,275.69922 M 177.64063,275.76172 C 177.43229,275.76693 177.18229,275.77474 176.89063,275.78516 C 176.60416,275.80078 176.42187,275.80859 176.34375,275.80859 C 175.47396,275.80859 174.8776,275.64714 174.55469,275.32422 C 174.23698,274.99609 174.07812,274.35287 174.07813,273.39453 L 174.07813,268.80078 L 172.95313,268.80078 L 172.95313,267.20703 L 174.07813,267.20703 L 174.07813,264.88672 L 176.32813,264.88672 L 176.32813,267.20703 L 177.64063,267.20703 L 177.64063,268.80078 L 176.32813,268.80078 L 176.32813,273.50391 C 176.32812,273.72787 176.3776,273.8763 176.47656,273.94922 C 176.57552,274.01693 176.77864,274.05078 177.08594,274.05078 L 177.64063,274.05078 L 177.64063,275.76172"
+       id="text5831" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 612.96875,266.53906 L 611.375,271.4375 L 614.57031,271.4375 L 612.96875,266.53906 M 611.59375,264.23438 L 614.32813,264.23438 L 618.47656,275.74219 L 615.99219,275.74219 L 615.21094,273.375 L 610.75,273.375 L 609.99219,275.74219 L 607.5,275.74219 L 611.59375,264.23438 M 619.53906,275.74219 L 619.53906,264.23438 L 621.8125,264.23438 L 621.8125,275.74219 L 619.53906,275.74219 M 627.64063,275.80469 C 627.43229,275.8099 627.18229,275.81771 626.89063,275.82813 C 626.60416,275.84375 626.42187,275.85156 626.34375,275.85156 C 625.47396,275.85156 624.8776,275.6901 624.55469,275.36719 C 624.23698,275.03906 624.07812,274.39583 624.07813,273.4375 L 624.07813,268.84375 L 622.95313,268.84375 L 622.95313,267.25 L 624.07813,267.25 L 624.07813,264.92969 L 626.32813,264.92969 L 626.32813,267.25 L 627.64063,267.25 L 627.64063,268.84375 L 626.32813,268.84375 L 626.32813,273.54688 C 626.32812,273.77084 626.3776,273.91927 626.47656,273.99219 C 626.57552,274.0599 626.77864,274.09375 627.08594,274.09375 L 627.64063,274.09375 L 627.64063,275.80469 M 642,274.38281 C 641.57291,274.96094 641.08593,275.38542 640.53906,275.65625 C 639.99739,275.92708 639.35937,276.0625 638.625,276.0625 C 637.01562,276.0625 635.71093,275.50521 634.71094,274.39063 C 633.71614,273.27084 633.21875,271.80209 633.21875,269.98438 C 633.21875,268.15105 633.71614,266.6849 634.71094,265.58594 C 635.70573,264.48699 637.03125,263.93751 638.6875,263.9375 C 640.1302,263.93751 641.30728,264.28387 642.21875,264.97656 C 643.1302,265.66407 643.67186,266.61199 643.84375,267.82031 L 641.42969,267.82031 C 641.28385,267.22136 640.98437,266.76563 640.53125,266.45313 C 640.08333,266.14063 639.49739,265.98438 638.77344,265.98438 C 637.80989,265.98438 637.05208,266.33855 636.5,267.04688 C 635.95312,267.75001 635.67968,268.72397 635.67969,269.96875 C 635.67968,271.21875 635.96614,272.19792 636.53906,272.90625 C 637.11197,273.61459 637.89843,273.96875 638.89844,273.96875 C 639.64843,273.96875 640.27603,273.7474 640.78125,273.30469 C 641.28645,272.86198 641.59895,272.25521 641.71875,271.48438 L 639.10938,271.48438 L 639.10938,269.51563 L 643.875,269.51563 L 643.875,275.74219 L 642.28906,275.74219 L 642,274.38281 M 645.96094,275.74219 L 645.96094,267.25 L 648.07031,267.25 L 648.07031,268.70313 C 648.36718,268.1198 648.71354,267.69272 649.10938,267.42188 C 649.5052,267.14584 649.97656,267.00782 650.52344,267.00781 C 650.61197,267.00782 650.67968,267.01043 650.72656,267.01563 C 650.77864,267.01563 650.82031,267.01824 650.85156,267.02344 L 650.85938,269.32813 L 650.10156,269.32813 C 649.48177,269.32813 649.01562,269.48959 648.70313,269.8125 C 648.39062,270.13542 648.23437,270.61459 648.23438,271.25 L 648.23438,275.74219 L 645.96094,275.74219"
+       id="text5835" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 828,271.78906 C 827.91145,273.09636 827.40624,274.13542 826.48438,274.90625 C 825.5677,275.67708 824.36978,276.0625 822.89063,276.0625 C 821.1875,276.0625 819.86198,275.53125 818.91406,274.46875 C 817.97135,273.40625 817.5,271.91667 817.5,270 C 817.5,268.04167 817.98177,266.54168 818.94531,265.5 C 819.90885,264.45834 821.29427,263.93751 823.10156,263.9375 C 824.5703,263.93751 825.72916,264.29689 826.57813,265.01563 C 827.43228,265.72918 827.90103,266.73959 827.98438,268.04688 L 825.64844,268.04688 C 825.54947,267.39584 825.28385,266.90105 824.85156,266.5625 C 824.41926,266.21876 823.83593,266.04688 823.10156,266.04688 C 822.05989,266.04688 821.26822,266.38282 820.72656,267.05469 C 820.18489,267.72657 819.91406,268.70834 819.91406,270 C 819.91406,271.25 820.18229,272.21615 820.71875,272.89844 C 821.26041,273.58073 822.02864,273.92188 823.02344,273.92188 C 823.74218,273.92188 824.33072,273.73959 824.78906,273.375 C 825.24739,273.00521 825.54426,272.47657 825.67969,271.78906 L 828,271.78906 M 833.46875,275.80469 C 833.26041,275.8099 833.01041,275.81771 832.71875,275.82813 C 832.43229,275.84375 832.25,275.85156 832.17188,275.85156 C 831.30208,275.85156 830.70573,275.6901 830.38281,275.36719 C 830.0651,275.03906 829.90625,274.39583 829.90625,273.4375 L 829.90625,268.84375 L 828.78125,268.84375 L 828.78125,267.25 L 829.90625,267.25 L 829.90625,264.92969 L 832.15625,264.92969 L 832.15625,267.25 L 833.46875,267.25 L 833.46875,268.84375 L 832.15625,268.84375 L 832.15625,273.54688 C 832.15625,273.77084 832.20573,273.91927 832.30469,273.99219 C 832.40364,274.0599 832.60677,274.09375 832.91406,274.09375 L 833.46875,274.09375 L 833.46875,275.80469 M 834.78906,275.74219 L 834.78906,267.25 L 836.89844,267.25 L 836.89844,268.70313 C 837.19531,268.1198 837.54166,267.69272 837.9375,267.42188 C 838.33333,267.14584 838.80468,267.00782 839.35156,267.00781 C 839.4401,267.00782 839.50781,267.01043 839.55469,267.01563 C 839.60677,267.01563 839.64843,267.01824 839.67969,267.02344 L 839.6875,269.32813 L 838.92969,269.32813 C 838.30989,269.32813 837.84375,269.48959 837.53125,269.8125 C 837.21875,270.13542 837.0625,270.61459 837.0625,271.25 L 837.0625,275.74219 L 834.78906,275.74219 M 841.02344,275.74219 L 841.02344,264.23438 L 843.29688,264.23438 L 843.29688,275.74219 L 841.02344,275.74219"
+       id="text5839" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 108.94531,264.01953 L 105.64844,252.51172 L 108.10156,252.51172 L 110.07031,260.62891 L 111.73438,252.51172 L 114.25781,252.51172 L 115.92188,260.62891 L 117.89063,252.51172 L 120.32031,252.51172 L 117.03125,264.01953 L 114.77344,264.01953 L 112.99219,255.20703 L 111.20313,264.01953 L 108.94531,264.01953 M 121.5,254.58203 L 121.5,252.51172 L 123.77344,252.51172 L 123.77344,254.58203 L 121.5,254.58203 M 121.5,264.01953 L 121.5,255.52734 L 123.77344,255.52734 L 123.77344,264.01953 L 121.5,264.01953 M 125.79688,264.01953 L 125.79688,255.52734 L 128.02344,255.52734 L 128.02344,256.53516 C 128.34114,256.12371 128.71614,255.81641 129.14844,255.61328 C 129.58072,255.40496 130.06249,255.30079 130.59375,255.30078 C 131.53124,255.30079 132.23176,255.54558 132.69531,256.03516 C 133.16405,256.51954 133.39843,257.25131 133.39844,258.23047 L 133.39844,264.01953 L 131.125,264.01953 L 131.125,258.88672 C 131.12499,258.27735 131.02083,257.84245 130.8125,257.58203 C 130.60937,257.32162 130.27604,257.19141 129.8125,257.19141 C 129.27604,257.19141 128.85156,257.35287 128.53906,257.67578 C 128.22656,257.9935 128.07031,258.42839 128.07031,258.98047 L 128.07031,264.01953 L 125.79688,264.01953 M 106.64844,284.01953 L 106.64844,272.51172 L 109.01563,272.51172 L 109.01563,277.23828 L 113.50781,272.51172 L 116.46875,272.51172 L 111.875,277.16797 L 116.88281,284.01953 L 113.99219,284.01953 L 110.24219,278.75391 L 109.01563,279.97266 L 109.01563,284.01953 L 106.64844,284.01953 M 122.9375,281.44141 L 125.20313,281.44141 C 124.97395,282.33724 124.51041,283.04037 123.8125,283.55078 C 123.11979,284.05599 122.27343,284.30859 121.27344,284.30859 C 120.04427,284.30859 119.07031,283.89714 118.35156,283.07422 C 117.63281,282.2461 117.27344,281.1263 117.27344,279.71484 C 117.27344,278.32422 117.6276,277.22787 118.33594,276.42578 C 119.04427,275.62371 120.01302,275.22267 121.24219,275.22266 C 122.54427,275.22267 123.54947,275.6185 124.25781,276.41016 C 124.96614,277.19662 125.3203,278.31902 125.32031,279.77734 C 125.3203,279.93881 125.3177,280.0612 125.3125,280.14453 C 125.31249,280.22266 125.30728,280.29818 125.29688,280.37109 L 119.625,280.37109 C 119.65625,281.03776 119.81771,281.54037 120.10938,281.87891 C 120.40625,282.21745 120.83073,282.38672 121.38281,282.38672 C 121.77343,282.38672 122.09374,282.3112 122.34375,282.16016 C 122.59374,282.00391 122.79166,281.76433 122.9375,281.44141 M 119.625,278.87891 L 122.96875,278.87891 C 122.94791,278.306 122.79426,277.8711 122.50781,277.57422 C 122.22656,277.27214 121.82031,277.1211 121.28906,277.12109 C 120.79427,277.1211 120.40364,277.27214 120.11719,277.57422 C 119.83593,277.87631 119.67187,278.3112 119.625,278.87891 M 127.16406,287.42578 L 127.16406,285.58984 C 127.23698,285.60026 127.3125,285.60807 127.39063,285.61328 C 127.46875,285.61849 127.57031,285.62109 127.69531,285.62109 C 128.14323,285.62109 128.47916,285.51432 128.70313,285.30078 C 128.92708,285.09245 129.03906,284.77734 129.03906,284.35547 C 129.03906,284.32422 129.03385,284.28516 129.02344,284.23828 C 129.01302,284.19141 129.0026,284.15234 128.99219,284.12109 L 125.92969,275.52734 L 128.42969,275.52734 L 130.21875,281.65234 L 131.96094,275.52734 L 134.35156,275.52734 L 130.85938,285.54297 C 130.59895,286.29297 130.27343,286.80338 129.88281,287.07422 C 129.49218,287.35026 128.90625,287.48828 128.125,287.48828 C 127.98437,287.48828 127.83333,287.48307 127.67188,287.47266 C 127.51041,287.46224 127.34114,287.44661 127.16406,287.42578"
+       id="text5872" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 708.94531,264.01953 L 705.64844,252.51172 L 708.10156,252.51172 L 710.07031,260.62891 L 711.73438,252.51172 L 714.25781,252.51172 L 715.92188,260.62891 L 717.89063,252.51172 L 720.32031,252.51172 L 717.03125,264.01953 L 714.77344,264.01953 L 712.99219,255.20703 L 711.20313,264.01953 L 708.94531,264.01953 M 721.5,254.58203 L 721.5,252.51172 L 723.77344,252.51172 L 723.77344,254.58203 L 721.5,254.58203 M 721.5,264.01953 L 721.5,255.52734 L 723.77344,255.52734 L 723.77344,264.01953 L 721.5,264.01953 M 725.79688,264.01953 L 725.79688,255.52734 L 728.02344,255.52734 L 728.02344,256.53516 C 728.34114,256.12371 728.71614,255.81641 729.14844,255.61328 C 729.58072,255.40496 730.06249,255.30079 730.59375,255.30078 C 731.53124,255.30079 732.23176,255.54558 732.69531,256.03516 C 733.16405,256.51954 733.39843,257.25131 733.39844,258.23047 L 733.39844,264.01953 L 731.125,264.01953 L 731.125,258.88672 C 731.12499,258.27735 731.02083,257.84245 730.8125,257.58203 C 730.60937,257.32162 730.27604,257.19141 729.8125,257.19141 C 729.27604,257.19141 728.85156,257.35287 728.53906,257.67578 C 728.22656,257.9935 728.07031,258.42839 728.07031,258.98047 L 728.07031,264.01953 L 725.79688,264.01953 M 706.64844,284.01953 L 706.64844,272.51172 L 709.01563,272.51172 L 709.01563,277.23828 L 713.50781,272.51172 L 716.46875,272.51172 L 711.875,277.16797 L 716.88281,284.01953 L 713.99219,284.01953 L 710.24219,278.75391 L 709.01563,279.97266 L 709.01563,284.01953 L 706.64844,284.01953 M 722.9375,281.44141 L 725.20313,281.44141 C 724.97395,282.33724 724.51041,283.04037 723.8125,283.55078 C 723.11979,284.05599 722.27343,284.30859 721.27344,284.30859 C 720.04427,284.30859 719.07031,283.89714 718.35156,283.07422 C 717.63281,282.2461 717.27344,281.1263 717.27344,279.71484 C 717.27344,278.32422 717.6276,277.22787 718.33594,276.42578 C 719.04427,275.62371 720.01302,275.22267 721.24219,275.22266 C 722.54427,275.22267 723.54947,275.6185 724.25781,276.41016 C 724.96614,277.19662 725.3203,278.31902 725.32031,279.77734 C 725.3203,279.93881 725.3177,280.0612 725.3125,280.14453 C 725.31249,280.22266 725.30728,280.29818 725.29688,280.37109 L 719.625,280.37109 C 719.65625,281.03776 719.81771,281.54037 720.10938,281.87891 C 720.40625,282.21745 720.83073,282.38672 721.38281,282.38672 C 721.77343,282.38672 722.09374,282.3112 722.34375,282.16016 C 722.59374,282.00391 722.79166,281.76433 722.9375,281.44141 M 719.625,278.87891 L 722.96875,278.87891 C 722.94791,278.306 722.79426,277.8711 722.50781,277.57422 C 722.22656,277.27214 721.82031,277.1211 721.28906,277.12109 C 720.79427,277.1211 720.40364,277.27214 720.11719,277.57422 C 719.83593,277.87631 719.67187,278.3112 719.625,278.87891 M 727.16406,287.42578 L 727.16406,285.58984 C 727.23698,285.60026 727.3125,285.60807 727.39063,285.61328 C 727.46875,285.61849 727.57031,285.62109 727.69531,285.62109 C 728.14323,285.62109 728.47916,285.51432 728.70313,285.30078 C 728.92708,285.09245 729.03906,284.77734 729.03906,284.35547 C 729.03906,284.32422 729.03385,284.28516 729.02344,284.23828 C 729.01302,284.19141 729.0026,284.15234 728.99219,284.12109 L 725.92969,275.52734 L 728.42969,275.52734 L 730.21875,281.65234 L 731.96094,275.52734 L 734.35156,275.52734 L 730.85938,285.54297 C 730.59895,286.29297 730.27343,286.80338 729.88281,287.07422 C 729.49218,287.35026 728.90625,287.48828 728.125,287.48828 C 727.98437,287.48828 727.83333,287.48307 727.67188,287.47266 C 727.51041,287.46224 727.34114,287.44661 727.16406,287.42578"
+       id="text5878" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 759.98438,275.60938 L 759.98438,264.10156 L 763.48438,264.10156 L 765.77344,272.85938 L 768.03125,264.10156 L 771.54688,264.10156 L 771.54688,275.60938 L 769.32813,275.60938 L 769.32813,266.32813 L 766.99219,275.60938 L 764.57031,275.60938 L 762.20313,266.32813 L 762.20313,275.60938 L 759.98438,275.60938 M 778.99219,273.03125 L 781.25781,273.03125 C 781.02864,273.92709 780.5651,274.63021 779.86719,275.14063 C 779.17447,275.64583 778.32812,275.89844 777.32813,275.89844 C 776.09896,275.89844 775.125,275.48698 774.40625,274.66406 C 773.6875,273.83594 773.32812,272.71615 773.32813,271.30469 C 773.32812,269.91407 773.68229,268.81772 774.39063,268.01563 C 775.09896,267.21355 776.06771,266.81251 777.29688,266.8125 C 778.59895,266.81251 779.60416,267.20834 780.3125,268 C 781.02083,268.78647 781.37499,269.90886 781.375,271.36719 C 781.37499,271.52865 781.37239,271.65105 781.36719,271.73438 C 781.36718,271.8125 781.36197,271.88802 781.35156,271.96094 L 775.67969,271.96094 C 775.71093,272.62761 775.87239,273.13021 776.16406,273.46875 C 776.46093,273.80729 776.88541,273.97656 777.4375,273.97656 C 777.82812,273.97656 778.14843,273.90104 778.39844,273.75 C 778.64843,273.59375 778.84635,273.35417 778.99219,273.03125 M 775.67969,270.46875 L 779.02344,270.46875 C 779.0026,269.89584 778.84895,269.46094 778.5625,269.16406 C 778.28124,268.86199 777.87499,268.71094 777.34375,268.71094 C 776.84895,268.71094 776.45833,268.86199 776.17188,269.16406 C 775.89062,269.46615 775.72656,269.90105 775.67969,270.46875 M 782.88281,275.60938 L 782.88281,267.11719 L 785.10938,267.11719 L 785.10938,268.125 C 785.42708,267.71355 785.80208,267.40626 786.23438,267.20313 C 786.66666,266.9948 787.14843,266.89063 787.67969,266.89063 C 788.61718,266.89063 789.3177,267.13543 789.78125,267.625 C 790.24999,268.10938 790.48437,268.84115 790.48438,269.82031 L 790.48438,275.60938 L 788.21094,275.60938 L 788.21094,270.47656 C 788.21093,269.86719 788.10676,269.4323 787.89844,269.17188 C 787.69531,268.91147 787.36197,268.78126 786.89844,268.78125 C 786.36197,268.78126 785.9375,268.94272 785.625,269.26563 C 785.3125,269.58334 785.15625,270.01823 785.15625,270.57031 L 785.15625,275.60938 L 782.88281,275.60938 M 800.01563,267.11719 L 800.01563,275.60938 L 797.78906,275.60938 L 797.78906,274.60156 C 797.46614,275.01302 797.08854,275.32292 796.65625,275.53125 C 796.22916,275.73437 795.74739,275.83594 795.21094,275.83594 C 794.27864,275.83594 793.57812,275.59115 793.10938,275.10156 C 792.64583,274.61198 792.41406,273.88021 792.41406,272.90625 L 792.41406,267.11719 L 794.6875,267.11719 L 794.6875,272.25 C 794.6875,272.85417 794.78906,273.28646 794.99219,273.54688 C 795.19531,273.80209 795.53125,273.92969 796,273.92969 C 796.53124,273.92969 796.95312,273.77084 797.26563,273.45313 C 797.58333,273.13021 797.74218,272.69271 797.74219,272.14063 L 797.74219,267.11719 L 800.01563,267.11719"
+       id="text5884" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 104.41406,17.103516 L 104.41406,10.212891 L 101.74219,10.212891 L 101.74219,8.7949219 L 101.94141,8.7949219 C 102.89453,8.7949367 103.58984,8.6621243 104.02734,8.3964844 C 104.47265,8.1308749 104.73828,7.6894691 104.82422,7.0722656 L 106.59375,7.0722656 L 106.59375,17.103516 L 104.41406,17.103516 M 106.72266,36.369141 L 106.72266,39.826172 L 103.24219,39.826172 L 103.24219,36.369141 L 106.72266,36.369141 M 105.89063,41.173828 L 106.80469,48.978516 L 106.80469,53.630859 L 103.19531,53.630859 L 103.19531,48.978516 L 104.10938,41.173828 L 105.89063,41.173828"
+       id="text5890" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 160.85156,47.103516 C 160.875,46.197273 161.08984,45.431649 161.49609,44.806641 C 161.91015,44.18165 162.63672,43.548838 163.67578,42.908203 C 163.82422,42.822276 164.03125,42.701183 164.29688,42.544922 C 165.74218,41.724621 166.46484,40.931653 166.46484,40.166016 C 166.46484,39.720717 166.32031,39.369155 166.03125,39.111328 C 165.74218,38.85353 165.34375,38.724624 164.83594,38.724609 C 164.27343,38.724624 163.83984,38.88478 163.53516,39.205078 C 163.23047,39.517592 163.07812,39.966811 163.07813,40.552734 L 163.07813,40.646484 L 161.03906,40.646484 C 161.03906,39.498061 161.37891,38.615249 162.05859,37.998047 C 162.73828,37.380876 163.71093,37.072282 164.97656,37.072266 C 166.11718,37.072282 167.02343,37.353532 167.69531,37.916016 C 168.37499,38.470718 168.71484,39.212905 168.71484,40.142578 C 168.71484,40.814466 168.53905,41.39259 168.1875,41.876953 C 167.83593,42.361339 167.14843,42.919933 166.125,43.552734 C 165.89843,43.701182 165.57812,43.896494 165.16406,44.138672 C 164.22656,44.685556 163.69922,45.115243 163.58203,45.427734 L 168.62109,45.427734 L 168.62109,47.103516 L 160.85156,47.103516"
+       id="text5910" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 220.92188,44.033203 L 223.05469,44.033203 C 223.07031,44.603525 223.22265,45.029305 223.51172,45.310547 C 223.80078,45.591805 224.23437,45.73243 224.8125,45.732422 C 225.36718,45.73243 225.79687,45.599617 226.10156,45.333984 C 226.40624,45.068368 226.55859,44.689462 226.55859,44.197266 C 226.55859,43.697276 226.38281,43.322276 226.03125,43.072266 C 225.67968,42.814464 225.15234,42.685558 224.44922,42.685547 L 224.10938,42.685547 L 224.10938,41.291016 L 224.35547,41.291016 C 225.0039,41.291028 225.48046,41.181653 225.78516,40.962891 C 226.09765,40.736341 226.2539,40.392591 226.25391,39.931641 C 226.2539,39.54103 226.12109,39.232436 225.85547,39.005859 C 225.58984,38.771499 225.23437,38.654312 224.78906,38.654297 C 224.29687,38.654312 223.91797,38.787124 223.65234,39.052734 C 223.38672,39.310561 223.2539,39.681655 223.25391,40.166016 L 223.25391,40.236328 L 221.16797,40.236328 C 221.19141,39.212905 221.51953,38.431656 222.15234,37.892578 C 222.79297,37.345719 223.70312,37.072282 224.88281,37.072266 C 225.99218,37.072282 226.86718,37.314469 227.50781,37.798828 C 228.15624,38.283218 228.48046,38.943374 228.48047,39.779297 C 228.48046,40.21681 228.36718,40.603529 228.14063,40.939453 C 227.92187,41.26759 227.59374,41.537121 227.15625,41.748047 C 227.72656,41.974621 228.15624,42.291027 228.44531,42.697266 C 228.74218,43.095714 228.89062,43.564463 228.89063,44.103516 C 228.89062,45.119149 228.52343,45.923836 227.78906,46.517578 C 227.06249,47.103522 226.07031,47.396491 224.8125,47.396484 C 223.57031,47.396491 222.60937,47.107428 221.92969,46.529297 C 221.25781,45.95118 220.92187,45.134774 220.92188,44.080078 L 220.92188,44.033203"
+       id="text5922" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 278.92969,21.685547 C 279.86719,21.037112 280.53125,20.439456 280.92188,19.892578 C 281.32031,19.345707 281.51953,18.75977 281.51953,18.134766 C 281.51953,17.837896 281.47265,17.525397 281.37891,17.197266 C 281.28515,16.861335 281.14843,16.509773 280.96875,16.142578 L 278.90625,16.142578 L 278.90625,14.841797 L 280.17188,14.841797 C 279.82812,14.162119 279.57812,13.556651 279.42188,13.025391 C 279.26562,12.494152 279.1875,11.998059 279.1875,11.537109 C 279.1875,10.146498 279.69531,9.021499 280.71094,8.1621094 C 281.73437,7.3027507 283.08203,6.8730636 284.75391,6.8730469 C 286.5664,6.8730636 287.98827,7.3379069 289.01953,8.2675781 C 290.05077,9.1972801 290.61327,10.517591 290.70703,12.228516 L 287.47266,12.228516 C 287.41015,11.345715 287.15624,10.669935 286.71094,10.201172 C 286.26562,9.7324358 285.65624,9.498061 284.88281,9.4980469 C 284.14843,9.498061 283.58203,9.6894671 283.18359,10.072266 C 282.79296,10.455091 282.59765,11.005872 282.59766,11.724609 C 282.59765,12.138683 282.84375,12.888683 283.33594,13.974609 C 283.50781,14.349619 283.63671,14.638681 283.72266,14.841797 L 287.0625,14.841797 L 287.0625,16.142578 L 284.20313,16.142578 C 284.27343,16.43946 284.32421,16.712898 284.35547,16.962891 C 284.38671,17.212897 284.40234,17.443366 284.40234,17.654297 C 284.40234,18.216802 284.22656,18.779302 283.875,19.341797 C 283.53124,19.896488 282.94531,20.548831 282.11719,21.298828 C 282.625,21.064456 283.08203,20.892581 283.48828,20.783203 C 283.90234,20.666019 284.27734,20.607425 284.61328,20.607422 C 285.01952,20.607425 285.57421,20.701175 286.27734,20.888672 C 286.98046,21.068362 287.48046,21.158206 287.77734,21.158203 C 288.16796,21.158206 288.55077,21.095706 288.92578,20.970703 C 289.30858,20.845706 289.68749,20.6543 290.0625,20.396484 L 291.09375,22.939453 C 290.4453,23.322266 289.82421,23.611328 289.23047,23.806641 C 288.63671,24.009765 288.08202,24.111328 287.56641,24.111328 C 286.97265,24.111328 286.16796,23.955078 285.15234,23.642578 C 284.14453,23.330078 283.41406,23.173829 282.96094,23.173828 C 282.48437,23.173829 282.01953,23.251954 281.56641,23.408203 C 281.12109,23.564453 280.6875,23.798828 280.26563,24.111328 L 278.92969,21.685547 M 284.94141,40.025391 C 284.05859,40.025404 283.29687,40.345716 282.65625,40.986328 C 282.01562,41.626965 281.69531,42.384777 281.69531,43.259766 C 281.69531,44.1504 282.01171,44.912118 282.64453,45.544922 C 283.27734,46.169929 284.04296,46.482429 284.94141,46.482422 C 285.82421,46.482429 286.58202,46.169929 287.21484,45.544922 C 287.85546,44.912118 288.17577,44.1504 288.17578,43.259766 C 288.17577,42.384777 287.85546,41.626965 287.21484,40.986328 C 286.58202,40.345716 285.82421,40.025404 284.94141,40.025391 M 279.65625,36.779297 L 282.05859,39.158203 C 282.48046,38.85353 282.92578,38.626968 283.39453,38.478516 C 283.86328,38.322281 284.37109,38.244156 284.91797,38.244141 C 285.46484,38.244156 285.97655,38.322281 286.45313,38.478516 C 286.93749,38.626968 287.39062,38.85353 287.8125,39.158203 L 290.19141,36.779297 L 291.42188,38.033203 L 289.04297,40.435547 C 289.33983,40.849622 289.56249,41.294934 289.71094,41.771484 C 289.85936,42.240246 289.93358,42.736339 289.93359,43.259766 C 289.93358,43.783213 289.85936,44.279306 289.71094,44.748047 C 289.56249,45.216805 289.33983,45.666024 289.04297,46.095703 L 291.42188,48.498047 L 290.19141,49.716797 L 287.8125,47.337891 C 287.39062,47.650397 286.9414,47.880865 286.46484,48.029297 C 285.98827,48.17774 285.48046,48.251959 284.94141,48.251953 C 284.3789,48.251959 283.85937,48.17774 283.38281,48.029297 C 282.91406,47.880865 282.47265,47.650397 282.05859,47.337891 L 279.65625,49.716797 L 278.4375,48.498047 L 280.80469,46.095703 C 280.50781,45.673836 280.28515,45.23243 280.13672,44.771484 C 279.99609,44.302744 279.92578,43.798838 279.92578,43.259766 C 279.92578,42.736339 279.99609,42.240246 280.13672,41.771484 C 280.28515,41.294934 280.50781,40.849622 280.80469,40.435547 L 278.4375,38.033203 L 279.65625,36.779297"
+       id="text5928" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 352.875,47.701172 C 352.74217,49.662113 351.98436,51.220706 350.60156,52.376953 C 349.22655,53.533203 347.42968,54.111328 345.21094,54.111328 C 342.65624,54.111328 340.66796,53.314453 339.24609,51.720703 C 337.83203,50.126957 337.125,47.892584 337.125,45.017578 C 337.125,42.08009 337.84765,39.830092 339.29297,38.267578 C 340.73828,36.705095 342.8164,35.923846 345.52734,35.923828 C 347.73046,35.923846 349.46874,36.462908 350.74219,37.541016 C 352.02342,38.611343 352.72655,40.126967 352.85156,42.087891 L 349.34766,42.087891 C 349.19921,41.111341 348.80077,40.369154 348.15234,39.861328 C 347.50389,39.345717 346.6289,39.087905 345.52734,39.087891 C 343.96484,39.087905 342.77734,39.591811 341.96484,40.599609 C 341.15234,41.607434 340.74609,43.080089 340.74609,45.017578 C 340.74609,46.892585 341.14843,48.341802 341.95313,49.365234 C 342.76562,50.388675 343.91796,50.900393 345.41016,50.900391 C 346.48827,50.900393 347.37108,50.626956 348.05859,50.080078 C 348.74608,49.525395 349.19139,48.732427 349.39453,47.701172 L 352.875,47.701172"
+       id="text5946" />
+    <path
+       transform="matrix(1.16233,0,-0.444745,0.860341,0,0)"
+       style="font-size:16.72912407px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 307.52845,53.268758 L 317.31434,53.268758 L 317.31434,54.894293 L 307.52845,54.894293 L 307.52845,53.268758 M 307.52845,49.756296 L 317.31434,49.756296 L 317.31434,51.381831 L 307.52845,51.381831 L 307.52845,49.756296"
+       id="text5956" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 411.45117,50.150391 L 411.45117,46.142578 L 408.63867,50.150391 L 411.45117,50.150391 M 411.45117,53.630859 L 411.45117,51.591797 L 406.98633,51.591797 L 406.98633,49.962891 L 410.90039,44.513672 L 413.51367,44.513672 L 413.51367,50.103516 L 414.73242,50.103516 L 414.73242,51.591797 L 413.51367,51.591797 L 413.51367,53.630859 L 411.45117,53.630859 M 398.58398,54.111328 L 408.7793,36.615234 L 410.70117,36.615234 L 400.48242,54.111328 L 398.58398,54.111328 M 397.78711,46.458984 L 397.78711,40.025391 L 395.26758,40.025391 L 395.26758,38.701172 L 395.44336,38.701172 C 396.36523,38.701187 397.0332,38.576187 397.44727,38.326172 C 397.86914,38.076187 398.11914,37.658219 398.19727,37.072266 L 399.88477,37.072266 L 399.88477,46.458984 L 397.78711,46.458984"
+       id="text5960" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 467.0918,53.630859 C 467.11522,52.779298 467.32225,52.064455 467.71289,51.486328 C 468.11131,50.900393 468.80663,50.31055 469.79883,49.716797 C 469.95506,49.630863 470.16991,49.50977 470.44336,49.353516 C 471.7949,48.595708 472.47068,47.861334 472.4707,47.150391 C 472.47068,46.736335 472.33006,46.40821 472.04883,46.166016 C 471.76756,45.923836 471.38475,45.802742 470.90039,45.802734 C 470.36912,45.802742 469.95506,45.95118 469.6582,46.248047 C 469.36913,46.544929 469.22459,46.966804 469.22461,47.513672 L 469.22461,47.607422 L 467.2793,47.607422 C 467.27928,46.529304 467.6035,45.70118 468.25195,45.123047 C 468.90038,44.537118 469.82616,44.24415 471.0293,44.244141 C 472.12303,44.24415 472.99412,44.505868 473.64258,45.029297 C 474.29881,45.552742 474.62693,46.251961 474.62695,47.126953 C 474.62693,47.751959 474.45506,48.294927 474.11133,48.755859 C 473.77537,49.208989 473.11522,49.72852 472.13086,50.314453 C 471.9199,50.439456 471.63084,50.607425 471.26367,50.818359 C 470.34959,51.341799 469.83397,51.744143 469.7168,52.025391 L 474.50977,52.025391 L 474.50977,53.630859 L 467.0918,53.630859 M 458.68945,54.111328 L 468.88477,36.615234 L 470.80664,36.615234 L 460.58789,54.111328 L 458.68945,54.111328 M 457.89258,46.458984 L 457.89258,40.025391 L 455.37305,40.025391 L 455.37305,38.701172 L 455.54883,38.701172 C 456.4707,38.701187 457.13867,38.576187 457.55273,38.326172 C 457.97461,38.076187 458.22461,37.658219 458.30273,37.072266 L 459.99023,37.072266 L 459.99023,46.458984 L 457.89258,46.458984"
+       id="text5967" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 531.83203,50.150391 L 531.83203,46.142578 L 529.01953,50.150391 L 531.83203,50.150391 M 531.83203,53.630859 L 531.83203,51.591797 L 527.36719,51.591797 L 527.36719,49.962891 L 531.28125,44.513672 L 533.89453,44.513672 L 533.89453,50.103516 L 535.11328,50.103516 L 535.11328,51.591797 L 533.89453,51.591797 L 533.89453,53.630859 L 531.83203,53.630859 M 518.96484,54.111328 L 529.16016,36.615234 L 531.08203,36.615234 L 520.86328,54.111328 L 518.96484,54.111328 M 514.88672,43.599609 L 516.89063,43.599609 C 516.91406,44.130869 517.0625,44.529306 517.33594,44.794922 C 517.61718,45.052743 518.03125,45.181649 518.57813,45.181641 C 519.10937,45.181649 519.51953,45.060555 519.80859,44.818359 C 520.09765,44.568368 520.24218,44.208994 520.24219,43.740234 C 520.24218,43.271495 520.07421,42.919933 519.73828,42.685547 C 519.40234,42.443371 518.90625,42.322277 518.25,42.322266 C 518.20312,42.322277 518.14453,42.326183 518.07422,42.333984 C 518.0039,42.341808 517.94922,42.345714 517.91016,42.345703 L 517.91016,41.033203 L 518.14453,41.033203 C 518.76171,41.033216 519.21484,40.931653 519.50391,40.728516 C 519.80078,40.517591 519.94921,40.193373 519.94922,39.755859 C 519.94921,39.388686 519.82421,39.099624 519.57422,38.888672 C 519.32421,38.669937 518.98437,38.560562 518.55469,38.560547 C 518.08593,38.560562 517.72265,38.685562 517.46484,38.935547 C 517.21484,39.177749 517.08984,39.525405 517.08984,39.978516 L 517.08984,40.048828 L 515.08594,40.048828 C 515.10156,39.087905 515.41797,38.353531 516.03516,37.845703 C 516.65234,37.330094 517.52343,37.072282 518.64844,37.072266 C 519.70312,37.072282 520.53906,37.302751 521.15625,37.763672 C 521.77343,38.216812 522.08202,38.833999 522.08203,39.615234 C 522.08202,40.02931 521.97655,40.392591 521.76563,40.705078 C 521.55468,41.009778 521.23827,41.263684 520.81641,41.466797 C 521.36327,41.677746 521.77343,41.970715 522.04688,42.345703 C 522.32812,42.712902 522.46874,43.154307 522.46875,43.669922 C 522.46874,44.607431 522.11718,45.349618 521.41406,45.896484 C 520.71874,46.443367 519.77343,46.716804 518.57813,46.716797 C 517.39062,46.716804 516.47656,46.451179 515.83594,45.919922 C 515.20312,45.380868 514.88672,44.615243 514.88672,43.623047 L 514.88672,43.599609"
+       id="text5973" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 586.63477,39.404297 L 586.63477,42.498047 L 583.36523,42.498047 L 583.36523,39.474609 C 583.36523,38.482437 583.66992,37.654313 584.2793,36.990234 C 584.88867,36.326189 585.67382,35.970721 586.63477,35.923828 L 586.63477,37.119141 C 586.04101,37.259782 585.59961,37.509782 585.31055,37.869141 C 585.02148,38.220719 584.87695,38.681656 584.87695,39.251953 L 584.87695,39.404297 L 586.63477,39.404297"
+       id="text5979" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 643.36523,39.474609 L 643.36523,36.369141 L 646.63477,36.369141 L 646.63477,39.427734 C 646.63476,40.412123 646.33007,41.240247 645.7207,41.912109 C 645.11132,42.576183 644.32617,42.931651 643.36523,42.978516 L 643.36523,41.771484 C 643.95898,41.630871 644.39648,41.384778 644.67773,41.033203 C 644.96679,40.673841 645.11132,40.201185 645.11133,39.615234 L 645.11133,39.474609 L 643.36523,39.474609"
+       id="text5985" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 706.89258,53.630859 L 703.50586,53.630859 L 703.50586,47.560547 L 703.27148,47.150391 L 698.00977,47.150391 L 698.00977,45.826172 L 702.49805,45.826172 L 701.64258,44.337891 L 698.00977,44.337891 L 698.00977,43.025391 L 700.86914,43.025391 L 697.61133,37.330078 L 701.41992,37.330078 L 705.19336,44.724609 L 708.69727,37.330078 L 712.27148,37.330078 L 709.27148,43.025391 L 712.00195,43.025391 L 712.00195,44.337891 L 708.58008,44.337891 L 707.7832,45.826172 L 712.00195,45.826172 L 712.00195,47.150391 L 707.0918,47.150391 L 706.89258,47.560547 L 706.89258,53.630859"
+       id="text5991" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 764.97656,19.306641 C 765.46093,19.306645 765.8789,19.482426 766.23047,19.833984 C 766.58202,20.18555 766.7578,20.603519 766.75781,21.087891 C 766.7578,21.564455 766.58202,21.974611 766.23047,22.318359 C 765.8789,22.66211 765.46093,22.833985 764.97656,22.833984 C 764.48437,22.833985 764.06249,22.666017 763.71094,22.330078 C 763.36718,21.994142 763.1953,21.58008 763.19531,21.087891 C 763.1953,20.595706 763.36718,20.177738 763.71094,19.833984 C 764.06249,19.482426 764.48437,19.306645 764.97656,19.306641 M 757.94531,15.298828 L 771.98438,15.298828 L 771.98438,17.630859 L 757.94531,17.630859 L 757.94531,15.298828 M 764.97656,10.095703 C 765.46093,10.095717 765.8789,10.271498 766.23047,10.623047 C 766.58202,10.96681 766.7578,11.380872 766.75781,11.865234 C 766.7578,12.357433 766.58202,12.779308 766.23047,13.130859 C 765.88671,13.47462 765.46874,13.646494 764.97656,13.646484 C 764.48437,13.646494 764.06249,13.47462 763.71094,13.130859 C 763.36718,12.779308 763.1953,12.357433 763.19531,11.865234 C 763.1953,11.373059 763.36718,10.955091 763.71094,10.611328 C 764.06249,10.267591 764.48437,10.095717 764.97656,10.095703 M 759.84375,39.544922 L 765.11719,44.818359 L 770.40234,39.544922 L 772.05469,41.173828 L 766.78125,46.482422 L 772.05469,51.755859 L 770.40234,53.396484 L 765.11719,48.111328 L 759.84375,53.396484 L 758.20313,51.755859 L 763.48828,46.482422 L 758.20313,41.173828 L 759.84375,39.544922"
+       id="text5997" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 134.9707,69.826172 L 132.58008,77.173828 L 137.37305,77.173828 L 134.9707,69.826172 M 132.9082,66.369141 L 137.00977,66.369141 L 143.23242,83.630859 L 139.50586,83.630859 L 138.33398,80.080078 L 131.64258,80.080078 L 130.50586,83.630859 L 126.76758,83.630859 L 132.9082,66.369141 M 135.70898,64.166016 L 135.70898,61.283203 L 138.35742,61.283203 L 138.35742,64.166016 L 135.70898,64.166016 M 131.63086,64.166016 L 131.63086,61.283203 L 134.2793,61.283203 L 134.2793,64.166016 L 131.63086,64.166016"
+       id="text6003" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 194.9707,62.126953 C 194.5957,62.126975 194.27538,62.267599 194.00977,62.548828 C 193.74413,62.822286 193.61132,63.154317 193.61133,63.544922 C 193.61132,63.927754 193.74023,64.251973 193.99805,64.517578 C 194.26366,64.783222 194.58788,64.916034 194.9707,64.916016 C 195.36132,64.916034 195.69335,64.783222 195.9668,64.517578 C 196.24804,64.24416 196.38866,63.919942 196.38867,63.544922 C 196.38866,63.16213 196.24804,62.830099 195.9668,62.548828 C 195.69335,62.267599 195.36132,62.126975 194.9707,62.126953 M 194.9707,60.521484 C 195.81444,60.521507 196.52929,60.814476 197.11523,61.400391 C 197.70116,61.978537 197.99413,62.685568 197.99414,63.521484 C 197.99413,64.357441 197.70116,65.068378 197.11523,65.654297 C 196.52929,66.232439 195.81444,66.521501 194.9707,66.521484 C 194.13476,66.521501 193.42773,66.232439 192.84961,65.654297 C 192.27929,65.07619 191.99414,64.365254 191.99414,63.521484 C 191.99414,62.677755 192.27929,61.966819 192.84961,61.388672 C 193.42773,60.81057 194.13476,60.521507 194.9707,60.521484 M 192.7207,67.072266 L 197.23242,67.072266 L 203.23242,83.630859 L 199.50586,83.630859 L 198.33398,80.080078 L 191.64258,80.080078 L 190.50586,83.630859 L 186.76758,83.630859 L 192.7207,67.072266 M 194.9707,69.826172 L 192.58008,77.173828 L 197.37305,77.173828 L 194.9707,69.826172"
+       id="text6007" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 248.52539,83.630859 L 248.52539,66.369141 L 261.05273,66.369141 L 261.05273,69.369141 L 252.0293,69.369141 L 252.0293,73.048828 L 260.2793,73.048828 L 260.2793,76.001953 L 252.0293,76.001953 L 252.0293,80.443359 L 261.47461,80.443359 L 261.47461,83.630859 L 248.52539,83.630859 M 258.24023,60.521484 L 254.57227,64.857422 L 252.9082,64.857422 L 255.2168,60.521484 L 258.24023,60.521484"
+       id="text6011" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 313.72266,101.49056 L 313.72266,104.29134 L 314.88281,104.29134 C 315.5703,104.29135 316.07421,104.18198 316.39453,103.96322 C 316.71483,103.74448 316.87499,103.40073 316.875,102.93197 C 316.87499,102.43979 316.70311,102.07651 316.35938,101.84212 C 316.01561,101.60776 315.48436,101.49057 314.76563,101.49056 L 313.72266,101.49056 M 311.37891,100.00228 L 315.16406,100.00228 C 316.53905,100.00229 317.5703,100.23667 318.25781,100.70541 C 318.95311,101.16636 319.30077,101.85776 319.30078,102.77962 C 319.30077,103.42026 319.11327,103.96713 318.73828,104.42025 C 318.36327,104.87338 317.84374,105.18198 317.17969,105.34603 L 319.34766,109.67025 L 316.72266,109.67025 L 314.88281,105.70931 L 313.72266,105.70931 L 313.72266,109.67025 L 311.37891,109.67025 L 311.37891,100.00228 M 315,97.717125 C 314.0078,97.717141 313.08593,97.892922 312.23438,98.244469 C 311.38281,98.588234 310.61718,99.099952 309.9375,99.779625 C 309.22656,100.49058 308.67968,101.29917 308.29688,102.20541 C 307.91406,103.10385 307.72265,104.03354 307.72266,104.99447 C 307.72265,105.96323 307.90234,106.8851 308.26172,107.76009 C 308.62109,108.62729 309.14062,109.40072 309.82031,110.08041 C 310.51562,110.79135 311.30859,111.33822 312.19922,111.72103 C 313.08984,112.09603 314.01562,112.28353 314.97656,112.28353 C 315.91405,112.28353 316.82421,112.09994 317.70703,111.73275 C 318.59764,111.36556 319.40624,110.83822 320.13281,110.15072 C 320.81248,109.49447 321.33983,108.72885 321.71484,107.85384 C 322.08983,106.97885 322.27733,106.0726 322.27734,105.13509 C 322.27733,104.09604 322.10155,103.13901 321.75,102.264 C 321.40623,101.38901 320.89061,100.60386 320.20313,99.908531 C 319.49999,99.181983 318.70702,98.635109 317.82422,98.267906 C 316.94921,97.900734 316.0078,97.717141 315,97.717125 M 314.97656,96.275719 C 316.17968,96.275736 317.31249,96.502298 318.375,96.955406 C 319.4453,97.400735 320.39842,98.049172 321.23438,98.900719 C 322.03905,99.713233 322.65233,100.64292 323.07422,101.68978 C 323.49608,102.73667 323.70701,103.84604 323.70703,105.01791 C 323.70701,106.20541 323.48826,107.33041 323.05078,108.39291 C 322.61326,109.4476 321.97655,110.37728 321.14063,111.18197 C 320.30467,112.00228 319.35155,112.63119 318.28125,113.06869 C 317.21874,113.50619 316.11718,113.72494 314.97656,113.72494 C 313.81249,113.72494 312.69921,113.49838 311.63672,113.04525 C 310.57421,112.59213 309.625,111.93978 308.78906,111.08822 C 307.97656,110.26791 307.35547,109.33822 306.92578,108.29916 C 306.5039,107.25229 306.29297,106.15854 306.29297,105.01791 C 306.29297,104.22104 306.39844,103.4476 306.60938,102.69759 C 306.82031,101.93979 307.13672,101.20151 307.55859,100.48275 C 308.34765,99.154639 309.39062,98.12339 310.6875,97.389 C 311.98437,96.646829 313.41405,96.275736 314.97656,96.275719"
+       id="text6015" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 372.0293,69.064453 L 376.06055,69.064453 C 377.84179,69.064468 379.18944,69.505874 380.10352,70.388672 C 381.01756,71.263684 381.47459,72.556652 381.47461,74.267578 C 381.47459,75.939461 381.02538,77.228522 380.12695,78.134766 C 379.23632,79.033208 377.95897,79.482426 376.29492,79.482422 L 372.0293,79.482422 L 372.0293,83.630859 L 368.52539,83.630859 L 368.52539,66.369141 L 372.0293,66.369141 L 372.0293,69.064453 M 372.05273,76.599609 L 375.47461,76.599609 C 376.4121,76.599616 377.09179,76.416023 377.51367,76.048828 C 377.93554,75.673836 378.14647,75.080087 378.14648,74.267578 C 378.14647,73.509776 377.93554,72.939464 377.51367,72.556641 C 377.09179,72.166027 376.47069,71.970715 375.65039,71.970703 L 372.05273,71.970703 L 372.05273,76.599609"
+       id="text6019" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 428.08594,66.322266 L 431.67188,66.322266 L 431.67188,77.150391 C 431.67187,78.486333 431.93749,79.462895 432.46875,80.080078 C 432.99999,80.689456 433.84374,80.994143 435,80.994141 C 436.17187,80.994143 437.02343,80.689456 437.55469,80.080078 C 438.09374,79.470707 438.36327,78.494146 438.36328,77.150391 L 438.36328,66.322266 L 441.91406,66.322266 L 441.91406,77.537109 C 441.91405,79.654301 441.3203,81.279299 440.13281,82.412109 C 438.95311,83.544922 437.24999,84.111328 435.02344,84.111328 C 432.78124,84.111328 431.0625,83.548828 429.86719,82.423828 C 428.67969,81.291018 428.08594,79.662113 428.08594,77.537109 L 428.08594,66.322266 M 435.73828,64.166016 L 435.73828,61.283203 L 438.38672,61.283203 L 438.38672,64.166016 L 435.73828,64.166016 M 431.66016,64.166016 L 431.66016,61.283203 L 434.30859,61.283203 L 434.30859,64.166016 L 431.66016,64.166016"
+       id="text6023" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 488.08594,66.105469 L 491.67188,66.105469 L 491.67188,76.933594 C 491.67187,78.269536 491.93749,79.246098 492.46875,79.863281 C 492.99999,80.472659 493.84374,80.777346 495,80.777344 C 496.17187,80.777346 497.02343,80.472659 497.55469,79.863281 C 498.09374,79.25391 498.36327,78.277349 498.36328,76.933594 L 498.36328,66.105469 L 501.91406,66.105469 L 501.91406,77.320313 C 501.91405,79.437504 501.3203,81.062502 500.13281,82.195313 C 498.95311,83.328125 497.24999,83.894531 495.02344,83.894531 C 492.78124,83.894531 491.0625,83.332031 489.86719,82.207031 C 488.67969,81.074221 488.08594,79.445316 488.08594,77.320313 L 488.08594,66.105469 M 498.45703,60.304688 L 494.78906,64.640625 L 493.125,64.640625 L 495.43359,60.304688 L 498.45703,60.304688"
+       id="text6029" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 552.43945,83.630859 L 552.43945,66.369141 L 555.99023,66.369141 L 555.99023,83.630859 L 552.43945,83.630859 M 557.66602,60.521484 L 553.99805,64.857422 L 552.33398,64.857422 L 554.64258,60.521484 L 557.66602,60.521484"
+       id="text6033" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 610.18359,75 C 610.18359,76.898444 610.60546,78.375005 611.44922,79.429688 C 612.29296,80.476566 613.47265,81.000003 614.98828,81 C 616.51952,81.000003 617.71093,80.476566 618.5625,79.429688 C 619.41405,78.375005 619.83983,76.898444 619.83984,75 C 619.83983,73.101573 619.41405,71.628918 618.5625,70.582031 C 617.71093,69.527358 616.51952,69.000015 614.98828,69 C 613.47265,69.000015 612.29296,69.523452 611.44922,70.570313 C 610.60546,71.617199 610.18359,73.093761 610.18359,75 M 606.5625,75 C 606.5625,72.210949 607.32031,70.000014 608.83594,68.367188 C 610.35937,66.726579 612.41015,65.906268 614.98828,65.90625 C 617.56639,65.906268 619.61717,66.726579 621.14063,68.367188 C 622.67186,70.007826 623.43748,72.218761 623.4375,75 C 623.43748,77.781256 622.67186,79.992191 621.14063,81.632813 C 619.61717,83.273438 617.56639,84.09375 614.98828,84.09375 C 612.41015,84.09375 610.35937,83.273438 608.83594,81.632813 C 607.32031,79.992191 606.5625,77.781256 606.5625,75 M 618.44531,60.503906 L 614.77734,64.839844 L 613.11328,64.839844 L 615.42188,60.503906 L 618.44531,60.503906"
+       id="text6037" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 670.18359,75.017578 C 670.18359,76.916022 670.60546,78.392583 671.44922,79.447266 C 672.29296,80.494144 673.47265,81.017581 674.98828,81.017578 C 676.51952,81.017581 677.71093,80.494144 678.5625,79.447266 C 679.41405,78.392583 679.83983,76.916022 679.83984,75.017578 C 679.83983,73.119151 679.41405,71.646496 678.5625,70.599609 C 677.71093,69.544936 676.51952,69.017593 674.98828,69.017578 C 673.47265,69.017593 672.29296,69.54103 671.44922,70.587891 C 670.60546,71.634778 670.18359,73.111339 670.18359,75.017578 M 666.5625,75.017578 C 666.5625,72.228527 667.32031,70.017592 668.83594,68.384766 C 670.35937,66.744158 672.41015,65.923846 674.98828,65.923828 C 677.56639,65.923846 679.61717,66.744158 681.14063,68.384766 C 682.67186,70.025404 683.43748,72.23634 683.4375,75.017578 C 683.43748,77.798834 682.67186,80.009769 681.14063,81.650391 C 679.61717,83.291016 677.56639,84.111328 674.98828,84.111328 C 672.41015,84.111328 670.35937,83.291016 668.83594,81.650391 C 667.32031,80.009769 666.5625,77.798834 666.5625,75.017578 M 675.72656,64.166016 L 675.72656,61.283203 L 678.375,61.283203 L 678.375,64.166016 L 675.72656,64.166016 M 671.64844,64.166016 L 671.64844,61.283203 L 674.29688,61.283203 L 674.29688,64.166016 L 671.64844,64.166016"
+       id="text6041" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 735.5332,106.35352 L 735.5332,103.35352 L 739.44727,99.966797 L 739.44727,102.75586 L 737.04492,104.8418 L 739.44727,106.92773 L 739.44727,109.74023 L 735.5332,106.35352 M 730.4707,106.35352 L 730.4707,103.35352 L 734.4082,99.966797 L 734.4082,102.75586 L 732.00586,104.8418 L 734.4082,106.92773 L 734.4082,109.74023 L 730.4707,106.35352"
+       id="text6045" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 799.44727,103.3418 L 799.44727,106.3418 L 795.5332,109.72852 L 795.5332,106.93945 L 797.93555,104.83008 L 795.5332,102.76758 L 795.5332,99.955078 L 799.44727,103.3418 M 794.4082,103.3418 L 794.4082,106.3418 L 790.4707,109.72852 L 790.4707,106.93945 L 792.86133,104.83008 L 790.4707,102.76758 L 790.4707,99.955078 L 794.4082,103.3418"
+       id="text6051" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 883.81641,76.535881 L 886.23047,76.535881 L 886.23047,85.418694 L 883.81641,85.418694 L 883.81641,76.535881 M 883.81641,64.535881 L 886.23047,64.535881 L 886.23047,73.418694 L 883.81641,73.418694 L 883.81641,64.535881 M 877.98047,101.19213 L 892.01953,101.19213 L 892.01953,107.07494 L 889.6875,107.07494 L 889.6875,103.48901 L 877.98047,103.48901 L 877.98047,101.19213"
+       id="text6057" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 149.9707,129.82617 L 147.58008,137.17383 L 152.37305,137.17383 L 149.9707,129.82617 M 147.9082,126.36914 L 152.00977,126.36914 L 158.23242,143.63086 L 154.50586,143.63086 L 153.33398,140.08008 L 146.64258,140.08008 L 145.50586,143.63086 L 141.76758,143.63086 L 147.9082,126.36914 M 153.42773,120.52148 L 149.75977,124.85742 L 148.0957,124.85742 L 150.4043,120.52148 L 153.42773,120.52148"
+       id="text6065" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 211.40625,137.91797 C 211.71874,137.73829 211.95312,137.53907 212.10938,137.32031 C 212.26562,137.10157 212.34374,136.86719 212.34375,136.61719 C 212.34374,136.31251 212.2539,136.0547 212.07422,135.84375 C 211.89452,135.62501 211.52343,135.3711 210.96094,135.08203 L 207.85547,133.47656 C 207.55078,133.65626 207.3164,133.85938 207.15234,134.08594 C 206.99609,134.31251 206.91797,134.5547 206.91797,134.8125 C 206.91797,135.1172 207.03125,135.38673 207.25781,135.62109 C 207.49218,135.84766 208.0039,136.16407 208.79297,136.57031 L 211.40625,137.91797 M 205.03125,141.75 L 207.92578,141.75 C 207.98828,142.35938 208.16796,142.8125 208.46484,143.10938 C 208.76953,143.40625 209.19921,143.55469 209.75391,143.55469 C 210.26952,143.55469 210.67968,143.43359 210.98438,143.19141 C 211.28905,142.94141 211.4414,142.60547 211.44141,142.18359 C 211.4414,141.83985 211.32812,141.54297 211.10156,141.29297 C 210.87499,141.03516 210.42577,140.74219 209.75391,140.41406 L 206.95313,138.99609 C 206.0625,138.55079 205.39844,138.03907 204.96094,137.46094 C 204.52344,136.88282 204.30469,136.23438 204.30469,135.51563 C 204.30469,134.82032 204.47266,134.21095 204.80859,133.6875 C 205.15234,133.15626 205.65625,132.71485 206.32031,132.36328 C 205.92969,132.01173 205.64062,131.62892 205.45313,131.21484 C 205.26562,130.79298 205.17187,130.32814 205.17188,129.82031 C 205.17187,128.64845 205.57422,127.70705 206.37891,126.99609 C 207.18359,126.27736 208.2539,125.91799 209.58984,125.91797 C 210.96484,125.91799 212.04296,126.26955 212.82422,126.97266 C 213.60546,127.6758 214.0078,128.64845 214.03125,129.89063 L 211.26563,129.89063 C 211.24999,129.3672 211.09374,128.96876 210.79688,128.69531 C 210.50781,128.42189 210.08984,128.28517 209.54297,128.28516 C 209.05859,128.28517 208.68359,128.39064 208.41797,128.60156 C 208.16015,128.81251 208.03125,129.10939 208.03125,129.49219 C 208.03125,129.8047 208.18359,130.09767 208.48828,130.37109 C 208.80078,130.63673 209.35937,130.95704 210.16406,131.33203 L 212.13281,132.24609 C 213.1328,132.72267 213.87108,133.25392 214.34766,133.83984 C 214.82421,134.41798 215.06249,135.08595 215.0625,135.84375 C 215.06249,136.55469 214.8828,137.17579 214.52344,137.70703 C 214.17186,138.23047 213.66405,138.63672 213,138.92578 C 213.45312,139.32422 213.79296,139.76563 214.01953,140.25 C 214.24608,140.73438 214.35936,141.26563 214.35938,141.84375 C 214.35936,143.04688 213.92968,144.03906 213.07031,144.82031 C 212.21093,145.60937 211.10546,146.0039 209.75391,146.00391 C 208.26953,146.0039 207.1289,145.64453 206.33203,144.92578 C 205.53515,144.20703 205.10156,143.14844 205.03125,141.75 M 203.97656,173.625 L 203.97656,160.59375 C 203.97656,159.29689 204.48047,158.25002 205.48828,157.45313 C 206.49609,156.64845 207.83984,156.24611 209.51953,156.24609 C 211.23046,156.24611 212.5703,156.63674 213.53906,157.41797 C 214.5078,158.19923 214.99217,159.27345 214.99219,160.64063 C 214.99217,161.48439 214.84764,162.17579 214.55859,162.71484 C 214.27733,163.25392 213.83983,163.66798 213.24609,163.95703 C 214.16796,164.32423 214.85936,164.86329 215.32031,165.57422 C 215.78905,166.28516 216.02342,167.16016 216.02344,168.19922 C 216.02342,169.94922 215.51952,171.36328 214.51172,172.44141 C 213.5039,173.51953 212.18358,174.05859 210.55078,174.05859 C 210.32421,174.05859 210.0703,174.04687 209.78906,174.02344 C 209.51562,174 209.21874,173.96484 208.89844,173.91797 L 208.89844,171.17578 C 208.99999,171.19141 209.10156,171.20313 209.20313,171.21094 C 209.31249,171.21875 209.47265,171.22266 209.68359,171.22266 C 210.60546,171.22266 211.3164,170.96875 211.81641,170.46094 C 212.3164,169.94532 212.5664,169.21485 212.56641,168.26953 C 212.5664,167.35548 212.29296,166.66016 211.74609,166.18359 C 211.20702,165.70704 210.41796,165.46876 209.37891,165.46875 L 209.0625,165.46875 L 209.07422,163.06641 C 209.12109,163.07423 209.17187,163.08204 209.22656,163.08984 C 209.28124,163.08985 209.36327,163.08985 209.47266,163.08984 C 210.16796,163.08985 210.6953,162.91798 211.05469,162.57422 C 211.42187,162.22267 211.60546,161.71486 211.60547,161.05078 C 211.60546,160.38673 211.41405,159.88283 211.03125,159.53906 C 210.65624,159.18751 210.10546,159.01173 209.37891,159.01172 C 208.70703,159.01173 208.19531,159.20705 207.84375,159.59766 C 207.49218,159.98048 207.3164,160.54298 207.31641,161.28516 L 207.31641,173.625 L 203.97656,173.625"
+       id="text6073" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 267.09961,140.51367 L 269.94727,140.51367 C 271.60351,140.51367 272.80272,140.08008 273.54492,139.21289 C 274.2871,138.34571 274.65819,136.94727 274.6582,135.01758 C 274.65819,133.09571 274.31053,131.68165 273.61523,130.77539 C 272.92772,129.86134 271.8496,129.40431 270.38086,129.4043 L 267.09961,129.4043 L 267.09961,133.23633 L 270.88477,133.23633 L 270.88477,135.47461 L 267.09961,135.47461 L 267.09961,140.51367 M 263.61914,143.63086 L 263.61914,135.47461 L 261.74414,135.47461 L 261.74414,133.23633 L 263.61914,133.23633 L 263.61914,126.36914 L 270.4043,126.36914 C 273.04491,126.36916 275.01366,127.084 276.31055,128.51367 C 277.60741,129.93556 278.25584,132.10353 278.25586,135.01758 C 278.25584,136.60352 278.01756,137.99805 277.54102,139.20117 C 277.07225,140.4043 276.38084,141.36914 275.4668,142.0957 C 274.77928,142.64258 273.99413,143.03711 273.11133,143.2793 C 272.23632,143.51367 271.00585,143.63086 269.41992,143.63086 L 263.61914,143.63086"
+       id="text6077" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 626.72461,139.55273 C 627.17773,140.04493 627.68945,140.41211 628.25977,140.6543 C 628.83007,140.89649 629.47069,141.01758 630.18164,141.01758 C 631.71288,141.01758 632.90428,140.49414 633.75586,139.44727 C 634.60741,138.39258 635.03319,136.91602 635.0332,135.01758 C 635.03319,134.24415 634.96288,133.54493 634.82227,132.91992 C 634.68163,132.28712 634.4785,131.73634 634.21289,131.26758 L 626.72461,139.55273 M 625.98633,138.36914 L 633.39258,130.21289 C 632.9785,129.81447 632.50585,129.51759 631.97461,129.32227 C 631.44335,129.11916 630.84569,129.01759 630.18164,129.01758 C 628.66601,129.01759 627.48632,129.54103 626.64258,130.58789 C 625.79882,131.63478 625.37695,133.11134 625.37695,135.01758 C 625.37695,135.72071 625.42382,136.34571 625.51758,136.89258 C 625.61914,137.43946 625.77539,137.93165 625.98633,138.36914 M 621.36914,143.36133 L 623.51367,140.9707 C 622.91992,140.16602 622.47851,139.27149 622.18945,138.28711 C 621.90039,137.29493 621.75586,136.20509 621.75586,135.01758 C 621.75586,132.22853 622.51367,130.01759 624.0293,128.38477 C 625.55273,126.74416 627.60351,125.92385 630.18164,125.92383 C 631.28319,125.92385 632.27147,126.06447 633.14648,126.3457 C 634.02928,126.62697 634.84178,127.06056 635.58398,127.64648 L 637.30664,125.70117 L 638.45508,126.73242 L 636.63867,128.70117 C 637.30272,129.5215 637.79881,130.45509 638.12695,131.50195 C 638.46287,132.54884 638.63084,133.72071 638.63086,135.01758 C 638.63084,137.79883 637.86912,140.00977 636.3457,141.65039 C 634.82225,143.29102 632.76757,144.11133 630.18164,144.11133 C 629.01757,144.11133 627.96679,143.94727 627.0293,143.61914 C 626.0996,143.29102 625.26367,142.79102 624.52148,142.11914 L 622.50586,144.4043 L 621.36914,143.36133"
+       id="text6081" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 690,127.98633 C 689.42968,127.98634 688.9414,128.18556 688.53516,128.58398 C 688.13672,128.98244 687.9375,129.4629 687.9375,130.02539 C 687.9375,130.60353 688.13672,131.09181 688.53516,131.49023 C 688.93359,131.88868 689.42187,132.0879 690,132.08789 C 690.5625,132.0879 691.04296,131.88478 691.44141,131.47852 C 691.83984,131.07228 692.03906,130.5879 692.03906,130.02539 C 692.03906,129.4629 691.83984,128.98244 691.44141,128.58398 C 691.04296,128.18556 690.5625,127.98634 690,127.98633 M 690,126.47461 C 690.98437,126.47463 691.82031,126.82619 692.50781,127.5293 C 693.20312,128.22462 693.55077,129.06447 693.55078,130.04883 C 693.55077,131.0254 693.20312,131.86134 692.50781,132.55664 C 691.81249,133.25196 690.96875,133.59962 689.97656,133.59961 C 688.99218,133.59962 688.15625,133.25587 687.46875,132.56836 C 686.78906,131.88087 686.44922,131.04103 686.44922,130.04883 C 686.44922,129.05666 686.79297,128.21291 687.48047,127.51758 C 688.17578,126.82228 689.01562,126.47463 690,126.47461 M 695.51953,156.29883 L 695.51953,157.59961 L 694.19531,157.59961 L 694.19531,173.63086 L 692.42578,173.63086 L 692.42578,157.59961 L 690.57422,157.59961 L 690.57422,173.63086 L 688.78125,173.63086 L 688.78125,164.44336 C 687.47656,164.39649 686.43359,164.00196 685.65234,163.25977 C 684.87109,162.51759 684.48047,161.56056 684.48047,160.38867 C 684.48047,159.15431 684.89844,158.16603 685.73438,157.42383 C 686.57031,156.67385 687.67968,156.29885 689.0625,156.29883 L 695.51953,156.29883"
+       id="text6085" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 373.13672,6.5214844 L 376.08984,6.5214844 L 381.72656,13.095703 L 378.97266,13.095703 L 374.625,8.7480469 L 370.25391,13.095703 L 367.5,13.095703 L 373.13672,6.5214844"
+       id="text6091" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 750.67969,128.67773 L 750.67969,125.79492 L 753.32813,125.79492 L 753.32813,128.67773 L 750.67969,128.67773 M 746.60156,128.67773 L 746.60156,125.79492 L 749.25,125.79492 L 749.25,128.67773 L 746.60156,128.67773 M 753.39844,155.0332 L 749.73047,159.36914 L 748.06641,159.36914 L 750.375,155.0332 L 753.39844,155.0332"
+       id="text6099" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 171.07031,197.29102 L 175.92188,197.29102 L 175.92188,189.29883 L 173.97656,189.29883 L 171.07031,197.29102 M 165,203.63086 L 171.80859,186.36914 L 187.81641,186.36914 L 187.81641,189.36914 L 179.34375,189.36914 L 179.34375,193.04883 L 187.05469,193.04883 L 187.05469,196.00195 L 179.34375,196.00195 L 179.34375,200.44336 L 188.25,200.44336 L 188.25,203.63086 L 175.92188,203.63086 L 175.92188,200.08008 L 170.0625,200.08008 L 168.76172,203.63086 L 165,203.63086"
+       id="text6105" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 300.46875,193.23633 C 300.32031,193.22071 300.20312,193.20899 300.11719,193.20117 C 300.03906,193.19337 299.96484,193.18946 299.89453,193.18945 C 299.05859,193.18946 298.42578,193.53321 297.99609,194.2207 C 297.5664,194.90821 297.35156,195.92384 297.35156,197.26758 C 297.35156,198.04102 297.4375,198.70899 297.60938,199.27148 C 297.78906,199.83399 298.04687,200.28711 298.38281,200.63086 L 300.46875,193.23633 M 296.68359,206.49023 L 297.48047,203.63086 C 296.30859,203.13867 295.42187,202.35352 294.82031,201.27539 C 294.21875,200.19727 293.91797,198.85352 293.91797,197.24414 C 293.91797,195.11134 294.45312,193.43946 295.52344,192.22852 C 296.60156,191.01759 298.07421,190.41212 299.94141,190.41211 C 300.15234,190.41212 300.35937,190.41994 300.5625,190.43555 C 300.76562,190.45119 300.96874,190.47462 301.17188,190.50586 L 301.69922,188.56055 L 302.97656,188.56055 L 302.34375,190.78711 C 303.32811,191.09181 304.09765,191.63478 304.65234,192.41602 C 305.20702,193.18946 305.52733,194.17774 305.61328,195.38086 L 302.32031,195.36914 C 302.28124,194.98634 302.1914,194.65821 302.05078,194.38477 C 301.91796,194.10353 301.72265,193.85743 301.46484,193.64648 L 299.36719,201.13477 C 299.38281,201.13477 299.40624,201.13867 299.4375,201.14648 C 299.67187,201.16992 299.85156,201.18164 299.97656,201.18164 C 300.66406,201.18164 301.19921,200.99024 301.58203,200.60742 C 301.97265,200.22461 302.23437,199.62305 302.36719,198.80273 L 305.66016,198.80273 C 305.54296,200.41993 304.96874,201.70117 303.9375,202.64648 C 302.91405,203.5918 301.59374,204.06445 299.97656,204.06445 C 299.76562,204.06445 299.55077,204.05664 299.33203,204.04102 C 299.11328,204.02539 298.88671,204.00195 298.65234,203.9707 L 297.96094,206.49023 L 296.68359,206.49023 M 304.19531,223.0957 L 301.99219,223.0957 C 301.92968,222.54884 301.72264,222.12696 301.37109,221.83008 C 301.01952,221.5254 300.55468,221.37306 299.97656,221.37305 C 299.26562,221.37306 298.70702,221.69337 298.30078,222.33398 C 297.89452,222.96681 297.6914,223.85353 297.69141,224.99414 C 297.6914,226.14259 297.89452,227.01758 298.30078,227.61914 C 298.70702,228.22071 299.29687,228.52149 300.07031,228.52148 C 300.64061,228.52149 301.09765,228.35743 301.44141,228.0293 C 301.78514,227.70118 301.99218,227.23633 302.0625,226.63477 L 304.32422,226.62305 C 304.2617,227.70899 303.83592,228.58008 303.04688,229.23633 C 302.2578,229.89258 301.24218,230.22071 300,230.2207 C 298.54687,230.22071 297.39843,229.75977 296.55469,228.83789 C 295.71874,227.91602 295.30078,226.65821 295.30078,225.06445 C 295.30078,223.45509 295.72656,222.17384 296.57813,221.2207 C 297.43749,220.25978 298.58593,219.77931 300.02344,219.7793 C 301.21093,219.77931 302.18749,220.084 302.95313,220.69336 C 303.72655,221.30275 304.14061,222.10353 304.19531,223.0957 M 300,217.7168 C 298.99999,217.71681 298.06249,217.8965 297.1875,218.25586 C 296.32031,218.61525 295.54687,219.13869 294.86719,219.82617 C 294.17187,220.52931 293.64062,221.32618 293.27344,222.2168 C 292.90625,223.09962 292.72265,224.0254 292.72266,224.99414 C 292.72265,225.97071 292.90625,226.89649 293.27344,227.77148 C 293.64062,228.64649 294.17187,229.43164 294.86719,230.12695 C 295.55468,230.81446 296.33984,231.3418 297.22266,231.70898 C 298.10546,232.07617 299.03124,232.25977 300,232.25977 C 300.96874,232.25977 301.89452,232.07617 302.77734,231.70898 C 303.66796,231.3418 304.46874,230.80664 305.17969,230.10352 C 305.86717,229.43164 306.3867,228.66211 306.73828,227.79492 C 307.09764,226.92774 307.27733,225.99415 307.27734,224.99414 C 307.27733,224.00978 307.09373,223.08009 306.72656,222.20508 C 306.36717,221.32228 305.84373,220.53712 305.15625,219.84961 C 304.46092,219.15431 303.67577,218.62697 302.80078,218.26758 C 301.92577,217.90041 300.99218,217.71681 300,217.7168 M 299.97656,216.27539 C 301.16405,216.27541 302.28514,216.49416 303.33984,216.93164 C 304.40233,217.36916 305.35155,218.00587 306.1875,218.8418 C 307.0078,219.66212 307.63279,220.60353 308.0625,221.66602 C 308.49217,222.72071 308.70701,223.8379 308.70703,225.01758 C 308.70701,226.20509 308.49217,227.31446 308.0625,228.3457 C 307.64061,229.37696 307.01561,230.29883 306.1875,231.11133 C 305.3203,231.95508 304.35155,232.60352 303.28125,233.05664 C 302.21093,233.50195 301.10936,233.72461 299.97656,233.72461 C 298.82812,233.72461 297.73046,233.50586 296.68359,233.06836 C 295.64453,232.62305 294.70312,231.97852 293.85938,231.13477 C 293.02343,230.30664 292.38672,229.36914 291.94922,228.32227 C 291.51172,227.26758 291.29297,226.16602 291.29297,225.01758 C 291.29297,223.85353 291.51172,222.74415 291.94922,221.68945 C 292.38672,220.62697 293.02343,219.66994 293.85938,218.81836 C 294.67968,217.99025 295.60937,217.36134 296.64844,216.93164 C 297.68749,216.49416 298.79687,216.27541 299.97656,216.27539"
+       id="text6109" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 472.88672,203.63086 L 472.88672,186.36914 L 476.60156,186.36914 L 483.60938,198.22852 L 483.60938,186.36914 L 487.11328,186.36914 L 487.11328,203.63086 L 483.44531,203.63086 L 476.39063,191.77148 L 476.39063,203.63086 L 472.88672,203.63086 M 483.82031,181.0957 C 483.61717,182.07229 483.31639,182.79494 482.91797,183.26367 C 482.51952,183.72463 482.0078,183.9551 481.38281,183.95508 C 481.21874,183.9551 481.0664,183.94729 480.92578,183.93164 C 480.78515,183.90822 480.64452,183.87307 480.50391,183.82617 L 479.48438,183.52148 C 479.33593,183.48244 479.19921,183.4551 479.07422,183.43945 C 478.94921,183.41604 478.82812,183.40432 478.71094,183.4043 C 478.44531,183.40432 478.23046,183.47463 478.06641,183.61523 C 477.90234,183.75588 477.77343,183.98635 477.67969,184.30664 L 476.39063,184.30664 C 476.57812,183.36135 476.86718,182.66604 477.25781,182.2207 C 477.64843,181.77541 478.15624,181.55276 478.78125,181.55273 C 478.9453,181.55276 479.10937,181.56838 479.27344,181.59961 C 479.43749,181.62307 479.60937,181.66213 479.78906,181.7168 L 480.87891,182.00977 C 480.97265,182.04104 481.0703,182.06447 481.17188,182.08008 C 481.28124,182.09572 481.39843,182.10354 481.52344,182.10352 C 481.77343,182.10354 481.98046,182.02151 482.14453,181.85742 C 482.3164,181.68557 482.4453,181.43166 482.53125,181.0957 L 483.82031,181.0957"
+       id="text6113" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 535.83398,220.83432 L 539.2207,220.83432 L 538.33008,225.93198 C 538.21289,226.55698 538.12304,227.15073 538.06055,227.71323 C 537.99804,228.26792 537.96679,228.72104 537.9668,229.0726 C 537.96679,229.79917 538.13085,230.34214 538.45898,230.70151 C 538.7871,231.05307 539.2871,231.22885 539.95898,231.22885 C 540.74023,231.22885 541.3457,230.90854 541.77539,230.26791 C 542.21288,229.62729 542.57616,228.49058 542.86523,226.85776 L 543.91992,220.83432 L 547.30664,220.83432 L 545.04492,233.6312 L 541.9043,233.6312 L 542.11523,232.2601 C 541.7871,232.86948 541.41991,233.31479 541.01367,233.59604 C 540.61523,233.87729 540.14257,234.01791 539.5957,234.01791 C 539.07226,234.01791 538.60742,233.90073 538.20117,233.66635 C 537.79492,233.43979 537.42773,233.08432 537.09961,232.59995 L 536.04492,238.76401 L 532.69336,238.76401 L 535.83398,220.83432"
+       id="text6117" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 607.875,197.70117 C 607.74217,199.66211 606.98436,201.22071 605.60156,202.37695 C 604.22655,203.5332 602.42968,204.11133 600.21094,204.11133 C 597.65624,204.11133 595.66796,203.31445 594.24609,201.7207 C 592.83203,200.12696 592.125,197.89258 592.125,195.01758 C 592.125,192.08009 592.84765,189.83009 594.29297,188.26758 C 595.73828,186.7051 597.8164,185.92385 600.52734,185.92383 C 602.73046,185.92385 604.46874,186.46291 605.74219,187.54102 C 607.02342,188.61134 607.72655,190.12697 607.85156,192.08789 L 604.34766,192.08789 C 604.19921,191.11134 603.80077,190.36915 603.15234,189.86133 C 602.50389,189.34572 601.6289,189.08791 600.52734,189.08789 C 598.96484,189.08791 597.77734,189.59181 596.96484,190.59961 C 596.15234,191.60743 595.74609,193.08009 595.74609,195.01758 C 595.74609,196.89258 596.14843,198.3418 596.95313,199.36523 C 597.76562,200.38868 598.91796,200.90039 600.41016,200.90039 C 601.48827,200.90039 602.37108,200.62696 603.05859,200.08008 C 603.74608,199.52539 604.19139,198.73243 604.39453,197.70117 L 607.875,197.70117 M 597.62109,208.76367 L 597.62109,207.25195 C 598.24609,207.41601 598.81249,207.54101 599.32031,207.62695 C 599.82812,207.71289 600.26171,207.75586 600.62109,207.75586 C 601.02733,207.75586 601.32421,207.68554 601.51172,207.54492 C 601.69921,207.41211 601.79296,207.19726 601.79297,206.90039 C 601.79296,206.60351 601.68358,206.39258 601.46484,206.26758 C 601.24608,206.14258 600.8828,206.08008 600.375,206.08008 C 600.1953,206.08008 600.05858,206.08008 599.96484,206.08008 C 599.87108,206.08789 599.78515,206.0957 599.70703,206.10352 L 599.70703,203.63086 L 600.90234,203.63086 L 600.90234,204.68555 L 601.07813,204.68555 C 601.99218,204.68555 602.67968,204.87305 603.14063,205.24805 C 603.60155,205.62304 603.83202,206.18164 603.83203,206.92383 C 603.83202,207.70507 603.57421,208.29101 603.05859,208.68164 C 602.54296,209.07226 601.76952,209.26757 600.73828,209.26758 C 600.33983,209.26757 599.87108,209.2246 599.33203,209.13867 C 598.80077,209.05273 598.23046,208.92773 597.62109,208.76367"
+       id="text6121" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 721.7168,216.36914 L 721.7168,219.82617 L 718.23633,219.82617 L 718.23633,216.36914 L 721.7168,216.36914 M 721.55273,221.39648 C 721.55273,221.47462 721.55663,221.5879 721.56445,221.73633 C 721.57226,221.88478 721.57616,221.99415 721.57617,222.06445 C 721.57616,222.74415 721.50194,223.31446 721.35352,223.77539 C 721.20507,224.23634 720.96679,224.66602 720.63867,225.06445 C 720.38085,225.36134 720.00195,225.70118 719.50195,226.08398 C 719.00976,226.4668 718.69335,226.74415 718.55273,226.91602 C 718.24804,227.25977 718.0332,227.57618 717.9082,227.86523 C 717.79101,228.1543 717.73242,228.4668 717.73242,228.80273 C 717.73242,229.55274 717.93554,230.13477 718.3418,230.54883 C 718.74804,230.95508 719.32226,231.15821 720.06445,231.1582 C 720.79882,231.15821 721.38085,230.91211 721.81055,230.41992 C 722.24023,229.91993 722.4746,229.22071 722.51367,228.32227 L 725.8418,228.32227 L 725.8418,228.68555 C 725.84178,230.3418 725.31835,231.66211 724.27148,232.64648 C 723.23241,233.62305 721.83007,234.11133 720.06445,234.11133 C 718.25976,234.11133 716.82226,233.64648 715.75195,232.7168 C 714.68945,231.7793 714.1582,230.53321 714.1582,228.97852 C 714.1582,228.40821 714.2168,227.90821 714.33398,227.47852 C 714.45117,227.04883 714.63086,226.65821 714.87305,226.30664 C 715.18554,225.86915 715.67773,225.39259 716.34961,224.87695 C 717.02148,224.36134 717.43554,224.03321 717.5918,223.89258 C 717.88867,223.60353 718.0996,223.29884 718.22461,222.97852 C 718.35742,222.6504 718.42382,222.25587 718.42383,221.79492 C 718.42382,221.75587 718.41992,221.69337 718.41211,221.60742 C 718.40429,221.51368 718.40039,221.44337 718.40039,221.39648 L 721.55273,221.39648"
+       id="text6131" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Matrix Unicode"
+       d=""
+       id="text6955" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="137.05411"
+       y="23.149496"
+       id="text4346"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348"
+         x="137.05411"
+         y="23.149496"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">             ˝ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="186.05411"
+       y="27.3995"
+       id="text4346-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-1"
+         x="186.05411"
+         y="27.3995"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ¯ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="482.80411"
+       y="24.6495"
+       id="text4346-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-7"
+         x="482.80411"
+         y="24.6495"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ˛ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="558.30408"
+       y="24.399498"
+       id="text4346-6"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-0"
+         x="558.30408"
+         y="24.399498"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">             ˘ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="626.55408"
+       y="11.1495"
+       id="text4346-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-09"
+         x="626.55408"
+         y="11.1495"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+           id="tspan4483">             o</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="667.80408"
+       y="28.899498"
+       id="text4346-31"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-15"
+         x="667.80408"
+         y="28.899498"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     . </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="619.55408"
+       y="203.14951"
+       id="text4346-38"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-8"
+         x="619.55408"
+         y="203.14951"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ˇ </tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="620.30408"
+       y="232.14951"
+       id="text4346-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4348-6"
+         x="620.30408"
+         y="232.14951"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1">                     ˙ </tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Swis721 BT';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 402.88672,6.52148 2.95312,0 5.63672,6.574219 -2.7539,0 -4.34766,-4.3476565 -4.37109,4.3476565 -2.75391,0 5.63672,-6.574219"
+       id="text6091-3" />
+  </g>
+</svg>
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png
new file mode 100644 (file)
index 0000000..875eb36
Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg
new file mode 100644 (file)
index 0000000..1ca6a9c
--- /dev/null
@@ -0,0 +1,935 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="900"
+   height="300"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45.1"
+   version="1.0"
+   sodipodi:docbase="C:\Documents and Settings\David Nelson\Archives\Svg"
+   sodipodi:docname="KB_US-International.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path5387"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path5390"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="Tail"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Tail"
+       style="overflow:visible">
+      <g
+         id="g5342"
+         transform="scale(-1.2)">
+        <path
+           id="path5344"
+           d="M -3.8048674,-3.9585227 L 0.54352094,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5346"
+           d="M -1.2866832,-3.9585227 L 3.0617053,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5348"
+           d="M 1.3053582,-3.9585227 L 5.6537466,-0.00068114835"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5350"
+           d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5352"
+           d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+        <path
+           id="path5354"
+           d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+      </g>
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mend"
+       style="overflow:visible;">
+      <path
+         id="path5363"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path5369"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Send"
+       style="overflow:visible;">
+      <path
+         id="path5375"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.2) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Send"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Send"
+       style="overflow:visible;">
+      <path
+         id="path5357"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) rotate(180) translate(-5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path5381"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path5372"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(-5,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.74472808"
+     inkscape:cx="450"
+     inkscape:cy="150"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:grid-points="true"
+     showgrid="true"
+     gridtolerance="15px"
+     gridcolor="#0000ff"
+     gridopacity="0.12156863"
+     gridempcolor="#0000ff"
+     gridempopacity="0.25098039"
+     gridspacingx="7.5px"
+     gridspacingy="7.5px"
+     gridempspacing="4"
+     showborder="false"
+     inkscape:window-width="756"
+     inkscape:window-height="569"
+     inkscape:window-x="28"
+     inkscape:window-y="218"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:grid-bbox="true" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,0 L 60,0 L 60,60 L 0,60 L 0,0 z "
+       id="rect2186" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 60,0 L 120,0 L 120,60 L 60,60 L 60,0 z "
+       id="rect2218" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 120,0 L 180,0 L 180,60 L 120,60 L 120,0 z "
+       id="rect2222" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 180,0 L 240,0 L 240,60 L 180,60 L 180,0 z "
+       id="rect2228" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 240,0 L 300,0 L 300,60 L 240,60 L 240,0 z "
+       id="rect2230" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 300,0 L 360,0 L 360,60 L 300,60 L 300,0 z "
+       id="rect2232" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 360,0 L 420,0 L 420,60 L 360,60 L 360,0 z "
+       id="rect2234" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 420,0 L 480,0 L 480,60 L 420,60 L 420,0 z "
+       id="rect2236" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 480,0 L 540,0 L 540,60 L 480,60 L 480,0 z "
+       id="rect2238" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 540,0 L 600,0 L 600,60 L 540,60 L 540,0 z "
+       id="rect2240" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 600,0 L 660,0 L 660,60 L 600,60 L 600,0 z "
+       id="rect2242" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 660,0 L 720,0 L 720,60 L 660,60 L 660,0 z "
+       id="rect2244" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 720,0 L 780,0 L 780,60 L 720,60 L 720,0 z "
+       id="rect2246" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 780,0 L 900,0 L 900,60 L 780,60 L 780,0 z "
+       id="rect2248" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,60 L 90,60 L 90,120 L 0,120 L 0,60 z "
+       id="rect2250" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 90,60 L 150,60 L 150,120 L 90,120 L 90,60 z "
+       id="rect2252" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 150,60 L 210,60 L 210,120 L 150,120 L 150,60 z "
+       id="rect2254" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 210,60 L 270,60 L 270,120 L 210,120 L 210,60 z "
+       id="rect2256" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 270,60 L 330,60 L 330,120 L 270,120 L 270,60 z "
+       id="rect2258" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 330,60 L 390,60 L 390,120 L 330,120 L 330,60 z "
+       id="rect2262" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 390,60 L 450,60 L 450,120 L 390,120 L 390,60 z "
+       id="rect2264" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 450,60 L 510,60 L 510,120 L 450,120 L 450,60 z "
+       id="rect2266" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 510,60 L 570,60 L 570,120 L 510,120 L 510,60 z "
+       id="rect2270" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 570,60 L 630,60 L 630,120 L 570,120 L 570,60 z "
+       id="rect2272" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 630,60 L 690,60 L 690,120 L 630,120 L 630,60 z "
+       id="rect2274" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 690,60 L 750,60 L 750,120 L 690,120 L 690,60 z "
+       id="rect2278" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 750,60 L 810,60 L 810,120 L 750,120 L 750,60 z "
+       id="rect2280" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 810,60 L 900,60 L 900,120 L 810,120 L 810,60 z "
+       id="rect2284" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,120 L 105,120 L 105,180 L 0,180 L 0,120 z "
+       id="rect2286" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 105,120 L 165,120 L 165,180 L 105,180 L 105,120 z "
+       id="rect2292" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 165,120 L 225,120 L 225,180 L 165,180 L 165,120 z "
+       id="rect2296" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 225,120 L 285,120 L 285,180 L 225,180 L 225,120 z "
+       id="rect2298" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 285,120 L 345,120 L 345,180 L 285,180 L 285,120 z "
+       id="rect2300" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 345,120 L 405,120 L 405,180 L 345,180 L 345,120 z "
+       id="rect2302" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 405,120 L 465,120 L 465,180 L 405,180 L 405,120 z "
+       id="rect2306" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 465,120 L 525,120 L 525,180 L 465,180 L 465,120 z "
+       id="rect2308" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 525,120 L 585,120 L 585,180 L 525,180 L 525,120 z "
+       id="rect2312" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 585,120 L 645,120 L 645,180 L 585,180 L 585,120 z "
+       id="rect2314" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 645,120 L 705,120 L 705,180 L 645,180 L 645,120 z "
+       id="rect2316" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 705,120 L 765,120 L 765,180 L 705,180 L 705,120 z "
+       id="rect2318" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 765,120 L 900,120 L 900,180 L 765,180 L 765,120 z "
+       id="rect2320" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,180 L 135,180 L 135,240 L 0,240 L 0,180 z "
+       id="rect2322" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 135,180 L 195,180 L 195,240 L 135,240 L 135,180 z "
+       id="rect2324" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 195,180 L 255,180 L 255,240 L 195,240 L 195,180 z "
+       id="rect2326" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 255,180 L 315,180 L 315,240 L 255,240 L 255,180 z "
+       id="rect2330" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 315,180 L 375,180 L 375,240 L 315,240 L 315,180 z "
+       id="rect2334" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 375,180 L 435,180 L 435,240 L 375,240 L 375,180 z "
+       id="rect2336" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 435,180 L 495,180 L 495,240 L 435,240 L 435,180 z "
+       id="rect2338" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 495,180 L 555,180 L 555,240 L 495,240 L 495,180 z "
+       id="rect2340" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 555,180 L 615,180 L 615,240 L 555,240 L 555,180 z "
+       id="rect2342" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 615,180 L 675,180 L 675,240 L 615,240 L 615,180 z "
+       id="rect2344" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 675,180 L 735,180 L 735,240 L 675,240 L 675,180 z "
+       id="rect2346" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 735,180 L 900,180 L 900,240 L 735,240 L 735,180 z "
+       id="rect2348" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 0,240 L 90,240 L 90,300 L 0,300 L 0,240 z "
+       id="rect2350" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 810,240 L 900,240 L 900,300 L 810,300 L 810,240 z "
+       id="rect2352" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 150,240 L 240,240 L 240,300 L 150,300 L 150,240 z "
+       id="rect2354" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 600,240 L 690,240 L 690,300 L 600,300 L 600,240 z "
+       id="rect2360" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 240,240 L 600,240 L 600,300 L 240,300 L 240,240 z "
+       id="rect2362" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 90,240 L 150,240 L 150,300 L 90,300 L 90,240 z "
+       id="rect2364" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 690,240 L 750,240 L 750,300 L 690,300 L 690,240 z "
+       id="rect2366" />
+    <path
+       style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 750,240 L 810,240 L 810,300 L 750,300 L 750,240 z "
+       id="rect2368" />
+    <path
+       style=""
+       d=""
+       id="flowRoot4146" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 75.351563,18.826172 L 74.4375,11.056641 L 74.4375,6.3691406 L 78.046875,6.3691406 L 78.046875,11.056641 L 77.132813,18.826172 L 75.351563,18.826172 M 74.484375,23.630859 L 74.484375,20.173828 L 77.964844,20.173828 L 77.964844,23.630859 L 74.484375,23.630859 M 75.351563,53.630859 L 75.351563,42.158203 L 71.34375,42.158203 L 71.34375,39.802734 L 71.601563,39.802734 C 73.062496,39.802748 74.124995,39.576186 74.789063,39.123047 C 75.460931,38.669937 75.855462,37.912125 75.972656,36.849609 L 78.65625,36.849609 L 78.65625,53.630859 L 75.351563,53.630859"
+       id="text5091" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 23.34375,14.220703 L 23.34375,16.810547 C 22.531233,17.365241 21.761702,17.775396 21.035156,18.041016 C 20.316391,18.298833 19.605455,18.42774 18.902344,18.427734 C 18.542956,18.42774 18.183581,18.39649 17.824219,18.333984 C 17.464832,18.27149 17.105457,18.181646 16.746094,18.064453 C 16.558583,18.001959 16.281239,17.904303 15.914063,17.771484 C 14.203116,17.185553 12.902336,16.892585 12.011719,16.892578 C 11.34765,16.892585 10.652339,17.041022 9.9257813,17.337891 C 9.2070275,17.626959 8.3984345,18.091802 7.5,18.732422 L 7.5,16.142578 C 8.3359346,15.580086 9.1328088,15.162118 9.890625,14.888672 C 10.648432,14.607431 11.363275,14.466806 12.035156,14.466797 C 12.949211,14.466806 14.085929,14.693368 15.445313,15.146484 C 15.46874,15.154305 15.484365,15.158212 15.492188,15.158203 C 15.632802,15.205087 15.847646,15.279305 16.136719,15.380859 C 17.347644,15.810555 18.285143,16.025398 18.949219,16.025391 C 19.613267,16.025398 20.29686,15.880867 21,15.591797 C 21.703109,15.302743 22.484358,14.845712 23.34375,14.220703 M 11.988281,35.033203 L 15.011719,35.033203 L 17.320313,39.369141 L 15.65625,39.369141 L 11.988281,35.033203"
+       id="text5103" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 136.47578,20.443359 C 136.04608,21.099612 135.54999,21.583986 134.9875,21.896484 C 134.42499,22.201173 133.76093,22.353517 132.99532,22.353516 C 131.76093,22.353517 130.81953,22.01758 130.1711,21.345703 C 129.53047,20.673831 129.21015,19.681645 129.21016,18.369141 C 129.21015,16.50196 129.75312,14.935556 130.83907,13.669922 C 131.93281,12.404308 133.27656,11.771496 134.87032,11.771484 C 135.4953,11.771496 136.03827,11.900402 136.49922,12.158203 C 136.96015,12.416027 137.33905,12.798839 137.63594,13.306641 L 138.25703,12.158203 L 140.34297,12.158203 L 138.62032,19.166016 C 138.59686,19.251958 138.57733,19.341801 138.56172,19.435547 C 138.54608,19.521488 138.53827,19.591801 138.53828,19.646484 C 138.53827,19.919926 138.63202,20.126957 138.81953,20.267578 C 139.00702,20.400394 139.28436,20.4668 139.65157,20.466797 C 139.95624,20.4668 140.27264,20.388675 140.60078,20.232422 C 140.9367,20.076175 141.2492,19.857426 141.53828,19.576172 C 142.21014,18.951177 142.71795,18.220709 143.06172,17.384766 C 143.41326,16.548835 143.58904,15.630867 143.58907,14.630859 C 143.58904,12.75587 142.86248,11.216809 141.40938,10.013672 C 139.96405,8.8027492 138.09686,8.1972811 135.80782,8.1972656 C 134.70624,8.1972811 133.6789,8.3300934 132.72578,8.5957031 C 131.78046,8.8613429 130.92109,9.2558737 130.14766,9.7792969 C 128.81953,10.669935 127.79609,11.783215 127.07735,13.119141 C 126.36641,14.455087 126.01094,15.91993 126.01094,17.513672 C 126.01094,19.912113 126.81953,21.83008 128.43672,23.267578 C 130.0539,24.697265 132.21406,25.412108 134.91719,25.412109 C 136.1828,25.412108 137.41718,25.220702 138.62032,24.837891 C 139.83124,24.455077 140.95623,23.90039 141.99532,23.173828 L 142.95625,24.544922 C 141.76092,25.443358 140.49139,26.119138 139.14766,26.572266 C 137.81171,27.025387 136.41718,27.25195 134.96407,27.251953 C 133.46405,27.25195 132.08515,27.060543 130.82735,26.677734 C 129.56953,26.302732 128.45234,25.744139 127.47578,25.001953 C 126.26484,24.05664 125.35859,22.966798 124.75703,21.732422 C 124.15547,20.49805 123.85469,19.099614 123.85469,17.537109 C 123.85469,16.232429 124.05781,14.990243 124.46407,13.810547 C 124.87813,12.623058 125.48359,11.544934 126.28047,10.576172 C 127.43672,9.1621238 128.82734,8.0918124 130.45235,7.3652344 C 132.07734,6.6386889 133.88593,6.275408 135.87813,6.2753906 C 137.19843,6.275408 138.43671,6.4550953 139.59297,6.8144531 C 140.75702,7.1660321 141.76873,7.6660316 142.62813,8.3144531 C 143.68279,9.1347801 144.46795,10.072279 144.9836,11.126953 C 145.50701,12.17384 145.76873,13.357432 145.76875,14.677734 C 145.76873,15.966805 145.51092,17.15821 144.99532,18.251953 C 144.48748,19.337895 143.75311,20.267581 142.79219,21.041016 C 142.2453,21.478518 141.64764,21.814455 140.99922,22.048828 C 140.35858,22.275392 139.69061,22.388673 138.99532,22.388672 C 138.16718,22.388673 137.54218,22.224611 137.12032,21.896484 C 136.70624,21.568361 136.4914,21.083987 136.47578,20.443359 M 137.06172,15.427734 C 136.96015,14.794931 136.73358,14.314462 136.38203,13.986328 C 136.03827,13.650401 135.58124,13.482432 135.01094,13.482422 C 134.1203,13.482432 133.34687,13.966807 132.69063,14.935547 C 132.03437,15.904305 131.70624,17.068366 131.70625,18.427734 C 131.70624,19.146489 131.86249,19.693363 132.175,20.068359 C 132.49531,20.443363 132.95624,20.630862 133.55782,20.630859 C 134.20624,20.630862 134.79608,20.384769 135.32735,19.892578 C 135.8664,19.400395 136.23358,18.75977 136.42891,17.970703 L 137.06172,15.427734 M 128.56563,53.630859 C 128.58125,52.130861 128.90156,50.861331 129.52657,49.822266 C 130.15156,48.775395 131.26094,47.716803 132.85469,46.646484 C 133.09687,46.482429 133.44844,46.255867 133.90938,45.966797 C 136.01875,44.615243 137.07343,43.314463 137.07344,42.064453 C 137.07343,41.322278 136.85078,40.736341 136.40547,40.306641 C 135.96015,39.876967 135.35078,39.662123 134.57735,39.662109 C 133.73359,39.662123 133.08125,39.927748 132.62032,40.458984 C 132.16719,40.982435 131.94062,41.732434 131.94063,42.708984 L 131.94063,42.849609 L 128.84688,42.849609 C 128.84688,40.927747 129.3625,39.44728 130.39375,38.408203 C 131.425,37.369157 132.89375,36.849626 134.8,36.849609 C 136.52656,36.849626 137.90546,37.322282 138.93672,38.267578 C 139.96796,39.205093 140.48358,40.455091 140.4836,42.017578 C 140.48358,43.134776 140.21405,44.103525 139.675,44.923828 C 139.13593,45.744149 138.09296,46.677741 136.5461,47.724609 C 136.21796,47.951178 135.76484,48.248052 135.18672,48.615234 C 133.71797,49.560551 132.88984,50.2793 132.70235,50.771484 L 140.31953,50.771484 L 140.31953,53.630859 L 128.56563,53.630859"
+       id="text5127" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 195.28125,13.693359 L 194.25,16.552734 L 197.19141,16.552734 L 198.19922,13.693359 L 195.28125,13.693359 M 195.28125,6.4746094 L 197.87109,6.4746094 L 196.16016,11.337891 L 198.99609,11.337891 L 200.73047,6.4746094 L 203.32031,6.4746094 L 201.58594,11.337891 L 204.90234,11.337891 L 204.03516,13.693359 L 200.75391,13.693359 L 199.76953,16.529297 L 203.16797,16.529297 L 202.33594,18.873047 L 198.92578,18.873047 L 197.19141,23.748047 L 194.60156,23.748047 L 196.33594,18.873047 L 193.47656,18.873047 L 191.73047,23.748047 L 189.15234,23.748047 L 190.86328,18.873047 L 187.5,18.873047 L 188.39063,16.529297 L 191.69531,16.529297 L 192.70313,13.693359 L 189.19922,13.693359 L 190.06641,11.337891 L 193.54688,11.337891 L 195.28125,6.4746094 M 190.07813,48.521484 L 193.30078,48.521484 C 193.30859,49.458989 193.53515,50.166019 193.98047,50.642578 C 194.42578,51.111331 195.08593,51.345705 195.96094,51.345703 C 196.80468,51.345705 197.45312,51.126956 197.90625,50.689453 C 198.36718,50.244144 198.59765,49.607426 198.59766,48.779297 C 198.59765,47.951178 198.32812,47.326178 197.78906,46.904297 C 197.2578,46.474617 196.46484,46.259773 195.41016,46.259766 C 195.35546,46.259773 195.26953,46.263679 195.15234,46.271484 C 195.04296,46.279304 194.96093,46.28321 194.90625,46.283203 L 194.90625,43.962891 L 195.26953,43.962891 C 196.23827,43.9629 196.95312,43.7754 197.41406,43.400391 C 197.8828,43.017589 198.11718,42.435558 198.11719,41.654297 C 198.11718,41.005872 197.91796,40.494154 197.51953,40.119141 C 197.1289,39.736342 196.59374,39.544936 195.91406,39.544922 C 195.17187,39.544936 194.59765,39.763686 194.19141,40.201172 C 193.78515,40.638685 193.58203,41.259778 193.58203,42.064453 L 193.58203,42.205078 L 190.41797,42.205078 C 190.45703,40.486341 190.96094,39.169936 191.92969,38.255859 C 192.90625,37.334001 194.28125,36.873064 196.05469,36.873047 C 197.73437,36.873064 199.0664,37.283219 200.05078,38.103516 C 201.03514,38.923843 201.52733,40.02931 201.52734,41.419922 C 201.52733,42.154308 201.35936,42.798839 201.02344,43.353516 C 200.68749,43.908213 200.18358,44.365244 199.51172,44.724609 C 200.37108,45.099618 201.01952,45.619149 201.45703,46.283203 C 201.90233,46.93946 202.12499,47.724615 202.125,48.638672 C 202.12499,50.318363 201.57421,51.650393 200.47266,52.634766 C 199.37108,53.619141 197.86718,54.111328 195.96094,54.111328 C 194.07812,54.111328 192.625,53.634766 191.60156,52.681641 C 190.58594,51.720705 190.07812,50.357425 190.07813,48.591797 L 190.07813,48.521484"
+       id="text5139" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 254.46094,21.451172 C 255.10155,21.365237 255.58984,21.134768 255.92578,20.759766 C 256.26171,20.384769 256.42968,19.884769 256.42969,19.259766 C 256.42968,18.705083 256.26952,18.248052 255.94922,17.888672 C 255.63671,17.52149 255.14062,17.236335 254.46094,17.033203 L 254.46094,21.451172 M 253.06641,13.435547 L 253.06641,9.4511719 C 252.45703,9.529311 251.99218,9.7402483 251.67188,10.083984 C 251.35156,10.419935 251.1914,10.87306 251.19141,11.443359 C 251.1914,11.919934 251.33984,12.318371 251.63672,12.638672 C 251.9414,12.958995 252.41796,13.22462 253.06641,13.435547 M 253.06641,26.267578 L 253.06641,24.017578 C 251.30078,23.908203 249.98047,23.396485 249.10547,22.482422 C 248.23047,21.568361 247.79297,20.24805 247.79297,18.521484 L 250.93359,18.521484 C 250.97265,19.365239 251.16796,20.033207 251.51953,20.525391 C 251.8789,21.009768 252.39453,21.318362 253.06641,21.451172 L 253.06641,16.599609 C 251.2539,16.138679 249.96484,15.537117 249.19922,14.794922 C 248.43359,14.052744 248.05078,13.03712 248.05078,11.748047 C 248.05078,10.318373 248.5039,9.1660301 249.41016,8.2910156 C 250.32422,7.4160318 251.54296,6.959001 253.06641,6.9199219 L 253.06641,5.4199219 L 254.46094,5.4199219 L 254.46094,6.9199219 C 255.98437,6.9980635 257.17186,7.4590005 258.02344,8.3027344 C 258.87499,9.1386864 259.34374,10.318373 259.42969,11.841797 L 256.24219,11.841797 C 256.18749,11.115247 256.01171,10.56056 255.71484,10.177734 C 255.42577,9.7871232 255.0078,9.5683734 254.46094,9.5214844 L 254.46094,13.787109 C 256.39062,14.388681 257.74999,15.07618 258.53906,15.849609 C 259.32811,16.623054 259.72264,17.642584 259.72266,18.908203 C 259.72264,20.400394 259.26171,21.591799 258.33984,22.482422 C 257.42577,23.373047 256.1328,23.892578 254.46094,24.041016 L 254.46094,26.267578 L 253.06641,26.267578 M 254.64844,47.419922 L 254.64844,40.236328 L 250.08984,47.419922 L 254.64844,47.419922 M 254.57813,53.630859 L 254.57813,50.009766 L 247.5,50.009766 L 247.5,47.056641 L 253.6875,37.330078 L 257.84766,37.330078 L 257.84766,47.337891 L 259.79297,47.337891 L 259.79297,50.009766 L 257.84766,50.009766 L 257.84766,53.630859 L 254.57813,53.630859"
+       id="text5145" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 320.42578,19.740234 C 320.42577,20.263675 320.60155,20.705081 320.95313,21.064453 C 321.30467,21.416018 321.73827,21.591799 322.25391,21.591797 C 322.75389,21.591799 323.18358,21.412112 323.54297,21.052734 C 323.90233,20.68555 324.08201,20.24805 324.08203,19.740234 C 324.08201,19.240239 323.90233,18.814458 323.54297,18.462891 C 323.19139,18.103521 322.7617,17.923834 322.25391,17.923828 C 321.73827,17.923834 321.30467,18.099615 320.95313,18.451172 C 320.60155,18.794927 320.42577,19.224614 320.42578,19.740234 M 317.88281,19.740234 C 317.8828,18.521489 318.30468,17.494147 319.14844,16.658203 C 319.99217,15.822273 321.02733,15.404305 322.25391,15.404297 C 323.45701,15.404305 324.48045,15.830086 325.32422,16.681641 C 326.17576,17.525397 326.60154,18.544927 326.60156,19.740234 C 326.60154,20.943362 326.17576,21.974611 325.32422,22.833984 C 324.47264,23.685547 323.4492,24.111328 322.25391,24.111328 C 321.02733,24.111328 319.99217,23.689453 319.14844,22.845703 C 318.30468,22.001955 317.8828,20.9668 317.88281,19.740234 M 311.07422,24.111328 L 321.08203,6.8496094 L 322.96875,6.8496094 L 312.96094,24.111328 L 311.07422,24.111328 M 310.04297,11.220703 C 310.04297,11.73634 310.21484,12.169933 310.55859,12.521484 C 310.91015,12.873058 311.34375,13.048839 311.85938,13.048828 C 312.36718,13.048839 312.79687,12.873058 313.14844,12.521484 C 313.50781,12.162121 313.68749,11.728528 313.6875,11.220703 C 313.68749,10.720716 313.50781,10.294935 313.14844,9.9433594 C 312.79687,9.5839984 312.36718,9.4043111 311.85938,9.4042969 C 311.34375,9.4043111 310.91015,9.5800922 310.55859,9.9316406 C 310.21484,10.275404 310.04297,10.705091 310.04297,11.220703 M 307.5,11.220703 C 307.5,10.001967 307.92187,8.9707178 308.76563,8.1269531 C 309.60937,7.275407 310.64062,6.8496262 311.85938,6.8496094 C 313.06249,6.8496262 314.08593,7.2793132 314.92969,8.1386719 C 315.78124,8.990249 316.20702,10.017592 316.20703,11.220703 C 316.20702,12.423839 315.78124,13.451182 314.92969,14.302734 C 314.08593,15.146493 313.06249,15.568367 311.85938,15.568359 C 310.63281,15.568367 309.59765,15.150399 308.75391,14.314453 C 307.91797,13.478526 307.5,12.447277 307.5,11.220703 M 310.85156,49.119141 L 314.13281,49.119141 C 314.1875,49.853519 314.43359,50.423831 314.87109,50.830078 C 315.30859,51.228518 315.89453,51.427737 316.62891,51.427734 C 317.53515,51.427737 318.22655,51.162112 318.70313,50.630859 C 319.18749,50.099613 319.42968,49.337895 319.42969,48.345703 C 319.42968,47.416022 319.18358,46.685554 318.69141,46.154297 C 318.19921,45.615242 317.51952,45.345711 316.65234,45.345703 C 316.16796,45.345711 315.74218,45.443368 315.375,45.638672 C 315.00781,45.833992 314.69531,46.123054 314.4375,46.505859 L 311.41406,46.330078 L 312.50391,37.330078 L 322.14844,37.330078 L 322.14844,40.166016 L 314.87109,40.166016 L 314.4375,43.529297 C 314.80468,43.240245 315.22656,43.025401 315.70313,42.884766 C 316.17968,42.736339 316.71093,42.66212 317.29688,42.662109 C 318.96874,42.66212 320.3164,43.169932 321.33984,44.185547 C 322.37108,45.20118 322.88671,46.53321 322.88672,48.181641 C 322.88671,49.986332 322.3203,51.427737 321.1875,52.505859 C 320.05468,53.576172 318.53515,54.111328 316.62891,54.111328 C 314.89453,54.111328 313.51172,53.669922 312.48047,52.787109 C 311.45703,51.896486 310.91406,50.673831 310.85156,49.119141"
+       id="text5151" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 372.15234,48.298828 C 372.15234,49.25977 372.39062,50.021488 372.86719,50.583984 C 373.35156,51.146487 374.00781,51.427737 374.83594,51.427734 C 375.60937,51.427737 376.21484,51.154299 376.65234,50.607422 C 377.08983,50.06055 377.30858,49.298832 377.30859,48.322266 C 377.30858,47.423834 377.08202,46.724616 376.62891,46.224609 C 376.17577,45.724617 375.53905,45.474618 374.71875,45.474609 C 373.91406,45.474618 373.28515,45.724617 372.83203,46.224609 C 372.3789,46.724616 372.15234,47.416022 372.15234,48.298828 M 372.10547,43.916016 C 372.48828,43.525401 372.94921,43.232432 373.48828,43.037109 C 374.02734,42.833995 374.6289,42.732433 375.29297,42.732422 C 376.93358,42.732433 378.24608,43.232432 379.23047,44.232422 C 380.22264,45.23243 380.71874,46.56446 380.71875,48.228516 C 380.71874,49.994144 380.17968,51.419924 379.10156,52.505859 C 378.02343,53.591797 376.60155,54.134765 374.83594,54.134766 C 372.79687,54.134765 371.24609,53.431641 370.18359,52.025391 C 369.1289,50.619144 368.60156,48.560552 368.60156,45.849609 C 368.60156,42.935558 369.16797,40.708997 370.30078,39.169922 C 371.43359,37.623063 373.0664,36.849626 375.19922,36.849609 C 376.68358,36.849626 377.8789,37.236345 378.78516,38.009766 C 379.69921,38.783218 380.19921,39.830092 380.28516,41.150391 L 376.88672,41.150391 C 376.80858,40.611341 376.59765,40.205092 376.25391,39.931641 C 375.91015,39.658217 375.42968,39.521498 374.8125,39.521484 C 373.96874,39.521498 373.32031,39.888686 372.86719,40.623047 C 372.41406,41.349622 372.16015,42.447277 372.10547,43.916016"
+       id="text5157" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 432.85547,16.095703 L 431.96484,16.740234 C 431.60546,16.990241 431.33593,17.291022 431.15625,17.642578 C 430.97656,17.994146 430.88671,18.388677 430.88672,18.826172 C 430.88671,19.490239 431.11328,20.048832 431.56641,20.501953 C 432.01953,20.955081 432.58593,21.181643 433.26563,21.181641 C 433.76562,21.181643 434.24218,21.080081 434.69531,20.876953 C 435.15624,20.666019 435.58202,20.361331 435.97266,19.962891 L 432.85547,16.095703 M 433.79297,12.404297 L 434.20313,12.111328 C 434.57812,11.853527 434.85546,11.564465 435.03516,11.244141 C 435.21483,10.923841 435.30468,10.556654 435.30469,10.142578 C 435.30468,9.7441545 435.17968,9.4277486 434.92969,9.1933594 C 434.68749,8.958999 434.35546,8.8418117 433.93359,8.8417969 C 433.5039,8.8418117 433.16406,8.9629053 432.91406,9.2050781 C 432.66406,9.4394673 432.53906,9.7597795 432.53906,10.166016 C 432.53906,10.384779 432.59765,10.62306 432.71484,10.880859 C 432.83984,11.138684 433.01562,11.412122 433.24219,11.701172 L 433.79297,12.404297 M 431.15625,13.962891 L 430.47656,13.072266 C 430.125,12.603527 429.87109,12.166027 429.71484,11.759766 C 429.5664,11.345715 429.49218,10.912122 429.49219,10.458984 C 429.49218,9.2089988 429.89062,8.2168123 430.6875,7.4824219 C 431.49218,6.7402513 432.58203,6.3691579 433.95703,6.3691406 C 435.27733,6.3691579 436.3203,6.7090013 437.08594,7.3886719 C 437.85155,8.0683749 438.23436,8.9863428 438.23438,10.142578 C 438.23436,11.017591 438.0078,11.802746 437.55469,12.498047 C 437.10936,13.185557 436.40624,13.833994 435.44531,14.443359 L 437.91797,17.490234 C 438.15233,17.107428 438.33593,16.677741 438.46875,16.201172 C 438.60936,15.724617 438.70702,15.193368 438.76172,14.607422 L 441.80859,14.607422 C 441.72264,15.623055 441.5117,16.56446 441.17578,17.431641 C 440.83983,18.298833 440.37889,19.091801 439.79297,19.810547 L 442.93359,23.630859 L 438.94922,23.630859 L 437.77734,22.189453 C 437.08983,22.822266 436.33202,23.302735 435.50391,23.630859 C 434.68359,23.951172 433.82421,24.111328 432.92578,24.111328 C 431.33203,24.111328 430.02734,23.638672 429.01172,22.693359 C 428.0039,21.748049 427.5,20.541019 427.5,19.072266 C 427.5,17.978521 427.78125,17.037116 428.34375,16.248047 C 428.90625,15.458993 429.84375,14.697275 431.15625,13.962891 M 434.66016,53.630859 L 431.15625,53.630859 C 431.28125,51.341799 431.83203,49.07227 432.80859,46.822266 C 433.79296,44.572275 435.19531,42.361339 437.01563,40.189453 L 428.76563,40.189453 L 428.76563,37.330078 L 440.66016,37.330078 L 440.66016,39.849609 C 438.8164,41.880871 437.39843,44.029306 436.40625,46.294922 C 435.42187,48.560552 434.83984,51.005862 434.66016,53.630859"
+       id="text5163" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 493.5,13.212891 L 491.4375,16.119141 L 489.44531,14.724609 L 491.69531,11.900391 L 488.41406,10.986328 L 489.17578,8.6074219 L 492.32813,9.7324219 L 492.32813,6.3691406 L 494.64844,6.3691406 L 494.64844,9.7324219 L 497.80078,8.6308594 L 498.58594,11.009766 L 495.30469,11.900391 L 497.53125,14.701172 L 495.49219,16.166016 L 493.5,13.212891 M 490.875,48.755859 C 490.875,49.576176 491.10156,50.208988 491.55469,50.654297 C 492.01562,51.099612 492.67187,51.322268 493.52344,51.322266 C 494.33593,51.322268 494.97265,51.095706 495.43359,50.642578 C 495.90233,50.189457 496.13671,49.560551 496.13672,48.755859 C 496.13671,47.982428 495.89843,47.361334 495.42188,46.892578 C 494.9453,46.423835 494.31249,46.189461 493.52344,46.189453 C 492.73437,46.189461 492.09374,46.427742 491.60156,46.904297 C 491.11718,47.380866 490.875,47.998053 490.875,48.755859 M 491.14453,41.560547 C 491.14453,42.208996 491.34765,42.708995 491.75391,43.060547 C 492.16015,43.404307 492.74218,43.576182 493.5,43.576172 C 494.2578,43.576182 494.83984,43.400401 495.24609,43.048828 C 495.66015,42.697277 495.86718,42.201183 495.86719,41.560547 C 495.86718,40.93556 495.65624,40.443373 495.23438,40.083984 C 494.81249,39.724623 494.23437,39.544936 493.5,39.544922 C 492.78124,39.544936 492.20703,39.72853 491.77734,40.095703 C 491.35546,40.462904 491.14453,40.951185 491.14453,41.560547 M 489.9375,44.818359 C 489.23437,44.427744 488.72656,43.970713 488.41406,43.447266 C 488.10156,42.923839 487.94531,42.255871 487.94531,41.443359 C 487.94531,40.005873 488.4375,38.876968 489.42188,38.056641 C 490.40625,37.236345 491.76562,36.826189 493.5,36.826172 C 495.24999,36.826189 496.61718,37.236345 497.60156,38.056641 C 498.59374,38.869155 499.08983,39.998061 499.08984,41.443359 C 499.08983,42.216808 498.92186,42.888683 498.58594,43.458984 C 498.24999,44.021494 497.74608,44.474619 497.07422,44.818359 C 497.89452,45.20118 498.51171,45.73243 498.92578,46.412109 C 499.33983,47.083991 499.54686,47.904303 499.54688,48.873047 C 499.54686,50.505862 499.0078,51.787111 497.92969,52.716797 C 496.85936,53.646484 495.3828,54.111328 493.5,54.111328 C 491.59375,54.111328 490.11328,53.650391 489.05859,52.728516 C 488.0039,51.806642 487.47656,50.521487 487.47656,48.873047 C 487.47656,47.912115 487.67187,47.107428 488.0625,46.458984 C 488.46094,45.802742 489.08594,45.255868 489.9375,44.818359"
+       id="text5169" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 557.85938,6.3691406 C 556.78124,8.1347811 555.98046,9.9316543 555.45703,11.759766 C 554.93359,13.587901 554.67187,15.505868 554.67188,17.513672 C 554.67187,19.513676 554.93359,21.427737 555.45703,23.255859 C 555.98046,25.083983 556.78124,26.880856 557.85938,28.646484 L 555.38672,28.646484 C 554.01953,26.779294 552.98046,24.904296 552.26953,23.021484 C 551.5664,21.130862 551.21484,19.294926 551.21484,17.513672 C 551.21484,15.73243 551.5664,13.896494 552.26953,12.005859 C 552.98046,10.115248 554.01953,8.2363435 555.38672,6.3691406 L 557.85938,6.3691406 M 556.06641,42.685547 C 556.0664,41.724621 555.82421,40.96681 555.33984,40.412109 C 554.86327,39.849623 554.21093,39.568373 553.38281,39.568359 C 552.60156,39.568373 551.99218,39.837904 551.55469,40.376953 C 551.125,40.916028 550.91015,41.669934 550.91016,42.638672 C 550.91015,43.544932 551.13671,44.251963 551.58984,44.759766 C 552.04296,45.267586 552.67968,45.521492 553.5,45.521484 C 554.30468,45.521492 554.93359,45.271493 555.38672,44.771484 C 555.83983,44.271494 556.0664,43.576182 556.06641,42.685547 M 556.125,47.056641 C 555.73437,47.447272 555.27343,47.74024 554.74219,47.935547 C 554.21093,48.130865 553.61327,48.228521 552.94922,48.228516 C 551.30078,48.228521 549.98047,47.732428 548.98828,46.740234 C 547.99609,45.748055 547.5,44.419931 547.5,42.755859 C 547.5,40.990247 548.03906,39.564467 549.11719,38.478516 C 550.19531,37.392594 551.61718,36.849626 553.38281,36.849609 C 555.42968,36.849626 556.98436,37.556657 558.04688,38.970703 C 559.11718,40.376966 559.65233,42.431652 559.65234,45.134766 C 559.65233,48.041021 559.08202,50.267581 557.94141,51.814453 C 556.80077,53.361328 555.16015,54.134765 553.01953,54.134766 C 551.54296,54.134765 550.35156,53.751953 549.44531,52.986328 C 548.53906,52.212892 548.04297,51.162112 547.95703,49.833984 L 551.34375,49.845703 C 551.42187,50.384769 551.63281,50.787112 551.97656,51.052734 C 552.32031,51.318362 552.80468,51.451174 553.42969,51.451172 C 554.27343,51.451174 554.91796,51.083987 555.36328,50.349609 C 555.80858,49.615238 556.06249,48.517583 556.125,47.056641"
+       id="text5175" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 609.375,6.3691406 L 611.87109,6.3691406 C 613.23046,8.228531 614.26171,10.103529 614.96484,11.994141 C 615.66796,13.876963 616.01952,15.716805 616.01953,17.513672 C 616.01952,19.302739 615.66796,21.142581 614.96484,23.033203 C 614.26171,24.923827 613.23046,26.794919 611.87109,28.646484 L 609.375,28.646484 C 610.46094,26.873044 611.26562,25.072264 611.78906,23.244141 C 612.32031,21.408205 612.58593,19.498051 612.58594,17.513672 C 612.58593,15.521492 612.32031,13.611338 611.78906,11.783203 C 611.26562,9.9550918 610.46094,8.1504061 609.375,6.3691406 M 610.98047,45.474609 C 610.98046,47.513678 611.18359,48.994145 611.58984,49.916016 C 612.0039,50.837893 612.66015,51.29883 613.55859,51.298828 C 614.45702,51.29883 615.11327,50.833987 615.52734,49.904297 C 615.9414,48.974614 616.14843,47.498053 616.14844,45.474609 C 616.14843,43.44337 615.9414,41.966809 615.52734,41.044922 C 615.11327,40.12306 614.45702,39.662123 613.55859,39.662109 C 612.66015,39.662123 612.0039,40.12306 611.58984,41.044922 C 611.18359,41.958996 610.98046,43.435557 610.98047,45.474609 M 607.5,45.474609 C 607.5,42.591808 608,40.43556 609,39.005859 C 610.00781,37.568375 611.52734,36.849626 613.55859,36.849609 C 615.58202,36.849626 617.09765,37.572282 618.10547,39.017578 C 619.12108,40.455091 619.62889,42.615245 619.62891,45.498047 C 619.62889,48.380865 619.12499,50.533206 618.11719,51.955078 C 617.11718,53.376953 615.59765,54.08789 613.55859,54.087891 C 611.52734,54.08789 610.00781,53.373047 609,51.943359 C 608,50.513675 607.5,48.357427 607.5,45.474609"
+       id="text5181" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 667.5,26.900391 L 679.5,26.900391 L 679.5,29.291016 L 667.5,29.291016 L 667.5,26.900391 M 670.20703,48.849609 L 670.20703,45.638672 L 676.79297,45.638672 L 676.79297,48.849609 L 670.20703,48.849609"
+       id="text5187" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 733.33594,9.3222656 L 735.70313,9.3222656 L 735.70313,15.298828 L 741.53906,15.298828 L 741.53906,17.630859 L 735.70313,17.630859 L 735.70313,23.630859 L 733.33594,23.630859 L 733.33594,17.630859 L 727.5,17.630859 L 727.5,15.298828 L 733.33594,15.298828 L 733.33594,9.3222656 M 727.5,47.818359 L 741.53906,47.818359 L 741.53906,50.150391 L 727.5,50.150391 L 727.5,47.818359 M 727.5,42.779297 L 741.53906,42.779297 L 741.53906,45.111328 L 727.5,45.111328 L 727.5,42.779297"
+       id="text5201" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 11.070313,95.601563 L 11.070313,86.148438 L 7.65625,86.148438 L 7.65625,84.09375 L 16.828125,84.09375 L 16.828125,86.148438 L 13.4375,86.148438 L 13.4375,95.601563 L 11.070313,95.601563 M 22.859375,94.546875 C 22.572911,94.989584 22.197911,95.328125 21.734375,95.5625 C 21.270829,95.791666 20.731767,95.90625 20.117188,95.90625 C 19.294269,95.90625 18.658853,95.671875 18.210938,95.203125 C 17.768228,94.734376 17.546874,94.06771 17.546875,93.203125 C 17.546874,92.401045 17.768228,91.789066 18.210938,91.367188 C 18.658853,90.945317 19.395831,90.656255 20.421875,90.5 C 20.656246,90.463547 20.963538,90.42188 21.34375,90.375 C 22.307286,90.250005 22.789057,89.97136 22.789063,89.539063 C 22.789057,89.195319 22.682286,88.950527 22.46875,88.804688 C 22.255203,88.653653 21.898433,88.578132 21.398438,88.578125 C 20.9401,88.578132 20.588538,88.669278 20.34375,88.851563 C 20.098955,89.033861 19.97656,89.294277 19.976563,89.632813 L 19.976563,89.757813 L 17.851563,89.757813 L 17.851563,89.601563 C 17.851562,88.731778 18.158853,88.049487 18.773438,87.554688 C 19.388018,87.054696 20.236976,86.804696 21.320313,86.804688 C 22.507807,86.804696 23.41666,87.010425 24.046875,87.421875 C 24.682284,87.833341 24.999992,88.427091 25,89.203125 L 25,94.03125 C 24.999992,94.385418 25.03645,94.651043 25.109375,94.828125 C 25.182283,95.000001 25.304679,95.130209 25.476563,95.21875 L 25.476563,95.601563 L 23.109375,95.601563 C 23.031244,95.455729 22.971348,95.294271 22.929688,95.117188 C 22.888015,94.940105 22.864577,94.750001 22.859375,94.546875 M 22.820313,91.421875 C 22.450515,91.593754 22.023432,91.731775 21.539063,91.835938 C 21.059892,91.940108 20.812496,91.994795 20.796875,92 C 20.39583,92.114587 20.11458,92.257816 19.953125,92.429688 C 19.796872,92.601566 19.718747,92.838544 19.71875,93.140625 C 19.718747,93.453127 19.82031,93.703127 20.023438,93.890625 C 20.226559,94.072918 20.499997,94.164064 20.84375,94.164063 C 21.458329,94.164064 21.940099,93.992189 22.289063,93.648438 C 22.643224,93.299481 22.820307,92.825524 22.820313,92.226563 L 22.820313,91.421875 M 27.039063,84.09375 L 29.25,84.09375 L 29.25,88.164063 C 29.531246,87.721362 29.882809,87.388029 30.304688,87.164063 C 30.731766,86.934905 31.216141,86.820321 31.757813,86.820313 C 32.783847,86.820321 33.622388,87.2448 34.273438,88.09375 C 34.92447,88.937507 35.249991,90.036464 35.25,91.390625 C 35.249991,92.734378 34.92447,93.820314 34.273438,94.648438 C 33.622388,95.476563 32.773431,95.890625 31.726563,95.890625 C 31.179682,95.890625 30.70312,95.776041 30.296875,95.546875 C 29.895829,95.317709 29.531246,94.953126 29.203125,94.453125 L 29.203125,95.601563 L 27.039063,95.601563 L 27.039063,84.09375 M 32.992188,91.296875 C 32.992181,90.51563 32.828118,89.903652 32.5,89.460938 C 32.171869,89.013027 31.721348,88.789069 31.148438,88.789063 C 30.544266,88.789069 30.075517,89.007819 29.742188,89.445313 C 29.414059,89.87761 29.249997,90.494797 29.25,91.296875 C 29.249997,92.161462 29.406247,92.817711 29.71875,93.265625 C 30.036454,93.713544 30.497391,93.937502 31.101563,93.9375 C 31.71614,93.937502 32.18489,93.713544 32.507813,93.265625 C 32.830722,92.812503 32.992181,92.156253 32.992188,91.296875"
+       id="text5427" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 789.76563,44.369141 L 792.57031,44.369141 C 793.23176,44.369143 793.71353,44.249351 794.01563,44.009766 C 794.3177,43.770185 794.46874,43.392581 794.46875,42.876953 C 794.46874,42.340499 794.3203,41.955083 794.02344,41.720703 C 793.72656,41.481125 793.23697,41.361333 792.55469,41.361328 L 789.76563,41.361328 L 789.76563,44.369141 M 789.76563,39.392578 L 792.46875,39.392578 C 793.05208,39.392585 793.47916,39.293627 793.75,39.095703 C 794.02083,38.892586 794.15624,38.574878 794.15625,38.142578 C 794.15624,37.720712 794.02343,37.416025 793.75781,37.228516 C 793.49739,37.035817 793.06249,36.939463 792.45313,36.939453 L 789.76563,36.939453 L 789.76563,39.392578 M 787.5,46.447266 L 787.5,34.939453 L 792.92188,34.939453 C 794.09895,34.939465 794.99478,35.189464 795.60938,35.689453 C 796.22916,36.184255 796.53905,36.905609 796.53906,37.853516 C 796.53905,38.436857 796.42447,38.923836 796.19531,39.314453 C 795.96614,39.705085 795.62239,40.007168 795.16406,40.220703 C 795.7578,40.460292 796.20051,40.806646 796.49219,41.259766 C 796.78905,41.707687 796.93749,42.267582 796.9375,42.939453 C 796.93749,44.059247 796.57291,44.92383 795.84375,45.533203 C 795.11457,46.142578 794.08072,46.447266 792.74219,46.447266 L 787.5,46.447266 M 803.45313,45.392578 C 803.16666,45.835287 802.79166,46.173828 802.32813,46.408203 C 801.86458,46.63737 801.32552,46.751953 800.71094,46.751953 C 799.88802,46.751953 799.2526,46.517578 798.80469,46.048828 C 798.36198,45.580079 798.14062,44.913413 798.14063,44.048828 C 798.14062,43.246748 798.36198,42.634769 798.80469,42.212891 C 799.2526,41.79102 799.98958,41.501958 801.01563,41.345703 C 801.25,41.30925 801.55729,41.267583 801.9375,41.220703 C 802.90104,41.095708 803.38281,40.817063 803.38281,40.384766 C 803.38281,40.041022 803.27604,39.796231 803.0625,39.650391 C 802.84895,39.499356 802.49218,39.423835 801.99219,39.423828 C 801.53385,39.423835 801.18229,39.514981 800.9375,39.697266 C 800.69271,39.879564 800.57031,40.13998 800.57031,40.478516 L 800.57031,40.603516 L 798.44531,40.603516 L 798.44531,40.447266 C 798.44531,39.577481 798.7526,38.89519 799.36719,38.400391 C 799.98177,37.900399 800.83073,37.650399 801.91406,37.650391 C 803.10156,37.650399 804.01041,37.856128 804.64063,38.267578 C 805.27603,38.679044 805.59374,39.272794 805.59375,40.048828 L 805.59375,44.876953 C 805.59374,45.231121 805.6302,45.496746 805.70313,45.673828 C 805.77603,45.845704 805.89843,45.975912 806.07031,46.064453 L 806.07031,46.447266 L 803.70313,46.447266 C 803.62499,46.301432 803.5651,46.139974 803.52344,45.962891 C 803.48176,45.785808 803.45833,45.595704 803.45313,45.392578 M 803.41406,42.267578 C 803.04427,42.439457 802.61718,42.577478 802.13281,42.681641 C 801.65364,42.785811 801.40625,42.840498 801.39063,42.845703 C 800.98958,42.96029 800.70833,43.103519 800.54688,43.275391 C 800.39062,43.447269 800.3125,43.684248 800.3125,43.986328 C 800.3125,44.29883 800.41406,44.54883 800.61719,44.736328 C 800.82031,44.918621 801.09375,45.009767 801.4375,45.009766 C 802.05208,45.009767 802.53385,44.837892 802.88281,44.494141 C 803.23697,44.145185 803.41406,43.671227 803.41406,43.072266 L 803.41406,42.267578 M 812.71875,43.244141 L 814.96094,43.244141 C 814.86718,44.322268 814.47395,45.173829 813.78125,45.798828 C 813.08854,46.423828 812.19791,46.736328 811.10938,46.736328 C 809.875,46.736328 808.90625,46.335287 808.20313,45.533203 C 807.50521,44.725913 807.15625,43.611331 807.15625,42.189453 C 807.15625,40.772792 807.51302,39.663418 808.22656,38.861328 C 808.94531,38.054045 809.93229,37.650399 811.1875,37.650391 C 812.28645,37.650399 813.16666,37.942066 813.82813,38.525391 C 814.49478,39.108731 814.86718,39.92123 814.94531,40.962891 L 812.6875,40.962891 C 812.62499,40.509772 812.46614,40.163418 812.21094,39.923828 C 811.95572,39.684252 811.61979,39.56446 811.20313,39.564453 C 810.64062,39.56446 810.21875,39.785814 809.9375,40.228516 C 809.66146,40.67123 809.52343,41.335292 809.52344,42.220703 C 809.52343,43.038415 809.66666,43.668623 809.95313,44.111328 C 810.24479,44.54883 810.66145,44.76758 811.20313,44.767578 C 811.62499,44.76758 811.96354,44.639976 812.21875,44.384766 C 812.47395,44.12956 812.64062,43.749352 812.71875,43.244141 M 816.44531,46.447266 L 816.44531,34.939453 L 818.65625,34.939453 L 818.65625,40.978516 L 821.35938,37.955078 L 824.09375,37.955078 L 821.13281,41.103516 L 824.27344,46.447266 L 821.54688,46.447266 L 819.51563,42.830078 L 818.65625,43.759766 L 818.65625,46.447266 L 816.44531,46.447266 M 824.79688,43.681641 L 827.0625,43.681641 C 827.08333,44.113935 827.23958,44.436851 827.53125,44.650391 C 827.82291,44.858726 828.26041,44.962892 828.84375,44.962891 C 829.28645,44.962892 829.6276,44.889976 829.86719,44.744141 C 830.11197,44.593101 830.23437,44.382164 830.23438,44.111328 C 830.23437,43.725914 829.78124,43.436852 828.875,43.244141 C 828.5052,43.166019 828.21093,43.098311 827.99219,43.041016 C 826.88802,42.759769 826.11979,42.426436 825.6875,42.041016 C 825.26042,41.655604 825.04687,41.134771 825.04688,40.478516 C 825.04687,39.608731 825.35937,38.921231 825.98438,38.416016 C 826.61458,37.905608 827.46614,37.650399 828.53906,37.650391 C 829.67447,37.650399 830.5651,37.903003 831.21094,38.408203 C 831.86197,38.913419 832.20833,39.624356 832.25,40.541016 L 830.03906,40.541016 C 830.02343,40.181647 829.88541,39.903001 829.625,39.705078 C 829.36979,39.507168 829.01302,39.40821 828.55469,39.408203 C 828.12239,39.40821 827.79948,39.473314 827.58594,39.603516 C 827.3776,39.733731 827.27343,39.929043 827.27344,40.189453 C 827.27343,40.528001 827.83854,40.82748 828.96875,41.087891 C 829.22916,41.145188 829.43489,41.192063 829.58594,41.228516 C 830.71614,41.494146 831.48697,41.814458 831.89844,42.189453 C 832.3151,42.564457 832.52343,43.093102 832.52344,43.775391 C 832.52343,44.738934 832.18228,45.473308 831.5,45.978516 C 830.82291,46.483724 829.83593,46.736328 828.53906,46.736328 C 827.36718,46.736328 826.45052,46.473307 825.78906,45.947266 C 825.1276,45.421225 824.79687,44.697267 824.79688,43.775391 L 824.79688,43.681641 M 840.02344,42.251953 C 840.02343,41.397792 839.86197,40.74675 839.53906,40.298828 C 839.21614,39.84571 838.74739,39.619147 838.13281,39.619141 C 837.52864,39.619147 837.0677,39.843106 836.75,40.291016 C 836.4375,40.738938 836.28125,41.392583 836.28125,42.251953 C 836.28125,43.05404 836.44531,43.673831 836.77344,44.111328 C 837.10677,44.54883 837.57552,44.76758 838.17969,44.767578 C 838.7526,44.76758 839.20312,44.543622 839.53125,44.095703 C 839.85937,43.647789 840.02343,43.033207 840.02344,42.251953 M 834.07031,49.853516 L 834.07031,37.955078 L 836.23438,37.955078 L 836.23438,39.103516 C 836.5625,38.603523 836.92708,38.23894 837.32813,38.009766 C 837.73437,37.780608 838.21093,37.666024 838.75781,37.666016 C 839.80468,37.666024 840.65364,38.080086 841.30469,38.908203 C 841.95572,39.731127 842.28124,40.814459 842.28125,42.158203 C 842.28124,43.517581 841.95572,44.621747 841.30469,45.470703 C 840.65364,46.314453 839.8151,46.736328 838.78906,46.736328 C 838.24739,46.736328 837.76302,46.621745 837.33594,46.392578 C 836.91406,46.163412 836.5625,45.830079 836.28125,45.392578 L 836.28125,49.853516 L 834.07031,49.853516 M 848.70313,45.392578 C 848.41666,45.835287 848.04166,46.173828 847.57813,46.408203 C 847.11458,46.63737 846.57552,46.751953 845.96094,46.751953 C 845.13802,46.751953 844.5026,46.517578 844.05469,46.048828 C 843.61198,45.580079 843.39062,44.913413 843.39063,44.048828 C 843.39062,43.246748 843.61198,42.634769 844.05469,42.212891 C 844.5026,41.79102 845.23958,41.501958 846.26563,41.345703 C 846.5,41.30925 846.80729,41.267583 847.1875,41.220703 C 848.15104,41.095708 848.63281,40.817063 848.63281,40.384766 C 848.63281,40.041022 848.52604,39.796231 848.3125,39.650391 C 848.09895,39.499356 847.74218,39.423835 847.24219,39.423828 C 846.78385,39.423835 846.43229,39.514981 846.1875,39.697266 C 845.94271,39.879564 845.82031,40.13998 845.82031,40.478516 L 845.82031,40.603516 L 843.69531,40.603516 L 843.69531,40.447266 C 843.69531,39.577481 844.0026,38.89519 844.61719,38.400391 C 845.23177,37.900399 846.08073,37.650399 847.16406,37.650391 C 848.35156,37.650399 849.26041,37.856128 849.89063,38.267578 C 850.52603,38.679044 850.84374,39.272794 850.84375,40.048828 L 850.84375,44.876953 C 850.84374,45.231121 850.8802,45.496746 850.95313,45.673828 C 851.02603,45.845704 851.14843,45.975912 851.32031,46.064453 L 851.32031,46.447266 L 848.95313,46.447266 C 848.87499,46.301432 848.8151,46.139974 848.77344,45.962891 C 848.73176,45.785808 848.70833,45.595704 848.70313,45.392578 M 848.66406,42.267578 C 848.29427,42.439457 847.86718,42.577478 847.38281,42.681641 C 846.90364,42.785811 846.65625,42.840498 846.64063,42.845703 C 846.23958,42.96029 845.95833,43.103519 845.79688,43.275391 C 845.64062,43.447269 845.5625,43.684248 845.5625,43.986328 C 845.5625,44.29883 845.66406,44.54883 845.86719,44.736328 C 846.07031,44.918621 846.34375,45.009767 846.6875,45.009766 C 847.30208,45.009767 847.78385,44.837892 848.13281,44.494141 C 848.48697,44.145185 848.66406,43.671227 848.66406,43.072266 L 848.66406,42.267578 M 857.96875,43.244141 L 860.21094,43.244141 C 860.11718,44.322268 859.72395,45.173829 859.03125,45.798828 C 858.33854,46.423828 857.44791,46.736328 856.35938,46.736328 C 855.125,46.736328 854.15625,46.335287 853.45313,45.533203 C 852.75521,44.725913 852.40625,43.611331 852.40625,42.189453 C 852.40625,40.772792 852.76302,39.663418 853.47656,38.861328 C 854.19531,38.054045 855.18229,37.650399 856.4375,37.650391 C 857.53645,37.650399 858.41666,37.942066 859.07813,38.525391 C 859.74478,39.108731 860.11718,39.92123 860.19531,40.962891 L 857.9375,40.962891 C 857.87499,40.509772 857.71614,40.163418 857.46094,39.923828 C 857.20572,39.684252 856.86979,39.56446 856.45313,39.564453 C 855.89062,39.56446 855.46875,39.785814 855.1875,40.228516 C 854.91146,40.67123 854.77343,41.335292 854.77344,42.220703 C 854.77343,43.038415 854.91666,43.668623 855.20313,44.111328 C 855.49479,44.54883 855.91145,44.76758 856.45313,44.767578 C 856.87499,44.76758 857.21354,44.639976 857.46875,44.384766 C 857.72395,44.12956 857.89062,43.749352 857.96875,43.244141 M 866.88281,43.869141 L 869.14844,43.869141 C 868.91926,44.764976 868.45572,45.4681 867.75781,45.978516 C 867.0651,46.483724 866.21874,46.736328 865.21875,46.736328 C 863.98958,46.736328 863.01562,46.32487 862.29688,45.501953 C 861.57812,44.67383 861.21875,43.554039 861.21875,42.142578 C 861.21875,40.751959 861.57292,39.655606 862.28125,38.853516 C 862.98958,38.051441 863.95833,37.650399 865.1875,37.650391 C 866.48958,37.650399 867.49478,38.046232 868.20313,38.837891 C 868.91145,39.624356 869.26562,40.74675 869.26563,42.205078 C 869.26562,42.366541 869.26301,42.488936 869.25781,42.572266 C 869.2578,42.650394 869.2526,42.725915 869.24219,42.798828 L 863.57031,42.798828 C 863.60156,43.465498 863.76302,43.968101 864.05469,44.306641 C 864.35156,44.645184 864.77604,44.814455 865.32813,44.814453 C 865.71874,44.814455 866.03906,44.738934 866.28906,44.587891 C 866.53906,44.431643 866.73697,44.19206 866.88281,43.869141 M 863.57031,41.306641 L 866.91406,41.306641 C 866.89322,40.73373 866.73958,40.298834 866.45313,40.001953 C 866.17187,39.699877 865.76562,39.548835 865.23438,39.548828 C 864.73958,39.548835 864.34895,39.699877 864.0625,40.001953 C 863.78125,40.304043 863.61718,40.738938 863.57031,41.306641"
+       id="text5207" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 840,17.646484 L 797.02608,17.646484"
+       id="path5439" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 802.5,25.146484 L 802.5,10.146484 L 787.5,17.646484 L 802.5,25.146484 z "
+       id="path5441" />
+    <g
+       id="g5459"
+       transform="translate(0,7.5)">
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 82.50003,75 L 54.020182,75"
+         id="path5453" />
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+         id="path5455" />
+      <path
+         id="path5457"
+         d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5464"
+       transform="matrix(-1,9.581637e-17,-9.581637e-17,-1,127.5,172.5)">
+      <path
+         id="path5466"
+         d="M 82.50003,75 L 54.020182,75"
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path5468"
+         d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+         id="path5470" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 107.0625,80.560547 L 105.23438,78.779297 L 107.17969,76.763672 L 109.05469,78.591797 C 109.30467,78.123052 109.49608,77.587897 109.62891,76.986328 C 109.7617,76.384773 109.82811,75.728524 109.82813,75.017578 C 109.82811,73.119151 109.40233,71.646496 108.55078,70.599609 C 107.69921,69.544936 106.5078,69.017593 104.97656,69.017578 C 103.46093,69.017593 102.28124,69.54103 101.4375,70.587891 C 100.59374,71.634778 100.17187,73.111339 100.17188,75.017578 C 100.17187,76.916022 100.59374,78.392583 101.4375,79.447266 C 102.28124,80.494144 103.46093,81.017581 104.97656,81.017578 C 105.36718,81.017581 105.73436,80.978518 106.07813,80.900391 C 106.42968,80.822268 106.7578,80.708987 107.0625,80.560547 M 109.55859,82.916016 C 108.97264,83.306641 108.28905,83.603516 107.50781,83.806641 C 106.73436,84.009765 105.89061,84.111328 104.97656,84.111328 C 102.39843,84.111328 100.34765,83.291016 98.824219,81.650391 C 97.308592,80.009769 96.55078,77.798834 96.550781,75.017578 C 96.55078,72.228527 97.308592,70.017592 98.824219,68.384766 C 100.34765,66.744158 102.39843,65.923846 104.97656,65.923828 C 107.55468,65.923846 109.60545,66.744158 111.12891,68.384766 C 112.66014,70.025404 113.42576,72.23634 113.42578,75.017578 C 113.42576,76.236336 113.26951,77.353522 112.95703,78.369141 C 112.64451,79.376957 112.18358,80.259769 111.57422,81.017578 L 113.44922,82.810547 L 111.52734,84.826172 L 109.55859,82.916016"
+       id="text5474" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 158.94141,83.630859 L 153.99609,66.369141 L 157.67578,66.369141 L 160.62891,78.544922 L 163.125,66.369141 L 166.91016,66.369141 L 169.40625,78.544922 L 172.35938,66.369141 L 176.00391,66.369141 L 171.07031,83.630859 L 167.68359,83.630859 L 165.01172,70.412109 L 162.32813,83.630859 L 158.94141,83.630859"
+       id="text5482" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 218.52539,83.630859 L 218.52539,66.369141 L 231.05273,66.369141 L 231.05273,69.369141 L 222.0293,69.369141 L 222.0293,73.048828 L 230.2793,73.048828 L 230.2793,76.001953 L 222.0293,76.001953 L 222.0293,80.443359 L 231.47461,80.443359 L 231.47461,83.630859 L 218.52539,83.630859"
+       id="text5492" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 281.4375,73.916016 L 285.60938,73.916016 C 286.51561,73.916025 287.17968,73.732432 287.60156,73.365234 C 288.03124,72.998058 288.24608,72.419933 288.24609,71.630859 C 288.24608,70.880872 288.03905,70.314466 287.625,69.931641 C 287.21093,69.54103 286.59374,69.345717 285.77344,69.345703 L 281.4375,69.345703 L 281.4375,73.916016 M 277.88672,83.630859 L 277.88672,66.369141 L 286.25391,66.369141 C 288.13671,66.369158 289.53124,66.771501 290.4375,67.576172 C 291.34373,68.380875 291.79686,69.611342 291.79688,71.267578 C 291.79686,72.322277 291.5742,73.201182 291.12891,73.904297 C 290.69139,74.607431 290.05858,75.087899 289.23047,75.345703 C 289.98045,75.611336 290.5117,76.017586 290.82422,76.564453 C 291.14452,77.111335 291.32811,77.962896 291.375,79.119141 L 291.44531,81.158203 C 291.4453,81.173831 291.4453,81.197268 291.44531,81.228516 C 291.46873,82.259767 291.69139,82.884766 292.11328,83.103516 L 292.11328,83.630859 L 288.22266,83.630859 C 288.09764,83.388672 287.99999,83.091797 287.92969,82.740234 C 287.86718,82.380861 287.82811,81.95508 287.8125,81.462891 L 287.76563,79.646484 C 287.72655,78.576177 287.52343,77.853521 287.15625,77.478516 C 286.79686,77.103522 286.14452,76.916022 285.19922,76.916016 L 281.4375,76.916016 L 281.4375,83.630859 L 277.88672,83.630859"
+       id="text5500" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 343.24219,83.630859 L 343.24219,69.451172 L 338.12109,69.451172 L 338.12109,66.369141 L 351.87891,66.369141 L 351.87891,69.451172 L 346.79297,69.451172 L 346.79297,83.630859 L 343.24219,83.630859"
+       id="text5504" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 407.06836,83.630859 L 403.51758,83.630859 L 403.51758,77.197266 L 397.24805,66.369141 L 401.5957,66.369141 L 405.28711,73.810547 L 408.69727,66.369141 L 412.75195,66.369141 L 407.06836,77.197266 L 407.06836,83.630859"
+       id="text5518" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 458.08594,66.105469 L 461.67188,66.105469 L 461.67188,76.933594 C 461.67187,78.269536 461.93749,79.246098 462.46875,79.863281 C 462.99999,80.472659 463.84374,80.777346 465,80.777344 C 466.17187,80.777346 467.02343,80.472659 467.55469,79.863281 C 468.09374,79.25391 468.36327,78.277349 468.36328,76.933594 L 468.36328,66.105469 L 471.91406,66.105469 L 471.91406,77.320313 C 471.91405,79.437504 471.3203,81.062502 470.13281,82.195313 C 468.95311,83.328125 467.24999,83.894531 465.02344,83.894531 C 462.78124,83.894531 461.0625,83.332031 459.86719,82.207031 C 458.67969,81.074221 458.08594,79.445316 458.08594,77.320313 L 458.08594,66.105469"
+       id="text5522" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 523.22461,83.630859 L 523.22461,66.369141 L 526.77539,66.369141 L 526.77539,83.630859 L 523.22461,83.630859"
+       id="text5526" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 580.18359,75 C 580.18359,76.898444 580.60546,78.375005 581.44922,79.429688 C 582.29296,80.476566 583.47265,81.000003 584.98828,81 C 586.51952,81.000003 587.71093,80.476566 588.5625,79.429688 C 589.41405,78.375005 589.83983,76.898444 589.83984,75 C 589.83983,73.101573 589.41405,71.628918 588.5625,70.582031 C 587.71093,69.527358 586.51952,69.000015 584.98828,69 C 583.47265,69.000015 582.29296,69.523452 581.44922,70.570313 C 580.60546,71.617199 580.18359,73.093761 580.18359,75 M 576.5625,75 C 576.5625,72.210949 577.32031,70.000014 578.83594,68.367188 C 580.35937,66.726579 582.41015,65.906268 584.98828,65.90625 C 587.56639,65.906268 589.61717,66.726579 591.14063,68.367188 C 592.67186,70.007826 593.43748,72.218761 593.4375,75 C 593.43748,77.781256 592.67186,79.992191 591.14063,81.632813 C 589.61717,83.273438 587.56639,84.09375 584.98828,84.09375 C 582.41015,84.09375 580.35937,83.273438 578.83594,81.632813 C 577.32031,79.992191 576.5625,77.781256 576.5625,75"
+       id="text5530" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 641.97656,74.361328 L 645.41016,74.361328 C 646.33983,74.361337 647.01561,74.166025 647.4375,73.775391 C 647.85936,73.376963 648.0703,72.740245 648.07031,71.865234 C 648.0703,71.044934 647.86327,70.423841 647.44922,70.001953 C 647.03515,69.580092 646.41796,69.369155 645.59766,69.369141 L 641.97656,69.369141 L 641.97656,74.361328 M 641.95313,77.490234 L 641.95313,83.630859 L 638.40234,83.630859 L 638.40234,66.369141 L 646.07813,66.369141 C 647.89061,66.369158 649.26171,66.841814 650.19141,67.787109 C 651.12889,68.724624 651.59764,70.103529 651.59766,71.923828 C 651.59764,73.705088 651.14061,75.080087 650.22656,76.048828 C 649.31249,77.009772 648.0078,77.490241 646.3125,77.490234 L 641.95313,77.490234"
+       id="text5534" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 709.24805,63.919922 L 709.24805,66.369141 C 709.17772,66.369155 709.08007,66.365249 708.95508,66.357422 C 708.83007,66.349624 708.74413,66.345718 708.69727,66.345703 C 707.90819,66.345718 707.37304,66.498062 707.0918,66.802734 C 706.81835,67.099624 706.68163,67.732435 706.68164,68.701172 L 706.68164,71.513672 C 706.68163,72.66993 706.50585,73.490242 706.1543,73.974609 C 705.80273,74.458991 705.16992,74.806647 704.25586,75.017578 C 705.16992,75.228522 705.80273,75.572271 706.1543,76.048828 C 706.50585,76.525395 706.68163,77.341801 706.68164,78.498047 L 706.68164,81.322266 C 706.68163,82.283202 706.81835,82.912108 707.0918,83.208984 C 707.36523,83.505857 707.90038,83.654294 708.69727,83.654297 C 708.74413,83.654294 708.83007,83.650388 708.95508,83.642578 C 709.08007,83.634763 709.17772,83.630857 709.24805,83.630859 L 709.24805,86.080078 C 709.13866,86.080073 708.98632,86.08398 708.79102,86.091797 C 708.59569,86.099605 708.45116,86.103511 708.35742,86.103516 C 707.57616,86.103511 706.92382,86.056636 706.40039,85.962891 C 705.87695,85.869136 705.43163,85.724605 705.06445,85.529297 C 704.61913,85.263668 704.30273,84.904293 704.11523,84.451172 C 703.93554,84.005857 703.8457,83.228514 703.8457,82.119141 L 703.8457,79.166016 C 703.8457,78.095706 703.64648,77.337895 703.24805,76.892578 C 702.84961,76.439458 702.17773,76.212896 701.23242,76.212891 C 701.18554,76.212896 701.10742,76.216802 700.99805,76.224609 C 700.88867,76.232427 700.80664,76.236333 700.75195,76.236328 L 700.75195,73.787109 C 700.80664,73.787117 700.88867,73.791023 700.99805,73.798828 C 701.10742,73.806648 701.18554,73.810554 701.23242,73.810547 C 702.16992,73.810554 702.83789,73.583992 703.23633,73.130859 C 703.64257,72.677743 703.8457,71.912119 703.8457,70.833984 L 703.8457,67.904297 C 703.8457,66.787124 703.93554,66.001968 704.11523,65.548828 C 704.30273,65.095719 704.61913,64.736345 705.06445,64.470703 C 705.43163,64.275408 705.87695,64.130876 706.40039,64.037109 C 706.92382,63.943377 707.57616,63.896502 708.35742,63.896484 C 708.45116,63.896502 708.59569,63.900408 708.79102,63.908203 C 708.98632,63.916033 709.13866,63.919939 709.24805,63.919922 M 703.0957,93.966797 L 709.01367,93.966797 L 709.01367,96.462891 L 706.25977,96.462891 L 706.25977,113.8418 L 709.01367,113.8418 L 709.01367,116.33789 L 703.0957,116.33789 L 703.0957,93.966797"
+       id="text5546" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 760.75195,63.908203 L 761.54883,63.908203 C 762.4082,63.90822 763.09961,63.955095 763.62305,64.048828 C 764.14648,64.142595 764.58398,64.291033 764.93555,64.494141 C 765.38085,64.744157 765.69335,65.103532 765.87305,65.572266 C 766.06054,66.033218 766.15429,66.806655 766.1543,67.892578 L 766.1543,70.845703 C 766.15429,71.916025 766.35351,72.677743 766.75195,73.130859 C 767.15038,73.57618 767.82226,73.798836 768.76758,73.798828 C 768.81444,73.798836 768.89257,73.794929 769.00195,73.787109 C 769.11132,73.779304 769.19335,73.775398 769.24805,73.775391 L 769.24805,76.224609 L 768.81445,76.224609 C 767.83788,76.224614 767.15038,76.443364 766.75195,76.880859 C 766.35351,77.318363 766.15429,78.076175 766.1543,79.154297 L 766.1543,82.107422 C 766.15429,83.224607 766.06054,84.009763 765.87305,84.462891 C 765.69335,84.916012 765.38085,85.267574 764.93555,85.517578 C 764.56835,85.712886 764.12304,85.857417 763.59961,85.951172 C 763.07617,86.044917 762.42382,86.091792 761.64258,86.091797 C 761.54883,86.091792 761.40429,86.087886 761.20898,86.080078 C 761.01367,86.072261 760.86133,86.068355 760.75195,86.068359 L 760.75195,83.619141 C 760.82226,83.619138 760.91992,83.623044 761.04492,83.630859 C 761.16992,83.638669 761.25586,83.642576 761.30273,83.642578 C 762.09179,83.642576 762.62304,83.490232 762.89648,83.185547 C 763.17773,82.88867 763.31836,82.263671 763.31836,81.310547 L 763.31836,78.509766 C 763.31836,77.337895 763.49414,76.513677 763.8457,76.037109 C 764.19726,75.55274 764.83007,75.20899 765.74414,75.005859 C 764.83007,74.794928 764.19726,74.447272 763.8457,73.962891 C 763.49414,73.478523 763.31836,72.658212 763.31836,71.501953 L 763.31836,68.666016 C 763.31836,67.712904 763.17773,67.087905 762.89648,66.791016 C 762.62304,66.486343 762.09179,66.333999 761.30273,66.333984 C 761.25586,66.333999 761.16992,66.337906 761.04492,66.345703 C 760.91992,66.35353 760.82226,66.357437 760.75195,66.357422 L 760.75195,63.908203 M 767.00977,93.955078 L 767.00977,116.32617 L 761.08008,116.32617 L 761.08008,113.83008 L 763.8457,113.83008 L 763.8457,96.451172 L 761.08008,96.451172 L 761.08008,93.955078 L 767.00977,93.955078"
+       id="text5554" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 823.79883,62.977287 L 826.21289,62.977287 L 826.21289,86.977287 L 823.79883,86.977287 L 823.79883,62.977287 M 827.10352,113.54369 L 821.29102,93.6101 L 822.87305,93.6101 L 828.70898,113.54369 L 827.10352,113.54369"
+       id="text5564" />
+    <g
+       id="g3597">
+      <path
+         id="text5570"
+         d="M 22.996094,139.10156 C 22.907541,140.40886 22.403635,141.44792 21.484375,142.21875 C 20.565095,142.98958 19.365878,143.375 17.886719,143.375 C 16.183589,143.375 14.859372,142.84375 13.914063,141.78125 C 12.968749,140.71875 12.496093,139.22917 12.496094,137.3125 C 12.496093,135.35417 12.977863,133.85418 13.941406,132.8125 C 14.904945,131.77084 16.29036,131.25001 18.097656,131.25 C 19.566398,131.25001 20.726554,131.60808 21.578125,132.32422 C 22.429677,133.04037 22.897124,134.05209 22.980469,135.35938 L 20.644531,135.35938 C 20.545564,134.70834 20.279939,134.21225 19.847656,133.87109 C 19.415357,133.52996 18.832024,133.35938 18.097656,133.35938 C 17.055984,133.35938 16.264318,133.69532 15.722656,134.36719 C 15.180986,135.03907 14.910153,136.02084 14.910156,137.3125 C 14.910153,138.5625 15.179684,139.52865 15.71875,140.21094 C 16.257808,140.89323 17.024734,141.23438 18.019531,141.23438 C 18.738274,141.23438 19.326815,141.05078 19.785156,140.68359 C 20.243481,140.31641 20.540356,139.78907 20.675781,139.10156 L 22.996094,139.10156 z M 29.558594,142 C 29.27213,142.44271 28.89713,142.77995 28.433594,143.01172 C 27.970048,143.24349 27.430986,143.35937 26.816406,143.35938 C 25.993487,143.35937 25.359373,143.125 24.914063,142.65625 C 24.468749,142.1875 24.246093,141.52083 24.246094,140.65625 C 24.246093,139.85417 24.468749,139.24219 24.914063,138.82031 C 25.359373,138.39844 26.09505,138.10938 27.121094,137.95313 C 27.355465,137.91667 27.662756,137.87501 28.042969,137.82813 C 29.006505,137.70313 29.488275,137.42448 29.488281,136.99219 C 29.488275,136.64844 29.381505,136.40235 29.167969,136.25391 C 28.954422,136.10548 28.597651,136.03126 28.097656,136.03125 C 27.639319,136.03126 27.287757,136.1224 27.042969,136.30469 C 26.798174,136.48699 26.675778,136.7474 26.675781,137.08594 L 26.675781,137.21094 L 24.550781,137.21094 L 24.550781,137.05469 C 24.55078,136.1849 24.858072,135.50131 25.472656,135.00391 C 26.087237,134.50652 26.936195,134.25782 28.019531,134.25781 C 29.207026,134.25782 30.117181,134.46355 30.75,134.875 C 31.382805,135.28647 31.699211,135.88022 31.699219,136.65625 L 31.699219,141.48438 C 31.699211,141.83854 31.735669,142.10287 31.808594,142.27734 C 31.881502,142.45182 32.003898,142.58333 32.175781,142.67188 L 32.175781,143.05469 L 29.808594,143.05469 C 29.730463,142.90885 29.670567,142.7474 29.628906,142.57031 C 29.587234,142.39323 29.563796,142.20313 29.558594,142 L 29.558594,142 z M 29.519531,138.875 C 29.149734,139.04688 28.723953,139.1849 28.242188,139.28906 C 27.760413,139.39323 27.511715,139.44792 27.496094,139.45313 C 27.095049,139.56771 26.815101,139.71094 26.65625,139.88281 C 26.497393,140.05469 26.417966,140.29167 26.417969,140.59375 C 26.417966,140.90625 26.519528,141.15495 26.722656,141.33984 C 26.925778,141.52474 27.199215,141.61719 27.542969,141.61719 C 28.157548,141.61719 28.64062,141.44401 28.992188,141.09766 C 29.343744,140.7513 29.519525,140.27865 29.519531,139.67969 L 29.519531,138.875 z M 39.691406,138.85938 C 39.691399,138.00521 39.529941,137.35287 39.207031,136.90234 C 38.884108,136.45183 38.415359,136.22657 37.800781,136.22656 C 37.19661,136.22657 36.736975,136.45053 36.421875,136.89844 C 36.106767,137.34636 35.949216,138.00001 35.949219,138.85938 C 35.949216,139.66146 36.11458,140.28125 36.445313,140.71875 C 36.776038,141.15625 37.243485,141.375 37.847656,141.375 C 38.420567,141.375 38.871088,141.15104 39.199219,140.70313 C 39.527337,140.25521 39.691399,139.64063 39.691406,138.85938 L 39.691406,138.85938 z M 33.738281,146.46094 L 33.738281,134.5625 L 35.902344,134.5625 L 35.902344,135.71094 C 36.230465,135.21095 36.59635,134.84636 37,134.61719 C 37.403641,134.38803 37.878901,134.27345 38.425781,134.27344 C 39.472649,134.27345 40.321607,134.68621 40.972656,135.51172 C 41.623689,136.33725 41.94921,137.42188 41.949219,138.76563 C 41.94921,140.125 41.623689,141.22787 40.972656,142.07422 C 40.321607,142.92057 39.483066,143.34375 38.457031,143.34375 C 37.915359,143.34375 37.432287,143.22917 37.007813,143 C 36.583329,142.77083 36.230465,142.4375 35.949219,142 L 35.949219,146.46094 L 33.738281,146.46094 z M 43.027344,140.28906 L 45.292969,140.28906 C 45.313799,140.72136 45.470049,141.04297 45.761719,141.25391 C 46.053382,141.46485 46.490881,141.57031 47.074219,141.57031 C 47.516922,141.57031 47.85937,141.4961 48.101563,141.34766 C 48.343744,141.19922 48.464838,140.98959 48.464844,140.71875 C 48.464838,140.33334 48.011713,140.04427 47.105469,139.85156 C 46.735673,139.77344 46.441402,139.70573 46.222656,139.64844 C 45.118487,139.36719 44.351561,139.03386 43.921875,138.64844 C 43.492187,138.26303 43.277343,137.74219 43.277344,137.08594 C 43.277343,136.21615 43.591145,135.52735 44.21875,135.01953 C 44.846352,134.51173 45.696611,134.25782 46.769531,134.25781 C 47.904943,134.25782 48.796869,134.51043 49.445313,135.01563 C 50.093742,135.52084 50.438794,136.23178 50.480469,137.14844 L 48.269531,137.14844 C 48.253901,136.78907 48.117182,136.51042 47.859375,136.3125 C 47.601557,136.11459 47.243485,136.01563 46.785156,136.01563 C 46.352861,136.01563 46.031246,136.08074 45.820313,136.21094 C 45.609372,136.34115 45.503903,136.53646 45.503906,136.79688 C 45.503903,137.13542 46.069007,137.4349 47.199219,137.69531 C 47.45963,137.75261 47.665359,137.79948 47.816406,137.83594 C 48.946608,138.10157 49.718743,138.42188 50.132813,138.79688 C 50.546867,139.17188 50.753898,139.70052 50.753906,140.38281 C 50.753898,141.34636 50.414055,142.08073 49.734375,142.58594 C 49.054681,143.09115 48.066401,143.34375 46.769531,143.34375 C 45.597653,143.34375 44.680987,143.08073 44.019531,142.55469 C 43.358072,142.02865 43.027343,141.30469 43.027344,140.38281 L 43.027344,140.28906 z M 57.011719,143.05469 L 57.011719,131.54688 L 59.378906,131.54688 L 59.378906,140.92969 L 64.996094,140.92969 L 64.996094,143.05469 L 57.011719,143.05469 z M 67.972656,138.79688 C 67.972653,139.64063 68.14583,140.29167 68.492188,140.75 C 68.838538,141.20834 69.332027,141.4375 69.972656,141.4375 C 70.602859,141.4375 71.09114,141.20834 71.4375,140.75 C 71.783847,140.29167 71.957024,139.64063 71.957031,138.79688 C 71.957024,137.95834 71.78515,137.3112 71.441406,136.85547 C 71.09765,136.39975 70.608067,136.17188 69.972656,136.17188 C 69.332027,136.17188 68.838538,136.39975 68.492188,136.85547 C 68.14583,137.3112 67.972653,137.95834 67.972656,138.79688 L 67.972656,138.79688 z M 65.667969,138.79688 C 65.667968,137.38542 66.05078,136.27605 66.816406,135.46875 C 67.582029,134.66147 68.634111,134.25782 69.972656,134.25781 C 71.305983,134.25782 72.356764,134.66147 73.125,135.46875 C 73.89322,136.27605 74.277335,137.38542 74.277344,138.79688 C 74.277335,140.21354 73.89322,141.32552 73.125,142.13281 C 72.356764,142.9401 71.305983,143.34375 69.972656,143.34375 C 68.634111,143.34375 67.582029,142.9401 66.816406,142.13281 C 66.05078,141.32552 65.667968,140.21354 65.667969,138.79688 L 65.667969,138.79688 z M 80.949219,139.85156 L 83.191406,139.85156 C 83.097648,140.92969 82.704419,141.78125 82.011719,142.40625 C 81.319004,143.03125 80.42838,143.34375 79.339844,143.34375 C 78.105465,143.34375 77.138019,142.94141 76.4375,142.13672 C 75.736978,141.33203 75.386718,140.21875 75.386719,138.79688 C 75.386718,137.38021 75.744791,136.26954 76.460938,135.46484 C 77.177081,134.66016 78.162757,134.25782 79.417969,134.25781 C 80.516921,134.25782 81.398431,134.54949 82.0625,135.13281 C 82.726555,135.71615 83.097648,136.52865 83.175781,137.57031 L 80.917969,137.57031 C 80.855463,137.11719 80.696609,136.77084 80.441406,136.53125 C 80.186193,136.29167 79.850255,136.17188 79.433594,136.17188 C 78.87109,136.17188 78.450517,136.39324 78.171875,136.83594 C 77.893226,137.27865 77.753903,137.94271 77.753906,138.82813 C 77.753903,139.64584 77.898434,140.27474 78.1875,140.71484 C 78.476559,141.15495 78.891923,141.375 79.433594,141.375 C 79.855464,141.375 80.194005,141.2474 80.449219,140.99219 C 80.704421,140.73698 80.871088,140.35677 80.949219,139.85156 L 80.949219,139.85156 z M 84.675781,143.05469 L 84.675781,131.54688 L 86.886719,131.54688 L 86.886719,137.58594 L 89.589844,134.5625 L 92.324219,134.5625 L 89.363281,137.71094 L 92.503906,143.05469 L 89.777344,143.05469 L 87.746094,139.4375 L 86.886719,140.36719 L 86.886719,143.05469 L 84.675781,143.05469 z "
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+      <path
+         id="path5584"
+         d="M 23.746094,146.25 L 12.496094,161.25 L 19.996094,161.25 L 19.996094,168.75 L 27.496094,168.75 L 27.496094,161.25 L 34.996094,161.25 L 23.746094,146.25 z M 22.714844,150.46875 L 24.746094,150.46875 L 27.871094,159.09375 L 25.996094,159.09375 L 25.402344,157.3125 L 22.058594,157.3125 L 21.496094,159.09375 L 19.621094,159.09375 L 22.714844,150.46875 z M 23.746094,152.1875 L 22.527344,155.84375 L 24.933594,155.84375 L 23.746094,152.1875 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 119.9707,129.82617 L 117.58008,137.17383 L 122.37305,137.17383 L 119.9707,129.82617 M 117.9082,126.36914 L 122.00977,126.36914 L 128.23242,143.63086 L 124.50586,143.63086 L 123.33398,140.08008 L 116.64258,140.08008 L 115.50586,143.63086 L 111.76758,143.63086 L 117.9082,126.36914"
+       id="text5641" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 172.98047,138.29297 L 176.48438,138.29297 C 176.61718,139.23829 177.0039,139.94141 177.64453,140.40234 C 178.28515,140.85547 179.21093,141.08203 180.42188,141.08203 C 181.45312,141.08203 182.23046,140.89844 182.75391,140.53125 C 183.27733,140.16407 183.53905,139.6211 183.53906,138.90234 C 183.53905,137.85547 182.03515,136.98829 179.02734,136.30078 C 178.98827,136.29298 178.95312,136.28516 178.92188,136.27734 C 178.84374,136.26173 178.72265,136.23438 178.55859,136.19531 C 176.94921,135.84376 175.80078,135.44923 175.11328,135.01172 C 174.5039,134.6211 174.03906,134.09767 173.71875,133.44141 C 173.39844,132.77735 173.23828,131.99611 173.23828,131.09766 C 173.23828,129.41798 173.80859,128.13283 174.94922,127.24219 C 176.08984,126.34377 177.73828,125.89455 179.89453,125.89453 C 181.91015,125.89455 183.48436,126.37111 184.61719,127.32422 C 185.7578,128.27736 186.35936,129.62111 186.42188,131.35547 L 183.01172,131.35547 C 182.94921,130.51954 182.6289,129.88283 182.05078,129.44531 C 181.47265,129.00783 180.64843,128.78908 179.57813,128.78906 C 178.64843,128.78908 177.92968,128.97267 177.42188,129.33984 C 176.92187,129.69923 176.67187,130.21486 176.67188,130.88672 C 176.67187,131.80079 177.65234,132.48439 179.61328,132.9375 C 180.14452,133.06251 180.55859,133.16017 180.85547,133.23047 C 182.11327,133.55079 183.0039,133.80079 183.52734,133.98047 C 184.05858,134.16017 184.51952,134.35938 184.91016,134.57813 C 185.61327,134.96876 186.14061,135.48829 186.49219,136.13672 C 186.84374,136.77735 187.01952,137.54688 187.01953,138.44531 C 187.01952,140.24219 186.41405,141.63672 185.20313,142.62891 C 183.99218,143.61328 182.28515,144.10547 180.08203,144.10547 C 177.91015,144.10547 176.20703,143.60156 174.97266,142.59375 C 173.73828,141.58594 173.07422,140.15235 172.98047,138.29297"
+       id="text5645" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 236.16211,140.51367 L 239.00977,140.51367 C 240.65819,140.51367 241.8496,140.08399 242.58398,139.22461 C 243.32616,138.35743 243.69725,136.95508 243.69727,135.01758 C 243.69725,133.0879 243.3535,131.66993 242.66602,130.76367 C 241.9785,129.85744 240.90429,129.40431 239.44336,129.4043 L 236.16211,129.4043 L 236.16211,140.51367 M 232.68164,143.63086 L 232.68164,126.36914 L 239.44336,126.36914 C 242.09179,126.36916 244.06444,127.084 245.36133,128.51367 C 246.666,129.94337 247.31834,132.11134 247.31836,135.01758 C 247.31834,136.59571 247.07616,137.98633 246.5918,139.18945 C 246.11522,140.39258 245.41991,141.36133 244.50586,142.0957 C 243.81835,142.64258 243.0371,143.03711 242.16211,143.2793 C 241.2871,143.51367 240.06054,143.63086 238.48242,143.63086 L 232.68164,143.63086"
+       id="text5649" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 293.97656,143.63086 L 293.97656,126.36914 L 306.02344,126.36914 L 306.02344,129.36914 L 297.48047,129.36914 L 297.48047,133.2832 L 304.96875,133.2832 L 304.96875,136.2832 L 297.48047,136.2832 L 297.48047,143.63086 L 293.97656,143.63086"
+       id="text5653" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 365.17969,141.57422 C 364.53905,142.44141 363.80858,143.07813 362.98828,143.48438 C 362.17577,143.89062 361.21874,144.09375 360.11719,144.09375 C 357.70312,144.09375 355.74609,143.25781 354.24609,141.58594 C 352.7539,139.90625 352.00781,137.70313 352.00781,134.97656 C 352.00781,132.22657 352.7539,130.02736 354.24609,128.37891 C 355.73828,126.73049 357.72656,125.90627 360.21094,125.90625 C 362.37499,125.90627 364.14061,126.4258 365.50781,127.46484 C 366.87498,128.49611 367.68748,129.91798 367.94531,131.73047 L 364.32422,131.73047 C 364.10546,130.83204 363.65624,130.14845 362.97656,129.67969 C 362.30468,129.21095 361.42577,128.97658 360.33984,128.97656 C 358.89452,128.97658 357.75781,129.50783 356.92969,130.57031 C 356.10937,131.62501 355.69921,133.08595 355.69922,134.95313 C 355.69921,136.82813 356.1289,138.29688 356.98828,139.35938 C 357.84765,140.42188 359.02734,140.95313 360.52734,140.95313 C 361.65233,140.95313 362.59374,140.6211 363.35156,139.95703 C 364.10936,139.29297 364.57811,138.38282 364.75781,137.22656 L 360.84375,137.22656 L 360.84375,134.27344 L 367.99219,134.27344 L 367.99219,143.61328 L 365.61328,143.61328 L 365.17969,141.57422"
+       id="text5657" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 412.86328,143.63086 L 412.86328,126.36914 L 416.4375,126.36914 L 416.4375,132.80273 L 423.5625,132.80273 L 423.5625,126.36914 L 427.13672,126.36914 L 427.13672,143.63086 L 423.5625,143.63086 L 423.5625,135.97852 L 416.4375,135.97852 L 416.4375,143.63086 L 412.86328,143.63086"
+       id="text5661" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 474.48047,136.95703 L 477.91406,136.95703 L 477.91406,139.04297 C 477.91406,139.64453 478.09375,140.10547 478.45313,140.42578 C 478.8125,140.73828 479.32812,140.89453 480,140.89453 C 480.73437,140.89453 481.24609,140.70313 481.53516,140.32031 C 481.82421,139.9375 481.96874,139.21875 481.96875,138.16406 L 481.96875,126.12891 L 485.51953,126.12891 L 485.51953,138.32813 C 485.51952,139.42188 485.45311,140.22657 485.32031,140.74219 C 485.1953,141.25 484.98436,141.69922 484.6875,142.08984 C 484.23436,142.66797 483.61327,143.10938 482.82422,143.41406 C 482.03515,143.71875 481.10937,143.87109 480.04688,143.87109 C 479.07031,143.87109 478.20703,143.73828 477.45703,143.47266 C 476.70703,143.20703 476.08203,142.8125 475.58203,142.28906 C 475.18359,141.86719 474.89844,141.39844 474.72656,140.88281 C 474.5625,140.35938 474.48047,139.5 474.48047,138.30469 L 474.48047,136.95703"
+       id="text5665" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 532.32422,143.63086 L 532.32422,126.36914 L 535.875,126.36914 L 535.875,133.45898 L 542.61328,126.36914 L 547.05469,126.36914 L 540.16406,133.35352 L 547.67578,143.63086 L 543.33984,143.63086 L 537.71484,135.73242 L 535.875,137.56055 L 535.875,143.63086 L 532.32422,143.63086"
+       id="text5669" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 594.01172,143.63086 L 594.01172,126.36914 L 597.5625,126.36914 L 597.5625,140.44336 L 605.98828,140.44336 L 605.98828,143.63086 L 594.01172,143.63086"
+       id="text5673" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 143.15039,203.63086 L 143.15039,200.63086 L 152.53711,189.49805 L 143.33789,189.49805 L 143.33789,186.36914 L 156.84961,186.36914 L 156.84961,189.36914 L 147.43945,200.51367 L 156.63867,200.51367 L 156.63867,203.63086 L 143.15039,203.63086"
+       id="text5679" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 202.37109,203.63086 L 207.79688,194.81836 L 202.37109,186.36914 L 206.47266,186.36914 L 210,192.4043 L 213.50391,186.36914 L 217.62891,186.36914 L 212.20313,194.79492 L 217.62891,203.63086 L 213.52734,203.63086 L 210,197.6543 L 206.47266,203.63086 L 202.37109,203.63086"
+       id="text5683" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 277.875,197.68359 C 277.74217,199.64454 276.98436,201.20313 275.60156,202.35938 C 274.22655,203.51563 272.42968,204.09375 270.21094,204.09375 C 267.65624,204.09375 265.66796,203.29688 264.24609,201.70313 C 262.83203,200.10938 262.125,197.87501 262.125,195 C 262.125,192.06251 262.84765,189.81251 264.29297,188.25 C 265.73828,186.68752 267.8164,185.90627 270.52734,185.90625 C 272.73046,185.90627 274.46874,186.44533 275.74219,187.52344 C 277.02342,188.59377 277.72655,190.10939 277.85156,192.07031 L 274.34766,192.07031 C 274.19921,191.09376 273.80077,190.35158 273.15234,189.84375 C 272.50389,189.32814 271.6289,189.07033 270.52734,189.07031 C 268.96484,189.07033 267.77734,189.57423 266.96484,190.58203 C 266.15234,191.58986 265.74609,193.06251 265.74609,195 C 265.74609,196.87501 266.14843,198.32422 266.95313,199.34766 C 267.76562,200.3711 268.91796,200.88282 270.41016,200.88281 C 271.48827,200.88282 272.37108,200.60938 273.05859,200.0625 C 273.74608,199.50782 274.19139,198.71485 274.39453,197.68359 L 277.875,197.68359"
+       id="text5687" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 328.33594,203.63086 L 322.38281,186.36914 L 326.32031,186.36914 L 329.98828,199.2832 L 333.72656,186.36914 L 337.61719,186.36914 L 331.73438,203.63086 L 328.33594,203.63086"
+       id="text5691" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 386.32031,200.51367 L 390.52734,200.51367 C 391.51952,200.51367 392.24218,200.33399 392.69531,199.97461 C 393.14843,199.61524 393.37499,199.04883 393.375,198.27539 C 393.37499,197.47071 393.15233,196.89258 392.70703,196.54102 C 392.26171,196.18165 391.52733,196.00196 390.50391,196.00195 L 386.32031,196.00195 L 386.32031,200.51367 M 386.32031,193.04883 L 390.375,193.04883 C 391.24999,193.04884 391.89061,192.9004 392.29688,192.60352 C 392.70311,192.29884 392.90624,191.82228 392.90625,191.17383 C 392.90624,190.54103 392.70702,190.084 392.30859,189.80273 C 391.91796,189.51369 391.26561,189.36915 390.35156,189.36914 L 386.32031,189.36914 L 386.32031,193.04883 M 382.92188,203.63086 L 382.92188,186.36914 L 391.05469,186.36914 C 392.8203,186.36916 394.16405,186.74416 395.08594,187.49414 C 396.01561,188.23634 396.48045,189.31837 396.48047,190.74023 C 396.48045,191.61525 396.30858,192.34571 395.96484,192.93164 C 395.62108,193.51759 395.10545,193.97071 394.41797,194.29102 C 395.30858,194.6504 395.97264,195.16993 396.41016,195.84961 C 396.85545,196.52149 397.07811,197.36133 397.07813,198.36914 C 397.07811,200.04883 396.53123,201.34571 395.4375,202.25977 C 394.34374,203.17383 392.79296,203.63086 390.78516,203.63086 L 382.92188,203.63086"
+       id="text5695" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 442.88672,203.63086 L 442.88672,186.36914 L 446.60156,186.36914 L 453.60938,198.22852 L 453.60938,186.36914 L 457.11328,186.36914 L 457.11328,203.63086 L 453.44531,203.63086 L 446.39063,191.77148 L 446.39063,203.63086 L 442.88672,203.63086"
+       id="text5699" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 501.32813,203.63086 L 501.32813,186.36914 L 506.57813,186.36914 L 510.01172,199.50586 L 513.39844,186.36914 L 518.67188,186.36914 L 518.67188,203.63086 L 515.34375,203.63086 L 515.34375,189.70898 L 511.83984,203.63086 L 508.20703,203.63086 L 504.65625,189.70898 L 504.65625,203.63086 L 501.32813,203.63086"
+       id="text5703" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 658.22461,134.6543 L 658.22461,131.10352 L 661.77539,131.10352 L 661.77539,134.6543 L 658.22461,134.6543 M 658.22461,143.63086 L 658.22461,140.10352 L 661.77539,140.10352 L 661.77539,143.63086 L 658.22461,143.63086 M 658.24805,164.6543 L 658.24805,161.10352 L 661.77539,161.10352 L 661.77539,164.6543 L 658.24805,164.6543 M 658.24805,177.68555 L 658.24805,176.31445 C 658.90429,176.12695 659.38867,175.83789 659.70117,175.44727 C 660.01367,175.05664 660.16992,174.54883 660.16992,173.92383 L 660.16992,173.63086 L 658.22461,173.63086 L 658.22461,170.10352 L 661.77539,170.10352 L 661.77539,173.49023 C 661.77539,174.66211 661.47851,175.59961 660.88477,176.30273 C 660.29101,177.01367 659.41211,177.47461 658.24805,177.68555"
+       id="text5725" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 720.78516,126.7793 L 723.03516,126.7793 L 723.03516,133.33008 L 720.78516,133.33008 L 720.78516,126.7793 M 716.96484,126.7793 L 719.21484,126.7793 L 719.21484,133.33008 L 716.96484,133.33008 L 716.96484,126.7793 M 718.88672,156.7793 L 721.13672,156.7793 L 721.13672,163.33008 L 718.88672,163.33008 L 718.88672,156.7793"
+       id="text5731" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 772.5,140.60938 L 772.5,129.10156 L 780.85156,129.10156 L 780.85156,131.10156 L 774.83594,131.10156 L 774.83594,133.55469 L 780.33594,133.55469 L 780.33594,135.52344 L 774.83594,135.52344 L 774.83594,138.48438 L 781.13281,138.48438 L 781.13281,140.60938 L 772.5,140.60938 M 782.74219,140.60938 L 782.74219,132.11719 L 784.96875,132.11719 L 784.96875,133.125 C 785.28645,132.71355 785.66145,132.40626 786.09375,132.20313 C 786.52604,131.9948 787.00781,131.89063 787.53906,131.89063 C 788.47656,131.89063 789.17708,132.13543 789.64063,132.625 C 790.10937,133.10938 790.34374,133.84115 790.34375,134.82031 L 790.34375,140.60938 L 788.07031,140.60938 L 788.07031,135.47656 C 788.07031,134.86719 787.96614,134.4323 787.75781,134.17188 C 787.55468,133.91147 787.22135,133.78126 786.75781,133.78125 C 786.22135,133.78126 785.79687,133.94271 785.48438,134.26563 C 785.17187,134.58334 785.01562,135.01823 785.01563,135.57031 L 785.01563,140.60938 L 782.74219,140.60938 M 796.07813,140.67188 C 795.86979,140.67708 795.61979,140.6849 795.32813,140.69531 C 795.04166,140.71094 794.85937,140.71875 794.78125,140.71875 C 793.91146,140.71875 793.3151,140.55729 792.99219,140.23438 C 792.67448,139.90625 792.51562,139.26302 792.51563,138.30469 L 792.51563,133.71094 L 791.39063,133.71094 L 791.39063,132.11719 L 792.51563,132.11719 L 792.51563,129.79688 L 794.76563,129.79688 L 794.76563,132.11719 L 796.07813,132.11719 L 796.07813,133.71094 L 794.76563,133.71094 L 794.76563,138.41406 C 794.76562,138.63802 794.8151,138.78646 794.91406,138.85938 C 795.01302,138.92709 795.21614,138.96094 795.52344,138.96094 L 796.07813,138.96094 L 796.07813,140.67188 M 802.63281,138.03125 L 804.89844,138.03125 C 804.66926,138.92709 804.20572,139.63021 803.50781,140.14063 C 802.8151,140.64583 801.96874,140.89844 800.96875,140.89844 C 799.73958,140.89844 798.76562,140.48698 798.04688,139.66406 C 797.32812,138.83594 796.96875,137.71615 796.96875,136.30469 C 796.96875,134.91407 797.32292,133.81772 798.03125,133.01563 C 798.73958,132.21355 799.70833,131.81251 800.9375,131.8125 C 802.23958,131.81251 803.24478,132.20834 803.95313,133 C 804.66145,133.78647 805.01562,134.90886 805.01563,136.36719 C 805.01562,136.52865 805.01301,136.65105 805.00781,136.73438 C 805.0078,136.8125 805.0026,136.88802 804.99219,136.96094 L 799.32031,136.96094 C 799.35156,137.62761 799.51302,138.13021 799.80469,138.46875 C 800.10156,138.80729 800.52604,138.97656 801.07813,138.97656 C 801.46874,138.97656 801.78906,138.90104 802.03906,138.75 C 802.28906,138.59375 802.48697,138.35417 802.63281,138.03125 M 799.32031,135.46875 L 802.66406,135.46875 C 802.64322,134.89584 802.48958,134.46094 802.20313,134.16406 C 801.92187,133.86199 801.51562,133.71094 800.98438,133.71094 C 800.48958,133.71094 800.09895,133.86199 799.8125,134.16406 C 799.53125,134.46615 799.36718,134.90105 799.32031,135.46875 M 806.52344,140.60938 L 806.52344,132.11719 L 808.63281,132.11719 L 808.63281,133.57031 C 808.92968,132.98699 809.27604,132.5599 809.67188,132.28906 C 810.0677,132.01303 810.53906,131.87501 811.08594,131.875 C 811.17447,131.87501 811.24218,131.87761 811.28906,131.88281 C 811.34114,131.88282 811.38281,131.88543 811.41406,131.89063 L 811.42188,134.19531 L 810.66406,134.19531 C 810.04427,134.19532 809.57812,134.35678 809.26563,134.67969 C 808.95312,135.00261 808.79687,135.48178 808.79688,136.11719 L 808.79688,140.60938 L 806.52344,140.60938"
+       id="text5737" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 787.5,172.5 L 787.5,157.5 L 772.5,165 L 787.5,172.5 z "
+       id="path5745" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="M 810,150 L 810,165 L 780,165"
+       id="path5747" />
+    <g
+       id="g3601">
+      <path
+         id="text5753"
+         d="M 12.496094,197.64063 L 14.832032,197.64063 C 14.92057,198.27084 15.178382,198.73828 15.605469,199.04297 C 16.032548,199.34766 16.649735,199.5 17.457032,199.5 C 18.144525,199.5 18.662754,199.37761 19.011719,199.13281 C 19.36067,198.88802 19.535149,198.52604 19.535157,198.04688 C 19.535149,197.34896 18.532546,196.77084 16.527344,196.3125 C 16.501298,196.3073 16.47786,196.30209 16.457032,196.29688 C 16.404944,196.28646 16.324215,196.26823 16.214844,196.24219 C 15.141924,196.00782 14.3763,195.7448 13.917969,195.45313 C 13.511717,195.19271 13.201822,194.84245 12.988282,194.40234 C 12.774739,193.96225 12.667968,193.44272 12.667969,192.84375 C 12.667968,191.72397 13.048176,190.8659 13.808594,190.26953 C 14.569008,189.67319 15.667965,189.37501 17.105469,189.375 C 18.449212,189.37501 19.499993,189.69272 20.257813,190.32813 C 21.015616,190.96355 21.415355,191.85938 21.457032,193.01563 L 19.183594,193.01563 C 19.14192,192.45834 18.928379,192.03386 18.542969,191.74219 C 18.157546,191.45053 17.608067,191.3047 16.894532,191.30469 C 16.274735,191.3047 15.796871,191.42579 15.460938,191.66797 C 15.124997,191.91017 14.957028,192.25522 14.957032,192.70313 C 14.957028,193.31251 15.610674,193.76824 16.917969,194.07031 C 17.27213,194.15365 17.548172,194.21876 17.746094,194.26563 C 18.584629,194.47917 19.17968,194.64584 19.53125,194.76563 C 19.882805,194.88542 20.188794,195.01824 20.449219,195.16406 C 20.91796,195.42448 21.269522,195.76954 21.503907,196.19922 C 21.738272,196.62891 21.855459,197.14323 21.855469,197.74219 C 21.855459,198.94011 21.451814,199.86849 20.644532,200.52734 C 19.837232,201.1862 18.699212,201.51562 17.230469,201.51563 C 15.782548,201.51562 14.647133,201.17969 13.824219,200.50781 C 13.001301,199.83594 12.558593,198.88021 12.496094,197.64063 L 12.496094,197.64063 z M 23.566407,201.19531 L 23.566407,189.6875 L 25.824219,189.6875 L 25.824219,193.64063 C 26.131507,193.25522 26.497392,192.96485 26.921875,192.76953 C 27.34635,192.57423 27.82161,192.47657 28.347657,192.47656 C 28.84765,192.47657 29.299473,192.56251 29.703125,192.73438 C 30.106764,192.90626 30.433586,193.15105 30.683594,193.46875 C 30.855461,193.6823 30.976554,193.92709 31.046875,194.20313 C 31.117179,194.47917 31.152335,194.92188 31.152344,195.53125 L 31.152344,195.6875 L 31.152344,201.19531 L 28.894532,201.19531 L 28.894532,196.75 C 28.894525,195.69792 28.798171,195.03777 28.605469,194.76953 C 28.412755,194.50131 28.066401,194.36719 27.566407,194.36719 C 27.029944,194.36719 26.605465,194.52735 26.292969,194.84766 C 25.980466,195.16797 25.824216,195.60417 25.824219,196.15625 L 25.824219,201.19531 L 23.566407,201.19531 z M 33.191407,191.75781 L 33.191407,189.6875 L 35.464844,189.6875 L 35.464844,191.75781 L 33.191407,191.75781 z M 33.191407,201.19531 L 33.191407,192.70313 L 35.464844,192.70313 L 35.464844,201.19531 L 33.191407,201.19531 z M 37.886719,201.19531 L 37.886719,194.29688 L 36.675782,194.29688 L 36.675782,192.70313 L 37.886719,192.70313 L 37.886719,191.91406 C 37.886718,191.12241 38.091144,190.54038 38.5,190.16797 C 38.908852,189.79558 39.553383,189.60939 40.433594,189.60938 C 40.595048,189.60939 40.765621,189.61329 40.945313,189.62109 C 41.124996,189.62892 41.316402,189.64324 41.519532,189.66406 L 41.519532,191.46875 L 40.925782,191.46875 C 40.587236,191.46876 40.36458,191.51303 40.257813,191.60156 C 40.151038,191.69011 40.097653,191.85938 40.097657,192.10938 L 40.097657,192.70313 L 41.519532,192.70313 L 41.519532,194.29688 L 40.113282,194.29688 L 40.113282,201.19531 L 37.886719,201.19531 z M 46.449219,201.25781 C 46.240881,201.26302 45.992183,201.27214 45.703125,201.28516 C 45.414059,201.29818 45.230465,201.30469 45.152344,201.30469 C 44.28255,201.30469 43.687498,201.14193 43.367188,200.81641 C 43.046874,200.49089 42.886718,199.84896 42.886719,198.89063 L 42.886719,194.29688 L 41.761719,194.29688 L 41.761719,192.70313 L 42.886719,192.70313 L 42.886719,190.38281 L 45.136719,190.38281 L 45.136719,192.70313 L 46.449219,192.70313 L 46.449219,194.29688 L 45.136719,194.29688 L 45.136719,199 C 45.136716,199.22396 45.186195,199.3711 45.285157,199.44141 C 45.384111,199.51172 45.587236,199.54688 45.894532,199.54688 L 46.449219,199.54688 L 46.449219,201.25781 z "
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+      <path
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 24.746094,207.125 L 13.496094,222.125 L 20.996094,222.125 L 20.996094,229.625 L 28.496094,229.625 L 28.496094,222.125 L 35.996094,222.125 L 24.746094,207.125 z "
+         id="path5757" />
+    </g>
+    <g
+       id="g5795"
+       transform="translate(727.5,0)">
+      <text
+         sodipodi:linespacing="125%"
+         id="text5797"
+         y="201.19531"
+         x="31.8125"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+         xml:space="preserve"><tspan
+           y="201.19531"
+           x="31.8125"
+           id="tspan5799"
+           sodipodi:role="line">Shift</tspan></text>
+      <path
+         id="path5801"
+         d="M 27.25,207.125 L 16,222.125 L 23.5,222.125 L 23.5,229.625 L 31,229.625 L 31,222.125 L 38.5,222.125 L 27.25,207.125 z "
+         style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 576.90234,189.63867 L 576.90234,192.20508 L 566.4375,196.48242 L 576.90234,200.74805 L 576.90234,203.31445 L 563.09766,197.63086 L 563.09766,195.29883 L 576.90234,189.63867 M 568.21875,237.68555 L 568.21875,236.31445 C 568.875,236.12695 569.35937,235.83789 569.67188,235.44727 C 569.98437,235.05664 570.14062,234.54883 570.14063,233.92383 L 570.14063,233.63086 L 568.21875,233.63086 L 568.21875,230.10352 L 571.76953,230.10352 L 571.76953,233.49023 C 571.76953,234.6543 571.46875,235.59179 570.86719,236.30273 C 570.27343,237.01367 569.39062,237.47461 568.21875,237.68555"
+       id="text5803" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 623.09766,189.63867 L 636.90234,195.29883 L 636.90234,197.63086 L 623.09766,203.31445 L 623.09766,200.74805 L 633.58594,196.48242 L 623.09766,192.20508 L 623.09766,189.63867 M 628.21875,233.63086 L 628.21875,230.10352 L 631.74609,230.10352 L 631.74609,233.63086 L 628.21875,233.63086"
+       id="text5813" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 688.44727,198.61523 C 688.44726,198.5293 688.44335,198.41602 688.43555,198.27539 C 688.42773,198.12696 688.42382,198.01758 688.42383,197.94727 C 688.42382,197.25977 688.49804,196.68946 688.64648,196.23633 C 688.79492,195.7754 689.0332,195.34571 689.36133,194.94727 C 689.61132,194.6504 689.98242,194.31056 690.47461,193.92773 C 690.9746,193.54493 691.29882,193.26759 691.44727,193.0957 C 691.75976,192.74415 691.9746,192.42775 692.0918,192.14648 C 692.20898,191.86525 692.26757,191.55665 692.26758,191.2207 C 692.26757,190.47853 692.06054,189.9004 691.64648,189.48633 C 691.23241,189.07228 690.65429,188.86525 689.91211,188.86523 C 689.16992,188.86525 688.58398,189.11525 688.1543,189.61523 C 687.73242,190.10744 687.50195,190.80275 687.46289,191.70117 L 684.1582,191.70117 L 684.1582,191.33789 C 684.1582,189.68947 684.67773,188.37697 685.7168,187.40039 C 686.76367,186.41603 688.16992,185.92385 689.93555,185.92383 C 691.74023,185.92385 693.17382,186.38869 694.23633,187.31836 C 695.30663,188.24025 695.84178,189.47853 695.8418,191.0332 C 695.84178,191.58009 695.77928,192.07228 695.6543,192.50977 C 695.5371,192.93946 695.3535,193.33399 695.10352,193.69336 C 694.78319,194.14649 694.2871,194.63868 693.61523,195.16992 C 692.95116,195.69337 692.54882,196.01759 692.4082,196.14258 C 692.11132,196.43165 691.89648,196.73634 691.76367,197.05664 C 691.63866,197.37696 691.57616,197.75977 691.57617,198.20508 C 691.57616,198.24415 691.58007,198.31055 691.58789,198.4043 C 691.59569,198.49805 691.5996,198.56836 691.59961,198.61523 L 688.44727,198.61523 M 688.2832,203.63086 L 688.2832,200.19727 L 691.74023,200.19727 L 691.74023,203.63086 L 688.2832,203.63086 M 686.31445,235.85742 L 692.12695,215.92383 L 693.73242,215.92383 L 687.89648,235.85742 L 686.31445,235.85742"
+       id="text5819" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 18,271.78906 C 17.911447,273.09636 17.406239,274.13542 16.484375,274.90625 C 15.5677,275.67708 14.369784,276.0625 12.890625,276.0625 C 11.187496,276.0625 9.8619761,275.53125 8.9140625,274.46875 C 7.971353,273.40625 7.4999993,271.91667 7.5,270 C 7.4999993,268.04167 7.9817696,266.54168 8.9453125,265.5 C 9.9088511,264.45834 11.294266,263.93751 13.101563,263.9375 C 14.570305,263.93751 15.729158,264.29689 16.578125,265.01563 C 17.432281,265.72918 17.901031,266.73959 17.984375,268.04688 L 15.648438,268.04688 C 15.54947,267.39584 15.283846,266.90105 14.851563,266.5625 C 14.419263,266.21876 13.83593,266.04688 13.101563,266.04688 C 12.059891,266.04688 11.268225,266.38282 10.726563,267.05469 C 10.184892,267.72657 9.9140594,268.70834 9.9140625,270 C 9.9140594,271.25 10.182288,272.21615 10.71875,272.89844 C 11.260412,273.58073 12.028641,273.92188 13.023438,273.92188 C 13.742181,273.92188 14.330722,273.73959 14.789063,273.375 C 15.247387,273.00521 15.544262,272.47657 15.679688,271.78906 L 18,271.78906 M 23.46875,275.80469 C 23.260412,275.8099 23.010412,275.81771 22.71875,275.82813 C 22.432288,275.84375 22.249996,275.85156 22.171875,275.85156 C 21.302081,275.85156 20.705727,275.6901 20.382813,275.36719 C 20.065103,275.03906 19.906249,274.39583 19.90625,273.4375 L 19.90625,268.84375 L 18.78125,268.84375 L 18.78125,267.25 L 19.90625,267.25 L 19.90625,264.92969 L 22.15625,264.92969 L 22.15625,267.25 L 23.46875,267.25 L 23.46875,268.84375 L 22.15625,268.84375 L 22.15625,273.54688 C 22.156247,273.77084 22.205726,273.91927 22.304688,273.99219 C 22.403642,274.0599 22.606767,274.09375 22.914063,274.09375 L 23.46875,274.09375 L 23.46875,275.80469 M 24.789063,275.74219 L 24.789063,267.25 L 26.898438,267.25 L 26.898438,268.70313 C 27.195309,268.1198 27.541663,267.69272 27.9375,267.42188 C 28.333329,267.14584 28.804682,267.00782 29.351563,267.00781 C 29.440099,267.00782 29.507807,267.01043 29.554688,267.01563 C 29.606765,267.01563 29.648432,267.01824 29.679688,267.02344 L 29.6875,269.32813 L 28.929688,269.32813 C 28.309891,269.32813 27.843746,269.48959 27.53125,269.8125 C 27.218747,270.13542 27.062497,270.61459 27.0625,271.25 L 27.0625,275.74219 L 24.789063,275.74219 M 31.023438,275.74219 L 31.023438,264.23438 L 33.296875,264.23438 L 33.296875,275.74219 L 31.023438,275.74219"
+       id="text5827" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 162.96875,266.49609 L 161.375,271.39453 L 164.57031,271.39453 L 162.96875,266.49609 M 161.59375,264.19141 L 164.32813,264.19141 L 168.47656,275.69922 L 165.99219,275.69922 L 165.21094,273.33203 L 160.75,273.33203 L 159.99219,275.69922 L 157.5,275.69922 L 161.59375,264.19141 M 169.53906,275.69922 L 169.53906,264.19141 L 171.8125,264.19141 L 171.8125,275.69922 L 169.53906,275.69922 M 177.64063,275.76172 C 177.43229,275.76693 177.18229,275.77474 176.89063,275.78516 C 176.60416,275.80078 176.42187,275.80859 176.34375,275.80859 C 175.47396,275.80859 174.8776,275.64714 174.55469,275.32422 C 174.23698,274.99609 174.07812,274.35287 174.07813,273.39453 L 174.07813,268.80078 L 172.95313,268.80078 L 172.95313,267.20703 L 174.07813,267.20703 L 174.07813,264.88672 L 176.32813,264.88672 L 176.32813,267.20703 L 177.64063,267.20703 L 177.64063,268.80078 L 176.32813,268.80078 L 176.32813,273.50391 C 176.32812,273.72787 176.3776,273.8763 176.47656,273.94922 C 176.57552,274.01693 176.77864,274.05078 177.08594,274.05078 L 177.64063,274.05078 L 177.64063,275.76172"
+       id="text5831" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 612.96875,266.53906 L 611.375,271.4375 L 614.57031,271.4375 L 612.96875,266.53906 M 611.59375,264.23438 L 614.32813,264.23438 L 618.47656,275.74219 L 615.99219,275.74219 L 615.21094,273.375 L 610.75,273.375 L 609.99219,275.74219 L 607.5,275.74219 L 611.59375,264.23438 M 619.53906,275.74219 L 619.53906,264.23438 L 621.8125,264.23438 L 621.8125,275.74219 L 619.53906,275.74219 M 627.64063,275.80469 C 627.43229,275.8099 627.18229,275.81771 626.89063,275.82813 C 626.60416,275.84375 626.42187,275.85156 626.34375,275.85156 C 625.47396,275.85156 624.8776,275.6901 624.55469,275.36719 C 624.23698,275.03906 624.07812,274.39583 624.07813,273.4375 L 624.07813,268.84375 L 622.95313,268.84375 L 622.95313,267.25 L 624.07813,267.25 L 624.07813,264.92969 L 626.32813,264.92969 L 626.32813,267.25 L 627.64063,267.25 L 627.64063,268.84375 L 626.32813,268.84375 L 626.32813,273.54688 C 626.32812,273.77084 626.3776,273.91927 626.47656,273.99219 C 626.57552,274.0599 626.77864,274.09375 627.08594,274.09375 L 627.64063,274.09375 L 627.64063,275.80469 M 642,274.38281 C 641.57291,274.96094 641.08593,275.38542 640.53906,275.65625 C 639.99739,275.92708 639.35937,276.0625 638.625,276.0625 C 637.01562,276.0625 635.71093,275.50521 634.71094,274.39063 C 633.71614,273.27084 633.21875,271.80209 633.21875,269.98438 C 633.21875,268.15105 633.71614,266.6849 634.71094,265.58594 C 635.70573,264.48699 637.03125,263.93751 638.6875,263.9375 C 640.1302,263.93751 641.30728,264.28387 642.21875,264.97656 C 643.1302,265.66407 643.67186,266.61199 643.84375,267.82031 L 641.42969,267.82031 C 641.28385,267.22136 640.98437,266.76563 640.53125,266.45313 C 640.08333,266.14063 639.49739,265.98438 638.77344,265.98438 C 637.80989,265.98438 637.05208,266.33855 636.5,267.04688 C 635.95312,267.75001 635.67968,268.72397 635.67969,269.96875 C 635.67968,271.21875 635.96614,272.19792 636.53906,272.90625 C 637.11197,273.61459 637.89843,273.96875 638.89844,273.96875 C 639.64843,273.96875 640.27603,273.7474 640.78125,273.30469 C 641.28645,272.86198 641.59895,272.25521 641.71875,271.48438 L 639.10938,271.48438 L 639.10938,269.51563 L 643.875,269.51563 L 643.875,275.74219 L 642.28906,275.74219 L 642,274.38281 M 645.96094,275.74219 L 645.96094,267.25 L 648.07031,267.25 L 648.07031,268.70313 C 648.36718,268.1198 648.71354,267.69272 649.10938,267.42188 C 649.5052,267.14584 649.97656,267.00782 650.52344,267.00781 C 650.61197,267.00782 650.67968,267.01043 650.72656,267.01563 C 650.77864,267.01563 650.82031,267.01824 650.85156,267.02344 L 650.85938,269.32813 L 650.10156,269.32813 C 649.48177,269.32813 649.01562,269.48959 648.70313,269.8125 C 648.39062,270.13542 648.23437,270.61459 648.23438,271.25 L 648.23438,275.74219 L 645.96094,275.74219"
+       id="text5835" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 828,271.78906 C 827.91145,273.09636 827.40624,274.13542 826.48438,274.90625 C 825.5677,275.67708 824.36978,276.0625 822.89063,276.0625 C 821.1875,276.0625 819.86198,275.53125 818.91406,274.46875 C 817.97135,273.40625 817.5,271.91667 817.5,270 C 817.5,268.04167 817.98177,266.54168 818.94531,265.5 C 819.90885,264.45834 821.29427,263.93751 823.10156,263.9375 C 824.5703,263.93751 825.72916,264.29689 826.57813,265.01563 C 827.43228,265.72918 827.90103,266.73959 827.98438,268.04688 L 825.64844,268.04688 C 825.54947,267.39584 825.28385,266.90105 824.85156,266.5625 C 824.41926,266.21876 823.83593,266.04688 823.10156,266.04688 C 822.05989,266.04688 821.26822,266.38282 820.72656,267.05469 C 820.18489,267.72657 819.91406,268.70834 819.91406,270 C 819.91406,271.25 820.18229,272.21615 820.71875,272.89844 C 821.26041,273.58073 822.02864,273.92188 823.02344,273.92188 C 823.74218,273.92188 824.33072,273.73959 824.78906,273.375 C 825.24739,273.00521 825.54426,272.47657 825.67969,271.78906 L 828,271.78906 M 833.46875,275.80469 C 833.26041,275.8099 833.01041,275.81771 832.71875,275.82813 C 832.43229,275.84375 832.25,275.85156 832.17188,275.85156 C 831.30208,275.85156 830.70573,275.6901 830.38281,275.36719 C 830.0651,275.03906 829.90625,274.39583 829.90625,273.4375 L 829.90625,268.84375 L 828.78125,268.84375 L 828.78125,267.25 L 829.90625,267.25 L 829.90625,264.92969 L 832.15625,264.92969 L 832.15625,267.25 L 833.46875,267.25 L 833.46875,268.84375 L 832.15625,268.84375 L 832.15625,273.54688 C 832.15625,273.77084 832.20573,273.91927 832.30469,273.99219 C 832.40364,274.0599 832.60677,274.09375 832.91406,274.09375 L 833.46875,274.09375 L 833.46875,275.80469 M 834.78906,275.74219 L 834.78906,267.25 L 836.89844,267.25 L 836.89844,268.70313 C 837.19531,268.1198 837.54166,267.69272 837.9375,267.42188 C 838.33333,267.14584 838.80468,267.00782 839.35156,267.00781 C 839.4401,267.00782 839.50781,267.01043 839.55469,267.01563 C 839.60677,267.01563 839.64843,267.01824 839.67969,267.02344 L 839.6875,269.32813 L 838.92969,269.32813 C 838.30989,269.32813 837.84375,269.48959 837.53125,269.8125 C 837.21875,270.13542 837.0625,270.61459 837.0625,271.25 L 837.0625,275.74219 L 834.78906,275.74219 M 841.02344,275.74219 L 841.02344,264.23438 L 843.29688,264.23438 L 843.29688,275.74219 L 841.02344,275.74219"
+       id="text5839" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 108.94531,264.01953 L 105.64844,252.51172 L 108.10156,252.51172 L 110.07031,260.62891 L 111.73438,252.51172 L 114.25781,252.51172 L 115.92188,260.62891 L 117.89063,252.51172 L 120.32031,252.51172 L 117.03125,264.01953 L 114.77344,264.01953 L 112.99219,255.20703 L 111.20313,264.01953 L 108.94531,264.01953 M 121.5,254.58203 L 121.5,252.51172 L 123.77344,252.51172 L 123.77344,254.58203 L 121.5,254.58203 M 121.5,264.01953 L 121.5,255.52734 L 123.77344,255.52734 L 123.77344,264.01953 L 121.5,264.01953 M 125.79688,264.01953 L 125.79688,255.52734 L 128.02344,255.52734 L 128.02344,256.53516 C 128.34114,256.12371 128.71614,255.81641 129.14844,255.61328 C 129.58072,255.40496 130.06249,255.30079 130.59375,255.30078 C 131.53124,255.30079 132.23176,255.54558 132.69531,256.03516 C 133.16405,256.51954 133.39843,257.25131 133.39844,258.23047 L 133.39844,264.01953 L 131.125,264.01953 L 131.125,258.88672 C 131.12499,258.27735 131.02083,257.84245 130.8125,257.58203 C 130.60937,257.32162 130.27604,257.19141 129.8125,257.19141 C 129.27604,257.19141 128.85156,257.35287 128.53906,257.67578 C 128.22656,257.9935 128.07031,258.42839 128.07031,258.98047 L 128.07031,264.01953 L 125.79688,264.01953 M 106.64844,284.01953 L 106.64844,272.51172 L 109.01563,272.51172 L 109.01563,277.23828 L 113.50781,272.51172 L 116.46875,272.51172 L 111.875,277.16797 L 116.88281,284.01953 L 113.99219,284.01953 L 110.24219,278.75391 L 109.01563,279.97266 L 109.01563,284.01953 L 106.64844,284.01953 M 122.9375,281.44141 L 125.20313,281.44141 C 124.97395,282.33724 124.51041,283.04037 123.8125,283.55078 C 123.11979,284.05599 122.27343,284.30859 121.27344,284.30859 C 120.04427,284.30859 119.07031,283.89714 118.35156,283.07422 C 117.63281,282.2461 117.27344,281.1263 117.27344,279.71484 C 117.27344,278.32422 117.6276,277.22787 118.33594,276.42578 C 119.04427,275.62371 120.01302,275.22267 121.24219,275.22266 C 122.54427,275.22267 123.54947,275.6185 124.25781,276.41016 C 124.96614,277.19662 125.3203,278.31902 125.32031,279.77734 C 125.3203,279.93881 125.3177,280.0612 125.3125,280.14453 C 125.31249,280.22266 125.30728,280.29818 125.29688,280.37109 L 119.625,280.37109 C 119.65625,281.03776 119.81771,281.54037 120.10938,281.87891 C 120.40625,282.21745 120.83073,282.38672 121.38281,282.38672 C 121.77343,282.38672 122.09374,282.3112 122.34375,282.16016 C 122.59374,282.00391 122.79166,281.76433 122.9375,281.44141 M 119.625,278.87891 L 122.96875,278.87891 C 122.94791,278.306 122.79426,277.8711 122.50781,277.57422 C 122.22656,277.27214 121.82031,277.1211 121.28906,277.12109 C 120.79427,277.1211 120.40364,277.27214 120.11719,277.57422 C 119.83593,277.87631 119.67187,278.3112 119.625,278.87891 M 127.16406,287.42578 L 127.16406,285.58984 C 127.23698,285.60026 127.3125,285.60807 127.39063,285.61328 C 127.46875,285.61849 127.57031,285.62109 127.69531,285.62109 C 128.14323,285.62109 128.47916,285.51432 128.70313,285.30078 C 128.92708,285.09245 129.03906,284.77734 129.03906,284.35547 C 129.03906,284.32422 129.03385,284.28516 129.02344,284.23828 C 129.01302,284.19141 129.0026,284.15234 128.99219,284.12109 L 125.92969,275.52734 L 128.42969,275.52734 L 130.21875,281.65234 L 131.96094,275.52734 L 134.35156,275.52734 L 130.85938,285.54297 C 130.59895,286.29297 130.27343,286.80338 129.88281,287.07422 C 129.49218,287.35026 128.90625,287.48828 128.125,287.48828 C 127.98437,287.48828 127.83333,287.48307 127.67188,287.47266 C 127.51041,287.46224 127.34114,287.44661 127.16406,287.42578"
+       id="text5872" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 708.94531,264.01953 L 705.64844,252.51172 L 708.10156,252.51172 L 710.07031,260.62891 L 711.73438,252.51172 L 714.25781,252.51172 L 715.92188,260.62891 L 717.89063,252.51172 L 720.32031,252.51172 L 717.03125,264.01953 L 714.77344,264.01953 L 712.99219,255.20703 L 711.20313,264.01953 L 708.94531,264.01953 M 721.5,254.58203 L 721.5,252.51172 L 723.77344,252.51172 L 723.77344,254.58203 L 721.5,254.58203 M 721.5,264.01953 L 721.5,255.52734 L 723.77344,255.52734 L 723.77344,264.01953 L 721.5,264.01953 M 725.79688,264.01953 L 725.79688,255.52734 L 728.02344,255.52734 L 728.02344,256.53516 C 728.34114,256.12371 728.71614,255.81641 729.14844,255.61328 C 729.58072,255.40496 730.06249,255.30079 730.59375,255.30078 C 731.53124,255.30079 732.23176,255.54558 732.69531,256.03516 C 733.16405,256.51954 733.39843,257.25131 733.39844,258.23047 L 733.39844,264.01953 L 731.125,264.01953 L 731.125,258.88672 C 731.12499,258.27735 731.02083,257.84245 730.8125,257.58203 C 730.60937,257.32162 730.27604,257.19141 729.8125,257.19141 C 729.27604,257.19141 728.85156,257.35287 728.53906,257.67578 C 728.22656,257.9935 728.07031,258.42839 728.07031,258.98047 L 728.07031,264.01953 L 725.79688,264.01953 M 706.64844,284.01953 L 706.64844,272.51172 L 709.01563,272.51172 L 709.01563,277.23828 L 713.50781,272.51172 L 716.46875,272.51172 L 711.875,277.16797 L 716.88281,284.01953 L 713.99219,284.01953 L 710.24219,278.75391 L 709.01563,279.97266 L 709.01563,284.01953 L 706.64844,284.01953 M 722.9375,281.44141 L 725.20313,281.44141 C 724.97395,282.33724 724.51041,283.04037 723.8125,283.55078 C 723.11979,284.05599 722.27343,284.30859 721.27344,284.30859 C 720.04427,284.30859 719.07031,283.89714 718.35156,283.07422 C 717.63281,282.2461 717.27344,281.1263 717.27344,279.71484 C 717.27344,278.32422 717.6276,277.22787 718.33594,276.42578 C 719.04427,275.62371 720.01302,275.22267 721.24219,275.22266 C 722.54427,275.22267 723.54947,275.6185 724.25781,276.41016 C 724.96614,277.19662 725.3203,278.31902 725.32031,279.77734 C 725.3203,279.93881 725.3177,280.0612 725.3125,280.14453 C 725.31249,280.22266 725.30728,280.29818 725.29688,280.37109 L 719.625,280.37109 C 719.65625,281.03776 719.81771,281.54037 720.10938,281.87891 C 720.40625,282.21745 720.83073,282.38672 721.38281,282.38672 C 721.77343,282.38672 722.09374,282.3112 722.34375,282.16016 C 722.59374,282.00391 722.79166,281.76433 722.9375,281.44141 M 719.625,278.87891 L 722.96875,278.87891 C 722.94791,278.306 722.79426,277.8711 722.50781,277.57422 C 722.22656,277.27214 721.82031,277.1211 721.28906,277.12109 C 720.79427,277.1211 720.40364,277.27214 720.11719,277.57422 C 719.83593,277.87631 719.67187,278.3112 719.625,278.87891 M 727.16406,287.42578 L 727.16406,285.58984 C 727.23698,285.60026 727.3125,285.60807 727.39063,285.61328 C 727.46875,285.61849 727.57031,285.62109 727.69531,285.62109 C 728.14323,285.62109 728.47916,285.51432 728.70313,285.30078 C 728.92708,285.09245 729.03906,284.77734 729.03906,284.35547 C 729.03906,284.32422 729.03385,284.28516 729.02344,284.23828 C 729.01302,284.19141 729.0026,284.15234 728.99219,284.12109 L 725.92969,275.52734 L 728.42969,275.52734 L 730.21875,281.65234 L 731.96094,275.52734 L 734.35156,275.52734 L 730.85938,285.54297 C 730.59895,286.29297 730.27343,286.80338 729.88281,287.07422 C 729.49218,287.35026 728.90625,287.48828 728.125,287.48828 C 727.98437,287.48828 727.83333,287.48307 727.67188,287.47266 C 727.51041,287.46224 727.34114,287.44661 727.16406,287.42578"
+       id="text5878" />
+    <path
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 759.98438,275.60938 L 759.98438,264.10156 L 763.48438,264.10156 L 765.77344,272.85938 L 768.03125,264.10156 L 771.54688,264.10156 L 771.54688,275.60938 L 769.32813,275.60938 L 769.32813,266.32813 L 766.99219,275.60938 L 764.57031,275.60938 L 762.20313,266.32813 L 762.20313,275.60938 L 759.98438,275.60938 M 778.99219,273.03125 L 781.25781,273.03125 C 781.02864,273.92709 780.5651,274.63021 779.86719,275.14063 C 779.17447,275.64583 778.32812,275.89844 777.32813,275.89844 C 776.09896,275.89844 775.125,275.48698 774.40625,274.66406 C 773.6875,273.83594 773.32812,272.71615 773.32813,271.30469 C 773.32812,269.91407 773.68229,268.81772 774.39063,268.01563 C 775.09896,267.21355 776.06771,266.81251 777.29688,266.8125 C 778.59895,266.81251 779.60416,267.20834 780.3125,268 C 781.02083,268.78647 781.37499,269.90886 781.375,271.36719 C 781.37499,271.52865 781.37239,271.65105 781.36719,271.73438 C 781.36718,271.8125 781.36197,271.88802 781.35156,271.96094 L 775.67969,271.96094 C 775.71093,272.62761 775.87239,273.13021 776.16406,273.46875 C 776.46093,273.80729 776.88541,273.97656 777.4375,273.97656 C 777.82812,273.97656 778.14843,273.90104 778.39844,273.75 C 778.64843,273.59375 778.84635,273.35417 778.99219,273.03125 M 775.67969,270.46875 L 779.02344,270.46875 C 779.0026,269.89584 778.84895,269.46094 778.5625,269.16406 C 778.28124,268.86199 777.87499,268.71094 777.34375,268.71094 C 776.84895,268.71094 776.45833,268.86199 776.17188,269.16406 C 775.89062,269.46615 775.72656,269.90105 775.67969,270.46875 M 782.88281,275.60938 L 782.88281,267.11719 L 785.10938,267.11719 L 785.10938,268.125 C 785.42708,267.71355 785.80208,267.40626 786.23438,267.20313 C 786.66666,266.9948 787.14843,266.89063 787.67969,266.89063 C 788.61718,266.89063 789.3177,267.13543 789.78125,267.625 C 790.24999,268.10938 790.48437,268.84115 790.48438,269.82031 L 790.48438,275.60938 L 788.21094,275.60938 L 788.21094,270.47656 C 788.21093,269.86719 788.10676,269.4323 787.89844,269.17188 C 787.69531,268.91147 787.36197,268.78126 786.89844,268.78125 C 786.36197,268.78126 785.9375,268.94272 785.625,269.26563 C 785.3125,269.58334 785.15625,270.01823 785.15625,270.57031 L 785.15625,275.60938 L 782.88281,275.60938 M 800.01563,267.11719 L 800.01563,275.60938 L 797.78906,275.60938 L 797.78906,274.60156 C 797.46614,275.01302 797.08854,275.32292 796.65625,275.53125 C 796.22916,275.73437 795.74739,275.83594 795.21094,275.83594 C 794.27864,275.83594 793.57812,275.59115 793.10938,275.10156 C 792.64583,274.61198 792.41406,273.88021 792.41406,272.90625 L 792.41406,267.11719 L 794.6875,267.11719 L 794.6875,272.25 C 794.6875,272.85417 794.78906,273.28646 794.99219,273.54688 C 795.19531,273.80209 795.53125,273.92969 796,273.92969 C 796.53124,273.92969 796.95312,273.77084 797.26563,273.45313 C 797.58333,273.13021 797.74218,272.69271 797.74219,272.14063 L 797.74219,267.11719 L 800.01563,267.11719"
+       id="text5884" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 104.41406,17.103516 L 104.41406,10.212891 L 101.74219,10.212891 L 101.74219,8.7949219 L 101.94141,8.7949219 C 102.89453,8.7949367 103.58984,8.6621243 104.02734,8.3964844 C 104.47265,8.1308749 104.73828,7.6894691 104.82422,7.0722656 L 106.59375,7.0722656 L 106.59375,17.103516 L 104.41406,17.103516 M 106.72266,36.369141 L 106.72266,39.826172 L 103.24219,39.826172 L 103.24219,36.369141 L 106.72266,36.369141 M 105.89063,41.173828 L 106.80469,48.978516 L 106.80469,53.630859 L 103.19531,53.630859 L 103.19531,48.978516 L 104.10938,41.173828 L 105.89063,41.173828"
+       id="text5890" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 160.85156,47.103516 C 160.875,46.197273 161.08984,45.431649 161.49609,44.806641 C 161.91015,44.18165 162.63672,43.548838 163.67578,42.908203 C 163.82422,42.822276 164.03125,42.701183 164.29688,42.544922 C 165.74218,41.724621 166.46484,40.931653 166.46484,40.166016 C 166.46484,39.720717 166.32031,39.369155 166.03125,39.111328 C 165.74218,38.85353 165.34375,38.724624 164.83594,38.724609 C 164.27343,38.724624 163.83984,38.88478 163.53516,39.205078 C 163.23047,39.517592 163.07812,39.966811 163.07813,40.552734 L 163.07813,40.646484 L 161.03906,40.646484 C 161.03906,39.498061 161.37891,38.615249 162.05859,37.998047 C 162.73828,37.380876 163.71093,37.072282 164.97656,37.072266 C 166.11718,37.072282 167.02343,37.353532 167.69531,37.916016 C 168.37499,38.470718 168.71484,39.212905 168.71484,40.142578 C 168.71484,40.814466 168.53905,41.39259 168.1875,41.876953 C 167.83593,42.361339 167.14843,42.919933 166.125,43.552734 C 165.89843,43.701182 165.57812,43.896494 165.16406,44.138672 C 164.22656,44.685556 163.69922,45.115243 163.58203,45.427734 L 168.62109,45.427734 L 168.62109,47.103516 L 160.85156,47.103516"
+       id="text5910" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 220.92188,44.033203 L 223.05469,44.033203 C 223.07031,44.603525 223.22265,45.029305 223.51172,45.310547 C 223.80078,45.591805 224.23437,45.73243 224.8125,45.732422 C 225.36718,45.73243 225.79687,45.599617 226.10156,45.333984 C 226.40624,45.068368 226.55859,44.689462 226.55859,44.197266 C 226.55859,43.697276 226.38281,43.322276 226.03125,43.072266 C 225.67968,42.814464 225.15234,42.685558 224.44922,42.685547 L 224.10938,42.685547 L 224.10938,41.291016 L 224.35547,41.291016 C 225.0039,41.291028 225.48046,41.181653 225.78516,40.962891 C 226.09765,40.736341 226.2539,40.392591 226.25391,39.931641 C 226.2539,39.54103 226.12109,39.232436 225.85547,39.005859 C 225.58984,38.771499 225.23437,38.654312 224.78906,38.654297 C 224.29687,38.654312 223.91797,38.787124 223.65234,39.052734 C 223.38672,39.310561 223.2539,39.681655 223.25391,40.166016 L 223.25391,40.236328 L 221.16797,40.236328 C 221.19141,39.212905 221.51953,38.431656 222.15234,37.892578 C 222.79297,37.345719 223.70312,37.072282 224.88281,37.072266 C 225.99218,37.072282 226.86718,37.314469 227.50781,37.798828 C 228.15624,38.283218 228.48046,38.943374 228.48047,39.779297 C 228.48046,40.21681 228.36718,40.603529 228.14063,40.939453 C 227.92187,41.26759 227.59374,41.537121 227.15625,41.748047 C 227.72656,41.974621 228.15624,42.291027 228.44531,42.697266 C 228.74218,43.095714 228.89062,43.564463 228.89063,44.103516 C 228.89062,45.119149 228.52343,45.923836 227.78906,46.517578 C 227.06249,47.103522 226.07031,47.396491 224.8125,47.396484 C 223.57031,47.396491 222.60937,47.107428 221.92969,46.529297 C 221.25781,45.95118 220.92187,45.134774 220.92188,44.080078 L 220.92188,44.033203"
+       id="text5922" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 278.92969,21.685547 C 279.86719,21.037112 280.53125,20.439456 280.92188,19.892578 C 281.32031,19.345707 281.51953,18.75977 281.51953,18.134766 C 281.51953,17.837896 281.47265,17.525397 281.37891,17.197266 C 281.28515,16.861335 281.14843,16.509773 280.96875,16.142578 L 278.90625,16.142578 L 278.90625,14.841797 L 280.17188,14.841797 C 279.82812,14.162119 279.57812,13.556651 279.42188,13.025391 C 279.26562,12.494152 279.1875,11.998059 279.1875,11.537109 C 279.1875,10.146498 279.69531,9.021499 280.71094,8.1621094 C 281.73437,7.3027507 283.08203,6.8730636 284.75391,6.8730469 C 286.5664,6.8730636 287.98827,7.3379069 289.01953,8.2675781 C 290.05077,9.1972801 290.61327,10.517591 290.70703,12.228516 L 287.47266,12.228516 C 287.41015,11.345715 287.15624,10.669935 286.71094,10.201172 C 286.26562,9.7324358 285.65624,9.498061 284.88281,9.4980469 C 284.14843,9.498061 283.58203,9.6894671 283.18359,10.072266 C 282.79296,10.455091 282.59765,11.005872 282.59766,11.724609 C 282.59765,12.138683 282.84375,12.888683 283.33594,13.974609 C 283.50781,14.349619 283.63671,14.638681 283.72266,14.841797 L 287.0625,14.841797 L 287.0625,16.142578 L 284.20313,16.142578 C 284.27343,16.43946 284.32421,16.712898 284.35547,16.962891 C 284.38671,17.212897 284.40234,17.443366 284.40234,17.654297 C 284.40234,18.216802 284.22656,18.779302 283.875,19.341797 C 283.53124,19.896488 282.94531,20.548831 282.11719,21.298828 C 282.625,21.064456 283.08203,20.892581 283.48828,20.783203 C 283.90234,20.666019 284.27734,20.607425 284.61328,20.607422 C 285.01952,20.607425 285.57421,20.701175 286.27734,20.888672 C 286.98046,21.068362 287.48046,21.158206 287.77734,21.158203 C 288.16796,21.158206 288.55077,21.095706 288.92578,20.970703 C 289.30858,20.845706 289.68749,20.6543 290.0625,20.396484 L 291.09375,22.939453 C 290.4453,23.322266 289.82421,23.611328 289.23047,23.806641 C 288.63671,24.009765 288.08202,24.111328 287.56641,24.111328 C 286.97265,24.111328 286.16796,23.955078 285.15234,23.642578 C 284.14453,23.330078 283.41406,23.173829 282.96094,23.173828 C 282.48437,23.173829 282.01953,23.251954 281.56641,23.408203 C 281.12109,23.564453 280.6875,23.798828 280.26563,24.111328 L 278.92969,21.685547 M 284.94141,40.025391 C 284.05859,40.025404 283.29687,40.345716 282.65625,40.986328 C 282.01562,41.626965 281.69531,42.384777 281.69531,43.259766 C 281.69531,44.1504 282.01171,44.912118 282.64453,45.544922 C 283.27734,46.169929 284.04296,46.482429 284.94141,46.482422 C 285.82421,46.482429 286.58202,46.169929 287.21484,45.544922 C 287.85546,44.912118 288.17577,44.1504 288.17578,43.259766 C 288.17577,42.384777 287.85546,41.626965 287.21484,40.986328 C 286.58202,40.345716 285.82421,40.025404 284.94141,40.025391 M 279.65625,36.779297 L 282.05859,39.158203 C 282.48046,38.85353 282.92578,38.626968 283.39453,38.478516 C 283.86328,38.322281 284.37109,38.244156 284.91797,38.244141 C 285.46484,38.244156 285.97655,38.322281 286.45313,38.478516 C 286.93749,38.626968 287.39062,38.85353 287.8125,39.158203 L 290.19141,36.779297 L 291.42188,38.033203 L 289.04297,40.435547 C 289.33983,40.849622 289.56249,41.294934 289.71094,41.771484 C 289.85936,42.240246 289.93358,42.736339 289.93359,43.259766 C 289.93358,43.783213 289.85936,44.279306 289.71094,44.748047 C 289.56249,45.216805 289.33983,45.666024 289.04297,46.095703 L 291.42188,48.498047 L 290.19141,49.716797 L 287.8125,47.337891 C 287.39062,47.650397 286.9414,47.880865 286.46484,48.029297 C 285.98827,48.17774 285.48046,48.251959 284.94141,48.251953 C 284.3789,48.251959 283.85937,48.17774 283.38281,48.029297 C 282.91406,47.880865 282.47265,47.650397 282.05859,47.337891 L 279.65625,49.716797 L 278.4375,48.498047 L 280.80469,46.095703 C 280.50781,45.673836 280.28515,45.23243 280.13672,44.771484 C 279.99609,44.302744 279.92578,43.798838 279.92578,43.259766 C 279.92578,42.736339 279.99609,42.240246 280.13672,41.771484 C 280.28515,41.294934 280.50781,40.849622 280.80469,40.435547 L 278.4375,38.033203 L 279.65625,36.779297"
+       id="text5928" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 352.875,47.701172 C 352.74217,49.662113 351.98436,51.220706 350.60156,52.376953 C 349.22655,53.533203 347.42968,54.111328 345.21094,54.111328 C 342.65624,54.111328 340.66796,53.314453 339.24609,51.720703 C 337.83203,50.126957 337.125,47.892584 337.125,45.017578 C 337.125,42.08009 337.84765,39.830092 339.29297,38.267578 C 340.73828,36.705095 342.8164,35.923846 345.52734,35.923828 C 347.73046,35.923846 349.46874,36.462908 350.74219,37.541016 C 352.02342,38.611343 352.72655,40.126967 352.85156,42.087891 L 349.34766,42.087891 C 349.19921,41.111341 348.80077,40.369154 348.15234,39.861328 C 347.50389,39.345717 346.6289,39.087905 345.52734,39.087891 C 343.96484,39.087905 342.77734,39.591811 341.96484,40.599609 C 341.15234,41.607434 340.74609,43.080089 340.74609,45.017578 C 340.74609,46.892585 341.14843,48.341802 341.95313,49.365234 C 342.76562,50.388675 343.91796,50.900393 345.41016,50.900391 C 346.48827,50.900393 347.37108,50.626956 348.05859,50.080078 C 348.74608,49.525395 349.19139,48.732427 349.39453,47.701172 L 352.875,47.701172"
+       id="text5946" />
+    <path
+       transform="matrix(1.16233,0,-0.444745,0.860341,0,0)"
+       style="font-size:16.72912407px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 307.52845,53.268758 L 317.31434,53.268758 L 317.31434,54.894293 L 307.52845,54.894293 L 307.52845,53.268758 M 307.52845,49.756296 L 317.31434,49.756296 L 317.31434,51.381831 L 307.52845,51.381831 L 307.52845,49.756296"
+       id="text5956" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 411.45117,50.150391 L 411.45117,46.142578 L 408.63867,50.150391 L 411.45117,50.150391 M 411.45117,53.630859 L 411.45117,51.591797 L 406.98633,51.591797 L 406.98633,49.962891 L 410.90039,44.513672 L 413.51367,44.513672 L 413.51367,50.103516 L 414.73242,50.103516 L 414.73242,51.591797 L 413.51367,51.591797 L 413.51367,53.630859 L 411.45117,53.630859 M 398.58398,54.111328 L 408.7793,36.615234 L 410.70117,36.615234 L 400.48242,54.111328 L 398.58398,54.111328 M 397.78711,46.458984 L 397.78711,40.025391 L 395.26758,40.025391 L 395.26758,38.701172 L 395.44336,38.701172 C 396.36523,38.701187 397.0332,38.576187 397.44727,38.326172 C 397.86914,38.076187 398.11914,37.658219 398.19727,37.072266 L 399.88477,37.072266 L 399.88477,46.458984 L 397.78711,46.458984"
+       id="text5960" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 467.0918,53.630859 C 467.11522,52.779298 467.32225,52.064455 467.71289,51.486328 C 468.11131,50.900393 468.80663,50.31055 469.79883,49.716797 C 469.95506,49.630863 470.16991,49.50977 470.44336,49.353516 C 471.7949,48.595708 472.47068,47.861334 472.4707,47.150391 C 472.47068,46.736335 472.33006,46.40821 472.04883,46.166016 C 471.76756,45.923836 471.38475,45.802742 470.90039,45.802734 C 470.36912,45.802742 469.95506,45.95118 469.6582,46.248047 C 469.36913,46.544929 469.22459,46.966804 469.22461,47.513672 L 469.22461,47.607422 L 467.2793,47.607422 C 467.27928,46.529304 467.6035,45.70118 468.25195,45.123047 C 468.90038,44.537118 469.82616,44.24415 471.0293,44.244141 C 472.12303,44.24415 472.99412,44.505868 473.64258,45.029297 C 474.29881,45.552742 474.62693,46.251961 474.62695,47.126953 C 474.62693,47.751959 474.45506,48.294927 474.11133,48.755859 C 473.77537,49.208989 473.11522,49.72852 472.13086,50.314453 C 471.9199,50.439456 471.63084,50.607425 471.26367,50.818359 C 470.34959,51.341799 469.83397,51.744143 469.7168,52.025391 L 474.50977,52.025391 L 474.50977,53.630859 L 467.0918,53.630859 M 458.68945,54.111328 L 468.88477,36.615234 L 470.80664,36.615234 L 460.58789,54.111328 L 458.68945,54.111328 M 457.89258,46.458984 L 457.89258,40.025391 L 455.37305,40.025391 L 455.37305,38.701172 L 455.54883,38.701172 C 456.4707,38.701187 457.13867,38.576187 457.55273,38.326172 C 457.97461,38.076187 458.22461,37.658219 458.30273,37.072266 L 459.99023,37.072266 L 459.99023,46.458984 L 457.89258,46.458984"
+       id="text5967" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 531.83203,50.150391 L 531.83203,46.142578 L 529.01953,50.150391 L 531.83203,50.150391 M 531.83203,53.630859 L 531.83203,51.591797 L 527.36719,51.591797 L 527.36719,49.962891 L 531.28125,44.513672 L 533.89453,44.513672 L 533.89453,50.103516 L 535.11328,50.103516 L 535.11328,51.591797 L 533.89453,51.591797 L 533.89453,53.630859 L 531.83203,53.630859 M 518.96484,54.111328 L 529.16016,36.615234 L 531.08203,36.615234 L 520.86328,54.111328 L 518.96484,54.111328 M 514.88672,43.599609 L 516.89063,43.599609 C 516.91406,44.130869 517.0625,44.529306 517.33594,44.794922 C 517.61718,45.052743 518.03125,45.181649 518.57813,45.181641 C 519.10937,45.181649 519.51953,45.060555 519.80859,44.818359 C 520.09765,44.568368 520.24218,44.208994 520.24219,43.740234 C 520.24218,43.271495 520.07421,42.919933 519.73828,42.685547 C 519.40234,42.443371 518.90625,42.322277 518.25,42.322266 C 518.20312,42.322277 518.14453,42.326183 518.07422,42.333984 C 518.0039,42.341808 517.94922,42.345714 517.91016,42.345703 L 517.91016,41.033203 L 518.14453,41.033203 C 518.76171,41.033216 519.21484,40.931653 519.50391,40.728516 C 519.80078,40.517591 519.94921,40.193373 519.94922,39.755859 C 519.94921,39.388686 519.82421,39.099624 519.57422,38.888672 C 519.32421,38.669937 518.98437,38.560562 518.55469,38.560547 C 518.08593,38.560562 517.72265,38.685562 517.46484,38.935547 C 517.21484,39.177749 517.08984,39.525405 517.08984,39.978516 L 517.08984,40.048828 L 515.08594,40.048828 C 515.10156,39.087905 515.41797,38.353531 516.03516,37.845703 C 516.65234,37.330094 517.52343,37.072282 518.64844,37.072266 C 519.70312,37.072282 520.53906,37.302751 521.15625,37.763672 C 521.77343,38.216812 522.08202,38.833999 522.08203,39.615234 C 522.08202,40.02931 521.97655,40.392591 521.76563,40.705078 C 521.55468,41.009778 521.23827,41.263684 520.81641,41.466797 C 521.36327,41.677746 521.77343,41.970715 522.04688,42.345703 C 522.32812,42.712902 522.46874,43.154307 522.46875,43.669922 C 522.46874,44.607431 522.11718,45.349618 521.41406,45.896484 C 520.71874,46.443367 519.77343,46.716804 518.57813,46.716797 C 517.39062,46.716804 516.47656,46.451179 515.83594,45.919922 C 515.20312,45.380868 514.88672,44.615243 514.88672,43.623047 L 514.88672,43.599609"
+       id="text5973" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 586.63477,39.404297 L 586.63477,42.498047 L 583.36523,42.498047 L 583.36523,39.474609 C 583.36523,38.482437 583.66992,37.654313 584.2793,36.990234 C 584.88867,36.326189 585.67382,35.970721 586.63477,35.923828 L 586.63477,37.119141 C 586.04101,37.259782 585.59961,37.509782 585.31055,37.869141 C 585.02148,38.220719 584.87695,38.681656 584.87695,39.251953 L 584.87695,39.404297 L 586.63477,39.404297"
+       id="text5979" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 643.36523,39.474609 L 643.36523,36.369141 L 646.63477,36.369141 L 646.63477,39.427734 C 646.63476,40.412123 646.33007,41.240247 645.7207,41.912109 C 645.11132,42.576183 644.32617,42.931651 643.36523,42.978516 L 643.36523,41.771484 C 643.95898,41.630871 644.39648,41.384778 644.67773,41.033203 C 644.96679,40.673841 645.11132,40.201185 645.11133,39.615234 L 645.11133,39.474609 L 643.36523,39.474609"
+       id="text5985" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 706.89258,53.630859 L 703.50586,53.630859 L 703.50586,47.560547 L 703.27148,47.150391 L 698.00977,47.150391 L 698.00977,45.826172 L 702.49805,45.826172 L 701.64258,44.337891 L 698.00977,44.337891 L 698.00977,43.025391 L 700.86914,43.025391 L 697.61133,37.330078 L 701.41992,37.330078 L 705.19336,44.724609 L 708.69727,37.330078 L 712.27148,37.330078 L 709.27148,43.025391 L 712.00195,43.025391 L 712.00195,44.337891 L 708.58008,44.337891 L 707.7832,45.826172 L 712.00195,45.826172 L 712.00195,47.150391 L 707.0918,47.150391 L 706.89258,47.560547 L 706.89258,53.630859"
+       id="text5991" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 764.97656,19.306641 C 765.46093,19.306645 765.8789,19.482426 766.23047,19.833984 C 766.58202,20.18555 766.7578,20.603519 766.75781,21.087891 C 766.7578,21.564455 766.58202,21.974611 766.23047,22.318359 C 765.8789,22.66211 765.46093,22.833985 764.97656,22.833984 C 764.48437,22.833985 764.06249,22.666017 763.71094,22.330078 C 763.36718,21.994142 763.1953,21.58008 763.19531,21.087891 C 763.1953,20.595706 763.36718,20.177738 763.71094,19.833984 C 764.06249,19.482426 764.48437,19.306645 764.97656,19.306641 M 757.94531,15.298828 L 771.98438,15.298828 L 771.98438,17.630859 L 757.94531,17.630859 L 757.94531,15.298828 M 764.97656,10.095703 C 765.46093,10.095717 765.8789,10.271498 766.23047,10.623047 C 766.58202,10.96681 766.7578,11.380872 766.75781,11.865234 C 766.7578,12.357433 766.58202,12.779308 766.23047,13.130859 C 765.88671,13.47462 765.46874,13.646494 764.97656,13.646484 C 764.48437,13.646494 764.06249,13.47462 763.71094,13.130859 C 763.36718,12.779308 763.1953,12.357433 763.19531,11.865234 C 763.1953,11.373059 763.36718,10.955091 763.71094,10.611328 C 764.06249,10.267591 764.48437,10.095717 764.97656,10.095703 M 759.84375,39.544922 L 765.11719,44.818359 L 770.40234,39.544922 L 772.05469,41.173828 L 766.78125,46.482422 L 772.05469,51.755859 L 770.40234,53.396484 L 765.11719,48.111328 L 759.84375,53.396484 L 758.20313,51.755859 L 763.48828,46.482422 L 758.20313,41.173828 L 759.84375,39.544922"
+       id="text5997" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 134.9707,69.826172 L 132.58008,77.173828 L 137.37305,77.173828 L 134.9707,69.826172 M 132.9082,66.369141 L 137.00977,66.369141 L 143.23242,83.630859 L 139.50586,83.630859 L 138.33398,80.080078 L 131.64258,80.080078 L 130.50586,83.630859 L 126.76758,83.630859 L 132.9082,66.369141 M 135.70898,64.166016 L 135.70898,61.283203 L 138.35742,61.283203 L 138.35742,64.166016 L 135.70898,64.166016 M 131.63086,64.166016 L 131.63086,61.283203 L 134.2793,61.283203 L 134.2793,64.166016 L 131.63086,64.166016"
+       id="text6003" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 194.9707,62.126953 C 194.5957,62.126975 194.27538,62.267599 194.00977,62.548828 C 193.74413,62.822286 193.61132,63.154317 193.61133,63.544922 C 193.61132,63.927754 193.74023,64.251973 193.99805,64.517578 C 194.26366,64.783222 194.58788,64.916034 194.9707,64.916016 C 195.36132,64.916034 195.69335,64.783222 195.9668,64.517578 C 196.24804,64.24416 196.38866,63.919942 196.38867,63.544922 C 196.38866,63.16213 196.24804,62.830099 195.9668,62.548828 C 195.69335,62.267599 195.36132,62.126975 194.9707,62.126953 M 194.9707,60.521484 C 195.81444,60.521507 196.52929,60.814476 197.11523,61.400391 C 197.70116,61.978537 197.99413,62.685568 197.99414,63.521484 C 197.99413,64.357441 197.70116,65.068378 197.11523,65.654297 C 196.52929,66.232439 195.81444,66.521501 194.9707,66.521484 C 194.13476,66.521501 193.42773,66.232439 192.84961,65.654297 C 192.27929,65.07619 191.99414,64.365254 191.99414,63.521484 C 191.99414,62.677755 192.27929,61.966819 192.84961,61.388672 C 193.42773,60.81057 194.13476,60.521507 194.9707,60.521484 M 192.7207,67.072266 L 197.23242,67.072266 L 203.23242,83.630859 L 199.50586,83.630859 L 198.33398,80.080078 L 191.64258,80.080078 L 190.50586,83.630859 L 186.76758,83.630859 L 192.7207,67.072266 M 194.9707,69.826172 L 192.58008,77.173828 L 197.37305,77.173828 L 194.9707,69.826172"
+       id="text6007" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 248.52539,83.630859 L 248.52539,66.369141 L 261.05273,66.369141 L 261.05273,69.369141 L 252.0293,69.369141 L 252.0293,73.048828 L 260.2793,73.048828 L 260.2793,76.001953 L 252.0293,76.001953 L 252.0293,80.443359 L 261.47461,80.443359 L 261.47461,83.630859 L 248.52539,83.630859 M 258.24023,60.521484 L 254.57227,64.857422 L 252.9082,64.857422 L 255.2168,60.521484 L 258.24023,60.521484"
+       id="text6011" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 313.72266,101.49056 L 313.72266,104.29134 L 314.88281,104.29134 C 315.5703,104.29135 316.07421,104.18198 316.39453,103.96322 C 316.71483,103.74448 316.87499,103.40073 316.875,102.93197 C 316.87499,102.43979 316.70311,102.07651 316.35938,101.84212 C 316.01561,101.60776 315.48436,101.49057 314.76563,101.49056 L 313.72266,101.49056 M 311.37891,100.00228 L 315.16406,100.00228 C 316.53905,100.00229 317.5703,100.23667 318.25781,100.70541 C 318.95311,101.16636 319.30077,101.85776 319.30078,102.77962 C 319.30077,103.42026 319.11327,103.96713 318.73828,104.42025 C 318.36327,104.87338 317.84374,105.18198 317.17969,105.34603 L 319.34766,109.67025 L 316.72266,109.67025 L 314.88281,105.70931 L 313.72266,105.70931 L 313.72266,109.67025 L 311.37891,109.67025 L 311.37891,100.00228 M 315,97.717125 C 314.0078,97.717141 313.08593,97.892922 312.23438,98.244469 C 311.38281,98.588234 310.61718,99.099952 309.9375,99.779625 C 309.22656,100.49058 308.67968,101.29917 308.29688,102.20541 C 307.91406,103.10385 307.72265,104.03354 307.72266,104.99447 C 307.72265,105.96323 307.90234,106.8851 308.26172,107.76009 C 308.62109,108.62729 309.14062,109.40072 309.82031,110.08041 C 310.51562,110.79135 311.30859,111.33822 312.19922,111.72103 C 313.08984,112.09603 314.01562,112.28353 314.97656,112.28353 C 315.91405,112.28353 316.82421,112.09994 317.70703,111.73275 C 318.59764,111.36556 319.40624,110.83822 320.13281,110.15072 C 320.81248,109.49447 321.33983,108.72885 321.71484,107.85384 C 322.08983,106.97885 322.27733,106.0726 322.27734,105.13509 C 322.27733,104.09604 322.10155,103.13901 321.75,102.264 C 321.40623,101.38901 320.89061,100.60386 320.20313,99.908531 C 319.49999,99.181983 318.70702,98.635109 317.82422,98.267906 C 316.94921,97.900734 316.0078,97.717141 315,97.717125 M 314.97656,96.275719 C 316.17968,96.275736 317.31249,96.502298 318.375,96.955406 C 319.4453,97.400735 320.39842,98.049172 321.23438,98.900719 C 322.03905,99.713233 322.65233,100.64292 323.07422,101.68978 C 323.49608,102.73667 323.70701,103.84604 323.70703,105.01791 C 323.70701,106.20541 323.48826,107.33041 323.05078,108.39291 C 322.61326,109.4476 321.97655,110.37728 321.14063,111.18197 C 320.30467,112.00228 319.35155,112.63119 318.28125,113.06869 C 317.21874,113.50619 316.11718,113.72494 314.97656,113.72494 C 313.81249,113.72494 312.69921,113.49838 311.63672,113.04525 C 310.57421,112.59213 309.625,111.93978 308.78906,111.08822 C 307.97656,110.26791 307.35547,109.33822 306.92578,108.29916 C 306.5039,107.25229 306.29297,106.15854 306.29297,105.01791 C 306.29297,104.22104 306.39844,103.4476 306.60938,102.69759 C 306.82031,101.93979 307.13672,101.20151 307.55859,100.48275 C 308.34765,99.154639 309.39062,98.12339 310.6875,97.389 C 311.98437,96.646829 313.41405,96.275736 314.97656,96.275719"
+       id="text6015" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 372.0293,69.064453 L 376.06055,69.064453 C 377.84179,69.064468 379.18944,69.505874 380.10352,70.388672 C 381.01756,71.263684 381.47459,72.556652 381.47461,74.267578 C 381.47459,75.939461 381.02538,77.228522 380.12695,78.134766 C 379.23632,79.033208 377.95897,79.482426 376.29492,79.482422 L 372.0293,79.482422 L 372.0293,83.630859 L 368.52539,83.630859 L 368.52539,66.369141 L 372.0293,66.369141 L 372.0293,69.064453 M 372.05273,76.599609 L 375.47461,76.599609 C 376.4121,76.599616 377.09179,76.416023 377.51367,76.048828 C 377.93554,75.673836 378.14647,75.080087 378.14648,74.267578 C 378.14647,73.509776 377.93554,72.939464 377.51367,72.556641 C 377.09179,72.166027 376.47069,71.970715 375.65039,71.970703 L 372.05273,71.970703 L 372.05273,76.599609"
+       id="text6019" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 428.08594,66.322266 L 431.67188,66.322266 L 431.67188,77.150391 C 431.67187,78.486333 431.93749,79.462895 432.46875,80.080078 C 432.99999,80.689456 433.84374,80.994143 435,80.994141 C 436.17187,80.994143 437.02343,80.689456 437.55469,80.080078 C 438.09374,79.470707 438.36327,78.494146 438.36328,77.150391 L 438.36328,66.322266 L 441.91406,66.322266 L 441.91406,77.537109 C 441.91405,79.654301 441.3203,81.279299 440.13281,82.412109 C 438.95311,83.544922 437.24999,84.111328 435.02344,84.111328 C 432.78124,84.111328 431.0625,83.548828 429.86719,82.423828 C 428.67969,81.291018 428.08594,79.662113 428.08594,77.537109 L 428.08594,66.322266 M 435.73828,64.166016 L 435.73828,61.283203 L 438.38672,61.283203 L 438.38672,64.166016 L 435.73828,64.166016 M 431.66016,64.166016 L 431.66016,61.283203 L 434.30859,61.283203 L 434.30859,64.166016 L 431.66016,64.166016"
+       id="text6023" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 488.08594,66.105469 L 491.67188,66.105469 L 491.67188,76.933594 C 491.67187,78.269536 491.93749,79.246098 492.46875,79.863281 C 492.99999,80.472659 493.84374,80.777346 495,80.777344 C 496.17187,80.777346 497.02343,80.472659 497.55469,79.863281 C 498.09374,79.25391 498.36327,78.277349 498.36328,76.933594 L 498.36328,66.105469 L 501.91406,66.105469 L 501.91406,77.320313 C 501.91405,79.437504 501.3203,81.062502 500.13281,82.195313 C 498.95311,83.328125 497.24999,83.894531 495.02344,83.894531 C 492.78124,83.894531 491.0625,83.332031 489.86719,82.207031 C 488.67969,81.074221 488.08594,79.445316 488.08594,77.320313 L 488.08594,66.105469 M 498.45703,60.304688 L 494.78906,64.640625 L 493.125,64.640625 L 495.43359,60.304688 L 498.45703,60.304688"
+       id="text6029" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 552.43945,83.630859 L 552.43945,66.369141 L 555.99023,66.369141 L 555.99023,83.630859 L 552.43945,83.630859 M 557.66602,60.521484 L 553.99805,64.857422 L 552.33398,64.857422 L 554.64258,60.521484 L 557.66602,60.521484"
+       id="text6033" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 610.18359,75 C 610.18359,76.898444 610.60546,78.375005 611.44922,79.429688 C 612.29296,80.476566 613.47265,81.000003 614.98828,81 C 616.51952,81.000003 617.71093,80.476566 618.5625,79.429688 C 619.41405,78.375005 619.83983,76.898444 619.83984,75 C 619.83983,73.101573 619.41405,71.628918 618.5625,70.582031 C 617.71093,69.527358 616.51952,69.000015 614.98828,69 C 613.47265,69.000015 612.29296,69.523452 611.44922,70.570313 C 610.60546,71.617199 610.18359,73.093761 610.18359,75 M 606.5625,75 C 606.5625,72.210949 607.32031,70.000014 608.83594,68.367188 C 610.35937,66.726579 612.41015,65.906268 614.98828,65.90625 C 617.56639,65.906268 619.61717,66.726579 621.14063,68.367188 C 622.67186,70.007826 623.43748,72.218761 623.4375,75 C 623.43748,77.781256 622.67186,79.992191 621.14063,81.632813 C 619.61717,83.273438 617.56639,84.09375 614.98828,84.09375 C 612.41015,84.09375 610.35937,83.273438 608.83594,81.632813 C 607.32031,79.992191 606.5625,77.781256 606.5625,75 M 618.44531,60.503906 L 614.77734,64.839844 L 613.11328,64.839844 L 615.42188,60.503906 L 618.44531,60.503906"
+       id="text6037" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 670.18359,75.017578 C 670.18359,76.916022 670.60546,78.392583 671.44922,79.447266 C 672.29296,80.494144 673.47265,81.017581 674.98828,81.017578 C 676.51952,81.017581 677.71093,80.494144 678.5625,79.447266 C 679.41405,78.392583 679.83983,76.916022 679.83984,75.017578 C 679.83983,73.119151 679.41405,71.646496 678.5625,70.599609 C 677.71093,69.544936 676.51952,69.017593 674.98828,69.017578 C 673.47265,69.017593 672.29296,69.54103 671.44922,70.587891 C 670.60546,71.634778 670.18359,73.111339 670.18359,75.017578 M 666.5625,75.017578 C 666.5625,72.228527 667.32031,70.017592 668.83594,68.384766 C 670.35937,66.744158 672.41015,65.923846 674.98828,65.923828 C 677.56639,65.923846 679.61717,66.744158 681.14063,68.384766 C 682.67186,70.025404 683.43748,72.23634 683.4375,75.017578 C 683.43748,77.798834 682.67186,80.009769 681.14063,81.650391 C 679.61717,83.291016 677.56639,84.111328 674.98828,84.111328 C 672.41015,84.111328 670.35937,83.291016 668.83594,81.650391 C 667.32031,80.009769 666.5625,77.798834 666.5625,75.017578 M 675.72656,64.166016 L 675.72656,61.283203 L 678.375,61.283203 L 678.375,64.166016 L 675.72656,64.166016 M 671.64844,64.166016 L 671.64844,61.283203 L 674.29688,61.283203 L 674.29688,64.166016 L 671.64844,64.166016"
+       id="text6041" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 735.5332,106.35352 L 735.5332,103.35352 L 739.44727,99.966797 L 739.44727,102.75586 L 737.04492,104.8418 L 739.44727,106.92773 L 739.44727,109.74023 L 735.5332,106.35352 M 730.4707,106.35352 L 730.4707,103.35352 L 734.4082,99.966797 L 734.4082,102.75586 L 732.00586,104.8418 L 734.4082,106.92773 L 734.4082,109.74023 L 730.4707,106.35352"
+       id="text6045" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 799.44727,103.3418 L 799.44727,106.3418 L 795.5332,109.72852 L 795.5332,106.93945 L 797.93555,104.83008 L 795.5332,102.76758 L 795.5332,99.955078 L 799.44727,103.3418 M 794.4082,103.3418 L 794.4082,106.3418 L 790.4707,109.72852 L 790.4707,106.93945 L 792.86133,104.83008 L 790.4707,102.76758 L 790.4707,99.955078 L 794.4082,103.3418"
+       id="text6051" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 883.81641,76.535881 L 886.23047,76.535881 L 886.23047,85.418694 L 883.81641,85.418694 L 883.81641,76.535881 M 883.81641,64.535881 L 886.23047,64.535881 L 886.23047,73.418694 L 883.81641,73.418694 L 883.81641,64.535881 M 877.98047,101.19213 L 892.01953,101.19213 L 892.01953,107.07494 L 889.6875,107.07494 L 889.6875,103.48901 L 877.98047,103.48901 L 877.98047,101.19213"
+       id="text6057" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 149.9707,129.82617 L 147.58008,137.17383 L 152.37305,137.17383 L 149.9707,129.82617 M 147.9082,126.36914 L 152.00977,126.36914 L 158.23242,143.63086 L 154.50586,143.63086 L 153.33398,140.08008 L 146.64258,140.08008 L 145.50586,143.63086 L 141.76758,143.63086 L 147.9082,126.36914 M 153.42773,120.52148 L 149.75977,124.85742 L 148.0957,124.85742 L 150.4043,120.52148 L 153.42773,120.52148"
+       id="text6065" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 211.40625,137.91797 C 211.71874,137.73829 211.95312,137.53907 212.10938,137.32031 C 212.26562,137.10157 212.34374,136.86719 212.34375,136.61719 C 212.34374,136.31251 212.2539,136.0547 212.07422,135.84375 C 211.89452,135.62501 211.52343,135.3711 210.96094,135.08203 L 207.85547,133.47656 C 207.55078,133.65626 207.3164,133.85938 207.15234,134.08594 C 206.99609,134.31251 206.91797,134.5547 206.91797,134.8125 C 206.91797,135.1172 207.03125,135.38673 207.25781,135.62109 C 207.49218,135.84766 208.0039,136.16407 208.79297,136.57031 L 211.40625,137.91797 M 205.03125,141.75 L 207.92578,141.75 C 207.98828,142.35938 208.16796,142.8125 208.46484,143.10938 C 208.76953,143.40625 209.19921,143.55469 209.75391,143.55469 C 210.26952,143.55469 210.67968,143.43359 210.98438,143.19141 C 211.28905,142.94141 211.4414,142.60547 211.44141,142.18359 C 211.4414,141.83985 211.32812,141.54297 211.10156,141.29297 C 210.87499,141.03516 210.42577,140.74219 209.75391,140.41406 L 206.95313,138.99609 C 206.0625,138.55079 205.39844,138.03907 204.96094,137.46094 C 204.52344,136.88282 204.30469,136.23438 204.30469,135.51563 C 204.30469,134.82032 204.47266,134.21095 204.80859,133.6875 C 205.15234,133.15626 205.65625,132.71485 206.32031,132.36328 C 205.92969,132.01173 205.64062,131.62892 205.45313,131.21484 C 205.26562,130.79298 205.17187,130.32814 205.17188,129.82031 C 205.17187,128.64845 205.57422,127.70705 206.37891,126.99609 C 207.18359,126.27736 208.2539,125.91799 209.58984,125.91797 C 210.96484,125.91799 212.04296,126.26955 212.82422,126.97266 C 213.60546,127.6758 214.0078,128.64845 214.03125,129.89063 L 211.26563,129.89063 C 211.24999,129.3672 211.09374,128.96876 210.79688,128.69531 C 210.50781,128.42189 210.08984,128.28517 209.54297,128.28516 C 209.05859,128.28517 208.68359,128.39064 208.41797,128.60156 C 208.16015,128.81251 208.03125,129.10939 208.03125,129.49219 C 208.03125,129.8047 208.18359,130.09767 208.48828,130.37109 C 208.80078,130.63673 209.35937,130.95704 210.16406,131.33203 L 212.13281,132.24609 C 213.1328,132.72267 213.87108,133.25392 214.34766,133.83984 C 214.82421,134.41798 215.06249,135.08595 215.0625,135.84375 C 215.06249,136.55469 214.8828,137.17579 214.52344,137.70703 C 214.17186,138.23047 213.66405,138.63672 213,138.92578 C 213.45312,139.32422 213.79296,139.76563 214.01953,140.25 C 214.24608,140.73438 214.35936,141.26563 214.35938,141.84375 C 214.35936,143.04688 213.92968,144.03906 213.07031,144.82031 C 212.21093,145.60937 211.10546,146.0039 209.75391,146.00391 C 208.26953,146.0039 207.1289,145.64453 206.33203,144.92578 C 205.53515,144.20703 205.10156,143.14844 205.03125,141.75 M 203.97656,173.625 L 203.97656,160.59375 C 203.97656,159.29689 204.48047,158.25002 205.48828,157.45313 C 206.49609,156.64845 207.83984,156.24611 209.51953,156.24609 C 211.23046,156.24611 212.5703,156.63674 213.53906,157.41797 C 214.5078,158.19923 214.99217,159.27345 214.99219,160.64063 C 214.99217,161.48439 214.84764,162.17579 214.55859,162.71484 C 214.27733,163.25392 213.83983,163.66798 213.24609,163.95703 C 214.16796,164.32423 214.85936,164.86329 215.32031,165.57422 C 215.78905,166.28516 216.02342,167.16016 216.02344,168.19922 C 216.02342,169.94922 215.51952,171.36328 214.51172,172.44141 C 213.5039,173.51953 212.18358,174.05859 210.55078,174.05859 C 210.32421,174.05859 210.0703,174.04687 209.78906,174.02344 C 209.51562,174 209.21874,173.96484 208.89844,173.91797 L 208.89844,171.17578 C 208.99999,171.19141 209.10156,171.20313 209.20313,171.21094 C 209.31249,171.21875 209.47265,171.22266 209.68359,171.22266 C 210.60546,171.22266 211.3164,170.96875 211.81641,170.46094 C 212.3164,169.94532 212.5664,169.21485 212.56641,168.26953 C 212.5664,167.35548 212.29296,166.66016 211.74609,166.18359 C 211.20702,165.70704 210.41796,165.46876 209.37891,165.46875 L 209.0625,165.46875 L 209.07422,163.06641 C 209.12109,163.07423 209.17187,163.08204 209.22656,163.08984 C 209.28124,163.08985 209.36327,163.08985 209.47266,163.08984 C 210.16796,163.08985 210.6953,162.91798 211.05469,162.57422 C 211.42187,162.22267 211.60546,161.71486 211.60547,161.05078 C 211.60546,160.38673 211.41405,159.88283 211.03125,159.53906 C 210.65624,159.18751 210.10546,159.01173 209.37891,159.01172 C 208.70703,159.01173 208.19531,159.20705 207.84375,159.59766 C 207.49218,159.98048 207.3164,160.54298 207.31641,161.28516 L 207.31641,173.625 L 203.97656,173.625"
+       id="text6073" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 267.09961,140.51367 L 269.94727,140.51367 C 271.60351,140.51367 272.80272,140.08008 273.54492,139.21289 C 274.2871,138.34571 274.65819,136.94727 274.6582,135.01758 C 274.65819,133.09571 274.31053,131.68165 273.61523,130.77539 C 272.92772,129.86134 271.8496,129.40431 270.38086,129.4043 L 267.09961,129.4043 L 267.09961,133.23633 L 270.88477,133.23633 L 270.88477,135.47461 L 267.09961,135.47461 L 267.09961,140.51367 M 263.61914,143.63086 L 263.61914,135.47461 L 261.74414,135.47461 L 261.74414,133.23633 L 263.61914,133.23633 L 263.61914,126.36914 L 270.4043,126.36914 C 273.04491,126.36916 275.01366,127.084 276.31055,128.51367 C 277.60741,129.93556 278.25584,132.10353 278.25586,135.01758 C 278.25584,136.60352 278.01756,137.99805 277.54102,139.20117 C 277.07225,140.4043 276.38084,141.36914 275.4668,142.0957 C 274.77928,142.64258 273.99413,143.03711 273.11133,143.2793 C 272.23632,143.51367 271.00585,143.63086 269.41992,143.63086 L 263.61914,143.63086"
+       id="text6077" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 626.72461,139.55273 C 627.17773,140.04493 627.68945,140.41211 628.25977,140.6543 C 628.83007,140.89649 629.47069,141.01758 630.18164,141.01758 C 631.71288,141.01758 632.90428,140.49414 633.75586,139.44727 C 634.60741,138.39258 635.03319,136.91602 635.0332,135.01758 C 635.03319,134.24415 634.96288,133.54493 634.82227,132.91992 C 634.68163,132.28712 634.4785,131.73634 634.21289,131.26758 L 626.72461,139.55273 M 625.98633,138.36914 L 633.39258,130.21289 C 632.9785,129.81447 632.50585,129.51759 631.97461,129.32227 C 631.44335,129.11916 630.84569,129.01759 630.18164,129.01758 C 628.66601,129.01759 627.48632,129.54103 626.64258,130.58789 C 625.79882,131.63478 625.37695,133.11134 625.37695,135.01758 C 625.37695,135.72071 625.42382,136.34571 625.51758,136.89258 C 625.61914,137.43946 625.77539,137.93165 625.98633,138.36914 M 621.36914,143.36133 L 623.51367,140.9707 C 622.91992,140.16602 622.47851,139.27149 622.18945,138.28711 C 621.90039,137.29493 621.75586,136.20509 621.75586,135.01758 C 621.75586,132.22853 622.51367,130.01759 624.0293,128.38477 C 625.55273,126.74416 627.60351,125.92385 630.18164,125.92383 C 631.28319,125.92385 632.27147,126.06447 633.14648,126.3457 C 634.02928,126.62697 634.84178,127.06056 635.58398,127.64648 L 637.30664,125.70117 L 638.45508,126.73242 L 636.63867,128.70117 C 637.30272,129.5215 637.79881,130.45509 638.12695,131.50195 C 638.46287,132.54884 638.63084,133.72071 638.63086,135.01758 C 638.63084,137.79883 637.86912,140.00977 636.3457,141.65039 C 634.82225,143.29102 632.76757,144.11133 630.18164,144.11133 C 629.01757,144.11133 627.96679,143.94727 627.0293,143.61914 C 626.0996,143.29102 625.26367,142.79102 624.52148,142.11914 L 622.50586,144.4043 L 621.36914,143.36133"
+       id="text6081" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 690,127.98633 C 689.42968,127.98634 688.9414,128.18556 688.53516,128.58398 C 688.13672,128.98244 687.9375,129.4629 687.9375,130.02539 C 687.9375,130.60353 688.13672,131.09181 688.53516,131.49023 C 688.93359,131.88868 689.42187,132.0879 690,132.08789 C 690.5625,132.0879 691.04296,131.88478 691.44141,131.47852 C 691.83984,131.07228 692.03906,130.5879 692.03906,130.02539 C 692.03906,129.4629 691.83984,128.98244 691.44141,128.58398 C 691.04296,128.18556 690.5625,127.98634 690,127.98633 M 690,126.47461 C 690.98437,126.47463 691.82031,126.82619 692.50781,127.5293 C 693.20312,128.22462 693.55077,129.06447 693.55078,130.04883 C 693.55077,131.0254 693.20312,131.86134 692.50781,132.55664 C 691.81249,133.25196 690.96875,133.59962 689.97656,133.59961 C 688.99218,133.59962 688.15625,133.25587 687.46875,132.56836 C 686.78906,131.88087 686.44922,131.04103 686.44922,130.04883 C 686.44922,129.05666 686.79297,128.21291 687.48047,127.51758 C 688.17578,126.82228 689.01562,126.47463 690,126.47461 M 695.51953,156.29883 L 695.51953,157.59961 L 694.19531,157.59961 L 694.19531,173.63086 L 692.42578,173.63086 L 692.42578,157.59961 L 690.57422,157.59961 L 690.57422,173.63086 L 688.78125,173.63086 L 688.78125,164.44336 C 687.47656,164.39649 686.43359,164.00196 685.65234,163.25977 C 684.87109,162.51759 684.48047,161.56056 684.48047,160.38867 C 684.48047,159.15431 684.89844,158.16603 685.73438,157.42383 C 686.57031,156.67385 687.67968,156.29885 689.0625,156.29883 L 695.51953,156.29883"
+       id="text6085" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 373.13672,6.5214844 L 376.08984,6.5214844 L 381.72656,13.095703 L 378.97266,13.095703 L 374.625,8.7480469 L 370.25391,13.095703 L 367.5,13.095703 L 373.13672,6.5214844"
+       id="text6091" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 750.67969,128.67773 L 750.67969,125.79492 L 753.32813,125.79492 L 753.32813,128.67773 L 750.67969,128.67773 M 746.60156,128.67773 L 746.60156,125.79492 L 749.25,125.79492 L 749.25,128.67773 L 746.60156,128.67773 M 753.39844,155.0332 L 749.73047,159.36914 L 748.06641,159.36914 L 750.375,155.0332 L 753.39844,155.0332"
+       id="text6099" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 171.07031,197.29102 L 175.92188,197.29102 L 175.92188,189.29883 L 173.97656,189.29883 L 171.07031,197.29102 M 165,203.63086 L 171.80859,186.36914 L 187.81641,186.36914 L 187.81641,189.36914 L 179.34375,189.36914 L 179.34375,193.04883 L 187.05469,193.04883 L 187.05469,196.00195 L 179.34375,196.00195 L 179.34375,200.44336 L 188.25,200.44336 L 188.25,203.63086 L 175.92188,203.63086 L 175.92188,200.08008 L 170.0625,200.08008 L 168.76172,203.63086 L 165,203.63086"
+       id="text6105" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 300.46875,193.23633 C 300.32031,193.22071 300.20312,193.20899 300.11719,193.20117 C 300.03906,193.19337 299.96484,193.18946 299.89453,193.18945 C 299.05859,193.18946 298.42578,193.53321 297.99609,194.2207 C 297.5664,194.90821 297.35156,195.92384 297.35156,197.26758 C 297.35156,198.04102 297.4375,198.70899 297.60938,199.27148 C 297.78906,199.83399 298.04687,200.28711 298.38281,200.63086 L 300.46875,193.23633 M 296.68359,206.49023 L 297.48047,203.63086 C 296.30859,203.13867 295.42187,202.35352 294.82031,201.27539 C 294.21875,200.19727 293.91797,198.85352 293.91797,197.24414 C 293.91797,195.11134 294.45312,193.43946 295.52344,192.22852 C 296.60156,191.01759 298.07421,190.41212 299.94141,190.41211 C 300.15234,190.41212 300.35937,190.41994 300.5625,190.43555 C 300.76562,190.45119 300.96874,190.47462 301.17188,190.50586 L 301.69922,188.56055 L 302.97656,188.56055 L 302.34375,190.78711 C 303.32811,191.09181 304.09765,191.63478 304.65234,192.41602 C 305.20702,193.18946 305.52733,194.17774 305.61328,195.38086 L 302.32031,195.36914 C 302.28124,194.98634 302.1914,194.65821 302.05078,194.38477 C 301.91796,194.10353 301.72265,193.85743 301.46484,193.64648 L 299.36719,201.13477 C 299.38281,201.13477 299.40624,201.13867 299.4375,201.14648 C 299.67187,201.16992 299.85156,201.18164 299.97656,201.18164 C 300.66406,201.18164 301.19921,200.99024 301.58203,200.60742 C 301.97265,200.22461 302.23437,199.62305 302.36719,198.80273 L 305.66016,198.80273 C 305.54296,200.41993 304.96874,201.70117 303.9375,202.64648 C 302.91405,203.5918 301.59374,204.06445 299.97656,204.06445 C 299.76562,204.06445 299.55077,204.05664 299.33203,204.04102 C 299.11328,204.02539 298.88671,204.00195 298.65234,203.9707 L 297.96094,206.49023 L 296.68359,206.49023 M 304.19531,223.0957 L 301.99219,223.0957 C 301.92968,222.54884 301.72264,222.12696 301.37109,221.83008 C 301.01952,221.5254 300.55468,221.37306 299.97656,221.37305 C 299.26562,221.37306 298.70702,221.69337 298.30078,222.33398 C 297.89452,222.96681 297.6914,223.85353 297.69141,224.99414 C 297.6914,226.14259 297.89452,227.01758 298.30078,227.61914 C 298.70702,228.22071 299.29687,228.52149 300.07031,228.52148 C 300.64061,228.52149 301.09765,228.35743 301.44141,228.0293 C 301.78514,227.70118 301.99218,227.23633 302.0625,226.63477 L 304.32422,226.62305 C 304.2617,227.70899 303.83592,228.58008 303.04688,229.23633 C 302.2578,229.89258 301.24218,230.22071 300,230.2207 C 298.54687,230.22071 297.39843,229.75977 296.55469,228.83789 C 295.71874,227.91602 295.30078,226.65821 295.30078,225.06445 C 295.30078,223.45509 295.72656,222.17384 296.57813,221.2207 C 297.43749,220.25978 298.58593,219.77931 300.02344,219.7793 C 301.21093,219.77931 302.18749,220.084 302.95313,220.69336 C 303.72655,221.30275 304.14061,222.10353 304.19531,223.0957 M 300,217.7168 C 298.99999,217.71681 298.06249,217.8965 297.1875,218.25586 C 296.32031,218.61525 295.54687,219.13869 294.86719,219.82617 C 294.17187,220.52931 293.64062,221.32618 293.27344,222.2168 C 292.90625,223.09962 292.72265,224.0254 292.72266,224.99414 C 292.72265,225.97071 292.90625,226.89649 293.27344,227.77148 C 293.64062,228.64649 294.17187,229.43164 294.86719,230.12695 C 295.55468,230.81446 296.33984,231.3418 297.22266,231.70898 C 298.10546,232.07617 299.03124,232.25977 300,232.25977 C 300.96874,232.25977 301.89452,232.07617 302.77734,231.70898 C 303.66796,231.3418 304.46874,230.80664 305.17969,230.10352 C 305.86717,229.43164 306.3867,228.66211 306.73828,227.79492 C 307.09764,226.92774 307.27733,225.99415 307.27734,224.99414 C 307.27733,224.00978 307.09373,223.08009 306.72656,222.20508 C 306.36717,221.32228 305.84373,220.53712 305.15625,219.84961 C 304.46092,219.15431 303.67577,218.62697 302.80078,218.26758 C 301.92577,217.90041 300.99218,217.71681 300,217.7168 M 299.97656,216.27539 C 301.16405,216.27541 302.28514,216.49416 303.33984,216.93164 C 304.40233,217.36916 305.35155,218.00587 306.1875,218.8418 C 307.0078,219.66212 307.63279,220.60353 308.0625,221.66602 C 308.49217,222.72071 308.70701,223.8379 308.70703,225.01758 C 308.70701,226.20509 308.49217,227.31446 308.0625,228.3457 C 307.64061,229.37696 307.01561,230.29883 306.1875,231.11133 C 305.3203,231.95508 304.35155,232.60352 303.28125,233.05664 C 302.21093,233.50195 301.10936,233.72461 299.97656,233.72461 C 298.82812,233.72461 297.73046,233.50586 296.68359,233.06836 C 295.64453,232.62305 294.70312,231.97852 293.85938,231.13477 C 293.02343,230.30664 292.38672,229.36914 291.94922,228.32227 C 291.51172,227.26758 291.29297,226.16602 291.29297,225.01758 C 291.29297,223.85353 291.51172,222.74415 291.94922,221.68945 C 292.38672,220.62697 293.02343,219.66994 293.85938,218.81836 C 294.67968,217.99025 295.60937,217.36134 296.64844,216.93164 C 297.68749,216.49416 298.79687,216.27541 299.97656,216.27539"
+       id="text6109" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 472.88672,203.63086 L 472.88672,186.36914 L 476.60156,186.36914 L 483.60938,198.22852 L 483.60938,186.36914 L 487.11328,186.36914 L 487.11328,203.63086 L 483.44531,203.63086 L 476.39063,191.77148 L 476.39063,203.63086 L 472.88672,203.63086 M 483.82031,181.0957 C 483.61717,182.07229 483.31639,182.79494 482.91797,183.26367 C 482.51952,183.72463 482.0078,183.9551 481.38281,183.95508 C 481.21874,183.9551 481.0664,183.94729 480.92578,183.93164 C 480.78515,183.90822 480.64452,183.87307 480.50391,183.82617 L 479.48438,183.52148 C 479.33593,183.48244 479.19921,183.4551 479.07422,183.43945 C 478.94921,183.41604 478.82812,183.40432 478.71094,183.4043 C 478.44531,183.40432 478.23046,183.47463 478.06641,183.61523 C 477.90234,183.75588 477.77343,183.98635 477.67969,184.30664 L 476.39063,184.30664 C 476.57812,183.36135 476.86718,182.66604 477.25781,182.2207 C 477.64843,181.77541 478.15624,181.55276 478.78125,181.55273 C 478.9453,181.55276 479.10937,181.56838 479.27344,181.59961 C 479.43749,181.62307 479.60937,181.66213 479.78906,181.7168 L 480.87891,182.00977 C 480.97265,182.04104 481.0703,182.06447 481.17188,182.08008 C 481.28124,182.09572 481.39843,182.10354 481.52344,182.10352 C 481.77343,182.10354 481.98046,182.02151 482.14453,181.85742 C 482.3164,181.68557 482.4453,181.43166 482.53125,181.0957 L 483.82031,181.0957"
+       id="text6113" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 535.83398,220.83432 L 539.2207,220.83432 L 538.33008,225.93198 C 538.21289,226.55698 538.12304,227.15073 538.06055,227.71323 C 537.99804,228.26792 537.96679,228.72104 537.9668,229.0726 C 537.96679,229.79917 538.13085,230.34214 538.45898,230.70151 C 538.7871,231.05307 539.2871,231.22885 539.95898,231.22885 C 540.74023,231.22885 541.3457,230.90854 541.77539,230.26791 C 542.21288,229.62729 542.57616,228.49058 542.86523,226.85776 L 543.91992,220.83432 L 547.30664,220.83432 L 545.04492,233.6312 L 541.9043,233.6312 L 542.11523,232.2601 C 541.7871,232.86948 541.41991,233.31479 541.01367,233.59604 C 540.61523,233.87729 540.14257,234.01791 539.5957,234.01791 C 539.07226,234.01791 538.60742,233.90073 538.20117,233.66635 C 537.79492,233.43979 537.42773,233.08432 537.09961,232.59995 L 536.04492,238.76401 L 532.69336,238.76401 L 535.83398,220.83432"
+       id="text6117" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 607.875,197.70117 C 607.74217,199.66211 606.98436,201.22071 605.60156,202.37695 C 604.22655,203.5332 602.42968,204.11133 600.21094,204.11133 C 597.65624,204.11133 595.66796,203.31445 594.24609,201.7207 C 592.83203,200.12696 592.125,197.89258 592.125,195.01758 C 592.125,192.08009 592.84765,189.83009 594.29297,188.26758 C 595.73828,186.7051 597.8164,185.92385 600.52734,185.92383 C 602.73046,185.92385 604.46874,186.46291 605.74219,187.54102 C 607.02342,188.61134 607.72655,190.12697 607.85156,192.08789 L 604.34766,192.08789 C 604.19921,191.11134 603.80077,190.36915 603.15234,189.86133 C 602.50389,189.34572 601.6289,189.08791 600.52734,189.08789 C 598.96484,189.08791 597.77734,189.59181 596.96484,190.59961 C 596.15234,191.60743 595.74609,193.08009 595.74609,195.01758 C 595.74609,196.89258 596.14843,198.3418 596.95313,199.36523 C 597.76562,200.38868 598.91796,200.90039 600.41016,200.90039 C 601.48827,200.90039 602.37108,200.62696 603.05859,200.08008 C 603.74608,199.52539 604.19139,198.73243 604.39453,197.70117 L 607.875,197.70117 M 597.62109,208.76367 L 597.62109,207.25195 C 598.24609,207.41601 598.81249,207.54101 599.32031,207.62695 C 599.82812,207.71289 600.26171,207.75586 600.62109,207.75586 C 601.02733,207.75586 601.32421,207.68554 601.51172,207.54492 C 601.69921,207.41211 601.79296,207.19726 601.79297,206.90039 C 601.79296,206.60351 601.68358,206.39258 601.46484,206.26758 C 601.24608,206.14258 600.8828,206.08008 600.375,206.08008 C 600.1953,206.08008 600.05858,206.08008 599.96484,206.08008 C 599.87108,206.08789 599.78515,206.0957 599.70703,206.10352 L 599.70703,203.63086 L 600.90234,203.63086 L 600.90234,204.68555 L 601.07813,204.68555 C 601.99218,204.68555 602.67968,204.87305 603.14063,205.24805 C 603.60155,205.62304 603.83202,206.18164 603.83203,206.92383 C 603.83202,207.70507 603.57421,208.29101 603.05859,208.68164 C 602.54296,209.07226 601.76952,209.26757 600.73828,209.26758 C 600.33983,209.26757 599.87108,209.2246 599.33203,209.13867 C 598.80077,209.05273 598.23046,208.92773 597.62109,208.76367"
+       id="text6121" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+       d="M 721.7168,216.36914 L 721.7168,219.82617 L 718.23633,219.82617 L 718.23633,216.36914 L 721.7168,216.36914 M 721.55273,221.39648 C 721.55273,221.47462 721.55663,221.5879 721.56445,221.73633 C 721.57226,221.88478 721.57616,221.99415 721.57617,222.06445 C 721.57616,222.74415 721.50194,223.31446 721.35352,223.77539 C 721.20507,224.23634 720.96679,224.66602 720.63867,225.06445 C 720.38085,225.36134 720.00195,225.70118 719.50195,226.08398 C 719.00976,226.4668 718.69335,226.74415 718.55273,226.91602 C 718.24804,227.25977 718.0332,227.57618 717.9082,227.86523 C 717.79101,228.1543 717.73242,228.4668 717.73242,228.80273 C 717.73242,229.55274 717.93554,230.13477 718.3418,230.54883 C 718.74804,230.95508 719.32226,231.15821 720.06445,231.1582 C 720.79882,231.15821 721.38085,230.91211 721.81055,230.41992 C 722.24023,229.91993 722.4746,229.22071 722.51367,228.32227 L 725.8418,228.32227 L 725.8418,228.68555 C 725.84178,230.3418 725.31835,231.66211 724.27148,232.64648 C 723.23241,233.62305 721.83007,234.11133 720.06445,234.11133 C 718.25976,234.11133 716.82226,233.64648 715.75195,232.7168 C 714.68945,231.7793 714.1582,230.53321 714.1582,228.97852 C 714.1582,228.40821 714.2168,227.90821 714.33398,227.47852 C 714.45117,227.04883 714.63086,226.65821 714.87305,226.30664 C 715.18554,225.86915 715.67773,225.39259 716.34961,224.87695 C 717.02148,224.36134 717.43554,224.03321 717.5918,223.89258 C 717.88867,223.60353 718.0996,223.29884 718.22461,222.97852 C 718.35742,222.6504 718.42382,222.25587 718.42383,221.79492 C 718.42382,221.75587 718.41992,221.69337 718.41211,221.60742 C 718.40429,221.51368 718.40039,221.44337 718.40039,221.39648 L 721.55273,221.39648"
+       id="text6131" />
+    <path
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Matrix Unicode"
+       d=""
+       id="text6955" />
+  </g>
+</svg>
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG
new file mode 100644 (file)
index 0000000..c730c2d
Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG
new file mode 100644 (file)
index 0000000..fae2439
Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG
new file mode 100644 (file)
index 0000000..59b202b
Binary files /dev/null and b/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c
new file mode 100644 (file)
index 0000000..317a245
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+Copyright 2016 Julien Pecqueur <julien@peclu.net>
+Copyright 2016 Felix Uhl <ifreilicht@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "s60-x.h"
+
+//make keymap a little easier to read
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 1
+
+//uncomment to activate dead keys
+//#define DONT_REVIVE_DEADKEYS 1
+
+//Function keycodes for better readability
+//SpaceFN
+//OneShot LeftShift
+//GamingMode Lock (disables SpaceFn and OneShot LShift)
+//Function
+//Mute microphone
+#define KC_SPACEFN KC_FN0
+#define KC_OSLS KC_FN3
+#define KC_GMLK KC_FN1
+#define KC_FUNC KC_FN2
+#define MICMUTE RCTL(KC_LCTL)
+
+enum function_codes {
+    F_SPACEFN = 0,
+    F_OSLS = 3,
+    F_GMLK = 1,
+    F_FUNC = 2
+};
+
+enum layer_names {
+    DEFAULT,
+    GAMING,
+    FUNCTION
+};
+
+enum languages {
+    GERMAN
+};
+
+#define LANGUAGE GERMAN
+
+enum custom_keycodes {
+    KC_CM_A = SAFE_RANGE,
+//  KC_CM_B,
+    KC_CM_C,
+//  KC_CM_D,
+    KC_CM_E,
+//  KC_CM_F,
+    KC_CM_G,
+//  KC_CM_H,
+    KC_CM_I,
+//  KC_CM_J,
+    KC_CM_K,
+    KC_CM_L,
+    KC_CM_M,
+    KC_CM_N,
+    KC_CM_O,
+    KC_CM_P,
+//  KC_CM_Q,
+    KC_CM_R,
+    KC_CM_S,
+//  KC_CM_T,
+    KC_CM_U,
+//  KC_CM_V,
+    KC_CM_W,
+//  KC_CM_X,
+    KC_CM_Y,
+    KC_CM_Z
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Layout 0: Default Layer
+    * ,-----------------------------------------------------------.
+    * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|  \|Del|
+    * |-----------------------------------------------------------|
+    * |Tab  |  Q|  W|  E|  R|  T|  Z|  U|  I|  O|  P|  [|  ]|BckSp|
+    * |-----------------------------------------------------------|
+    * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
+    * |-----------------------------------------------------------|
+    * |Shift   |  Y|  X|  C|  V|  B|  N|  M|  ,|  .|  /| Up  |RSft|
+    * |-----------------------------------------------------------|
+    * |Fn2 |Gui |Alt |         SpaceFn       |Alt |Left|Down|Right|
+    * `-----------------------------------------------------------'
+    */
+    [DEFAULT] = KEYMAP(
+        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSLS, KC_DEL,  \
+        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Z,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,          \
+        KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,           \
+        KC_LSFT, KC_NUBS, KC_Y,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_NO,   KC_UP,   KC_RSFT, \
+        KC_FUNC, KC_LGUI, KC_LALT,                            KC_SPACEFN,                                  KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    /* Layout 1: Gaming Layer, SpaceFn disabled
+    * ,-----------------------------------------------------------.
+    * |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
+    * |-----------------------------------------------------------|
+    * |     |   |   |   |   |   |   |   |   |   |   |   |   |     |
+    * |-----------------------------------------------------------|
+    * |      |   |   |   |   |   |   |   |   |   |   |   |        |
+    * |-----------------------------------------------------------|
+    * |        |   |   |   |   |   |   |   |   |   |   |     |Fn1 |
+    * |-----------------------------------------------------------|
+    * |   |RSft|     |          Space         |    |    |    |    |
+    * `-----------------------------------------------------------'
+    */
+    [GAMING] = KEYMAP(
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK,  \
+        _______, KC_RSFT,   _______,                            KC_SPC,                                    _______, _______, _______, _______
+    ),
+
+    /* Layout 2: Function Layer
+    * MicMute requires special software to be installed. Check readme.md for more information
+    * ,-----------------------------------------------------------.
+    * |`  | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|RES|
+    * |-----------------------------------------------------------|
+    * |     |   |   |   |Prv|Ply|Nxt| Ü |   | Ö |   |Prt|Slk|Pau  |
+    * |-----------------------------------------------------------|
+    * |      | Ä | ß |   |Vl-|Mut|Vl+|   |   |   |   |   |PEnt    |
+    * |-----------------------------------------------------------|
+    * |        |  |  |  |MicMut|Cal|   |   |   |   |Pau |PUp |Fn1 |
+    * |-----------------------------------------------------------|
+    * |    |    |    |                        |    |Home|PDn |End |
+    * `-----------------------------------------------------------'
+    */
+    [FUNCTION] = KEYMAP(
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_INS,   RESET,   \
+        _______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P, KC_PSCR, KC_SLCK, KC_PAUS, \
+        _______, KC_CM_A, KC_CM_S, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_CM_K, KC_CM_L, _______, _______, _______, KC_PENT,          \
+        _______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \
+        _______, _______, _______,                            _______,                                     _______, KC_HOME, KC_PGDN, KC_END
+    ),
+};
+
+/*
+* Fn action definition
+*/
+const uint16_t PROGMEM fn_actions[] = {
+    [F_SPACEFN] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),    // SpaceFn layout 1
+    [F_GMLK] = ACTION_LAYER_TOGGLE(1),                  // Disable SpaceFn and Oneshot Shift
+    [F_FUNC] = ACTION_LAYER_MOMENTARY(2),               // SpaceFn layout 1
+    [F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT)            // Oneshot Leftshift
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_german(uint16_t keycode, keyrecord_t *record) {
+    uint16_t send_code = 0;
+    if (record->event.pressed) {
+        switch (keycode) {
+        case KC_CM_A:
+            send_code = KC_Q;
+            break;
+        case KC_CM_O:
+            send_code = KC_P;
+            break;
+        case KC_CM_U:
+            send_code = KC_Y;
+            break;
+        case KC_CM_S:
+            send_code = KC_S;
+            break;
+        }
+
+        if (send_code == 0) {
+            return true;
+        }
+        else {
+            register_code(KC_RALT);
+            register_code(send_code);
+            unregister_code(send_code);
+            unregister_code(KC_RALT);
+            return false;
+        }
+    }
+    return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    //revive dead keys
+#ifndef DONT_REVIVE_DEADKEYS
+    bool shift_active = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_LSFT));
+    bool altgr_active = keyboard_report->mods & (MOD_BIT(KC_RALT));
+    if ((keycode == KC_QUOT && !altgr_active) || 
+        keycode == KC_GRV ||
+        (keycode == KC_6 && shift_active)) 
+    {
+        if (record->event.pressed) {
+            register_code(keycode);
+            unregister_code(keycode);
+            register_code(KC_SPACE);
+            unregister_code(KC_SPACE);
+        }
+        return false;
+    }
+#endif
+#if LANGUAGE == GERMAN
+    return process_german(keycode, record);
+#else
+    return true;
+#endif
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
\ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md
new file mode 100644 (file)
index 0000000..b220106
--- /dev/null
@@ -0,0 +1,94 @@
+# ANSI_QWERTZ
+
+[Click here to go to the layers directly.](readme.md#1-layers)
+
+This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters 
+with diacritics that are normally not used in the english language.
+
+It currently relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware.
+
+##0 Features
+* Input of letters with diacritics on familiar QWERTZ layout
+* Support for ANSI-legend keycaps
+* Option to "revive" all dead keys
+* Dedicated arrow cluster
+* SpaceFN for easy access to Function keys and diacritic input
+* Locking "Gaming Mode" that disables SpaceFN and allows to bind GUI key in Games
+* Reset key binding, no need to press hardware reset button to program
+* Microphone Mute key (requires 3rd-party software, see below)
+
+###0.0 Languages
+The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout.
+All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly, 
+one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#04-revive-dead-keys).
+
+The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS.
+
+![KB_US-International](docs/KB_US-International.png)
+
+Not all languages are supported by this layout. Linux also offers the "US International Alternative" layout, 
+which contains more dead keys to input pretty much every diacritic character in a language using latin letters. More information can be found [here](http://web.archive.org/web/20160818101234/http://dry.sailingissues.com/us-international-keyboard-layout.html).
+
+![KB_US-International-Alternative](docs/KB_US-International-Alternative.png)
+
+####0.0.0 Explicitly Supported Languages
+* German
+
+####0.0.1 Implicitly Supported Languages
+This list only applies to Windows. Linux systems support all languages, see above. This list might be incomplete! Please add your language if you find it's supported.
+
+* French
+
+###0.1 SpaceFN
+SpaceFN basically means that `Space` acts as a normal spacebar when tapped, but acts as a layer-key when held down. 
+This means that you can't hold space to output multiple spaces consecutively and that space only registers once released.
+The advantage is that the spacebar is easier to reach than any other `Fn`-key could be.
+
+###0.2 "Gaming Mode"
+To alleviate the problems SpaceFN would cause when gaming, the Gaming Mode is pretty much a layer that can be turned on by pressing Fn+RShift.
+This will turn the double-role Spacebar into a normal one, so the Fn-layer (and thus function and media keys) can only be accessed with the Fn-key.
+It also turns the GUI-key (aka Win-key aka Super-key) into Right Shift, so it can be bound in Games. This is especially useful when playing with ESDF instead of WASD.
+
+###0.3 Mute Microphone
+The function layer has a "Mute Microphone"-key. As this is not an existing media key and you can't normally set a shortcut to this function, 
+you need to set this up in software before using it, see below. This key is bound to `RCtrl+LCtrl`, a keycombination that 
+no other program in existence uses for anything, at least to my knowledge. It also can't be pressed with this keymap in any other way.
+
+####0.3.0 Linux
+Follow [these instructions](http://askubuntu.com/a/13364).
+
+#####0.3.1 Windows (Requires 3rd Party Software)
+*DISCLAIMER: I take no responsibility for any potential harm caused by third party applications!*
+
+You'll need a utility called "MicMute". It is available on [Sourceforge](https://sourceforge.net/projects/micmute/).
+After installing and running the tool, you only need to use the "Setup Shortcut" option to bind the key to muting the microphone
+and check whether your microphone is selected under "Devices".
+
+###0.4 Revive Dead Keys
+Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``,  `'`, or `"`. 
+The dead keys on the regular international layout (shown in red [here](readme.md#00-languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed.
+If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling:
+```
+//#define DONT_REVIVE_DEADKEYS 1
+```
+
+##1 Layers
+###1.0 Base Layer
+The base layer is shown here for ANSI keysm, HHKB-style right shift and split backspace. If you use a 2U backspace key there, `Del` will not be available.
+Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout.
+
+![base_layer](docs/base_layer.PNG)
+
+###1.1 Gaming layer
+To turn this layer on, please use the combination `Fn+RShift`, not `Space+RShift`. If you do the latter, the Function layer will become stuck. You can press `Fn` once to unstick it if this happens to you. A solution is being worked on.
+
+![gaming_layer](docs/gaming_layer.PNG)
+
+###1.2 Function Layer
+This is the function layer for German diacritics. It can be accessed via the `Fn` or by holding `Space` on the base layer.
+
+![function_layer](docs/function_layer.PNG)
+
+
+
+
diff --git a/keyboards/s60-x/keymaps/custom/keymap.c b/keyboards/s60-x/keymaps/custom/keymap.c
new file mode 100644 (file)
index 0000000..fb2a40b
--- /dev/null
@@ -0,0 +1,28 @@
+#include "s60-x.h"
+
+/* Main layer: Test layout, using all keys.
+
+      0     1     2     3     4     5     6     7     8     9     A     B     C     D     E
+   ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ 0 │GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │PGUP │BKSPC│
+   ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 1 │ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+   ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 2 │CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │PGDN │ENTER│█████│
+   ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 3 │LSHFT│HOME │  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │ END │RSHFT│  UP │
+   ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 4 │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+   └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: ANSI qwerty */
+       LEGACY_KEYMAP(GRV,    1,    2,    3,    4,    5,    6,    7,    8,    9,    0, MINS,  EQL, PGUP, BSPC, \
+           TAB,    Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P, LBRC, RBRC, BSLS,       \
+          CAPS,    A,    S,    D,    F,    G,    H,    J,    K,    L, SCLN, QUOT, PGDN, ENT ,       \
+          LSFT, HOME,    Z,    X,    C,    V,    B,    N,    M, COMM,  DOT, SLSH,  END, RSFT,   UP, \
+          LCTL, LGUI, LALT,                    SPC,                   RALT, RGUI,  APP, RCTL),
+};
+const uint16_t PROGMEM fn_actions[] = {};
+
diff --git a/keyboards/s60-x/keymaps/custom/readme.md b/keyboards/s60-x/keymaps/custom/readme.md
new file mode 100644 (file)
index 0000000..cf87bd9
--- /dev/null
@@ -0,0 +1,15 @@
+### 8  Custom
+The custom keymap - [keymap_custom.c](keymap_custom.c) - is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys.
+
+#### 8.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │PgUp │BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │PgDwn│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│Home │  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │ End │Shift│  Up │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60-x/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..eb0c6b0
--- /dev/null
@@ -0,0 +1,48 @@
+#include "s60-x.h"
+
+/* 0: Main layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: ANSI qwerty */
+    LEGACY_KEYMAP(ESC,    1,    2,    3,    4,    5,    6,    7,    8,    9,    0, MINS,  EQL,   NO, BSPC, \
+           TAB,    Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P, LBRC, RBRC, BSLS,       \
+          CAPS,    A,    S,    D,    F,    G,    H,    J,    K,    L, SCLN, QUOT,   NO, ENT ,       \
+          LSFT,   NO,    Z,    X,    C,    V,    B,    N,    M, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+          LCTL, LGUI, LALT,                    SPC,                   RALT,  FN0,  APP, RCTL),
+
+/* 1: Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │ Up  │     │     │     │     │     │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+    LEGACY_KEYMAP(
+         GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS, TRNS,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_LAYER_MOMENTARY(1),  // to Fn overlay
+};
diff --git a/keyboards/s60-x/keymaps/default/readme.md b/keyboards/s60-x/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..01cda9d
--- /dev/null
@@ -0,0 +1,27 @@
+### 1  Standard - ANSI
+The standard keymap is the one that is pre-flashed on the S60-X.
+
+#### 1.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 1.1 Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │GRAVE│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │ Up  │     │     │     │     │     │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/hasu/keymap.c b/keyboards/s60-x/keymaps/hasu/keymap.c
new file mode 100644 (file)
index 0000000..cbeaae0
--- /dev/null
@@ -0,0 +1,182 @@
+#include "s60-x.h"
+
+/*
+ * Hasu
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Keymap 0: Default Layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │ Fn2 │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │ Fn1 │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ Fn3 │ Fn3 │ Fn0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+       LEGACY_KEYMAP(
+         ESC,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSLS,       \
+        CAPS,    A,    S,   D,   F,   G,   H,   J,   K,    L,  FN2, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT,  FN1,   NO,  FN9,   NO, \
+        LCTL, LGUI, LALT,                SPC,                 RALT,  FN3,  FN3,  FN0),
+    /* Keymap 1: colemak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  F  │  P  │  G  │  J  │  L  │  U  │  Y  │  ;  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│  A  │  R  │  S  │  T  │  D  │  H  │  N  │  E  │  I  │  O  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  K  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ Fn0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS, EQL,   NO, BSPC, \
+         TAB,    Q,    W,   F,   P,   G,   J,   L,   U,    Y, SCLN, LBRC, RBRC, BSLS,      \
+        BSPC,    A,    R,   S,   T,   D,   H,   N,   E,    I,    O, QUOT,   NO,  ENT,      \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   K,   M, COMM,  DOT, SLSH,   NO, RSFT,  NO, \
+        LCTL, LGUI, LALT,                SPC,                 RALT, RGUI,  APP,  FN0),
+    /* Keymap 2: dvorak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  [  │  ]  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  '  │  ,  │  .  │  P  │  Y  │  F  │  G  │  C  │  R  │  L  │  /  │  =  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  O  │  E  │  U  │  I  │  D  │  H  │  T  │  N  │  S  │  -  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  ;  │  Q  │  J  │  K  │  X  │  B  │  M  │  W  │  V  │  Z  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘   
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,    3,   4,   5,   6,   7,   8,   9,   0, LBRC, RBRC,   NO, BSPC, \
+         TAB, QUOT, COMM,  DOT,   P,   Y,   F,   G,   C,   R,   L, SLSH,  EQL, BSLS,       \
+        CAPS,    A,    O,    E,   U,   I,   D,   H,   T,   N,   S, MINS,   NO,  ENT,       \
+        LSFT,   NO, SCLN,    Q,   J,   K,   X,   B,   M,   W,   V,    Z,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                 SPC,               RALT, RGUI,  APP,  FN0),
+    /* Keymap 3: workman
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  D  │  E  │  W  │  B  │  J  │  F  │  U  │  P  │  ;  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│  A  │  S  │  H  │  T  │  G  │  Y  │  N  │  E  │  O  │  I  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  M  │  C  │  V  │  K  │  L  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    D,   R,   W,   B,   J,   F,   U,    P, SCLN, LBRC, RBRC, BSLS,       \
+        BSPC,    A,    S,   H,   T,   G,   Y,   N,   E,    O,    I, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   M,   C,   V,   K,   L, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                SPC,                 RALT, RGUI,  APP,  FN0),
+    /* Overlay 4: HHKB mode
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│Grave│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │     │     │     │     │     │     │     │ Psc │ Slk │Pause│ Up  │     │ Ins │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│ VoD │ VoU │Mute │     │     │NP_* │NP_/ │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│     │     │     │     │     │NP_+ │NP_- │ End │PgDwn│Down │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ App │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+    LEGACY_KEYMAP(
+         GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS,  DEL, \
+        CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS,   UP, TRNS,  INS,       \
+        LCTL, VOLD, VOLU, MUTE, TRNS, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, TRNS,  ENT,       \
+        LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS,  END, PGDN, DOWN, TRNS, RSFT, TRNS, \
+        LCTL, LGUI, LALT,                    SPC,                   RALT, RGUI,  FN4, TRNS),
+    /* Overlay 5: Vi mode (Slash)
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│Grave│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│BkSpc│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │Home │PgDwn│ Up  │PgUp │ End │Home │PgDwn│PgUp │ End │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│     │Left │Down │Right│     │Left │Down │ Up  │Right│     │     │▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│     │     │     │     │     │Home │PgDwn│PgUp │ End │     │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+    LEGACY_KEYMAP(
+         GRV, F1,     F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, BSPC, \
+         TAB, HOME, PGDN,   UP, PGUP,  END, HOME, PGDN, PGUP,  END, TRNS, TRNS, TRNS, TRNS,       \
+        LCTL, TRNS, LEFT, DOWN, RGHT, TRNS, LEFT, DOWN,   UP, RGHT, TRNS, TRNS, TRNS,  ENT,       \
+        LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP,  END, TRNS, TRNS, RSFT, TRNS, \
+        LCTL, LGUI, LALT,                    SPC,                   RALT, RGUI,  APP, RCTL),
+    /* Overlay 6: Mouse mode (Semicolon/App)
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│Grave│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│BkSpc│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │     │     │     │     │     │ MwL │ MwD │ MwU │ MwR │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│     │ Ac0 │ Ac1 │ Ac2 │     │ McL │ McD │ McU │ McR │     │     │▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSFHT│▒▒▒▒▒│     │     │     │     │ Mb3 │ Mb2 │ Mb1 │ Mb4 │ Mb5 │     │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ Mb1 │█████│█████│█████│     │     │     │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
+     */
+    LEGACY_KEYMAP(
+         GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, BSPC, \
+         TAB, TRNS, TRNS, TRNS, TRNS, TRNS, WH_L, WH_D, WH_U, WH_R, TRNS, TRNS, TRNS, TRNS,       \
+        LCTL, TRNS, ACL0, ACL1, ACL2, TRNS, MS_L, MS_D, MS_U, MS_R, TRNS, TRNS, TRNS,  ENT,       \
+        LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, BTN3, BTN2, BTN1, BTN4, BTN5, TRNS, TRNS, RSFT, TRNS, \
+        LCTL, LGUI, LALT,                   BTN1,                   TRNS, TRNS, TRNS, RCTL),
+    /* Overlay 7: Layout selector
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Lq  │ Lc  │ Ld  │ Lw  │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ Lq  │ Lw  │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │ Ld  │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │ Lc  │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+Lq: set Qwerty layout
+Lc: set Colemak layout
+Ld: set Dvorak layout
+Lw: set Workman layout
+
+    */
+    LEGACY_KEYMAP(
+         FN5,  FN6,  FN7,  FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS,  FN5,  FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS,  FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS, TRNS,  FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_MOMENTARY(4),
+    [1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH),
+    [2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN),
+    [3] = ACTION_LAYER_MOMENTARY(6),
+    [4] = ACTION_LAYER_MOMENTARY(7),   // to Layout selector
+    [5] = ACTION_DEFAULT_LAYER_SET(0),  // set qwerty layout
+    [6] = ACTION_DEFAULT_LAYER_SET(1),  // set colemak layout
+    [7] = ACTION_DEFAULT_LAYER_SET(2),  // set dvorak layout
+    [8] = ACTION_DEFAULT_LAYER_SET(3),  // set workman layout
+    [9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRV),
+};
diff --git a/keyboards/s60-x/keymaps/hasu/readme.md b/keyboards/s60-x/keymaps/hasu/readme.md
new file mode 100644 (file)
index 0000000..64969b6
--- /dev/null
@@ -0,0 +1,4 @@
+### 5. Hasu
+This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail.
+
+(Hasu is the initial creator of the TMK firmware, in case you weren't aware.)
\ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/hhkb/keymap.c b/keyboards/s60-x/keymaps/hhkb/keymap.c
new file mode 100644 (file)
index 0000000..9afd124
--- /dev/null
@@ -0,0 +1,52 @@
+#include "s60-x.h"
+
+/*
+ * HHKB Layout
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: Default layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │  \  │  `  │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │BkSpc│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Ctrl │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │ Fn3 │  '  │▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│ Fn  │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+    LEGACY_KEYMAP(
+        ESC,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL, BSLS, GRV, \
+        TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSPC,      \
+        LCTL,    A,    S,   D,   F,   G,   H,   J,   K,    L, SCLN, QUOT,   NO,  ENT,      \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT, SLSH,   NO, RSFT, FN0, \
+        NO, LGUI, LALT,                SPC,                   NO, RALT, RGUI,   NO),
+    /* 1: HHKB Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Pwr │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │ Ins │ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │     │     │     │     │     │     │     │ Psc │ Slk │ Pus │ Up  │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ VoD │ VoU │ Mut │ Ejc │     │NP_* │NP_/ │Home │PgUp │Left │Right│▒▒▒▒▒│NPEnt│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │NP_+ │NP_- │ End │PgDwn│Down │▒▒▒▒▒│     │     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│▒▒▒▒▒│     │     │█████│█████│█████│     │█████│█████│█████│▒▒▒▒▒│     │     │▒▒▒▒▒│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+    LEGACY_KEYMAP(
+       PWR,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12,  INS,  DEL, \
+       CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS,   UP, TRNS, TRNS,       \
+       TRNS, VOLD, VOLU, MUTE, EJCT, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT,   NO, PENT,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS,  END, PGDN, DOWN,   NO, TRNS, TRNS, \
+       TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_MOMENTARY(1),
+};
diff --git a/keyboards/s60-x/keymaps/hhkb/readme.md b/keyboards/s60-x/keymaps/hhkb/readme.md
new file mode 100644 (file)
index 0000000..2bceb26
--- /dev/null
@@ -0,0 +1,26 @@
+### 7. HHKB
+[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers.
+#### 7.0: Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │  \  │  `  │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │BkSpc│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │ Fn3 │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│ Fn  │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 7.1: HHKB Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Pwr │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │ Ins │ Del │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │     │     │     │     │     │     │     │ Psc │ Slk │ Pus │ Up  │     │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │ VoD │ VoU │ Mut │ Ejc │     │  *  │  /  │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│     │     │     │     │     │  +  │  -  │ End │PgDwn│Down │▒▒▒▒▒│     │     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │▒▒▒▒▒│     │     │█████│█████│█████│     │█████│█████│█████│▒▒▒▒▒│     │     │▒▒▒▒▒│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/iso/keymap.c b/keyboards/s60-x/keymaps/iso/keymap.c
new file mode 100644 (file)
index 0000000..43a9c48
--- /dev/null
@@ -0,0 +1,48 @@
+#include "s60-x.h"
+
+/* 0: Main layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │▒▒▒▒▒│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │NUHS │ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│  \  │  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: ANSI qwerty */
+    LEGACY_KEYMAP(ESC,    1,    2,    3,    4,    5,    6,    7,    8,    9,    0, MINS,  EQL,   NO, BSPC, \
+           TAB,    Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P, LBRC, RBRC,   NO,       \
+          CAPS,    A,    S,    D,    F,    G,    H,    J,    K,    L, SCLN, QUOT, NUHS, ENT ,       \
+          LSFT, BSLS,    Z,    X,    C,    V,    B,    N,    M, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+          LCTL, LGUI, LALT,                    SPC,                   RALT,  FN0,  APP, RCTL),
+         
+/* 1: Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │ Up  │     │     │     │     │     │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+    LEGACY_KEYMAP(
+         GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS, TRNS,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_LAYER_MOMENTARY(1),  // to Fn overlay
+};
diff --git a/keyboards/s60-x/keymaps/iso/readme.md b/keyboards/s60-x/keymaps/iso/readme.md
new file mode 100644 (file)
index 0000000..2c06bf8
--- /dev/null
@@ -0,0 +1,28 @@
+### 2  Standard - ISO
+The same as the standard keymap, but with additional ISO keys.
+
+
+#### 2.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │▒▒▒▒▒│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │NUHS │ENTER│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LSHFT│  \  │  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 2.1 Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │GRAVE│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │ Up  │     │     │     │     │     │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │     │     │     │     │     │     │     │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/jpec/keymap.c b/keyboards/s60-x/keymaps/jpec/keymap.c
new file mode 100644 (file)
index 0000000..c8fc133
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+Copyright 2016 Julien Pecqueur <julien@peclu.net>
+Copyright 2016 Felix Uhl <ifreilicht@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "s60-x.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       /* Layout 0: Default Layer
+       * ,-----------------------------------------------------------.
+       * |`  |  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+       * |-----------------------------------------------------------|
+       * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
+       * |-----------------------------------------------------------|
+       * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
+       * |-----------------------------------------------------------|
+       * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |
+       * |-----------------------------------------------------------|
+       * |Fn1 |Gui |Alt |        SpaceFn         |Alt |Gui |App |Ctrl|
+       * `-----------------------------------------------------------'
+       */
+    LEGACY_KEYMAP(
+               GRV,  1,    2,    3,    4,    5,    6,    7,    8,    9,    0,    MINS,  EQL, BSPC, BSPC, \
+               TAB,  Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,    LBRC, RBRC, BSLS, \
+               LCTL, A,    S,    D,    F,    G,    H,    J,    K,    L, SCLN,    QUOT, NUHS, ENT,  \
+               LSFT, NUBS, Z,    X,    C,    V,    B,    N,    M, COMM,  DOT,    SLSH,   NO, RSFT, NO, \
+               FN1,  LGUI, LALT,             FN0,                          RALT, RGUI, APP,  RCTL),
+
+       /* Layout 1: Function Layer
+       * ,-----------------------------------------------------------.
+       * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
+       * |-----------------------------------------------------------|
+       * |     |Prv|Ply|Nxt|Stp|   |   |PUp|Up |PDn|   |Slk|Pau|Ins  |
+       * |-----------------------------------------------------------|
+       * |      |Vl-|Mut|Vl+|   |   |Hom|Lef|Dow|Rig|End|   |PEnt    |
+       * |-----------------------------------------------------------|
+       * |        |Prt|Cut|Cop|Pst|Cal|   |   |   |   |   |CapsLock  |
+       * |-----------------------------------------------------------|
+       * |    |    |    |                        |    |    |    |    |
+       * `-----------------------------------------------------------'
+       */
+    LEGACY_KEYMAP(
+               ESC,  F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,   F10,  F11,  F12,  TRNS, DEL,  \
+               TRNS, MPRV, MPLY, MNXT, MSTP, TRNS, TRNS, PGUP, UP,   PGDN, TRNS, SLCK, PAUS, INS,  \
+               TRNS, VOLD, MUTE, VOLU, TRNS, TRNS, HOME, LEFT, DOWN, RGHT, END,  TRNS, TRNS, PENT, \
+               TRNS, TRNS, PSCR, FN2,  FN3,  FN4,  CALC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, \
+               TRNS, TRNS, TRNS,             TRNS,                         TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+* Fn action definition
+*/
+const uint16_t PROGMEM fn_actions[] = {
+       [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),    /* SpaceFn layout 1 */
+       [1] = ACTION_LAYER_MOMENTARY(1),            /* Momentary layout 1 */
+       [2] = ACTION_MODS_KEY(MOD_LSFT, KC_DEL),    /* Cut  */
+       [3] = ACTION_MODS_KEY(MOD_LCTL, KC_INS),    /* Copy  */
+       [4] = ACTION_MODS_KEY(MOD_LSFT, KC_INS),    /* Paste */
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
\ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/jpec/readme.md b/keyboards/s60-x/keymaps/jpec/readme.md
new file mode 100644 (file)
index 0000000..73318da
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for s60-x
\ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/plain/keymap.c b/keyboards/s60-x/keymaps/plain/keymap.c
new file mode 100644 (file)
index 0000000..790ac88
--- /dev/null
@@ -0,0 +1,25 @@
+#include "s60-x.h"
+
+/* Main layer:
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: qwerty */
+    LEGACY_KEYMAP(ESC,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS, EQL,    NO, BSPC, \
+           TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSLS,       \
+          CAPS,    A,    S,   D,   F,   G,   H,   J,   K,    L, SCLN, QUOT, NO,   ENT,        \
+          LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT, SLSH, NO,   RSFT,   NO, \
+          LCTL, LGUI, LALT,                SPC,                 RALT, RGUI, APP,  RCTL),
+};
+const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/s60-x/keymaps/plain/readme.md b/keyboards/s60-x/keymaps/plain/readme.md
new file mode 100644 (file)
index 0000000..ab13323
--- /dev/null
@@ -0,0 +1,16 @@
+### 4. Plain
+Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
+See [keymap_plain.c](keymap_plain.c) for detail.
+
+#### 4.0 Plain Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/poker/keymap.c b/keyboards/s60-x/keymaps/poker/keymap.c
new file mode 100644 (file)
index 0000000..0a86917
--- /dev/null
@@ -0,0 +1,180 @@
+#include "s60-x.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: qwerty
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSLS,       \
+        CAPS,    A,    S,   D,   F,   G,   H,   J,   K,    L, SCLN, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                SPC,                  FN0, RGUI,  APP, RCTL),
+    /* 1: colemak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  F  │  P  │  G  │  J  │  L  │  U  │  Y  │  ;  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│  A  │  R  │  S  │  T  │  D  │  H  │  N  │  E  │  I  │  O  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  K  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS, EQL,   NO, BSPC, \
+         TAB,    Q,    W,   F,   P,   G,   J,   L,   U,    Y, SCLN, LBRC, RBRC, BSLS,      \
+        BSPC,    A,    R,   S,   T,   D,   H,   N,   E,    I,    O, QUOT,   NO,  ENT,      \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   K,   M, COMM,  DOT, SLSH,   NO, RSFT,  NO, \
+        LCTL, LGUI, LALT,                SPC,                  FN0, RGUI,  APP, RCTL),
+    /* 2: dvorak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  [  │  ]  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  '  │  ,  │  .  │  P  │  Y  │  F  │  G  │  C  │  R  │  L  │  /  │  =  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  O  │  E  │  U  │  I  │  D  │  H  │  T  │  N  │  S  │  -  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  ;  │  Q  │  J  │  K  │  X  │  B  │  M  │  W  │  V  │  Z  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘   
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,    3,   4,   5,   6,   7,   8,   9,   0, LBRC, RBRC,   NO, BSPC, \
+         TAB, QUOT, COMM,  DOT,   P,   Y,   F,   G,   C,   R,   L, SLSH,  EQL, BSLS,       \
+        CAPS,    A,    O,    E,   U,   I,   D,   H,   T,   N,   S, MINS,   NO,  ENT,       \
+        LSFT,   NO, SCLN,    Q,   J,   K,   X,   B,   M,   W,   V,    Z,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                 SPC,                FN0, RGUI,  APP, RCTL),
+    /* 3: workman 
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  D  │  E  │  W  │  B  │  J  │  F  │  U  │  P  │  ;  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│  A  │  S  │  H  │  T  │  G  │  Y  │  N  │  E  │  O  │  I  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  M  │  C  │  V  │  K  │  L  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    D,   R,   W,   B,   J,   F,   U,    P, SCLN, LBRC, RBRC, BSLS,       \
+        BSPC,    A,    S,   H,   T,   G,   Y,   N,   E,    O,    I, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   M,   C,   V,   K,   L, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                SPC,                  FN0, RGUI,  APP, RCTL),
+    /* 4: Poker with Arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│     │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,   UP, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                   TRNS, LEFT, DOWN, RGHT),
+    /* 5: Poker with Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+    /* 6: Poker Fn
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ FnQ │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │ FnL │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Tsk │ End │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│ FnS │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+Fn:  to Fn overlay
+FnL: to Layout selector overaly
+FnQ: toggle Esc overlay
+FnS: toggle Arrow overlay
+
+    */
+    LEGACY_KEYMAP(
+        ESC,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS,  FN2,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME,  INS,  FN4,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS,  FN3,  END, TRNS, TRNS,       \
+        TRNS, TRNS,  DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN,  DEL, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                    FN1,                   TRNS, TRNS, TRNS, TRNS),
+    /* 7: Layout selector
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Lq  │ Lc  │ Ld  │ Lw  │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ Lq  │ Lw  │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │ Ld  │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │ Lc  │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+Lq: set Qwerty layout
+Lc: set Colemak layout
+Ld: set Dvorak layout
+Lw: set Workman layout
+
+    */
+    LEGACY_KEYMAP(
+        FN5,  FN6,  FN7,  FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS,  FN5,  FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS,  FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS,  FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+    /* Poker Layout */
+    [0] = ACTION_LAYER_MOMENTARY(6),  // to Fn overlay
+    [1] = ACTION_LAYER_TOGGLE(4),     // toggle arrow overlay
+    [2] = ACTION_LAYER_TOGGLE(5),     // toggle Esc overlay
+    [3] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // Task(RControl,RShift+Esc)
+    [4] = ACTION_LAYER_MOMENTARY(7),  // to Layout selector
+    [5] = ACTION_DEFAULT_LAYER_SET(0),  // set qwerty layout
+    [6] = ACTION_DEFAULT_LAYER_SET(1),  // set colemak layout
+    [7] = ACTION_DEFAULT_LAYER_SET(2),  // set dvorak layout
+    [8] = ACTION_DEFAULT_LAYER_SET(3),  // set workman layout
+};
diff --git a/keyboards/s60-x/keymaps/poker/readme.md b/keyboards/s60-x/keymaps/poker/readme.md
new file mode 100644 (file)
index 0000000..0d8be9d
--- /dev/null
@@ -0,0 +1,31 @@
+### 3  Poker
+[keymap_poker.c](keymap_poker.c) emulates original Poker layers
+while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
+
+    Fn + Esc = `
+    Fn + {left, down, up, right}  = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn  │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │ FnQ │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Tsk │ End │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│ FnS │█████│█████│█████│ Fn  │Left │Down │Right│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/poker_bit/keymap.c b/keyboards/s60-x/keymaps/poker_bit/keymap.c
new file mode 100644 (file)
index 0000000..7626038
--- /dev/null
@@ -0,0 +1,110 @@
+#include "s60-x.h"
+
+// Poker fix with toggle and bit operation
+// Fn + Esc = `
+// Fn + {left, down, up, right}  = {home, pgdown, pgup, end}
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: qwerty
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSLS,       \
+        LCTL,    A,    S,   D,   F,   G,   H,   J,   K,    L, SCLN, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                SPC,                  FN0, RGUI,  APP, RCTL),
+    /* 4: Poker Default + Fn'd 
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │ Fn2 │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Fn4 │ End │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│ Fn1 │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    [4] = LEGACY_KEYMAP(
+        TRNS,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        CAPS,  FN2,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME,  INS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS,  FN4,  END, TRNS, TRNS,       \
+        TRNS, TRNS,  DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN,  DEL, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                    FN1,                   TRNS, TRNS, TRNS, TRNS),
+    /* 5: Poker with Arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│     │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│PgUp │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│ Fn3 │Home │PgDwn│ End │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                    FN3, HOME, PGDN,  END),
+    /* 6: Poker with Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+    /* 7: Poker with Arrow + Fn'd
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│     │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,   UP, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                   TRNS, LEFT, DOWN, RGHT),
+};
+const uint16_t PROGMEM fn_actions[] = {
+    /* Poker Layout */
+    [0] = ACTION_LAYER_BIT_XOR(1, 0b0101, ON_BOTH),   // Poker Fn(with fix for Esc)
+    [1] = ACTION_LAYER_TOGGLE(5),                     // Poker Arrow toggle
+    [2] = ACTION_LAYER_TOGGLE(6),                     // Poker Esc toggle
+    [3] = ACTION_LAYER_BIT_XOR(1, 0b1101, ON_BOTH),   // Poker Fn(with fix for Arrow)
+    [4] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN3 Task(RControl,RShift+Esc)
+};
diff --git a/keyboards/s60-x/keymaps/poker_bit/readme.md b/keyboards/s60-x/keymaps/poker_bit/readme.md
new file mode 100644 (file)
index 0000000..0d8be9d
--- /dev/null
@@ -0,0 +1,31 @@
+### 3  Poker
+[keymap_poker.c](keymap_poker.c) emulates original Poker layers
+while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
+
+    Fn + Esc = `
+    Fn + {left, down, up, right}  = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn  │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │ FnQ │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Tsk │ End │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│ FnS │█████│█████│█████│ Fn  │Left │Down │Right│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/poker_set/keymap.c b/keyboards/s60-x/keymaps/poker_set/keymap.c
new file mode 100644 (file)
index 0000000..09423e7
--- /dev/null
@@ -0,0 +1,178 @@
+#include "s60-x.h"
+
+// Poker fix with set(state transition)
+// Fn + Esc = `
+// Fn + {left, down, up, right}  = {home, pgdown, pgup, end}
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* 0: qwerty
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│GRAVE│  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSLS,       \
+        LCTL,    A,    S,   D,   F,   G,   H,   J,   K,    L, SCLN, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                SPC,                  FN0, RGUI,  APP, RCTL),
+    /* 1: Poker with Arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│     │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│ Fn1 │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,   UP, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                    FN1, LEFT, DOWN, RGHT),
+    /* 2: Poker with Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│ Fn2 │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS, TRNS, TRNS,                   TRNS,                    FN2, TRNS, TRNS, TRNS),
+    /* 3: Poker with Arrow and Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │     │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│ Fn3 │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,       \
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,   UP, TRNS, \
+        TRNS, TRNS, TRNS,                   TRNS,                    FN3, LEFT, DOWN, RGHT),
+    /* 4: Poker Fn'd
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ Fn6 │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Fn8 │ End │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│ Fn5 │█████│█████│█████│ Fn4 │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         ESC,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS,  FN6,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME,  INS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS,  FN8,  END, TRNS, TRNS,       \
+        TRNS, TRNS,  DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN,  DEL, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                    FN5,                    FN4, TRNS, TRNS, TRNS),
+    /* 5: Poker Fn'd arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ Fn7 │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Fn8 │ End │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│PgUp │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│ Fn4 │█████│█████│█████│ Fn5 │Home │PgDwn│ End │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         ESC,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS,  FN7,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME,  INS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS,  FN8,  END, TRNS, TRNS,       \
+        TRNS, TRNS,  DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN,  DEL, TRNS, PGUP, TRNS, \
+        TRNS, TRNS, TRNS,                    FN4,                    FN5, HOME, PGDN,  END),
+    /* 6: Poker Fn'd Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│Grave│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ Fn4 │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Fn8 │ End │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│ Fn7 │█████│█████│█████│ Fn6 │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS,  FN4,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME,  INS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS,  FN8,  END, TRNS, TRNS,       \
+        TRNS, TRNS,  DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN,  DEL, TRNS, TRNS, TRNS, \
+        TRNS, TRNS, TRNS,                    FN7,                    FN6, TRNS, TRNS, TRNS),
+    /* 7: Poker Fn'd Arrow + Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│Grave│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │ Fn5 │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Fn8 │ End │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│PgUp │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│ Fn6 │█████│█████│█████│ Fn7 │Home │PgDwn│ End │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+    */
+    LEGACY_KEYMAP(
+         GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS, TRNS, \
+        TRNS,  FN5,   UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME,  INS, TRNS,       \
+        TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS,  FN8,  END, TRNS, TRNS,       \
+        TRNS, TRNS,  DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN,  DEL, TRNS, PGUP, TRNS, \
+        TRNS, TRNS, TRNS,                    FN6,                    FN7, HOME, PGDN,  END),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+    /* Poker Layout */
+    [0] = ACTION_LAYER_SET(4, ON_PRESS),     // FN0 move to Fn'd             when press
+    [1] = ACTION_LAYER_SET(5, ON_PRESS),     // FN1 move to Fn'd arrow       when press
+    [2] = ACTION_LAYER_SET(6, ON_PRESS),     // FN2 move to Fn'd Esc         when press
+    [3] = ACTION_LAYER_SET(7, ON_PRESS),     // FN3 move to Fn'd arrow + Esc when press
+
+    //[4] = ACTION_LAYER_CLEAR(ON_RELEASE),    // FN4 clear overlay            when release
+    [4] = ACTION_LAYER_SET(0, ON_RELEASE),   // FN4 clear overlay            when release
+    [5] = ACTION_LAYER_SET(1, ON_RELEASE),   // FN5 move to arrow            when release
+    [6] = ACTION_LAYER_SET(2, ON_RELEASE),   // FN6 move to Esc              when release
+    [7] = ACTION_LAYER_SET(3, ON_RELEASE),   // FN7 move to arrow + Esc      when release
+
+    [8] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN8 Task(RControl,RShift+Esc)
+};
diff --git a/keyboards/s60-x/keymaps/poker_set/readme.md b/keyboards/s60-x/keymaps/poker_set/readme.md
new file mode 100644 (file)
index 0000000..0d8be9d
--- /dev/null
@@ -0,0 +1,31 @@
+### 3  Poker
+[keymap_poker.c](keymap_poker.c) emulates original Poker layers
+while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
+
+    Fn + Esc = `
+    Fn + {left, down, up, right}  = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn  │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │ FnQ │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Tsk │ End │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│ FnS │█████│█████│█████│ Fn  │Left │Down │Right│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/spacefn/keymap.c b/keyboards/s60-x/keymaps/spacefn/keymap.c
new file mode 100644 (file)
index 0000000..b6dc7ca
--- /dev/null
@@ -0,0 +1,55 @@
+#include "s60-x.h"
+
+/*
+ * SpaceFN
+ * http://geekhack.org/index.php?topic=51069.0
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Keymap 0: Default Layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████Spc/Fn0█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+    LEGACY_KEYMAP(
+         ESC,    1,    2,   3,   4,   5,   6,   7,   8,    9,    0, MINS,  EQL,   NO, BSPC, \
+         TAB,    Q,    W,   E,   R,   T,   Y,   U,   I,    O,    P, LBRC, RBRC, BSLS,       \
+        CAPS,    A,    S,   D,   F,   G,   H,   J,   K,    L, SCLN, QUOT,   NO,  ENT,       \
+        LSFT,   NO,    Z,   X,   C,   V,   B,   N,   M, COMM,  DOT, SLSH,   NO, RSFT,   NO, \
+        LCTL, LGUI, LALT,                FN0,                 RALT, RGUI,  APP, RCTL),
+
+    /* Overlay 1: SpaceFN
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│  `  │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │ Esc │     │     │     │Home │ Up  │ End │Pscr │Slck │Pause│ Ins │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │     │     │     │PgUp │Left │Down │Right│     │     │▒▒▒▒▒│     │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │▒▒▒▒▒│     │     │     │Space│PgDwn│  `  │  ~  │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+     */
+    LEGACY_KEYMAP(
+        GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  F11,  F12, TRNS,  DEL, \
+        TRNS, TRNS, TRNS,  ESC, TRNS, TRNS, TRNS, HOME,   UP,  END, PSCR, SLCK, PAUS,  INS,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS,       \
+       TRNS, TRNS, TRNS, TRNS, TRNS,  SPC, PGDN,  GRV,  FN1, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+       TRNS, TRNS, TRNS,                   TRNS,                   TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
+    [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),    // tilde
+};
diff --git a/keyboards/s60-x/keymaps/spacefn/readme.md b/keyboards/s60-x/keymaps/spacefn/readme.md
new file mode 100644 (file)
index 0000000..d04bd94
--- /dev/null
@@ -0,0 +1,27 @@
+### 6. SpaceFN
+This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
+
+#### 6.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│████ Space/Fn ███│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 6.1 SpaceFN layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │     │     │     │     │Home │ Up  │ End │ Psc │ Slk │Pause│ Ins │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │     │     │     │PgUp │Left │Down │Right│     │     │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│     │     │     │     │Space│PgDwn│  `  │  ~  │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│ Fn  │█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md
new file mode 100644 (file)
index 0000000..94ce829
--- /dev/null
@@ -0,0 +1,260 @@
+S60-x keyboard firmware
+======================
+DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps are based on GH60 code. This is a port from TMK to QMK based on the [original S60-X Repo](https://github.com/VinnyCordeiro/tmk_keyboard).
+
+## S60X Resources
+- [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open)
+
+## Quickstart
+
+If you just want to test a few layouts, the archive [s60-x_precompiled.zip](s60-x_precompiled.zip) contains pre-compiled .hex-files for all available keymaps. Not all of them are tested.
+You only need to flash them onto your keyboard, which is explained below, there's no need to setup a build environment. For a full list 
+
+## Flashing your keyboard
+The recommended programs for flashing your keyboard are [Atmel FLIP](http://www.atmel.com/tools/FLIP.aspx) (Windows) and [dfu-programmer](http://dfu-programmer.sourceforge.net/) (Linux/Windows).
+
+[QMK Firmware Flasher](https://github.com/jackhumbert/qmk_firmware_flasher/releases) may work, as the S60-X keyboard uses the ATMega32U4 microcontroller, but it is untested. Use at your own risk.
+
+[Easy AVR USB Keyboard Firmware](https://deskthority.net/wiki/Easy_AVR_USB_Keyboard_Firmware) also supports S60-X, but it is completely unrelated to TMK firmware. Use at your own risk.
+
+**Programming the firmware (Windows)**
+
+1. download and install FLIP (http://www.atmel.com/tools/FLIP.aspx)
+2. connect the keyboard, press the program button on the underside of the board (S1) and wait until it enumerates (you'll hear the "disconnect" and "connect" sound)
+3. go to device manager, find the atmega32u4 chip and click "update driver"
+4. choose location manually: folder named "usb" inside the installation directory of FLIP
+5. once the driver is installed, run flip
+6. Device -> Select: choose ATMega32U4
+7. Settings -> Communication -> USB, FLIP should show the signature at this point (58 1E 95 87)
+8. File -> Load HEX file: choose the hex firmware: <firmware>.hex
+9. click "Run"
+10. after programming is done, disconnect the device from USB and connect again.
+
+
+**Programming the firmware (Linux)**
+
+1. Download and install/compile/unpack dfu-programmer from http://dfu-programmer.sourceforge.net/.
+2. Issue the following commands in the command prompt after connecting the device and pressing the programming button (S1). You may need root permissions or udev rules to do that.
+  1. `sudo dfu-programmer atmega32u4 erase`
+  2. `sudo dfu-programmer atmega32u4 flash <firmware>.hex`
+  3. `sudo dfu-programmer atmega32u4 start`
+3. The keyboard should start working. If it doesn't, reconnect the cable.
+
+## Building the firmware
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+    $ make [custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|<name>]
+
+For a more detailed explanation of the build process and the environment setup, see the ["Getting Started" section](/readme.md#getting-started).
+
+## List of included Keymaps
+
+Several versions of keymaps are available in advance but you are recommended to define your favorite layout yourself. 
+To define your own keymap, copy the [default keymap template](/quantum/template/keymaps/default) directory into the `keymaps` directory and start modifying the `keymap.c` file. Some options might require you to change the `config.h` or `Makefile` as well, refer to the main documentation for more information on those.
+If you want to later merge your finalised keymap into this repository to make it available for everyone, make sure to also modify the `readme.md` in your keymap directory to show a visual version of your keymap.
+
+Here's a list of the standard layouts that are provided with the precompiled .hex-files.
+
+### 0  Initial explanations
+The █████ blocks on the layouts hides the switch positions that do not exist physically on the PCB. If you feel like hacking the keyboard and adding new keys, those are the positions that can be used. You'll have to modify the [keymap_common.h](keymap_common.h) file for that.
+
+The ▒▒▒▒▒ blocks hides switch positions not used on this particular layout, but they do exist on the PCB.
+
+There is no LED support on the PCB at the moment, but I'll let the code for that untouched.
+
+
+### 1  [Standard - ANSI (default layout)](keymaps/default/keymap.c)
+The standard keymap is the one that is pre-flashed on the S60-X.
+
+#### 1.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│ENTER│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LSHFT│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 1.1 Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │GRAVE│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │ Up  │     │     │     │     │     │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │     │     │     │     │     │     │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 2  [Standard - ISO](keymaps/iso/keymap.c)
+The same as the standard keymap, but with additional ISO keys.
+
+
+#### 2.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ ESC │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BKSPC│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ TAB │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │▒▒▒▒▒│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │CAPSL│  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │NUHS │ENTER│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LSHFT│  \  │  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 2.1 Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │GRAVE│ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │ Up  │     │     │     │     │     │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │     │     │     │     │     │     │     │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │     │     │     │     │     │     │     │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│     │█████│█████│█████│     │     │     │     │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+    
+### 3  Poker
+[The poker keymap](keymaps/poker/keymap.c) emulates original Vortex Poker layers
+while both [poker_bit](keymaps/poker_bit/keymap.c) and [poker_set](keymap/poker_set/keymap.c) implement the same layout in a slightly different way, fix a minor issue of the original poker Layout and enhance arrow keys.
+
+    Fn + Esc = `
+    Fn + {left, down, up, right}  = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn  │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │ FnQ │ Up  │     │     │     │     │     │     │ Cal │     │Home │ Ins │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │Left │Down │Right│     │     │ Psc │ Slk │Pause│     │ Tsk │ End │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│ Del │     │ Web │Mute │ VoU │ VoD │     │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up  │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│ FnS │█████│█████│█████│ Fn  │Left │Down │Right│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 4. [Plain](keymaps/plain/keymap.c)
+Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
+
+#### 4.0 Plain Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 5. [Hasu](keymaps/hasu/keymap.c)
+This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer.
+
+(Hasu is the creator of the TMK firmware, for those who do not know that.)
+
+
+### 6. [SpaceFN](keymaps/spacefn/keymap.c)
+This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. Check the sourcefile and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0) for more information.
+
+#### 6.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │▒▒▒▒▒│BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│████ Space/Fn ███│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 6.1 SpaceFN layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │     │     │     │     │Home │ Up  │ End │ Psc │ Slk │Pause│ Ins │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │     │     │     │PgUp │Left │Down │Right│     │     │▒▒▒▒▒│     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│     │     │     │     │Space│PgDwn│  `  │  ~  │     │     │▒▒▒▒▒│     │▒▒▒▒▒│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │     │     │█████│█████│█████│ Fn  │█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 7. [HHKB](keymap/hhkb/keymap.c)
+The HHKB keymap emulates original HHKB layers.
+#### 7.0: Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Esc │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │  \  │  `  │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │BkSpc│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │ Fn3 │  '  │▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│▒▒▒▒▒│  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │▒▒▒▒▒│Shift│ Fn  │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 7.1: HHKB Fn layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │ Pwr │ F1  │ F2  │ F3  │ F4  │ F5  │ F6  │ F7  │ F8  │ F9  │ F10 │ F11 │ F12 │ Ins │ Del │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │     │     │     │     │     │     │     │ Psc │ Slk │ Pus │ Up  │     │     │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │ VoD │ VoU │ Mut │ Ejc │     │  *  │  /  │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │     │▒▒▒▒▒│     │     │     │     │     │  +  │  -  │ End │PgDwn│Down │▒▒▒▒▒│     │     │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │▒▒▒▒▒│     │     │█████│█████│█████│     │█████│█████│█████│▒▒▒▒▒│     │     │▒▒▒▒▒│█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+    
+### 8  [Custom](keymaps/custom/keymap.c)
+The custom keymap is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys.
+
+#### 8.0 Default layer
+    ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+    │  `  │  1  │  2  │  3  │  4  │  5  │  6  │  7  │  8  │  9  │  0  │  -  │  =  │PgUp │BkSpc│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │ Tab │  Q  │  W  │  E  │  R  │  T  │  Y  │  U  │  I  │  O  │  P  │  [  │  ]  │  \  │█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Caps │  A  │  S  │  D  │  F  │  G  │  H  │  J  │  K  │  L  │  ;  │  '  │PgDwn│Enter│█████│
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Shift│Home │  Z  │  X  │  C  │  V  │  B  │  N  │  M  │  ,  │  .  │  /  │ End │Shift│  Up │
+    ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+    │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+    └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+### 9. [ANSI_QWERTZ](keymaps/ansi_qwertz/keymap.c)
+
+This keymap was designed for inputting characters with diacritics with ANSI keycaps. 
+It provides toggleable SpaceFn functionality, a dedicated arrow cluster and a microphone mute key on the function layer as well as a bootloader reset key.
+
+For more info, [check here](keymaps/ansi_qwertz/readme.md).
diff --git a/keyboards/s60-x/rules.mk b/keyboards/s60-x/rules.mk
new file mode 100644 (file)
index 0000000..7ec9393
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
\ No newline at end of file
diff --git a/keyboards/s60-x/s60-x.c b/keyboards/s60-x/s60-x.c
new file mode 100644 (file)
index 0000000..4173581
--- /dev/null
@@ -0,0 +1,28 @@
+#include "s60-x.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60-x/s60-x.h
new file mode 100644 (file)
index 0000000..29a2a27
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Vinícius Nery Cordeiro <vinicius.nery.cordeiro@gmail.com>
+Copyright 2016 Felix Uhl <ifreilicht@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef S60X_H
+#define S60X_H
+
+#include "quantum.h"
+
+#ifdef __INTELLISENSE__
+#define PROGMEM
+#include "config.h"
+#endif
+
+/* S60-X keymap definition macro
+* K31 is the extra key next to short left ISO shift
+* K2C is the moved key next to enter on ISO boards
+* K3C is the extra key next to short right JIS shift
+* K0D is extra key from split backspace
+* K3E is extra key from HHKB-style split right shift
+*/
+
+#define KEYMAP( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,      \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D       \
+) { \
+    { K00,   K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   K0A,   K0B,   K0C,   K0D,   K0E }, \
+    { K10,   K11,   K12,   K13,   K14,   K15,   K16,   K17,   K18,   K19,   K1A,   K1B,   K1C,   K1D,   KC_NO    }, \
+    { K20,   K21,   K22,   K23,   K24,   K25,   K26,   K27,   K28,   K29,   K2A,   K2B,   K2C,   K2D,   KC_NO    }, \
+    { K30,   K31,   K32,   K33,   K34,   K35,   K36,   K37,   K38,   K39,   K3A,   K3B,   K3C,   K3D,   K3E }, \
+    { K40,   K41,   K42,   KC_NO, KC_NO, KC_NO, K46,   KC_NO, KC_NO, KC_NO, K4A,   K4B,   K4C,   K4D,   KC_NO    }  \
+}
+
+/*This special definition is used for S60-X keymaps that were ported from TMK
+ * QMK has a lot of keycodes that don't start with KC_, so using the regular KEYMAP macro is recommended
+ */
+#define LEGACY_KEYMAP( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,      \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+    K40, K41, K42,                K46,                K4A, K4B, K4C, K4D       \
+) { \
+  { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E }, \
+  { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_NO  }, \
+  { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO  }, \
+  { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E }, \
+  { KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_NO,    KC_##K46, KC_NO,    KC_NO,    KC_NO,    KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_NO  }  \
+}
+
+#endif
diff --git a/keyboards/s60-x/s60-x_precompiled.zip b/keyboards/s60-x/s60-x_precompiled.zip
new file mode 100644 (file)
index 0000000..00d99ca
Binary files /dev/null and b/keyboards/s60-x/s60-x_precompiled.zip differ
index 184b5ac37287a6dac1e6331a1f4c54dca3c63ee3..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,70 +1,3 @@
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes  # Console for debug(+400)
-COMMAND_ENABLE ?= yes    # Commands for debug and configuration
-NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE ?= yes   # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality (+1150)
-MIDI_ENABLE ?= no              # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no           # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
+endif
\ No newline at end of file
index 7e9f91cc829c40a9267c1f8b3dc390b52d115ed7..eb357b39e07c9b11ae00f7c035158e143e0520e3 100644 (file)
@@ -67,7 +67,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 8     // Number of LEDs
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c b/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c
new file mode 100644 (file)
index 0000000..98a298e
--- /dev/null
@@ -0,0 +1,110 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "satan.h"
+
+#define _DEFAULT 0
+#define _ALTDISP 1
+#define _FN 2
+
+enum planck_keycodes {
+  DEFAULT = SAFE_RANGE,
+  ALTDISP
+};
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty alt/gui/space/gui/alt
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  \  |  `  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |  Bksp  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl    |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift     |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  | RShift    | FN  |
+ * |-----------------------------------------------------------------------------------------+
+ *         | LAlt| LGUI  |               Space                | RGUI  | RAlt |
+ *         `-----------------------------------------------------------------'
+ */
+  [_DEFAULT] = KEYMAP_HHKB( /* Basic QWERTY */
+      KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,    KC_BSLS, KC_GRV, \
+      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,   KC_BSPC,  \
+      KC_LCTL,  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_ENT,   \
+      KC_LSFT,  KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,  MO(_FN), \
+      ______,  KC_LALT,  KC_LGUI,            KC_SPC,                                                 KC_RGUI,  KC_RALT, ______, ______ \
+      ),
+
+/* Qwerty gui/alt/space/alt/gui
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |  \  |  `  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |  Bksp  |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl    |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift     |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  | RShift    | FN  |
+ * |-----------------------------------------------------------------------------------------+
+ *         |LGUI | LAlt  |               Space                | RAlt   |RGUI |
+ *         `-----------------------------------------------------------------'
+ */
+  [_ALTDISP] = KEYMAP_HHKB( /* Basic QWERTY */
+      KC_ESC,   KC_1,     KC_2,     KC_3,    KC_4,     KC_5,     KC_6,     KC_7,    KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,    KC_BSLS, KC_GRV, \
+      KC_TAB,   KC_Q,     KC_W,     KC_E,    KC_R,     KC_T,     KC_Y,     KC_U,    KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,   KC_BSPC,  \
+      KC_LCTL,  KC_A,     KC_S,     KC_D,    KC_F,     KC_G,     KC_H,     KC_J,    KC_K,  KC_L,     KC_SCLN,  KC_QUOT,  KC_ENT,   \
+      KC_LSFT,  KC_Z,     KC_X,    KC_C,     KC_V,     KC_B,     KC_N,    KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,  MO(_FN), \
+      ______,  KC_LGUI,  KC_LALT,            KC_SPC,                                                 KC_RALT,  KC_RGUI, ______, ______ \
+      ),
+
+/* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * |     | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * |  CAPS  | BL- | BL+ | BL  |     |     |     |     | Psc | Slck| Paus| Up  |     |        |
+ * |-----------------------------------------------------------------------------------------+
+ * |         | Vol-| Vol+| Mute|     |     | *   | /   | Home| PgUp| Left|Right|             |
+ * |-----------------------------------------------------------------------------------------+
+ * |           | Prev| Play| Next|     |     | +   | -   | End  |PgDn| Down|           |     |
+ * |-----------------------------------------------------------------------------------------+
+ *         |       |       |                                 | Stop  |       |
+ *         `-----------------------------------------------------------------'
+ */
+  [_FN] = KEYMAP_HHKB( /* Layer 1 */
+      ______,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12, KC_INS,  KC_DEL, \
+      KC_CAPS,   BL_DEC, BL_INC, BL_TOGG, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______,  \
+      ______,   KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______,   \
+      ______,   KC_MPRV, KC_MPLY, KC_MNXT,______,______,KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______,______,  \
+      ______,   DEFAULT, ALTDISP,                 ______,                 KC_MSTP, ______,    ______,    ______ \
+      )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  return MACRO_NONE;
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case DEFAULT:
+      if (record->event.pressed) {
+        persistant_default_layer_set(1UL<<_DEFAULT);
+      }
+      return false;
+      break;
+    case ALTDISP:
+      if (record->event.pressed) {
+        persistant_default_layer_set(1UL<<_ALTDISP);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/satan/keymaps/dbroqua_hhkb/readme.md b/keyboards/satan/keymaps/dbroqua_hhkb/readme.md
new file mode 100644 (file)
index 0000000..39e71be
--- /dev/null
@@ -0,0 +1,9 @@
+# Dbroqua HHKB like Layout
+
+Like the HHKB but with a Satan GH60 PCB :D.
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua_hhkb make dfu
+```
\ No newline at end of file
diff --git a/keyboards/satan/keymaps/default/Makefile b/keyboards/satan/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..2a7ff27
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
index 35dbbb77b2ec511044cb638257667a4c64109e9e..2bf49d2e65db8753e4b65813a38ba9a8e649ecab 100644 (file)
@@ -11,6 +11,8 @@
 #define _BL 0
 #define _FL 1
 
+#define _______ KC_TRNS
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   /* Keymap _BL: (Base Layer) Default Layer
    * ,-----------------------------------------------------------.
@@ -25,12 +27,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * |Ctrl|Gui |Alt |      Space            |Alt |Gui |FN  |Ctrl |
    * `-----------------------------------------------------------'
    */
-[_BL] = KEYMAP(
-  F(0),    KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS,  KC_EQL,   KC_BSPC, \
-  KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,  KC_RBRC,  KC_BSLS, \
-  KC_CAPS,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,            KC_ENT,  \
-  KC_LSFT,         KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,            KC_RSFT, \
-  KC_LCTL, KC_LGUI,KC_LALT,          KC_SPC,                                        KC_RALT,  KC_RGUI, MO(_FL),  KC_RCTL),
+[_BL] = KEYMAP_ANSI(
+  F(0),    KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS, KC_EQL, KC_BSPC, \
+  KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC, KC_RBRC,KC_BSLS, \
+  KC_CAPS, KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,         KC_ENT,  \
+  KC_LSFT,         KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,         KC_RSFT, \
+  KC_LCTL, KC_LGUI,KC_LALT,                KC_SPC,                                 KC_RALT,KC_RGUI, MO(_FL),KC_RCTL),
 
   /* Keymap _FL: Function Layer
    * ,-----------------------------------------------------------.
@@ -45,19 +47,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * |    |    |    |                        |    |    |    |    |
    * `-----------------------------------------------------------'
    */
-[_FL] = KEYMAP(
+[_FL] = KEYMAP_ANSI(
   #ifdef RGBLIGHT_ENABLE
-  KC_GRV, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,  \
-  KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,   KC_TRNS,   BL_DEC,   BL_INC,   BL_TOGG, \
-  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,              KC_TRNS, \
-  KC_TRNS,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,  \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______, \
+  _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \
+  _______,_______,_______,                 _______,                       _______,_______,_______, _______),
   #else
-  KC_GRV, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,  \
-  KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,   KC_TRNS,   BL_DEC,   BL_INC,   BL_TOGG, \
-  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,              KC_TRNS, \
-  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,  \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC, BL_INC,BL_TOGG, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+  _______,_______,_______,                _______,                        _______,_______,_______,_______),
   #endif
 };
 
diff --git a/keyboards/satan/keymaps/default/readme.md b/keyboards/satan/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..c366147
--- /dev/null
@@ -0,0 +1 @@
+# default Satan GH60 layout
diff --git a/keyboards/satan/keymaps/denolfe/Makefile b/keyboards/satan/keymaps/denolfe/Makefile
new file mode 100644 (file)
index 0000000..c4adab7
--- /dev/null
@@ -0,0 +1,20 @@
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?= no   # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no              # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no           # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/satan/keymaps/denolfe/README.md b/keyboards/satan/keymaps/denolfe/README.md
new file mode 100644 (file)
index 0000000..30b94fc
--- /dev/null
@@ -0,0 +1,12 @@
+# denolfe's Layout
+Customized Satan keymap 
+
+![Layout](keyboard-layout.png "Practical Keymap")
+
+## Programming Instructions:
+`cd` into keymap directory, `make dfu`
+
+## Features
+- Movement keys with <kbd>CapsLock</kbd> + <kbd>h</kbd>, <kbd>j</kbd>, <kbd>k</kbd>, <kbd>l</kbd>
+- Media Keys
+- Backlight control
diff --git a/keyboards/satan/keymaps/denolfe/keyboard-layout.png b/keyboards/satan/keymaps/denolfe/keyboard-layout.png
new file mode 100644 (file)
index 0000000..d6d6ad5
Binary files /dev/null and b/keyboards/satan/keymaps/denolfe/keyboard-layout.png differ
diff --git a/keyboards/satan/keymaps/denolfe/keymap.c b/keyboards/satan/keymaps/denolfe/keymap.c
new file mode 100644 (file)
index 0000000..5f189d7
--- /dev/null
@@ -0,0 +1,171 @@
+#include "satan.h"
+
+#ifdef RGBLIGHT_ENABLE
+#include "rgblight.h"
+#endif
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _SL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-----------------------------------------------------------.
+   * |Esc~| 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+   * |-----------------------------------------------------------|
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |
+   * |-----------------------------------------------------------|
+   * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |
+   * |-----------------------------------------------------------|
+   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |
+   * |-----------------------------------------------------------|
+   * |Ctrl|Gui |Alt |      Space            |Alt |Gui |FN  |Ctrl |
+   * `-----------------------------------------------------------'
+   */
+[_BL] = KEYMAP_ANSI(
+  F(0),      KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,     KC_9,    KC_0,    KC_MINS,  KC_EQL,   KC_BSPC, \
+  KC_TAB,    KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,     KC_O,    KC_P,    KC_LBRC,  KC_RBRC,  KC_BSLS, \
+  MO(_FL),   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,     KC_L,    KC_SCLN, KC_QUOT,            KC_ENT,  \
+  KC_LSFT,   KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,  KC_DOT,  KC_SLSH,                     KC_RSFT, \
+  KC_LCTL, KC_LGUI,KC_LALT,                          KC_SPC,                            KC_RALT, MO(_FL),  KC_RGUI,  KC_RCTL),
+
+  /* Keymap _FL: Function Layer
+   * ,-----------------------------------------------------------.
+   * |   |   |   |   |   |   |   |   |   |   |   |   |   |  RESET|
+   * |-----------------------------------------------------------|
+   * |     |   |   |   |   |   |   |   |   |   |   |BL-|BL+|BL   |
+   * |-----------------------------------------------------------|
+   * |      |   |   |   |   |   |   |       |   |   |   |        |
+   * |-----------------------------------------------------------|
+   * |        | F1|F2 | F3|F4 | F5| F6| F7| F8|   |   |          |
+   * |-----------------------------------------------------------|
+   * |    |    |    |                        |    |    |    |    |
+   * `-----------------------------------------------------------'
+   */
+[_FL] = KEYMAP_ANSI(
+  #ifdef RGBLIGHT_ENABLE
+  KC_GRV,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,   \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, \
+  KC_TRNS, F(1),    F(2),    F(3),    F(4),    F(5),    F(6),    F(7),     F(8),    KC_TRNS, KC_TRNS,                   KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  #else
+  KC_GRV,   KC_F1,    KC_F2,    KC_F3,     KC_F4,    KC_F5,    KC_F6,    KC_F7,          KC_F8,        KC_F9,          KC_F10,   KC_F11,  KC_F12,  KC_DEL,  \
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PGDN,        KC_PGUP,      KC_TRNS,        KC_END,   KC_MPRV, KC_MNXT, KC_MPLY, \
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_LEFT,  KC_DOWN,        KC_UP,        KC_RIGHT,       KC_TRNS,  KC_TRNS,          KC_TRNS, \
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  BL_DEC,    BL_TOGG,  BL_INC,   KC_HOME,  LCTL(KC_LEFT),  LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS,                    RESET,   \
+  KC_TRNS,  KC_TRNS,  F(9),                                    KC_TRNS,                                                KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS),
+  #endif
+
+[_SL] = KEYMAP_ANSI(
+  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,         KC_F7,               KC_F8,              KC_F9,                KC_F10,       KC_F11,  KC_F12,  KC_DEL,  \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,       KC_PGDN,             KC_PGUP,            KC_TRNS,              LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN),       LSFT(KC_UP),        LSFT(KC_RIGHT),       KC_TRNS,      KC_TRNS,          KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_TOGG, BL_INC,  LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS,                        RESET,   \
+  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                                                                      KC_TRNS,      KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+enum function_id {
+    SHIFT_ESC,
+    #ifdef RGBLIGHT_ENABLE
+    RGBLED_TOGGLE,
+    RGBLED_STEP_MODE,
+    RGBLED_INCREASE_HUE,
+    RGBLED_DECREASE_HUE,
+    RGBLED_INCREASE_SAT,
+    RGBLED_DECREASE_SAT,
+    RGBLED_INCREASE_VAL,
+    RGBLED_DECREASE_VAL
+    #endif
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  [0]  = ACTION_FUNCTION(SHIFT_ESC),
+  #ifdef RGBLIGHT_ENABLE
+  [1]  = ACTION_FUNCTION(RGBLED_TOGGLE),
+  [2]  = ACTION_FUNCTION(RGBLED_STEP_MODE),
+  [3]  = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+  [4]  = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+  [5]  = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+  [6]  = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+  [7]  = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+  [8]  = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+  #endif
+  [9]  = ACTION_LAYER_MODS(2, MOD_LSFT)
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  static uint8_t shift_esc_shift_mask;
+  switch (id) {
+    case SHIFT_ESC:
+      shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+      if (record->event.pressed) {
+        if (shift_esc_shift_mask) {
+          add_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          add_key(KC_ESC);
+          send_keyboard_report();
+        }
+      } else {
+        if (shift_esc_shift_mask) {
+          del_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          del_key(KC_ESC);
+          send_keyboard_report();
+        }
+      }
+      break;
+    //led operations
+    #ifdef RGBLIGHT_ENABLE
+    case RGBLED_TOGGLE:
+      if (record->event.pressed) {
+        rgblight_toggle();
+      }
+      break;
+    case RGBLED_INCREASE_HUE:
+      if (record->event.pressed) {
+        rgblight_increase_hue();
+      }
+      break;
+    case RGBLED_DECREASE_HUE:
+      if (record->event.pressed) {
+        rgblight_decrease_hue();
+      }
+      break;
+    case RGBLED_INCREASE_SAT:
+      if (record->event.pressed) {
+        rgblight_increase_sat();
+      }
+      break;
+    case RGBLED_DECREASE_SAT:
+      if (record->event.pressed) {
+        rgblight_decrease_sat();
+      }
+      break;
+    case RGBLED_INCREASE_VAL:
+      if (record->event.pressed) {
+        rgblight_increase_val();
+      }
+      break;
+    case RGBLED_DECREASE_VAL:
+      if (record->event.pressed) {
+        rgblight_decrease_val();
+      }
+      break;
+    case RGBLED_STEP_MODE:
+      if (record->event.pressed) {
+        rgblight_step();
+      }
+      break;
+    #endif
+  }
+}
diff --git a/keyboards/satan/keymaps/iso_split_rshift/.gitignore b/keyboards/satan/keymaps/iso_split_rshift/.gitignore
new file mode 100644 (file)
index 0000000..4d65266
--- /dev/null
@@ -0,0 +1,3 @@
+updatemerge.sh
+clear_flash.hex
+resetboard.sh
diff --git a/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg b/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg
new file mode 100644 (file)
index 0000000..7616693
Binary files /dev/null and b/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg differ
diff --git a/keyboards/satan/keymaps/iso_split_rshift/Makefile b/keyboards/satan/keymaps/iso_split_rshift/Makefile
new file mode 100644 (file)
index 0000000..d1e07da
--- /dev/null
@@ -0,0 +1,16 @@
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE  = no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE  = yes # Audio control and System control(+450)
+CONSOLE_ENABLE   = yes # Console for debug(+400)
+COMMAND_ENABLE   = yes # Commands for debug and configuration
+NKRO_ENABLE      = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE  = yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE      = no  # MIDI controls
+AUDIO_ENABLE     = no
+UNICODE_ENABLE   = no  # Unicode
+BLUETOOTH_ENABLE = no  # Enable Bluetooth with the Adafruit EZ-Key HID
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/satan/keymaps/iso_split_rshift/build.sh b/keyboards/satan/keymaps/iso_split_rshift/build.sh
new file mode 100755 (executable)
index 0000000..6b4b456
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/bash
+# adjust for cpu 
+# -j 16 gave best result on a hyperthreaded quad core core i7
+
+LIMIT=10
+THREADS="-j 16"
+KMAP=iso_split_rshift
+
+echo "We need sudo later"
+sudo ls 2>&1 /dev/null
+
+function wait_bootloader {
+       echo "Waiting for Bootloader..."
+       local STARTTIME=$(date +"%s")
+       local REMIND=0
+    local EXEC=dfu-programmer
+    local TARGET=atmega32u4
+       while true
+       do
+               sudo $EXEC $TARGET get > /dev/null 2>&1
+               [ $? -eq 0 ] && break
+               ENDTIME=$(date +"%s")
+               DURATION=$(($ENDTIME-$STARTTIME))
+               if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
+               then 
+                       echo "Did you forget to press the reset button?"
+                       REMIND=1
+               fi
+        sleep 1
+       done
+}
+make clean
+make KEYMAP=${KMAP} ${THREADS}
+if [[ $? -eq 0 ]]
+then
+    echo "please trigger flashing!"
+    wait_bootloader
+    sudo make KEYMAP=${KMAP} dfu ${THREADS}
+else
+    echo "make failed"
+    exit 77
+fi
diff --git a/keyboards/satan/keymaps/iso_split_rshift/config.h b/keyboards/satan/keymaps/iso_split_rshift/config.h
new file mode 100644 (file)
index 0000000..27c1372
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// only change
+#undef RGB_DI_PIN 
+#define RGB_DI_PIN B2
+
+#endif
diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c
new file mode 100644 (file)
index 0000000..cf938e0
--- /dev/null
@@ -0,0 +1,209 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include "satan.h"
+// TODO: replace your ugly german brckets with #defines
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DEF 0
+#define _SPC 1
+#define _TAB 2
+#define _SFX 3
+
+// dual-role shortcuts
+#define TABDUAL   LT(_TAB, KC_TAB)
+#define CAPSDUAL  CTL_T(KC_ESC)
+#define SPACEDUAL LT(_SPC, KC_SPACE)
+#define ENTERDUAL CTL_T(KC_ENT)
+// arrow cluster duality bottom right corner
+#define ARRLEFT  ALT_T(KC_LEFT)
+#define ARRDOWN  GUI_T(KC_DOWN)
+#define ARRUP    SFT_T(KC_UP)
+#define ARRRIGHT CTL_T(KC_RIGHT)
+// german brackets
+#define GER_CUR_L RALT(KC_7)    // [
+#define GER_CUR_R RALT(KC_0)    // ]
+#define GER_PAR_L LSFT(KC_8)    // (
+#define GER_PAR_R LSFT(KC_9)    // )
+#define GER_ANG_L KC_NUBS       // <
+#define GER_ANG_R LSFT(KC_NUBS) // >
+#define GER_BRC_L RALT(KC_8)    // [
+#define GER_BRC_R RALT(KC_9)    // ]
+
+// increase readability 
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* Keymap _DEF: Default Layer
+     * ,-----------------------------------------------------------.
+     * |Grv|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+     * |-----------------------------------------------------------|
+     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|   \ | Tab is Fn1
+     * |-----------------------------------------------------------|
+     * |Ctrl   | A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '| Return |
+     * |-----------------------------------------------------------|
+     * |Sft | < |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Fn2| RShift is UP
+     * |-----------------------------------------------------------|
+     * |Ctrl|Win |Alt |      Space/Fn0         |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is 
+     * `-----------------------------------------------------------'   LEFT DWN RIGHT
+     */
+    [_DEF] = KEYMAP_ISO_SPLITRSHIFT(
+        KC_GRV,   KC_1,    KC_2,    KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,   \
+        TABDUAL,  KC_Q,    KC_W,    KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,   \
+        CAPSDUAL, KC_A,    KC_S,    KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
+        KC_LSFT,  KC_NUBS, KC_Z,    KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,  KC_SLSH, ARRUP,   TG(_SFX),      \
+        KC_LCTL,  KC_LGUI, KC_LALT,             SPACEDUAL,                       KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT),
+
+    /* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
+     * ,-----------------------------------------------------------.
+     * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete|
+     * |-----------------------------------------------------------|
+     * |    |Paus| Up| [ | ] |   |   |   | ( | ) |   |   |   |     |
+     * |-----------------------------------------------------------|
+     * |      |Lft|Dwn|Rgt|   |   |Left|Down|Right|Up|  |   | PLAY |
+     * |-----------------------------------------------------------|
+     * |    |   |   |   | < | > |   |M0 |   |   |   |   | Vol+ |   |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |Alt |Prev|Vol-|Next|
+     * `-----------------------------------------------------------'
+     */
+    [_SPC] = KEYMAP_ISO_SPLITRSHIFT(
+        KC_PSCR, KC_F1,   KC_F2,   KC_F3,     KC_F4,     KC_F5,     KC_F6,    KC_F7,     KC_F8,     KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+        _______, KC_PAUS, KC_UP,   GER_BRC_L, GER_BRC_R, _______,   _______,  GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
+        _______, KC_LEFT, KC_DOWN, KC_RIGHT,  _______,   _______,   KC_LEFT,  KC_DOWN,   KC_UP,     KC_RGHT, _______, _______, _______, KC_MPLY, \
+        _______, _______, _______, _______,   GER_ANG_L, GER_ANG_R, KC_SPACE, M(0),      _______,   _______, _______, _______, KC_VOLU, _______, \
+        _______, _______, _______,                                  _______,                                 _______, KC_MPRV, KC_VOLD, KC_MNXT),
+
+    /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
+     * ,-----------------------------------------------------------.
+     * |WAKE|   |   |   |   |   |   |   |   |   |   |   |   |Insert|  TAB+GRC = WAKE
+     * |-----------------------------------------------------------|
+     * |     |   |   |   |   |   |   |   | { | } |   |   |   |     |
+     * |-----------------------------------------------------------|
+     * |      |   |   |   |   |   |Pos1|PgDn|PgUp|End|  |   |Retrn |
+     * |-----------------------------------------------------------|
+     * |    |   |   |   |   |   |   |AF2|   |   |   |   | PgUp |   |
+     * |-----------------------------------------------------------|
+     * |    |    |    |                        |Alt |Pos1|PgDn|End |
+     * `-----------------------------------------------------------'
+     */
+    [_TAB] = KEYMAP_ISO_SPLITRSHIFT(
+        KC_WAKE, _______, _______, _______, _______, _______, _______, _______,    _______,  _______, _______, _______, _______, KC_INS,  \
+        _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN,    KC_PGUP,  KC_END,  _______, _______, _______, KC_ENT,  \
+        _______, _______, _______, _______, _______, _______, _______, M(1),       _______,  _______, _______, _______, KC_PGUP, _______, \
+        _______, _______, _______,                            _______,                                _______, KC_HOME, KC_PGDN, KC_END),
+
+    /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
+     * ,-----------------------------------------------------------.
+     * |RSET|  |   |   |   |   |   |  7|  8|  9|   |   |   |Backsp |
+     * |-----------------------------------------------------------|
+     * |     |   |   |   |   |   |   | 4 | 5 | 6 |   |   |   |   \ |
+     * |-----------------------------------------------------------|
+     * |      | L | L |   |   |   |   | 1 | 2 | 3 |   |   | Return |
+     * |-----------------------------------------------------------|
+     * |    |   | L | L | L | L | L | L |   | 0 |   |  /|  Up  |   | All "L"s represent
+     * |-----------------------------------------------------------| LED controlling
+     * |Ctrl|Win |Alt |                        |Alt |Left|Down|Right|
+     * `-----------------------------------------------------------'
+     */
+    [_SFX] = KEYMAP_ISO_SPLITRSHIFT(
+        RESET,   _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9, _______, _______, _______, KC_BSPC, \
+        _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6, _______, _______, _______, KC_BSLS, \
+        _______, F(2),    F(3),    _______, _______, _______, _______, KC_1,    KC_2,    KC_3, _______, _______, XXXXXXX, KC_ENT,  \
+        _______, F(4),    F(5),    F(6),    F(7),    F(8),    F(9),    _______, _______, KC_0, _______, KC_SLSH, KC_UP,   _______, \
+        _______, _______, _______,                            _______,                         _______, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+enum function_id {
+    LAUNCH,
+    RGBLED_TOGGLE,
+    RGBLED_STEP_MODE,
+    RGBLED_INCREASE_HUE,
+    RGBLED_DECREASE_HUE,
+    RGBLED_INCREASE_SAT,
+    RGBLED_DECREASE_SAT,
+    RGBLED_INCREASE_VAL,
+    RGBLED_DECREASE_VAL,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [1]  = ACTION_FUNCTION(LAUNCH),
+    [2]  = ACTION_FUNCTION(RGBLED_TOGGLE),
+    [3]  = ACTION_FUNCTION(RGBLED_STEP_MODE),
+    [4]  = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+    [5]  = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+    [6]  = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+    [7]  = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+    [8]  = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+    [9]  = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+    [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    // MACRODOWN only works in this function
+    switch(id) {
+        case 0:
+            return (record->event.pressed ? 
+                    MACRO( D(RALT), T(SPC), U(RALT), END )
+                    :MACRO( END ));
+            break;
+        case 1:
+            return (record->event.pressed ? 
+                    MACRO( D(LALT), T(F2), U(LALT), END )
+                    :MACRO( END ));
+            break;
+    }
+    return MACRO_NONE;
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+    switch (id) {
+        case RGBLED_TOGGLE:
+            //led operations
+            if (record->event.pressed) {
+                rgblight_toggle();
+            }
+            break;
+        case RGBLED_INCREASE_HUE:
+            if (record->event.pressed) {
+                rgblight_increase_hue();
+            }
+            break;
+        case RGBLED_DECREASE_HUE:
+            if (record->event.pressed) {
+                rgblight_decrease_hue();
+            }
+            break;
+        case RGBLED_INCREASE_SAT:
+            if (record->event.pressed) {
+                rgblight_increase_sat();
+            }
+            break;
+        case RGBLED_DECREASE_SAT:
+            if (record->event.pressed) {
+                rgblight_decrease_sat();
+            }
+            break;
+        case RGBLED_INCREASE_VAL:
+            if (record->event.pressed) {
+                rgblight_increase_val();
+            }
+            break;
+        case RGBLED_DECREASE_VAL:
+            if (record->event.pressed) {
+                rgblight_decrease_val();
+            }
+            break;
+        case RGBLED_STEP_MODE:
+            if (record->event.pressed) {
+                rgblight_step();
+            }
+            break;
+    }
+}
diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md
new file mode 100644 (file)
index 0000000..ec6123d
--- /dev/null
@@ -0,0 +1,36 @@
+toneman77's Satan Layout
+=====================
+
+##Quantum MK Firmware
+For the full Quantum feature list, see the parent readme.md.
+
+* heavily modified ISO (!) layout with split right shift key
+* spaceFn
+* Dual-Role keys:
+* 
+ | Original key     | when tapped   | when held     |
+ | ---------------- | ------------- | ------------- |
+ | Space            | Space         | layer change  |
+ | Caps lock        | Escape        | Control       |
+ | Tab              | Tab           | layer change  |
+ | Enter            | Enter         | Control       |
+
+* Lockable layer for LED functions and numpad
+* vim-style arrow keys on hjkl (spacefn layer)
+* corresponding Home/PgDn/PgUp/End on hjkl (tab layer)
+* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift
+* more bonus arrow keys on wasd (spacefn layer)
+* media keys prev/next/play/vol+/vol- (spacefn layer)
+* firmware bootloader button
+* WS2812 RGB Underglow Support (not needed anymore to solder directly to the atmega)
+* additional brackets that only work in german layout due to horrible placement
+in the default qwertz layout
+
+
+### Additional Credits
+* Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan)
+* nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48)
+* no-need-to-solder-on-chip picture:
+![no need to solder directly on the chip anymore](LEDpinSatan.jpg)
+* special thanks to /u/TerryMathews  who suggested the pin PB2, so soldering
+directly on the atmega is not needed anymore. Happened on [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/4ghq9z/photos_satan_rgb60_w1976/d2k5tra)
diff --git a/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh b/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh
new file mode 100755 (executable)
index 0000000..d955ccf
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+sudo dfu-programmer atmega32u4 erase --force
+sudo dfu-programmer atmega32u4 flash clear_flash.hex
+sudo dfu-programmer atmega32u4 reset
index 8181955cf97a2f61eeb285bfc1e1aa2599701f4f..9da7d29b78ca1cdd987d55b6bdf2348e1cea7958 100644 (file)
@@ -25,12 +25,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * |Ctrl|Gui |Alt |      Space            |Alt |Gui |FN  |Ctrl |
    * `-----------------------------------------------------------'
    */
-[_BL] = KEYMAP(
-  F(0),    KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS,  KC_EQL,   KC_BSPC, \
-  KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC,  KC_RBRC,  KC_BSLS, \
-  KC_CAPS,   KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,            KC_ENT,  \
-  KC_LSFT,         KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,            KC_RSFT, \
-  KC_LCTL, KC_LGUI,KC_LALT,          KC_SPC,                                        KC_RALT,  MO(_RL), MO(_FL),  KC_RCTL),
+[_BL] = KEYMAP_ANSI(
+  F(0),    KC_1,    KC_2,    KC_3,   KC_4,    KC_5,    KC_6,    KC_7,     KC_8,    KC_9,   KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,   KC_R,    KC_T,    KC_Y,    KC_U,     KC_I,    KC_O,   KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, \
+  KC_CAPS, KC_A,    KC_S,    KC_D,   KC_F,    KC_G,    KC_H,    KC_J,     KC_K,    KC_L,   KC_SCLN, KC_QUOT,          KC_ENT,  \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,   KC_V,    KC_B,    KC_N,    KC_M,     KC_COMM, KC_DOT, KC_SLSH,                   KC_RSFT, \
+  KC_LCTL, KC_LGUI, KC_LALT,                           KC_SPC,                             KC_RALT, MO(_RL), MO(_FL), KC_RCTL),
 
 /* Keymap _FL: Function Layer
    * ,-----------------------------------------------------------.
@@ -45,12 +45,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * |    |    |    |                        |    |    |    |    |
    * `-----------------------------------------------------------'
    */
-[_FL] = KEYMAP(
-  KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,  \
-  KC_TRNS,KC_TRNS, KC_UP,  KC_TRNS,KC_TRNS,KC_TRNS, KC_CALC,KC_TRNS,KC_INS, KC_TRNS, KC_PSCR,  KC_SLCK,   KC_PAUS,   KC_TRNS, \
-  KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_HOME,    KC_PGUP,              KC_TRNS, \
-  KC_TRNS, KC_TRNS,  KC_APP,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_VOLD,  KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \
-  KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+[_FL] = KEYMAP_ANSI(
+  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+  KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS,  KC_INS,  KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
+  KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP,          KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_APP,  KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU,  KC_MUTE, KC_END,  KC_PGDN,                   KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
   
   /* Keymap _RL: Function Layer
    * ,-----------------------------------------------------------.
@@ -65,19 +65,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * |    |    |    |                        |    |    |    |    |
    * `-----------------------------------------------------------'   
    */
-[_RL] = KEYMAP(
+[_RL] = KEYMAP_ANSI(
   #ifdef RGBLIGHT_ENABLE
-  KC_GRV, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,  \
-  KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,   KC_TRNS,   BL_DEC,   BL_INC,   BL_TOGG, \
-  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,              KC_TRNS, \
-  KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  KC_GRV,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,   \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, \
+  KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS,                   KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
   #else
-  KC_GRV, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,  \
-  KC_TRNS,KC_TRNS,KC_TRNS,  KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,   KC_TRNS,   BL_DEC,   BL_INC,   BL_TOGG, \
-  KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS,              KC_TRNS, \
-  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS,KC_TRNS,KC_TRNS,          KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  KC_GRV,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,   \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC,  BL_INC,  BL_TOGG, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
   #endif
 };
 
diff --git a/keyboards/satan/keymaps/sethbc/Makefile b/keyboards/satan/keymaps/sethbc/Makefile
new file mode 100644 (file)
index 0000000..2a7ff27
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
index f8991f9fd78e7982851bcdbd893c203c27f520a5..93610258b38cd0f39e5129033a1258c2d7f71969 100644 (file)
@@ -10,6 +10,9 @@
 #define _BL 0
 #define _FL 1
 
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   /* Keymap _BL: (Base Layer) Default Layer
    * ,-----------------------------------------------------------.
@@ -29,21 +32,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC, \
   KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  \
   KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, MO(_FL), \
-  KC_LCTL, KC_LGUI, KC_LALT,          KC_SPC,                                               KC_RALT, KC_RGUI, KC_MENU, KC_RCTL),
+  KC_LCTL, KC_LALT, KC_LGUI,          KC_SPC,                                               KC_RGUI, KC_RALT, KC_MENU, KC_RCTL),
 
 [_FL] = KEYMAP_HHKB(
   #ifdef RGBLIGHT_ENABLE
-  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, RESET, \
-  KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP,   KC_TRNS, KC_BSPC, \
-  KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT,          KC_PENT, \
-  KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END,  KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, RESET, \
+  KC_CAPS, _______, RGB_TOG,RGB_MOD,RGB_HUI, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP,   _______, KC_DEL, \
+  _______, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT,          KC_PENT, \
+  _______,          RGB_VAI,RGB_VAD,_______, _______, _______, KC_PPLS, KC_PMNS, KC_END,  KC_PGDN, KC_DOWN, _______, _______, \
+  _______, _______, _______,                 _______,                                     _______, _______, _______, _______),
   #else
-  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_TRNS, RESET, \
-  KC_CAPS, KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP,   KC_TRNS, KC_BSPC, \
-  KC_TRNS, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT,          KC_PENT, \
-  KC_TRNS,          RGB_VAI,RGB_VAD,KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END,  KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                                     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, RESET, \
+  KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP,   _______, KC_DEL,  \
+  _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT,          KC_PENT, \
+  _______,          _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END,  KC_PGDN, KC_DOWN, _______, _______, \
+  _______, _______, _______,                   _______,                                     _______, _______, _______, _______),
   #endif
 };
 
diff --git a/keyboards/satan/keymaps/sethbc/readme.md b/keyboards/satan/keymaps/sethbc/readme.md
new file mode 100644 (file)
index 0000000..ed0eb87
--- /dev/null
@@ -0,0 +1,3 @@
+# sethbc's Satan GH60 layout
+
+HHKB style split right shift and split backspace.  Largely based on the HHKB layout.
index ae2bd36dbbb4428c60ef9b08d9cab3dc93c70e87..7f4bb441c410ff4c0a8cdc96e06051ef0e1d3327 100644 (file)
@@ -1,20 +1,15 @@
 #include "../../config.h"
 
-// USB Device descriptor parameter
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6060
-#define DEVICE_VER      0x0003
-#define MANUFACTURER    Custom
-#define PRODUCT         GH60 rev.CHN
-#define DESCRIPTION     QMK keyboard firmware for GH60 with WS2812 support
-
 // Backlight configuration
+#undef BACKLIGHT_LEVELS
 #define BACKLIGHT_LEVELS 3
 
 // Underlight configuration
-#define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#undef RGBLED_NUM
 #define RGBLED_NUM 6        // Number of LEDs
+#undef RGBLIGHT_HUE_STEP
 #define RGBLIGHT_HUE_STEP 8
+#undef RGBLIGHT_SAT_STEP
 #define RGBLIGHT_SAT_STEP 8
+#undef RGBLIGHT_VAL_STEP
 #define RGBLIGHT_VAL_STEP 8
index 623427e97cbf11d48af3fb720595c0ad0d019fea..979c122e555a3c9246a78a601ef8f71803aa3f09 100644 (file)
@@ -26,25 +26,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 // Function layer
 [_FL] = KEYMAP_HHKB(
-  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10,  KC_F11,  KC_F12,  KC_DEL, KC_NO, \
-  KC_NO,   KC_MPRV, KC_UP,   KC_MNXT, KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \
-  KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,            KC_NO,  \
-  KC_TRNS,          KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   LT(_RGBL, KC_PGUP), KC_TRNS,  \
-  KC_TRNS, KC_TRNS, KC_TRNS,                           KC_MPLY,                                 KC_TRNS, KC_HOME, KC_PGDN, KC_END),
+  KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10,  KC_F11,  KC_F12,   KC_DEL,   KC_NO,   \
+  KC_NO,   KC_MPRV, KC_UP,   KC_MNXT, KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_PSCR, KC_SLCK, KC_PAUS,  KC_INS,            \
+  KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,             KC_NO,             \
+  KC_TRNS,          KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   LT(_RGBL, KC_PGUP), KC_TRNS, \
+  KC_TRNS, KC_TRNS, KC_TRNS,                           KC_MPLY,                                 KC_TRNS, KC_HOME,  KC_PGDN,  KC_END),
 
 // RGB Layer
 [_RGBL] = KEYMAP_HHKB(
   #ifdef RGBLIGHT_ENABLE
   RESET,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO, KC_NO, \
-  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO, \
-  KC_NO,   BL_TOGG, BL_STEP, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,   KC_NO,            KC_NO,  \
-  KC_TRNS,          RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD,  KC_NO,   KC_NO,   KC_TRNS, KC_TRNS,\
+  KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,        \
+  KC_NO,   BL_TOGG, BL_STEP, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,    KC_NO,   KC_NO,            KC_NO,        \
+  KC_TRNS,          RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD,  KC_NO,   KC_NO,   KC_TRNS, KC_TRNS,      \
   KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
   #else
   RESET,   KC_NO,   KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   KC_NO,   KC_NO, KC_NO, \
-  KC_NO,   KC_NO,   KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   KC_NO,   KC_NO, \
-  KC_NO,   BL_TOGG, BL_STEP, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,            KC_NO,  \
-  KC_TRNS,          KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   KC_TRNS, KC_TRNS,\
+  KC_NO,   KC_NO,   KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   KC_NO,   KC_NO,        \
+  KC_NO,   BL_TOGG, BL_STEP, KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,            KC_NO,        \
+  KC_TRNS,          KC_NO,   KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,   KC_TRNS, KC_TRNS,      \
   KC_TRNS, KC_TRNS, KC_TRNS,                         KC_TRNS,                        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
   #endif
 };
diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md
new file mode 100644 (file)
index 0000000..aaf1897
--- /dev/null
@@ -0,0 +1,4 @@
+Satan GH60 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/satan/rules.mk b/keyboards/satan/rules.mk
new file mode 100644 (file)
index 0000000..1102584
--- /dev/null
@@ -0,0 +1,66 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?= yes   # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no              # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no           # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
index fa17119150271ea732d2a9be0c9378a0579e82e3..f3cbd5305e624c7b510d811cd9a624f182defe9d 100644 (file)
@@ -3,15 +3,18 @@
 
 #include "quantum.h"
 
-/* Clueboard matrix layout
+// readability
+#define XXX KC_NO
+
+/* Satan GH60 matrix layout (3c is right of 3d, 3d is shift)
    * ,-----------------------------------------------------------.
-   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d    |
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
    * |-----------------------------------------------------------|
    * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
    * |-----------------------------------------------------------|
-   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d    |
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
    * |-----------------------------------------------------------|
-   * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|  3d      |
+   * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|  3d | 3c |
    * |-----------------------------------------------------------|
    * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
    * `-----------------------------------------------------------'
 // The first section contains all of the arguments
 // The second converts the arguments into a two-dimensional array
 #define KEYMAP( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
+       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+       k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+       k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+       k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+       {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+       {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+       {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+       {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+       {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
+}
+/* Satan GH60 ANSI layout
+   * ,-----------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d    |
+   * |-----------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+   * |-----------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d    |
+   * |-----------------------------------------------------------|
+   * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|    3d    |
+   * |-----------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
+   * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ANSI( \
     k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
        k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
        k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
-       k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,           k3d, \
+       k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
        k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
 ) \
 { \
-       {k00, k01,   k02, k03,   k04,   k05, k06,   k07,   k08,   k09,   k0a, k0b, k0c,   k0d}, \
-       {k10, k11,   k12, k13,   k14,   k15, k16,   k17,   k18,   k19,   k1a, k1b, k1c,   k1d}, \
-       {k20, k21,   k22, k23,   k24,   k25, k26,   k27,   k28,   k29,   k2a, k2b, KC_NO, k2d}, \
-       {k30, KC_NO, k32, k33,   k34,   k35, k36,   k37,   k38,   k39,   k3a, k3b, KC_NO, k3d}, \
-       {k40, k41,   k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c,   k4d}  \
+       {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+       {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+       {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+       {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+       {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
 }
 
 /* Satan HHKB matrix layout
     k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
        k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
        k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
-       k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,    k3d,   k3c, \
+       k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
        k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
 ) \
 { \
-       {k00, k01,   k02, k03,   k04,   k05, k06,   k07,   k08,   k09, k0a, k0b, k0c,   k0d}, \
-       {k10, k11,   k12, k13,   k14,   k15, k16,   k17,   k18,   k19, k1a, k1b, k1c,   k1d}, \
-       {k20, k21,   k22, k23,   k24,   k25, k26,   k27,   k28,   k29, k2a, k2b, KC_NO, k2d}, \
-       {k30, KC_NO, k32, k33,   k34,   k35, k36,   k37,   k38,   k39, k3a, k3b, k3c,   k3d}, \
-       {k40, k41,   k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, k49, k4a, k4b, k4c,   k4d}  \
+       {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+       {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+       {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+       {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+       {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
 }
 
+/* ISO w/ split right shift key matrix layout
+   * ,-----------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d    |
+   * |-----------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+   * |-----------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
+   * |-----------------------------------------------------------|
+   * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|  3d  | 3c|
+   * |-----------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 4a | 4b | 4c | 4d  |
+   * `-----------------------------------------------------------'
+
+   swap 3c and 3d. 3c is right of 3d in reality
+ */
+#define KEYMAP_ISO_SPLITRSHIFT( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+       k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+       k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+       k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+       {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+       {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+       {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+       {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+       {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+}
 
 void matrix_init_user(void);
 void matrix_scan_user(void);
index 6f273064a7aadf589b93ede1caec4b825d5ed5eb..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,75 +1,3 @@
-
-
-SRC = matrix.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega16u2
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-#   comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= no         # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no          # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= no          # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no           # Console for debug(+400)
-COMMAND_ENABLE ?= no           # Commands for debug and configuration
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= no                      # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no                      # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no           # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-CUSTOM_MATRIX = yes
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
-
+endif
\ No newline at end of file
diff --git a/keyboards/sixkeyboard/rules.mk b/keyboards/sixkeyboard/rules.mk
new file mode 100644 (file)
index 0000000..2c99985
--- /dev/null
@@ -0,0 +1,70 @@
+
+
+SRC = matrix.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega16u2
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no         # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no          # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= no          # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no           # Console for debug(+400)
+COMMAND_ENABLE ?= no           # Commands for debug and configuration
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= no                      # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no                      # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no           # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+CUSTOM_MATRIX = yes
\ No newline at end of file
diff --git a/keyboards/tada68/Makefile b/keyboards/tada68/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h
new file mode 100644 (file)
index 0000000..19cf9c9
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0003
+#define MANUFACTURER    TADA
+#define PRODUCT         TADA68
+#define DESCRIPTION     QMK keyboard firmware for TADA68 with WS2812 support
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS {D0,D1,F6,F7,D5}
+#define MATRIX_COL_PINS {F0,F1,E6,C7,C6,B7,D4,B1,B0,B5,B4,D7,D6,B3,F4}
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 4
+
+/* Underlight configuration
+ */
+
+/*#define RGB_DI_PIN E2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 2     // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17*/
+//Disabled while I figure out a suitable pin for RGB support.
+//I've tried F5, D2, D3, and E2 but it's possible the end of my
+//strand is bad. New LEDs on order.
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/tada68/keymaps/default/Makefile b/keyboards/tada68/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..2a7ff27
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..da57c03
--- /dev/null
@@ -0,0 +1,98 @@
+#include "tada68.h"
+
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,----------------------------------------------------------------.
+   * |Esc | 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |~ ` |
+   * |----------------------------------------------------------------|
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |Del |
+   * |----------------------------------------------------------------|
+   * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
+   * |----------------------------------------------------------------|
+   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up|PgDn|
+   * |----------------------------------------------------------------|
+   * |Ctrl|Win |Alt |        Space          |Alt| FN|Ctrl|Lef|Dow|Rig |
+   * `----------------------------------------------------------------'
+   */
+[_BL] = KEYMAP_ANSI(
+  KC_ESC,    KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \
+  KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \
+  KC_CAPS, KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,         KC_ENT,KC_PGUP,  \
+  KC_LSFT,         KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,   KC_RSFT,KC_UP,KC_PGDN, \
+  KC_LCTL, KC_LGUI,KC_LALT,                KC_SPC,                        KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+  /* Keymap _FL: Function Layer
+   * ,----------------------------------------------------------------.
+   * |   |   |   |   |   |   |   |   |   |   |   |   |   |  RESET|    |
+   * |----------------------------------------------------------------|
+   * |     |   |   |   |   |   |   |   |   |   |   |BL-|BL+|BL   |    |
+   * |----------------------------------------------------------------|
+   * |      |   |   |   |   |   |   |       |   |   |   |        |    |
+   * |----------------------------------------------------------------|
+   * |        | F1|F2 | F3|F4 | F5| F6| F7| F8|   |   |      |   |    |
+   * |----------------------------------------------------------------|
+   * |    |    |    |                       |   |   |    |   |   |    |
+   * `----------------------------------------------------------------'
+   */
+[_FL] = KEYMAP_ANSI(
+  #ifdef RGBLIGHT_ENABLE
+  _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______,  \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,_______, \
+  _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,_______, \
+  _______,_______,_______,                 _______,               _______,_______,_______,_______,_______, _______),
+  #else
+  _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______,  \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,_______, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+  _______,_______,_______,                 _______,               _______,_______,_______,_______,_______, _______),
+  #endif
+};
+
+/*enum function_id {
+    //SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+  //[0]  = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  static uint8_t shift_esc_shift_mask;
+  switch (id) {
+    case SHIFT_ESC:
+      shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+      if (record->event.pressed) {
+        if (shift_esc_shift_mask) {
+          add_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          add_key(KC_ESC);
+          send_keyboard_report();
+        }
+      } else {
+        if (shift_esc_shift_mask) {
+          del_key(KC_GRV);
+          send_keyboard_report();
+        } else {
+          del_key(KC_ESC);
+          send_keyboard_report();
+        }
+      }
+      break;
+  }
+}*/
diff --git a/keyboards/tada68/keymaps/default/readme.md b/keyboards/tada68/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..36760d6
--- /dev/null
@@ -0,0 +1 @@
+# default TADA68 layout
diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md
new file mode 100644 (file)
index 0000000..552fdea
--- /dev/null
@@ -0,0 +1,4 @@
+TADA68 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk
new file mode 100644 (file)
index 0000000..d8ec423
--- /dev/null
@@ -0,0 +1,66 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no  # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes  # Console for debug(+400)
+COMMAND_ENABLE ?= yes    # Commands for debug and configuration
+NKRO_ENABLE ?= yes             # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?= no   # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes  # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no              # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no           # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/tada68/tada68.c b/keyboards/tada68/tada68.c
new file mode 100644 (file)
index 0000000..24f8904
--- /dev/null
@@ -0,0 +1,30 @@
+#include "tada68.h"
+#include "led.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+       matrix_init_user();
+       led_init_ports();
+};
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+       matrix_scan_user();
+};
+
+void led_init_ports(void) {
+    // * Set our LED pins as output
+    DDRB |= (1<<2);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+        // Turn capslock on
+        PORTB &= ~(1<<2);
+    } else {
+        // Turn capslock off
+        PORTB |= (1<<2);
+    }
+}
diff --git a/keyboards/tada68/tada68.h b/keyboards/tada68/tada68.h
new file mode 100644 (file)
index 0000000..d0e027a
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef TADA68_H
+#define TADA68_H
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+/* TADA68 ANSI layout
+   * ,----------------------------------------------------------------.
+   * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d    | 0e |
+   * |----------------------------------------------------------------|
+   * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d | 1e |
+   * |----------------------------------------------------------------|
+   * | 20    | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d    | 2e |
+   * |----------------------------------------------------------------|
+   * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|    3c| 3d| 3e |
+   * |----------------------------------------------------------------|
+   * | 40 | 41 | 42 |        45             | 49| 4a|  4b| 4c| 4d| 4e |
+   * `----------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP_ANSI( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+       k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, k2e, \
+       k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+       k40, k41, k42,           k45,                k49, k4a, k4b, k4c, k4d, k4e  \
+) \
+{ \
+       {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+       {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
+       {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
+       {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
+       {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e}  \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#endif
diff --git a/keyboards/tv44/Makefile b/keyboards/tv44/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/tv44/config.h b/keyboards/tv44/config.h
new file mode 100644 (file)
index 0000000..0ae93c0
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEAE
+#define PRODUCT_ID      0x8844
+#define DEVICE_VER      0x0002
+#define MANUFACTURER    Evan Sailer
+#define PRODUCT         TheVan 44
+#define DESCRIPTION     keyboard firmware for TV44
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D7, B5, F7, D4 }
+#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/tv44/keymaps/default/Makefile b/keyboards/tv44/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..f4671a9
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/tv44/keymaps/default/config.h b/keyboards/tv44/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..df06a26
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
\ No newline at end of file
diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..f3f989f
--- /dev/null
@@ -0,0 +1,97 @@
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _QW 0
+#define _DV 1
+#define _CM 2
+#define _L1 3
+#define _L2 4
+#define _L3 5
+
+// Macro name shortcuts
+#define QWERTY M(_QW)
+#define DVORAK M(_DV)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QW] = { /* Qwerty */
+    {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC },
+    {MO(_L1), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, MO(_L1) },
+    {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_F,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, MO(_L2) },
+    {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT,  XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  KC_RALT, KC_ESC,  XXXXXXX, TG(_L3) }
+  },
+  [_DV] = { /* Dvorak */
+    {KC_TAB,  KC_SLSH, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC },
+    {MO(_L1), KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    MO(_L1) },
+    {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    MO(_L2) },
+    {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT,  XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  KC_RALT, KC_ESC,  XXXXXXX, TG(_L3) }
+  },
+  [_CM] = { /* Colemak */
+    {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC },
+    {MO(_L1), KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    MO(_L1) },
+    {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, MO(_L2) },
+    {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT,  XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  KC_RALT, KC_ESC,  XXXXXXX, TG(_L3) }
+  },
+  [_L1] = { /* LAYER 1 */
+    {KC_GRV,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL  },
+    {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_DOWN, KC_UP,   KC_LEFT, KC_RGHT, _______ },
+    {_______, KC_ESC,  _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
+    {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
+  },
+  [_L2] = { /* LAYER 2 */
+    {_______, QWERTY,  DVORAK,  COLEMAK, _______, _______, _______, KC_7,    KC_8,    KC_9,    KC_0,    _______ },
+    {KC_ESC,  KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4,    KC_5,    KC_6,    KC_VOLU, KC_ENT  },
+    {_______, _______, _______, _______, _______, _______, KC_0,    KC_1,    KC_2,    KC_3,    KC_VOLD, _______ },
+    {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
+  },
+  [_L3] = { /* LAYER 3 */
+    {_______, _______, _______, _______, _______, _______, _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   _______ },
+    {KC_ESC,  _______, _______, _______, _______, _______, _______, KC_F5,   KC_F6,   KC_F7,   KC_F8,   _______ },
+    {KC_LSFT, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______ },
+    {_______, KC_LSFT, KC_B,    KC_SPC,  XXXXXXX, XXXXXXX, XXXXXXX, KC_C,    _______, _______, XXXXXXX, _______ }
+  }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _DV:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_DV);
+          }
+          break;
+        case _QW:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_QW);
+          }
+          break;
+        case _CM:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_CM);
+          }
+          break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/tv44/keymaps/default/readme.md b/keyboards/tv44/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..ac84c08
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for tv44
\ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jeebak/Makefile b/keyboards/tv44/keymaps/jeebak/Makefile
new file mode 100644 (file)
index 0000000..f4671a9
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jeebak/config.h b/keyboards/tv44/keymaps/jeebak/config.h
new file mode 100644 (file)
index 0000000..a59ef2b
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/**
+ *TV44 keymap definition macro
+ */
+#define KEYMAP_TV44( \
+    K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
+    K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
+    K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
+    K37,   K38,   K39,     K40,     K41,     K42,   K43,   K44  \
+) { \
+    { K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   K10,   K11,   K12, }, \
+    { K13,   K14,   K15,   K16,   K17,   K18,   K19,   K20,   K21,   K22,   K23,   K24, }, \
+    { K25,   K26,   K27,   K28,   K29,   K30,   K31,   K32,   K33,   K34,   K35,   K36, }, \
+    { K37,   K38,   K39,   K40, KC_NO, KC_NO,  KC_NO,  K41,   K42,   K43, KC_NO,   K44  }  \
+}
+
+#endif
diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c
new file mode 100644 (file)
index 0000000..1bb1015
--- /dev/null
@@ -0,0 +1,425 @@
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV
+};
+
+enum macro_keycodes {
+  KC_ALT_TAB,
+  KC_CMD_TAB,
+  KC_CTL_TAB,
+  KC_CMD_SLSH,
+  KC_AG_FIND,
+  KC_AG_AGAIN,
+  KC_AG_UNDO,
+  KC_AG_CUT,
+  KC_AG_COPY,
+  KC_AG_PASTE,
+  KC_AG_DESK_L,
+  KC_AG_DESK_R,
+  KC_AG_TAB_C,
+  KC_AG_TAB_N,
+  KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC     CTL_T(KC_ESC)               // Tap for Esc, hold for Ctrl
+#define SFT_ENT     SFT_T(KC_ENT)               // Tap for Enter, hold for Shift
+#define HPR_TAB     ALL_T(KC_TAB)               // Tap for Tab, hold for Hyper
+#define GUI_SEM     GUI_T(KC_SCLN)              // Tap for Semicolon, hold for GUI
+#define ALT_QUO     ALT_T(KC_QUOT)              // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC       LT(_TOUCHCURSOR, KC_SPC)    // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc)   LT(_MOUSECURSOR, kc)        // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB     M(KC_ALT_TAB)               // Macro for Alt-Tab
+#define CMD_TAB     M(KC_CMD_TAB)               // Macro for Cmd-Tab
+#define CTL_TAB     M(KC_CTL_TAB)               // Macro for Ctl-Tab
+#define CMD_SLSH    M(KC_CMD_SLSH)              // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND     M(KC_AG_FIND)               // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN    M(KC_AG_AGAIN)
+#define AG_UNDO     M(KC_AG_UNDO)
+#define AG_CUT      M(KC_AG_CUT)
+#define AG_COPY     M(KC_AG_COPY)
+#define AG_PASTE    M(KC_AG_PASTE)
+#define AG_D_L      M(KC_AG_DESK_L)             // For Virtual Desktop Switching: Left, and
+#define AG_D_R      M(KC_AG_DESK_R)             //                                Right
+#define AG_T_C      M(KC_AG_TAB_C)              // For Chrome, etc. Tab Close,
+#define AG_T_N      M(KC_AG_TAB_N)              //                  Tab New, and
+#define AG_T_R      M(KC_AG_TAB_R)              //                  Tab Reopen Closed
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |   Bksp      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   Alt   |   GUI   |  Lower  |    TC/Space    |   TC/Space     |  Raise  |   Vol+  |  Play   |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_QWERTY] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    HPR_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    CTL_ESC ,   KC_A, KC_S,LT_MC(KC_D),    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, GUI_SEM,    ALT_QUO     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  ,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_LALT   ,   KC_LGUI     ,   LOWER ,      LT_TC     ,      LT_TC      ,  RAISE  ,     KC_VOLU     ,    KC_MPLY   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab|   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  |   Bksp      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc |   A  |   R  | MC/S |   T  |   D  |   H  |   N  |   E  |   I  |   O  |    "       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   Alt   |   GUI   |  Lower  |    TC/Space    |   TC/Space     |  Raise  |   Vol+  |  Play   |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_COLEMAK] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    HPR_TAB,   KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN,    KC_BSPC      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    CTL_ESC ,   KC_A, KC_R,LT_MC(KC_S),    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  ,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_LALT   ,   KC_LGUI     ,   LOWER ,      LT_TC     ,      LT_TC      ,  RAISE  ,     KC_VOLU     ,    KC_MPLY   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab|   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |   Bksp      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc |   A  |   O  | MC/E |   U  |   I  |   D  |   H  |   T  |   N  |   S  |    /       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   Alt   |   GUI   |  Lower  |    TC/Space    |   TC/Space     |  Raise  |   Vol+  |  Play   |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_DVORAK] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    HPR_TAB,KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    CTL_ESC ,   KC_A,    KC_O,LT_MC(KC_E), KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_LSFT  , KC_SCLN,   KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    SFT_ENT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    KC_LALT   ,   KC_LGUI     ,   LOWER ,      LT_TC     ,      LT_TC      ,  RAISE  ,     KC_VOLU     ,    KC_MPLY   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   Bksp      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |  Brite  |         |         |                |                |         |   Vol-  |   Mute  |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_LOWER] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    KC_TILD,KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,    KC_BSPC      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    KC_LBRC ,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,    KC_PIPE     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_RBRC  ,  KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12, KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC,    KC_BSLS    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    BACKLIT   ,    _______    , _______ ,     _______    ,     _______     , _______ ,     KC_VOLD     ,    KC_MUTE   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   Bksp      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |  Brite  |         |         |                |                |         |   Vol-  |   Mute  |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_RAISE] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    KC_0   ,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    KC_DLR  ,   KC_4,    KC_5,    KC_6,  KC_DOT, KC_PLUS,  KC_DOT,    KC_4,    KC_5,    KC_6, KC_ASTR,    KC_PIPE     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    KC_EQL   ,   KC_7,    KC_8,    KC_9,    KC_0, KC_MINS,  KC_DOT,    KC_1,    KC_2,    KC_3, KC_SLSH,    KC_BSLS    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    BACKLIT   ,    _______    , _______ ,     _______    ,     _______     , _______ ,     KC_VOLD     ,    KC_MUTE   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |             |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |         |         |         |                |                |         |         |         |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD,  KC_INS, KC_HOME,   KC_UP,  KC_END, KC_BSPC,    _______      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    _______ ,KC_LALT,  KC_SPC,  AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT,  AG_D_L,    AG_D_R      ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,AG_UNDO,  AG_CUT, AG_COPY,AG_PASTE,  KC_GRV, KC_PGDN,  KC_DEL,  AG_T_N,  AG_T_R,CMD_SLSH,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______   ,    _______    , _______ ,     _______    ,     _______     , _______ ,     _______     ,    _______   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |             |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |         |         |         |                |                |         |         |         |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+
+[_MOUSECURSOR] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2,    _______      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4,    KC_BTN5     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______   ,    _______    , _______ ,     _______    ,     _______     , _______ ,     _______     ,    _______   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |      #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |     #       |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * |         |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |     D       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut    |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |    Z      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit    |    A    |    O    |                |                |    E    |    U    |         |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+
+[_PLOVER] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    KC_1   ,   KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,     KC_1        ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    XXXXXXX ,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    XXXXXXX  ,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,    KC_QUOT    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    EXT_PLV   ,     KC_C      ,   KC_V  ,     XXXXXXX    ,     XXXXXXX     ,   KC_N  ,      KC_M       ,    XXXXXXX   ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |         |      |      |      |      |      |      |      |      |      |      |    Del      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|            |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       |      |      |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |         |         |         |                |                |         |         |  Reset  |
+ *  `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_ADJUST] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,     KC_DEL      ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+    _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP,  QWERTY, COLEMAK,  DVORAK,  PLOVER,    _______     ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+    _______   ,    _______    , _______ ,     _______    ,     _______     , _______ ,     _______     ,    RESET     )
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    if (!eeconfig_is_enabled()) {
+      eeconfig_init();
+    }
+
+    bool use_cmd = true;    // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+    // quantum/quantum.c
+    if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+      use_cmd = false;      // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+    }
+
+    switch (id) {
+      case KC_ALT_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+      case KC_CMD_TAB:
+        if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
+        else        { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
+
+      case KC_CTL_TAB:
+        return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+      case KC_CMD_SLSH:
+        return (record->event.pressed ? MACRO( D(LGUI),  D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+      case KC_AG_FIND:
+        return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+      case KC_AG_AGAIN:
+        return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+      case KC_AG_UNDO:
+        return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+      case KC_AG_CUT:
+        return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+      case KC_AG_COPY:
+        return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+      case KC_AG_PASTE:
+        return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+      case KC_AG_DESK_L:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+      case KC_AG_DESK_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+      case KC_AG_TAB_C:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(W), END ) : MACRODOWN( D(LCTRL),            T(W), END );
+      case KC_AG_TAB_N:
+        return use_cmd ? MACRODOWN( D(LGUI),            T(T), END ) : MACRODOWN( D(LCTRL),            T(T), END );
+      case KC_AG_TAB_R:
+        return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+    }
+
+    return MACRO_NONE;
+}
diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/tv44/keymaps/jeebak/readme.md
new file mode 100644 (file)
index 0000000..43d2095
--- /dev/null
@@ -0,0 +1,129 @@
+jeebak's TV44 layout
+=======================
+NOTE: This is a port of jeebak's planck layout, for tv44.
+
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB     M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+  |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |   Bksp      |
+  |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+  | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |   Alt   |   GUI   |  Lower  |    TC/Space    |   TC/Space     |  Raise  |   Vol+  |  Play   |
+   `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+  |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   Bksp      |
+  |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+  |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |  Brite  |         |         |                |                |         |   Vol-  |   Mute  |
+   `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+  |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   Bksp      |
+  |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+  |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |  Brite  |         |         |                |                |         |   Vol-  |   Mute  |
+   `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+  | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |             |
+  |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+  |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |         |         |         |                |                |         |         |         |
+   `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+  ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+  |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |             |
+  |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+  |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+  |----------`------`------`------`------`------`------`------`------`------`------`------------|
+  |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+  |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+  |         |         |         |                |                |         |         |         |
+   `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
diff --git a/keyboards/tv44/keymaps/xyverz/Makefile b/keyboards/tv44/keymaps/xyverz/Makefile
new file mode 100644 (file)
index 0000000..f4671a9
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/config.h b/keyboards/tv44/keymaps/xyverz/config.h
new file mode 100644 (file)
index 0000000..df06a26
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
\ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c
new file mode 100644 (file)
index 0000000..8cbcf8d
--- /dev/null
@@ -0,0 +1,92 @@
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _DV 0
+#define _QW 1
+#define _CM 2
+#define _L1 3
+#define _L2 4
+
+// Macro name shortcuts
+#define DVORAK M(_DV)
+#define QWERTY M(_QW)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_DV] = { /* 0: Dvorak */
+    {KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC },
+    {MO(_L1), KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_ENT  },
+    {KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT },
+    {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
+  },
+
+  [_QW] = { /* 1: Qwerty */
+    {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC },
+    {MO(_L1), KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_ENT  },
+    {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT },
+    {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
+  },
+
+  [_CM] = { /* 2: Colemak */
+    {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC },
+    {MO(_L1), KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_ENT  },
+    {KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT },
+    {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC,  KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
+  },
+
+  [_L1] = {/* 1: FN 1 */
+    {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL  },
+    {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_DOWN, KC_UP,   KC_LEFT, KC_RGHT, _______ },
+    {_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
+    {KC_ESC,  KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ }
+  },
+
+  [_L2] = { /* 2: FN 2 */
+    {KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_ESC  },
+    {_______, KC_F11,  KC_F12,  _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT  },
+    {_______, _______, _______, _______, _______, _______, _______, _______, KC_END,  KC_PGDN, KC_VOLD, _______ },
+    {QWERTY,  DVORAK,  COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ }
+  }
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case _DV:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_DV);
+          }
+          break;
+        case _QW:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_QW);
+          }
+          break;
+        case _CM:
+          if (record->event.pressed) {
+            persistant_default_layer_set(1UL<<_CM);
+          }
+          break;
+      }
+    return MACRO_NONE;
+};
+
+
diff --git a/keyboards/tv44/keymaps/xyverz/readme.md b/keyboards/tv44/keymaps/xyverz/readme.md
new file mode 100644 (file)
index 0000000..ac84c08
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for tv44
\ No newline at end of file
diff --git a/keyboards/tv44/readme.md b/keyboards/tv44/readme.md
new file mode 100644 (file)
index 0000000..4f691a4
--- /dev/null
@@ -0,0 +1,28 @@
+tv44 keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/tv44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make default`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
\ No newline at end of file
diff --git a/keyboards/tv44/rules.mk b/keyboards/tv44/rules.mk
new file mode 100644 (file)
index 0000000..dbba6ba
--- /dev/null
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
diff --git a/keyboards/tv44/tv44.c b/keyboards/tv44/tv44.c
new file mode 100644 (file)
index 0000000..6dc0efd
--- /dev/null
@@ -0,0 +1,28 @@
+#include "tv44.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/tv44/tv44.h b/keyboards/tv44/tv44.h
new file mode 100644 (file)
index 0000000..65c0b45
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef TV44_H
+#define TV44_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+    K30, K31, K32, K33,           K37, K38,      K39, K3A, K3B  \
+) \
+{ \
+    { K00,   K01,   K02,   K03,  K04,   K05,   K06,   K07,   K08,   K09,   K0A,   K0B }, \
+    { K10,   K11,   K12,   K13,  K14,   K15,   K16,   K17,   K18,   K19,   K1A,   K1B }, \
+    { K20,   K21,   K22,   K23,  K24,   K25,   K26,   K27,   K28,   K29,   K2A,   K2B }, \
+    { K30,   K31,   K32,   K33,  KC_NO, KC_NO, KC_NO, K37,   K38,   K39,   K3A,   K3B }  \
+
+#endif
diff --git a/keyboards/vision_division/Makefile b/keyboards/vision_division/Makefile
new file mode 100644 (file)
index 0000000..4e2a6f0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+       include ../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/vision_division/Potential Layouts.txt b/keyboards/vision_division/Potential Layouts.txt
new file mode 100644 (file)
index 0000000..f715ac8
--- /dev/null
@@ -0,0 +1,84 @@
+/* Numeric Max / Numeric Normal - Full Grid
+ * .-----------------------------------.       .--------------------------------------------------------------_--------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |   o   |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ */
+
+//* Numeric Max / Homing Normal - Full Grid
+ * .-----------------------------------.       .--------------------------------------------------------------_--------------------------------------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |   o   |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+ */
+
+//* Numeric Max / Homing Normal - Traditional
+ * .-----------------------------------.       .-----------------------------------.        .-----------------_-----------------.        .-----------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------'        '-----------------------------------'        '-----------------------------------'       '--------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .--------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------|
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |
+ * |--------+--------+--------+        |   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       '--------+--------+--------'
+ * |        |        |        |        |   o   |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------|   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|                .--------.
+ * |        |        |        |        |       |                 |        |        |        |        |        |        |        |        |        |        |                 |                |        |
+ * |--------+--------+--------+        |       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       .--------+--------+--------.
+ * |                 |        |        |       |        |        |        |        |        |        |                 |        |        |        |        |        |        |       |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '--------------------------'
+ */
+
+/* Numeric Max / Numeric Normal
+ * .-----------------------------------.       .--------------------------------------------------------------_--------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |  1U    |        |        |  1U    |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |  1U    |        |        |  1U    |
+ * |  /     +--------+--------+  /     |   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |  /     +--------+--------+  /     |
+ * |  2U    |        |        |  2U    |   o   |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |                 |       |  2U    |        |        |  2U    |
+ * |--------+--------+--------+--------|   o   |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |        '--------+--------'        |       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |        '--------+--------'        |
+ * |  1U / 2UH / 2UV |  1U / 2UH / 2UV |       |        |        |        |        |        |        |     1U / 2U     |        |        |        |        |        |        |       |  1U / 2UH / 2UV |  1U / 2UH / 2UV |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ */
+
+/* Numeric Max / Numeric Max
+ * .-----------------------------------.       .-----------------------------------------------------------------------_-----------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |        |        |        |        |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ * .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------+--------+--------+--------|
+ * |  1U    |        |        |  1U    |       |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |       |  1U    |        |        |  1U    |
+ * |  /     +--------+--------+  /     |   o   |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |  /     +--------+--------+  /     |
+ * |  2U    |        |        |  2U    |   o   |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |        |        |                 |       |  2U    |        |        |  2U    |
+ * |--------+--------+--------+--------|   o   |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|       |--------+--------+--------+--------|
+ * |        |        |        |        |       |     1U / 2U     |        |        |        |        |        |        |        |        |        |        |        |        |     1U / 2U     |       |        |        |        |        |
+ * |        '--------+--------'        |       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |        '--------+--------'        |
+ * |  1U / 2UH / 2UV |  1U / 2UH / 2UV |       |        |        |        |        |        |        |     1U / 2U     |     1U / 2U     |        |        |        |        |        |        |       |  1U / 2UH / 2UV |  1U / 2UH / 2UV |
+ * '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+ */
diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h
new file mode 100644 (file)
index 0000000..5798d91
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+// Due to the configurability of this keyboard, matrix sizes are determined in the keymap's config.h
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 0
+
+#define MATRIX_MASKED
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1          H
+//#define MAGIC_KEY_HELP2          SLASH
+//#define MAGIC_KEY_DEBUG          D
+//#define MAGIC_KEY_DEBUG_MATRIX   X
+//#define MAGIC_KEY_DEBUG_KBD      K
+//#define MAGIC_KEY_DEBUG_MOUSE    M
+//#define MAGIC_KEY_VERSION        V
+//#define MAGIC_KEY_STATUS         S
+//#define MAGIC_KEY_CONSOLE        C
+//#define MAGIC_KEY_LAYER0_ALT1    ESC
+//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
+//#define MAGIC_KEY_LAYER0         0
+//#define MAGIC_KEY_LAYER1         1
+//#define MAGIC_KEY_LAYER2         2
+//#define MAGIC_KEY_LAYER3         3
+//#define MAGIC_KEY_LAYER4         4
+//#define MAGIC_KEY_LAYER5         5
+//#define MAGIC_KEY_LAYER6         6
+//#define MAGIC_KEY_LAYER7         7
+//#define MAGIC_KEY_LAYER8         8
+//#define MAGIC_KEY_LAYER9         9
+//#define MAGIC_KEY_BOOTLOADER     PAUSE
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_NKRO           N
+//#define MAGIC_KEY_SLEEP_LED      Z
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #ifndef NO_DEBUG
+// #  define NO_DEBUG
+// #endif
+
+/* disable print */
+// #ifndef NO_PRINT
+// #  define NO_PRINT
+// #endif
+
+/* Only print user print statements */
+// #define USER_PRINT
+
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile
new file mode 100644 (file)
index 0000000..2806094
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE   = no   # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE    = yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE    = yes  # Audio control and System control(+450)
+CONSOLE_ENABLE     = yes  # Console for debug(+400)
+COMMAND_ENABLE     = yes  # Commands for debug and configuration
+NKRO_ENABLE        = yes  # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE   = yes  # Enable keyboard backlight functionality
+MIDI_ENABLE        = no   # MIDI controls
+AUDIO_ENABLE       = yes  # Audio output on port C6
+UNICODE_ENABLE     = no   # Unicode
+BLUETOOTH_ENABLE   = no   # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE    = no   # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE   = no   # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..efd43f4
--- /dev/null
@@ -0,0 +1,81 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+#include "matrix_types.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    IBNobody
+#define PRODUCT         Vision Division
+#define DESCRIPTION     Full / Split Keyboard
+
+#define MATRIX_ROWS     6
+#define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 }
+
+// !!! MAKE SURE THAT THE LEFT/RIGHT PCB DEFINES MATCH ON ALL OF THESE COLUMNS
+
+//                                               **LEFT**                 **RIGHT**
+#define PRODUCT_ID      GET_PID(                 NUMERIC_NORMAL,          NUMERIC_MAX_TEENSY)
+#define MATRIX_COLS     GET_MATRIX_COLS(         NUMERIC_NORMAL,          NUMERIC_MAX_TEENSY)
+#define MATRIX_COL_PINS GET_MATRIX_COL_PINS(     NUMERIC_NORMAL,          NUMERIC_MAX_TEENSY)
+
+#define KEYMAP(MATRIX_LAYER, \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A,               k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A,               k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A,               k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A,               k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A,               k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C, \
+      k601, k602, k603, k604,       k605, k606, k607, k608, k609, k60A,               k611, k612, k613, k614, k615, k616, k617, k618,       k619, k61A, k61B, k61C  \
+) \
+KEYMAP_MASTER(MATRIX_LAYER,                      NUMERIC_NORMAL,          NUMERIC_MAX_TEENSY, \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C, \
+      k601, k602, k603, k604,       k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618,       k619, k61A, k61B, k61C  \
+)
+
+// Example Keymap Macros
+
+/*
+#define KEYMAP(MATRIX_LAYER, \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C, \
+      k601, k602, k603, k604,       k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618,       k619, k61A, k61B, k61C  \
+) \
+KEYMAP_MASTER(MATRIX_LAYER,                      NUMERIC_MAX_TEENSY,      NUMERIC_MAX, \
+      k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+      k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+      k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+      k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+      k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \
+      k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C  \
+)
+*/
+
+/*
+#define KEYMAP(MATRIX_LAYER, \
+      k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, \
+      k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, \
+      k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, \
+      k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, \
+      k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, \
+      k601, k602, k603, k604,       k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618,       k619, k61A, k61B  \
+) \
+KEYMAP_MASTER(MATRIX_LAYER,                      NUMERIC_NORMAL,          HOMING_MAX_TEENSY, \
+      k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, KC_NO, \
+      k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, KC_NO, \
+      k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, KC_NO, \
+      k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, KC_NO, \
+      k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, KC_NO, \
+      k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO  \
+)
+*/
+
+#endif
\ No newline at end of file
diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..3282761
--- /dev/null
@@ -0,0 +1,622 @@
+#include "vision_division.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#include "led.h"
+
+#ifdef AUDIO_ENABLE
+    #include "audio.h"
+    #include "song_list.h"
+#endif
+
+enum keyboard_layers {
+  LAYER_QWERTY = 0,
+  LAYER_UPPER,
+  LAYER_LOWER,
+  LAYER_FUNCTION,
+  LAYER_MOUSE,
+  LAYER_ADJUST,
+};
+enum keyboard_macros {
+  MACRO_QWERTY = 0,
+  MACRO_UPPER,
+  MACRO_LOWER,
+  MACRO_FUNCTION,
+  MACRO_MOUSE,
+  MACRO_TIMBRE_1,
+  MACRO_TIMBRE_2,
+  MACRO_TIMBRE_3,
+  MACRO_TIMBRE_4,
+  MACRO_TEMPO_U,
+  MACRO_TEMPO_D,
+  MACRO_TONE_DEFAULT,
+  MACRO_MUSIC_TOGGLE,
+  MACRO_AUDIO_TOGGLE,
+  MACRO_INC_VOICE,
+  MACRO_DEC_VOICE,
+  MACRO_BACKLIGHT,
+  MACRO_BREATH_TOGGLE,
+  MACRO_BREATH_SPEED_INC,
+  MACRO_BREATH_SPEED_DEC,
+  MACRO_BREATH_DEFAULT,
+  MACRO_MOUSE_MOVE_UL,
+  MACRO_MOUSE_MOVE_UR,
+  MACRO_MOUSE_MOVE_DL,
+  MACRO_MOUSE_MOVE_DR,
+  MACRO_HELP,
+  MACRO_HELP_1,
+  MACRO_HELP_2,
+  MACRO_HELP_3,
+  MACRO_HELP_4,
+  MACRO_HELP_5,
+  MACRO_HELP_6,
+  MACRO_HELP_7,
+  MACRO_HELP_8,
+  MACRO_HELP_9,
+  MACRO_HELP_0,
+  MACRO_GENERAL_1,
+  MACRO_GENERAL_2,
+  MACRO_GENERAL_3,
+  MACRO_GENERAL_4,
+  MACRO_GENERAL_5,
+  MACRO_CURSOR_UL,
+  MACRO_CURSOR_UR,
+  MACRO_CURSOR_DL,
+  MACRO_CURSOR_DR,
+  MACRO_MUTE_APP,
+  MACRO_COPY_CUT,
+};
+
+#define M_QWRTY             M(MACRO_QWERTY)
+#define M_UPPER             M(MACRO_UPPER)
+#define M_LOWER             M(MACRO_LOWER)
+#define M_FUNCT             M(MACRO_FUNCTION)
+#define M_MOUSE             M(MACRO_MOUSE)
+
+#define TIMBR_1             M(MACRO_TIMBRE_1)
+#define TIMBR_2             M(MACRO_TIMBRE_2)
+#define TIMBR_3             M(MACRO_TIMBRE_3)
+#define TIMBR_4             M(MACRO_TIMBRE_4)
+#define TMPO_UP             M(MACRO_TEMPO_U)
+#define TMPO_DN             M(MACRO_TEMPO_D)
+#define TMPO_DF             M(MACRO_TONE_DEFAULT)
+
+#define VC_UP               M(MACRO_INC_VOICE)
+#define VC_DOWN             M(MACRO_DEC_VOICE)
+
+#define M_BACKL             M(MACRO_BACKLIGHT)
+#define M_BRTOG             M(MACRO_BREATH_TOGGLE)
+#define M_BSPDU             M(MACRO_BREATH_SPEED_INC)
+#define M_BSPDD             M(MACRO_BREATH_SPEED_DEC)
+#define M_BDFLT             M(MACRO_BREATH_DEFAULT)
+
+#define M_MS_UL             M(MACRO_MOUSE_MOVE_UL)
+#define M_MS_UR             M(MACRO_MOUSE_MOVE_UR)
+#define M_MS_DL             M(MACRO_MOUSE_MOVE_DL)
+#define M_MS_DR             M(MACRO_MOUSE_MOVE_DR)
+
+#define M_HELP              M(MACRO_HELP)
+#define M_HELP1             M(MACRO_HELP_1)
+#define M_HELP2             M(MACRO_HELP_2)
+#define M_HELP3             M(MACRO_HELP_3)
+#define M_HELP4             M(MACRO_HELP_4)
+#define M_HELP5             M(MACRO_HELP_5)
+#define M_HELP6             M(MACRO_HELP_6)
+#define M_HELP7             M(MACRO_HELP_7)
+#define M_HELP8             M(MACRO_HELP_8)
+#define M_HELP9             M(MACRO_HELP_9)
+#define M_HELP0             M(MACRO_HELP_0)
+
+#define M_M1                M(MACRO_GENERAL_1)
+#define M_M2                M(MACRO_GENERAL_2)
+#define M_M3                M(MACRO_GENERAL_3)
+#define M_M4                M(MACRO_GENERAL_4)
+#define M_M5                M(MACRO_GENERAL_5)
+
+#define M_UL                M(MACRO_CURSOR_UL)
+#define M_UR                M(MACRO_CURSOR_UR)
+#define M_DL                M(MACRO_CURSOR_DL)
+#define M_DR                M(MACRO_CURSOR_DR)
+
+#define M_MUTEA             M(MACRO_MUTE_APP)
+
+#define M_CP_CT             M(MACRO_COPY_CUT)
+
+#define M_COPY              KC_FN1
+
+#define SC_UNDO             LCTL(KC_Z)
+#define SC_REDO             LCTL(KC_Y)
+#define SC_CUT              LCTL(KC_X)
+#define SC_COPY             LCTL(KC_C)
+#define SC_PSTE             LCTL(KC_V)
+#define SC_SELA             LCTL(KC_A)
+#define SC_SAVE             LCTL(KC_S)
+#define SC_OPEN             LCTL(KC_O)
+#define SC_ACLS             LALT(KC_F4)
+#define SC_CCLS             LCTL(KC_F4)
+
+#define TG_NKRO             MAGIC_TOGGLE_NKRO
+#define OS_SHFT             KC_FN0
+
+#define _______             KC_TRNS
+#define XXXXXXX             KC_NO
+#define ________________    _______, _______
+#define XXXXXXXXXXXXXXXX    XXXXXXX, XXXXXXX
+
+const matrix_row_t matrix_mask[MATRIX_ROWS] =
+{
+//  1098765432109876543210987654321
+  0b0000000001111111101111011111111,
+  0b0000000001111111111111111111111,
+  0b0000000001111111111111111111111,
+  0b0000000001111111111111111111111,
+  0b0000000001010111111111111111111,
+  0b0000000001111101111111101011111,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+{
+/* LAYER = LAYER_QWERTY
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | VOL DN | MUTE   | VOL UP | BACKLT |       | F1     | F2     | F3     | F4     | XXXXXX | F5     | F6     | F7     | F8     | XXXXXX | F9     | F10    | F11    | F12    |       | PRINT  | SCR LK | PAUSE  | FN     |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | NUM LK | KP /   | KP *   | KP -   |       | ESC    | `      | 1      | 2      | 3      | 4      | 5      | 6      | 7      | 8      | 9      | 0      | =      | BACKSP |       | INS    | HOME   | PG UP  | M1     |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | KP 7   | KP 8   | KP 9   | KP +   |       | TAB    | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | -      | \      |       | DEL    | END    | PG DN  | M2     |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | KP 4   | KP 5   | KP 6   | KP +   |       | CAP LK | BACKSP | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      | ENTER  |   o   | CP/CT  | UNDO   | PASTE  | M3     |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | KP 1   | KP 2   | KP 3   | KP Ent |       | LSHIFT | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | RSHIFT | RSHIFT |       | XXXXXX | UP     | XXXXXX | M4     |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | KP 0   | KP ,   | KP .   | KP Ent |       | LCTRL  | XXXXXX | LWIN   | XXXXXX | LALT   | UPPER  | SPACE  . SPACE  | LOWER  | OSHIFT | RALT   | APP    | XXXXXX | RCTRL  |       | LEFT   | DOWN   | RIGHT  | M5     |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+*/
+KEYMAP(LAYER_QWERTY, \
+    KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL,         KC_F1  , KC_F2  , KC_F3  , KC_F4  , XXXXXXX, KC_F5  , KC_F6  , KC_F7  , KC_F8  , XXXXXXX, KC_F9  , KC_F10 , KC_F11 , KC_F12 ,         KC_PSCR, KC_SLCK, KC_PAUS, M_HELP , \
+    KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,         KC_ESC , KC_GRV , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_EQL , KC_BSPC,         KC_INS , KC_HOME, KC_PGUP, M_M1   , \
+    KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS,         KC_TAB , KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_MINS, KC_BSLS,         KC_DEL , KC_END , KC_PGDN, M_M2   , \
+    KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS,         KC_CAPS, KC_BSPC, KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT, KC_ENT ,         M_CP_CT, SC_UNDO, SC_PSTE, M_M3   , \
+    KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT,         KC_LSFT, KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT,         XXXXXXX, KC_UP  , XXXXXXX, M_M4   , \
+    KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT,         KC_LCTL, XXXXXXX, KC_LGUI, XXXXXXX, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL,         KC_LEFT, KC_DOWN, KC_RGHT, M_M5     \
+),
+/* LAYER = LAYER_LOWER
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | ______ | MUTE A | ______ | ______ |       | F13    | F14    | F15    | F16    | XXXXXX | F17    | F18    | F19    | F20    | XXXXXX | F21    | F22    | F23    | F24    |       | ______ | ______ | ______ | ______ |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | $      | {      | [      | (      | %      | #      | )      | ]      | }      | @      | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ^      | *      | +      | -      | /      | \      | _      | '      | "      | `      | ______ | ______ |   o   | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | |      | &      | !      | ~      | ;      | :      | =      | <      | >      | ?      | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER  | ______ | ______ | ______ | XXXXXX | ______ |       | ______ | ______ | ______ | ______ |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+*/
+KEYMAP(LAYER_LOWER, \
+    _______, M_MUTEA, _______, _______,         KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 ,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT  , _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT  , KC_GT  , KC_QUES, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, XXXXXXX, _______,         _______, _______, _______, _______  \
+),
+/* LAYER = LAYER_UPPER
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | ______ | MUTE A | ______ | ______ |       | F13    | F14    | F15    | F16    | XXXXXX | F17    | F18    | F19    | F20    | XXXXXX | F21    | F22    | F23    | F24    |       | ______ | ______ | ______ | ______ |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | F1     | F2     | F3     | F4     | NUM LK | KP /   | KP 7   | KP 8   | KP 9   | KP -   | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | F5     | F6     | F7     | F8     | CAP LK | KP *   | KP 4   | KP 5   | KP 6   | KP +   | ______ | ______ |   o   | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | F9     | F10    | F11    | F12    | SCR LK | KP 0   | KP 1   | KP 2   | KP 3   | KP Ent | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | UPPER  | KP 0   . KP 0   | ______ | RALT   | KP .   | KP Ent | XXXXXX | ______ |       | ______ | ______ | ______ | ______ |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+*/
+KEYMAP(LAYER_UPPER, \
+    _______, M_MUTEA, _______, _______,         KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 ,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, XXXXXXX, _______,         _______, _______, _______, _______  \
+),
+/* LAYER = LAYER_MOUSE
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | MS AC0 | MS WHU | MS AC2 | MS BT1 |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | MS WHL | MS WHD | MS WHU | MS BT2 |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |   o   | MS BT1 | MS BT2 | MS BT3 | MS BT3 |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | XXXXXX | MS U   | XXXXXX | MS BT4 |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | ______ | ______ | ______ | ______ |       | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | ______ | ______ | ______ | ______ | ______ | ______ |       | MS L   | MS D   | MS R   | MS BT5 |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+*/
+KEYMAP(LAYER_MOUSE, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         _______, _______, _______, _______, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         KC_ACL0, KC_WH_U, KC_ACL2, KC_BTN1, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         KC_WH_L, KC_WH_D, KC_WH_U, KC_BTN2, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN3, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         XXXXXXX, KC_MS_U, XXXXXXX, KC_BTN4, \
+    _______, _______, _______, _______,         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,         KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5  \
+),
+/* LAYER = LAYER_ADJUST
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | VOICE- | AUDIO  | VOICE+ | MUSIC  |       | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+  .-----------------------------------.       .-----------------------------------------------------------------------------------------------------------------------------.       .-----------------------------------.
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |   o   | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|   o   |--------|--------|--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | RESET  | XXXXXX | MOUSE  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  |--------+--------+--------+--------|       |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|       |--------|--------|--------+--------|
+  | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER  | XXXXXX . XXXXXX | LOWER  | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |       | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+  '-----------------------------------'       '-----------------------------------------------------------------------------------------------------------------------------'       '-----------------------------------'
+*/
+KEYMAP(LAYER_ADJUST, \
+    MUV_DE , AU_TOG , MUV_IN , MU_TOG ,         M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,         XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  \
+),
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_my_startup[][2] = SONG(ODE_TO_JOY);
+float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
+
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+
+float tone_audio_on[][2]   = SONG(CLOSE_ENCOUNTERS_5_NOTE);
+float tone_music_on[][2]   = SONG(DOE_A_DEER);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_caps_on[][2]    = SONG(CAPS_LOCK_ON_SOUND);
+float tone_caps_off[][2]   = SONG(CAPS_LOCK_OFF_SOUND);
+float tone_numlk_on[][2]   = SONG(NUM_LOCK_ON_SOUND);
+float tone_numlk_off[][2]  = SONG(NUM_LOCK_OFF_SOUND);
+float tone_scroll_on[][2]  = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
+
+#endif /* AUDIO_ENABLE */
+
+void persistant_default_layer_set(uint16_t default_layer)
+{
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+  [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
+  [1] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+
+  // MACRODOWN only works in this function
+  switch(id)
+  {
+
+    case MACRO_COPY_CUT:
+        if (record->event.pressed) {
+            register_code(KC_LCTL);
+            if (record->tap.count == 1) {
+                register_code(KC_C);
+                unregister_code(KC_C);
+            }
+            else if (record->tap.count == 2) {
+                register_code(KC_X);
+                unregister_code(KC_X);
+            }
+            unregister_code(KC_LCTL);
+        }
+        break;
+
+
+  //   case MACRO_HELP_1:
+  //     if (record->event.pressed)
+  //     {
+  //       uprint("H1");
+  //     }
+  //     break;
+
+  //   case MACRO_HELP_2:
+  //     if (record->event.pressed)
+  //     {
+  //       uprint("H2");
+  //     }
+  //     break;
+
+  //   case MACRO_HELP_3:
+  //     if (record->event.pressed)
+  //     {
+  //       uprint("H3");
+  //     }
+  //     break;
+
+  //   case MACRO_HELP_4:
+  //     if (record->event.pressed)
+  //     {
+  //       uprint("H4");
+  //     }
+  //     break;
+
+  //  case MACRO_HELP_5:
+  //    if (record->event.pressed)
+  //    {
+  //      uprint("H5");
+  //    }
+  //    break;
+
+  //  case MACRO_HELP_6:
+  //    if (record->event.pressed)
+  //    {
+  //      uprint("H6");
+  //    }
+  //    break;
+
+  //  case MACRO_HELP_7:
+  //     if (record->event.pressed)
+  //     {
+  //       uprint("H7");
+  //     }
+  //     break;
+
+  // case MACRO_HELP_8:
+  //   if (record->event.pressed)
+  //   {
+  //     uprint("H8");
+  //   }
+  //   break;
+
+  // case MACRO_HELP_9:
+  //   if (record->event.pressed)
+  //   {
+  //     uprint("H9");
+  //   }
+  //   break;
+
+  case MACRO_BREATH_TOGGLE:
+    if (record->event.pressed)
+    {
+      breathing_toggle();
+    }
+    break;
+
+  case MACRO_BREATH_SPEED_INC:
+    if (record->event.pressed)
+    {
+      breathing_speed_inc(1);
+    }
+    break;
+
+  case MACRO_BREATH_SPEED_DEC:
+    if (record->event.pressed)
+    {
+      breathing_speed_dec(1);
+    }
+    break;
+
+  case MACRO_BREATH_DEFAULT:
+    if (record->event.pressed)
+    {
+      breathing_defaults();
+    }
+    break;
+
+  case MACRO_QWERTY:
+    if (record->event.pressed)
+    {
+      persistant_default_layer_set(1UL<<LAYER_QWERTY);
+    }
+    break;
+
+  case MACRO_UPPER:
+    if (record->event.pressed)
+    {
+      layer_on(LAYER_UPPER);
+      breathing_speed_set(2);
+      breathing_pulse();
+      update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+    }
+    else
+    {
+      layer_off(LAYER_UPPER);
+      update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+    }
+    break;
+
+  case MACRO_LOWER:
+    if (record->event.pressed)
+    {
+      layer_on(LAYER_LOWER);
+      breathing_speed_set(2);
+      breathing_pulse();
+      update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+    }
+    else
+    {
+      layer_off(LAYER_LOWER);
+      update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+    }
+    break;
+
+  case MACRO_FUNCTION:
+    if (record->event.pressed)
+    {
+      breathing_speed_set(3);
+      breathing_enable();
+      layer_on(LAYER_FUNCTION);
+    }
+    else
+    {
+      breathing_speed_set(1);
+      breathing_self_disable();
+      layer_off(LAYER_FUNCTION);
+    }
+    break;
+
+#ifdef MOUSEKEY_ENABLE
+
+  case MACRO_MOUSE:
+    if (record->event.pressed)
+    {
+      layer_invert(LAYER_MOUSE);
+    }
+    break;
+
+#endif /* MOUSEKEY_ENABLE */
+
+#ifdef AUDIO_ENABLE
+
+  case MACRO_TIMBRE_1:
+    if (record->event.pressed) set_timbre(TIMBRE_12);
+    break;
+
+  case MACRO_TIMBRE_2:
+    if (record->event.pressed) set_timbre(TIMBRE_25);
+    break;
+
+  case MACRO_TIMBRE_3:
+    if (record->event.pressed) set_timbre(TIMBRE_50);
+    break;
+
+  case MACRO_TIMBRE_4:
+    if (record->event.pressed) set_timbre(TIMBRE_75);
+    break;
+
+  case MACRO_TEMPO_U:
+    if (record->event.pressed) increase_tempo(10);
+    break;
+
+  case MACRO_TEMPO_D:
+    if (record->event.pressed) decrease_tempo(10);
+    break;
+
+  case MACRO_TONE_DEFAULT:
+    if (record->event.pressed)
+    {
+      set_timbre(TIMBRE_DEFAULT);
+      set_tempo(TEMPO_DEFAULT);
+    }
+    break;
+
+#endif /* AUDIO_ENABLE */
+
+#ifdef BACKLIGHT_ENABLE
+  case MACRO_BACKLIGHT:
+    if (record->event.pressed)
+    {
+      backlight_step();
+    }
+  break;
+#endif /* BACKLIGHT_ENABLE */
+
+  default:
+    break;
+
+}
+return MACRO_NONE;
+};
+
+#ifdef AUDIO_ENABLE
+
+void matrix_init_user(void)
+{
+  set_voice(default_voice);
+  startup_user();
+  println("Matrix Init");
+}
+
+void led_set_user(uint8_t usb_led)
+{
+  static uint8_t old_usb_led = 0;
+
+  _delay_ms(10); // gets rid of tick
+
+  if (!is_playing_notes())
+  {
+    if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+    {
+      // If CAPS LK LED is turning on...
+      PLAY_NOTE_ARRAY(tone_caps_on,  false, LEGATO);
+    }
+    else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+    {
+      // If CAPS LK LED is turning off...
+      PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
+    }
+    else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
+    {
+      // If NUM LK LED is turning on...
+      PLAY_NOTE_ARRAY(tone_numlk_on,  false, LEGATO);
+    }
+    else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
+    {
+      // If NUM LED is turning off...
+      PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
+    }
+    else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+    {
+      // If SCROLL LK LED is turning on...
+      PLAY_NOTE_ARRAY(tone_scroll_on,  false, LEGATO);
+    }
+    else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+    {
+      // If SCROLL LED is turning off...
+      PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
+    }
+  }
+
+  old_usb_led = usb_led;
+}
+
+void startup_user()
+{
+  _delay_ms(10); // gets rid of tick
+  // PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO);
+}
+
+void shutdown_user()
+{
+  // PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
+  _delay_ms(2000);
+  stop_all_notes();
+}
+
+void audio_on_user(void)
+{
+  PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+}
+
+void music_on_user(void)
+{
+  PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
+}
+
+void music_scale_user(void)
+{
+  PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+}
+
+#endif /* AUDIO_ENABLE */
\ No newline at end of file
diff --git a/keyboards/vision_division/keymaps/default/readme.md b/keyboards/vision_division/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..bb0ed38
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for vision_division
\ No newline at end of file
diff --git a/keyboards/vision_division/matrix_types.h b/keyboards/vision_division/matrix_types.h
new file mode 100644 (file)
index 0000000..893e527
--- /dev/null
@@ -0,0 +1,168 @@
+#ifndef MATRIX_TYPES_H
+#define MATRIX_TYPES_H
+
+// Because the vision/division keyboard allows for multiple PCB configurations, the configuration
+// can get tricky. The PCB itself has 12 columns, but to achieve a full sized 14-column keyboard
+// with a 4-column numeric pad on the left and a 3-column homing key cluster on the right, the
+// right PCB must have its rightmost column cut off. Also either the rightmost two columns on the
+// left PCB or the leftmost two columns on the right PCB need to be cut away.
+//
+//                          _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+// Left Numeric Max       = 1 2 3 4 _ 5 6 7 8 9 0 A B C
+// Left Homing Max        =   2 3 4 _ 5 6 7 8 9 0 A B C
+// Left Numeric Extended  = 1 2 3 4 _ 5 6 7 8 9 0 A B
+// Left Homing Extended   =   2 3 4 _ 5 6 7 8 9 0 A B
+// Left Numeric Normal    = 1 2 3 4 _ 5 6 7 8 9 0 A
+// Left Homing Normal     =   2 3 4 _ 5 6 7 8 9 0 A
+// Right Numeric Max      =                             1 2 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Max       =                             1 2 3 4 5 6 7 8 _ 9 A B
+// Right Numeric Extended =                               2 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Extended  =                               2 3 4 5 6 7 8 _ 9 A B
+// Right Numeric Normal   =                                 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Normal    =                                 3 4 5 6 7 8 _ 9 A B
+//
+//
+// A full keyboard would look like this:
+//
+// _Left_Numeric_Max__________|_Right_Homing_Normal
+// 1 2 3 4 _ 5 6 7 8 9 0 A B C|3 4 5 6 7 8 _ 9 A B
+//
+// The ideal full keyboard would use a normal and max rather than two extended because the max
+// size allows for a centered 2U space key.
+
+
+#define MATRIX_TYPE_ABSENT                      0
+#define MATRIX_TYPE_NUMERIC_MAX                 1
+#define MATRIX_TYPE_HOMING_MAX                  2
+#define MATRIX_TYPE_NUMERIC_EXTENDED            3
+#define MATRIX_TYPE_HOMING_EXTENDED             4
+#define MATRIX_TYPE_NUMERIC_NORMAL              5
+#define MATRIX_TYPE_HOMING_NORMAL               6
+#define MATRIX_TYPE_NUMERIC_MAX_TEENSY          7
+#define MATRIX_TYPE_HOMING_MAX_TEENSY           8
+#define MATRIX_TYPE_NUMERIC_EXTENDED_TEENSY     9
+#define MATRIX_TYPE_HOMING_EXTENDED_TEENSY      10
+#define MATRIX_TYPE_NUMERIC_NORMAL_TEENSY       11
+#define MATRIX_TYPE_HOMING_NORMAL_TEENSY        12
+
+
+// Column Length
+
+#define MATRIX_COLS_ABSENT                       0
+#define MATRIX_COLS_NUMERIC_MAX                 12
+#define MATRIX_COLS_HOMING_MAX                  11
+#define MATRIX_COLS_NUMERIC_EXTENDED            11
+#define MATRIX_COLS_HOMING_EXTENDED             10
+#define MATRIX_COLS_NUMERIC_NORMAL              10
+#define MATRIX_COLS_HOMING_NORMAL                9
+#define MATRIX_COLS_NUMERIC_MAX_TEENSY          12
+#define MATRIX_COLS_HOMING_MAX_TEENSY           11
+#define MATRIX_COLS_NUMERIC_EXTENDED_TEENSY     11
+#define MATRIX_COLS_HOMING_EXTENDED_TEENSY      10
+#define MATRIX_COLS_NUMERIC_NORMAL_TEENSY       10
+#define MATRIX_COLS_HOMING_NORMAL_TEENSY         9
+
+// Left PCB Pin assignments
+
+#define MATRIX_COL_PINS_LEFT_ABSENT
+
+#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX                 C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6
+#define MATRIX_COL_PINS_LEFT_HOMING_MAX                      C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6
+#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED            C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4
+#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED                 C5, C4, A7, A3, A6, A2, A5, A1, A0, A4
+#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL              C7, C5, C4, A7, A3, A6, A2, A5, A1, A0
+#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL                   C5, C4, A7, A3, A6, A2, A5, A1, A0
+
+#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX_TEENSY          C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3
+#define MATRIX_COL_PINS_LEFT_HOMING_MAX_TEENSY               C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3
+#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED_TEENSY     C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2
+#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED_TEENSY          C0, E1, E0, F3, F2, F1, F0, B0, B1, B2
+#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL_TEENSY       C1, C0, E1, E0, F3, F2, F1, F0, B0, B1
+#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL_TEENSY            C0, E1, E0, F3, F2, F1, F0, B0, B1
+
+// Right PCB Pin assignments
+
+#define MATRIX_COL_PINS_RIGHT_ABSENT
+
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX                 E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_MAX                  E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED                A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED                 A4, A0, A1, A5, A2, A6, A3, A7, C4, C5
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL                      A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL                       A0, A1, A5, A2, A6, A3, A7, C4, C5
+
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX_TEENSY          B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_MAX_TEENSY           B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED_TEENSY         B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED_TEENSY          B2, B1, B0, F0, F1, F2, F3, E0, E1, C0
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL_TEENSY               B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL_TEENSY                B1, B0, F0, F1, F2, F3, E0, E1, C0
+
+// Fetch Macros
+
+#define GET_PID(LEFT_TYPE, RIGHT_TYPE) ( ( ( MATRIX_TYPE_ ## LEFT_TYPE ) << 8 ) + ( MATRIX_TYPE_ ## RIGHT_TYPE ) )
+#define GET_MATRIX_COL(TYPE) MATRIX_COLS_ ## TYPE
+#define GET_MATRIX_COLS(LEFT_TYPE, RIGHT_TYPE) ( ( GET_MATRIX_COL(LEFT_TYPE) ) + ( GET_MATRIX_COL(RIGHT_TYPE) ) )
+#define GET_MATRIX_COL_PINS(LEFT_TYPE, RIGHT_TYPE) { MATRIX_COL_PINS_LEFT_ ## LEFT_TYPE, MATRIX_COL_PINS_RIGHT_ ## RIGHT_TYPE }
+
+// Specialized Row Macros
+
+#define KEYMAP_ROW_LEFT_ABSENT(                   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)
+
+#define KEYMAP_ROW_LEFT_NUMERIC_MAX(              k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_HOMING_MAX(               k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED(         k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_HOMING_EXTENDED(          k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL(           k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_HOMING_NORMAL(            k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_NUMERIC_MAX_TEENSY(       k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_HOMING_MAX_TEENSY(        k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED_TEENSY(  k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_HOMING_EXTENDED_TEENSY(   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL_TEENSY(    k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_HOMING_NORMAL_TEENSY(     k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A
+
+#define KEYMAP_ROW_RIGHT_ABSENT(                  k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)
+
+#define KEYMAP_ROW_RIGHT_NUMERIC_MAX(             k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_MAX(              k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED(        k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED(         k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL(          k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_NORMAL(           k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_MAX_TEENSY(      k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_MAX_TEENSY(       k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED_TEENSY(  k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)        k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL_TEENSY(   k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_NORMAL_TEENSY(    k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)             k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+
+// Changable Row Macro
+
+#define _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, \
+  k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \
+) \
+KEYMAP_ROW_LEFT_ ## _LEFT_TYPE(   k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C ), \
+KEYMAP_ROW_RIGHT_ ## _RIGHT_TYPE( k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C )
+
+// Changable Master Macro
+
+#define KEYMAP_MASTER(_MATRIX_LAYER, _LEFT_TYPE, _RIGHT_TYPE, \
+                                            k001, k002, k003, k004,       k005, k006, k007, k008, k009, k00A, k00B, k00C,       k011, k012, k013, k014, k015, k016, k017, k018,       k019, k01A, k01B, k01C, \
+                                            k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k10B, k10C,       k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C, \
+                                            k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k20B, k20C,       k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C, \
+                                            k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k30B, k30C,       k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C, \
+                                            k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k40B, k40C,       k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C, \
+                                            k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k50B, k50C,       k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C  \
+) \
+[_MATRIX_LAYER] = { \
+    { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k001, k002, k003, k004,       k005, k006, k007, k008, k009, k00A, k00B, k00C,       k011, k012, k013, k014, k015, k016, k017, k018,       k019, k01A, k01B, k01C ) },\
+    { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k101, k102, k103, k104,       k105, k106, k107, k108, k109, k10A, k10B, k10C,       k111, k112, k113, k114, k115, k116, k117, k118,       k119, k11A, k11B, k11C ) },\
+    { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k201, k202, k203, k204,       k205, k206, k207, k208, k209, k20A, k20B, k20C,       k211, k212, k213, k214, k215, k216, k217, k218,       k219, k21A, k21B, k21C ) },\
+    { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k301, k302, k303, k304,       k305, k306, k307, k308, k309, k30A, k30B, k30C,       k311, k312, k313, k314, k315, k316, k317, k318,       k319, k31A, k31B, k31C ) },\
+    { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k401, k402, k403, k404,       k405, k406, k407, k408, k409, k40A, k40B, k40C,       k411, k412, k413, k414, k415, k416, k417, k418,       k419, k41A, k41B, k41C ) },\
+    { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k501, k502, k503, k504,       k505, k506, k507, k508, k509, k50A, k50B, k50C,       k511, k512, k513, k514, k515, k516, k517, k518,       k519, k51A, k51B, k51C ) },\
+}
+
+
+#endif // MATRIX_TYPES_H
\ No newline at end of file
diff --git a/keyboards/vision_division/readme.md b/keyboards/vision_division/readme.md
new file mode 100644 (file)
index 0000000..de200d7
--- /dev/null
@@ -0,0 +1,34 @@
+vision_division keyboard firmware
+======================
+
+## Keyboard Info
+
+[See this thread.](https://geekhack.org/index.php?topic=83692.msg2227856#msg2227856)
+
+Vision/Division is a full size or split keyboard that can be customized due to its pcb.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/vision_division folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file. 
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+
+```
+$ make keymap=[default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
\ No newline at end of file
diff --git a/keyboards/vision_division/rules.mk b/keyboards/vision_division/rules.mk
new file mode 100644 (file)
index 0000000..6990960
--- /dev/null
@@ -0,0 +1,70 @@
+
+
+# MCU name
+MCU = at90usb1286
+# MCU = at90usb1287
+# MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=1024
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= yes      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
\ No newline at end of file
diff --git a/keyboards/vision_division/vision_division.c b/keyboards/vision_division/vision_division.c
new file mode 100644 (file)
index 0000000..a0e0f44
--- /dev/null
@@ -0,0 +1,68 @@
+#include "vision_division.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+  if (usb_led & (1 << USB_LED_CAPS_LOCK))
+  {
+    // HI
+    DDRD  |= (1<<4);
+    PORTD |= (1<<4);
+  }
+  else
+  {
+    // Hi-Z
+    DDRD  &= ~(1<<4);
+    PORTD &= ~(1<<4);
+  }
+
+  if (usb_led & (1 << USB_LED_NUM_LOCK))
+  {
+    // HI
+    DDRD  |= (1<<5);
+    PORTD |= (1<<5);
+  }
+  else
+  {
+    // Hi-Z
+    DDRD  &= ~(1<<5);
+    PORTD &= ~(1<<5);
+  }
+
+  if (usb_led & (1 << USB_LED_SCROLL_LOCK))
+  {
+    // HI
+    DDRD  |= (1<<6);
+    PORTD |= (1<<6);
+  }
+  else
+  {
+    // Hi-Z
+    DDRD  &= ~(1<<6);
+    PORTD &= ~(1<<6);
+  }
+
+       led_set_user(usb_led);
+}
+
diff --git a/keyboards/vision_division/vision_division.h b/keyboards/vision_division/vision_division.h
new file mode 100644 (file)
index 0000000..a1f3195
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef VISION_DIVISION_H
+#define VISION_DIVISION_H
+
+#include "quantum.h"
+
+#endif
diff --git a/lib/googletest b/lib/googletest
new file mode 160000 (submodule)
index 0000000..ec44c6c
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit ec44c6c1675c25b9827aacd08c02433cccde7780
diff --git a/message.mk b/message.mk
new file mode 100644 (file)
index 0000000..fa051fd
--- /dev/null
@@ -0,0 +1,79 @@
+COLOR ?= true
+
+ifeq ($(COLOR),true)
+       NO_COLOR=\033[0m
+       OK_COLOR=\033[32;01m
+       ERROR_COLOR=\033[31;01m
+       WARN_COLOR=\033[33;01m
+       BLUE=\033[0;34m
+       BOLD=\033[1m
+endif
+
+ifneq ($(shell awk --version 2>/dev/null),)
+       AWK=awk
+else
+       AWK=cat && test
+endif
+
+ON_ERROR ?= exit 1
+
+OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
+ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
+WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
+
+TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
+TAB_LOG_PLAIN = printf "$$LOG\n"
+AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
+AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
+PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)
+PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG)
+PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && $(ON_ERROR)
+PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
+PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
+BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
+MAKE_MSG_FORMAT = $(AWK) '{ printf "%-118s", $$0;}'
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_ERRORS = $(ERROR_COLOR)Make finished with errors\n$(NO_COLOR)
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_BIN = Creating binary load file for Flash:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_COMPILING_CPP = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+MSG_CREATING_LIBRARY = Creating library:
+MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
+       Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
+       git submodule sync --recursive\n\
+       git submodule update --init --recursive$(NO_COLOR)\n\n\
+       You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
+       or if you have modified the ChibiOS libraries yourself. \n\n
+MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR)
+
+define GENERATE_MSG_MAKE_KB
+    MSG_MAKE_KB_ACTUAL := Making $$(KB_SP) with keymap $(BOLD)$$(CURRENT_KM)$(NO_COLOR)
+    ifneq ($$(MAKE_TARGET),)
+        MSG_MAKE_KB_ACTUAL += and target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
+    endif
+endef
+MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL)
+define GENERATE_MSG_MAKE_TEST
+    MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_NAME)$(NO_COLOR)
+    ifneq ($$(MAKE_TARGET),)
+        MSG_MAKE_TEST_ACTUAL += with target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
+    endif
+endef
+MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL)
+MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR)
diff --git a/quantum/api.c b/quantum/api.c
new file mode 100644 (file)
index 0000000..4ca3b96
--- /dev/null
@@ -0,0 +1,178 @@
+#include "api.h"
+#include "quantum.h"
+
+void dword_to_bytes(uint32_t dword, uint8_t * bytes) {
+    bytes[0] = (dword >> 24) & 0xFF;
+    bytes[1] = (dword >> 16) & 0xFF; 
+    bytes[2] = (dword >> 8) & 0xFF; 
+    bytes[3] = (dword >> 0) & 0xFF; 
+}
+
+uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index) {
+    return ((uint32_t)bytes[index + 0] << 24) | ((uint32_t)bytes[index + 1] << 16) | ((uint32_t)bytes[index + 2] << 8) | (uint32_t)bytes[index + 3];
+}
+
+__attribute__ ((weak))
+bool process_api_quantum(uint8_t length, uint8_t * data) {
+    return process_api_keyboard(length, data);
+}
+
+__attribute__ ((weak))
+bool process_api_keyboard(uint8_t length, uint8_t * data) {
+    return process_api_user(length, data);
+}
+
+__attribute__ ((weak))
+bool process_api_user(uint8_t length, uint8_t * data) {
+    return true;
+}
+
+void process_api(uint16_t length, uint8_t * data) {
+    // SEND_STRING("\nRX: ");
+    // for (uint8_t i = 0; i < length; i++) {
+    //     send_byte(data[i]);
+    //     SEND_STRING(" ");
+    // }
+    if (!process_api_quantum(length, data))
+        return;
+
+    switch (data[0]) {
+        case MT_SET_DATA:
+            switch (data[1]) {
+                case DT_DEFAULT_LAYER: {
+                    eeconfig_update_default_layer(data[2]);
+                    default_layer_set((uint32_t)(data[2]));
+                    break;
+                }
+                case DT_KEYMAP_OPTIONS: {
+                    eeconfig_update_keymap(data[2]);
+                    break;
+                }
+                case DT_RGBLIGHT: {
+                    #ifdef RGBLIGHT_ENABLE
+                        uint32_t rgblight = bytes_to_dword(data, 2);
+                        rgblight_update_dword(rgblight);
+                    #endif
+                    break;
+                }
+            }
+        case MT_GET_DATA:
+            switch (data[1]) {
+                case DT_HANDSHAKE: {
+                    MT_GET_DATA_ACK(DT_HANDSHAKE, NULL, 0);
+                    break;
+                }
+                case DT_DEBUG: {
+                    uint8_t debug_bytes[1] = { eeprom_read_byte(EECONFIG_DEBUG) };
+                    MT_GET_DATA_ACK(DT_DEBUG, debug_bytes, 1);
+                    break;
+                }
+                case DT_DEFAULT_LAYER: {
+                    uint8_t default_bytes[1] = { eeprom_read_byte(EECONFIG_DEFAULT_LAYER) };
+                    MT_GET_DATA_ACK(DT_DEFAULT_LAYER, default_bytes, 1);
+                    break;
+                }
+                case DT_CURRENT_LAYER: {
+                    uint8_t layer_state_bytes[4];
+                    dword_to_bytes(layer_state, layer_state_bytes);
+                    MT_GET_DATA_ACK(DT_CURRENT_LAYER, layer_state_bytes, 4);
+                    break;
+                }
+                case DT_AUDIO: {
+                    #ifdef AUDIO_ENABLE
+                        uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) };
+                        MT_GET_DATA_ACK(DT_AUDIO, audio_bytes, 1);
+                    #else
+                        MT_GET_DATA_ACK(DT_AUDIO, NULL, 0);
+                    #endif
+                    break;
+                }
+                case DT_BACKLIGHT: {
+                    #ifdef BACKLIGHT_ENABLE
+                        uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) };
+                        MT_GET_DATA_ACK(DT_BACKLIGHT, backlight_bytes, 1);
+                    #else
+                        MT_GET_DATA_ACK(DT_BACKLIGHT, NULL, 0);
+                    #endif
+                    break;
+                }
+                case DT_RGBLIGHT: {
+                    #ifdef RGBLIGHT_ENABLE
+                        uint8_t rgblight_bytes[4];
+                        dword_to_bytes(eeconfig_read_rgblight(), rgblight_bytes);
+                        MT_GET_DATA_ACK(DT_RGBLIGHT, rgblight_bytes, 4);
+                    #else
+                        MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0);
+                    #endif
+                    break;
+                }
+                case DT_KEYMAP_OPTIONS: {
+                    uint8_t keymap_bytes[1] = { eeconfig_read_keymap() };
+                    MT_GET_DATA_ACK(DT_KEYMAP_OPTIONS, keymap_bytes, 1);
+                    break;
+                }
+                case DT_KEYMAP_SIZE: {
+                    uint8_t keymap_size[2] = {MATRIX_ROWS, MATRIX_COLS};
+                    MT_GET_DATA_ACK(DT_KEYMAP_SIZE, keymap_size, 2);
+                    break;
+                }
+                case DT_KEYMAP: {
+                    uint8_t keymap_data[MATRIX_ROWS * MATRIX_COLS * 4 + 3];
+                    keymap_data[0] = data[2];
+                    keymap_data[1] = MATRIX_ROWS;
+                    keymap_data[2] = MATRIX_COLS;
+                    for (int i = 0; i < MATRIX_ROWS; i++) {
+                        for (int j = 0; j < MATRIX_COLS; j++) {
+                            keymap_data[3 + (i*MATRIX_COLS*2) + (j*2)] = pgm_read_word(&keymaps[data[2]][i][j]) >> 8;
+                            keymap_data[3 + (i*MATRIX_COLS*2) + (j*2) + 1] = pgm_read_word(&keymaps[data[2]][i][j]) & 0xFF;
+                        }
+                    }
+                    MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, MATRIX_ROWS * MATRIX_COLS * 4 + 3);
+                    // uint8_t keymap_data[5];
+                    // keymap_data[0] = data[2];
+                    // keymap_data[1] = data[3];
+                    // keymap_data[2] = data[4];
+                    // keymap_data[3] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) >> 8;
+                    // keymap_data[4] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) & 0xFF;
+
+                    // MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, 5);
+                    break;
+                }
+                default:
+                    break;
+            }
+            break;
+        case MT_SET_DATA_ACK:
+        case MT_GET_DATA_ACK:
+            break;
+        case MT_SEND_DATA:
+            break;
+        case MT_SEND_DATA_ACK:
+            break;
+        case MT_EXE_ACTION:
+            break;
+        case MT_EXE_ACTION_ACK:
+            break;
+        case MT_TYPE_ERROR:
+            break;
+        default: ; // command not recognised
+            SEND_BYTES(MT_TYPE_ERROR, DT_NONE, data, length);
+            break;
+
+        // #ifdef RGBLIGHT_ENABLE
+        // case 0x27: ; // RGB LED functions
+        //     switch (*data++) {
+        //         case 0x00: ; // Update HSV
+        //             rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]);
+        //             break;
+        //         case 0x01: ; // Update RGB
+        //             break;
+        //         case 0x02: ; // Update mode
+        //             rgblight_mode(data[0]);
+        //             break;
+        //     }
+        //     break;
+        // #endif
+    }
+
+}
\ No newline at end of file
diff --git a/quantum/api.h b/quantum/api.h
new file mode 100644 (file)
index 0000000..00dcdb8
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef _API_H_
+#define _API_H_
+
+#include "lufa.h"
+
+enum MESSAGE_TYPE {
+    MT_GET_DATA =      0x10, // Get data from keyboard
+    MT_GET_DATA_ACK =  0x11, // returned data to process (ACK)
+    MT_SET_DATA =      0x20, // Set data on keyboard
+    MT_SET_DATA_ACK =  0x21, // returned data to confirm (ACK)
+    MT_SEND_DATA =     0x30, // Sending data/action from keyboard
+    MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK)
+    MT_EXE_ACTION =    0x40, // executing actions on keyboard
+    MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK)
+    MT_TYPE_ERROR =    0x80 // type not recofgnised (ACK)
+};
+
+enum DATA_TYPE {
+    DT_NONE = 0x00,
+    DT_HANDSHAKE,
+    DT_DEFAULT_LAYER,
+    DT_CURRENT_LAYER,
+    DT_KEYMAP_OPTIONS,
+    DT_BACKLIGHT,
+    DT_RGBLIGHT,
+    DT_UNICODE,
+    DT_DEBUG,
+    DT_AUDIO,
+    DT_QUANTUM_ACTION,
+    DT_KEYBOARD_ACTION,
+    DT_USER_ACTION,
+    DT_KEYMAP_SIZE,
+    DT_KEYMAP
+};
+
+void dword_to_bytes(uint32_t dword, uint8_t * bytes);
+uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index);
+
+#define MT_GET_DATA(data_type, data, length) SEND_BYTES(MT_GET_DATA, data_type, data, length)
+#define MT_GET_DATA_ACK(data_type, data, length) SEND_BYTES(MT_GET_DATA_ACK, data_type, data, length)
+#define MT_SET_DATA(data_type, data, length) SEND_BYTES(MT_SET_DATA, data_type, data, length)
+#define MT_SET_DATA_ACK(data_type, data, length) SEND_BYTES(MT_SET_DATA_ACK, data_type, data, length)
+#define MT_SEND_DATA(data_type, data, length) SEND_BYTES(MT_SEND_DATA, data_type, data, length)
+#define MT_SEND_DATA_ACK(data_type, data, length) SEND_BYTES(MT_SEND_DATA_ACK, data_type, data, length)
+#define MT_EXE_ACTION(data_type, data, length) SEND_BYTES(MT_EXE_ACTION, data_type, data, length)
+#define MT_EXE_ACTION_ACK(data_type, data, length) SEND_BYTES(MT_EXE_ACTION_ACK, data_type, data, length)
+
+void process_api(uint16_t length, uint8_t * data);
+
+__attribute__ ((weak))
+bool process_api_quantum(uint8_t length, uint8_t * data);
+
+__attribute__ ((weak))
+bool process_api_keyboard(uint8_t length, uint8_t * data);
+
+__attribute__ ((weak))
+bool process_api_user(uint8_t length, uint8_t * data);
+
+#endif
\ No newline at end of file
diff --git a/quantum/api/api_sysex.c b/quantum/api/api_sysex.c
new file mode 100644 (file)
index 0000000..a4a554e
--- /dev/null
@@ -0,0 +1,29 @@
+#include "api_sysex.h"
+
+void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length) {
+    // SEND_STRING("\nTX: ");
+    // for (uint8_t i = 0; i < length; i++) {
+    //     send_byte(bytes[i]);
+    //     SEND_STRING(" ");
+    // }
+    uint8_t * precode = malloc(sizeof(uint8_t) * (length + 2));
+    precode[0] = message_type;
+    precode[1] = data_type;
+    memcpy(precode + 2, bytes, length);
+    uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 2)));
+    uint16_t encoded_length = sysex_encode(encoded, precode, length + 2);
+    uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5));
+    array[0] = 0xF0;
+    array[1] = 0x00;
+    array[2] = 0x00;
+    array[3] = 0x00;
+    array[encoded_length + 4] = 0xF7;
+    memcpy(array + 4, encoded, encoded_length);
+    midi_send_array(&midi_device, encoded_length + 5, array);
+
+    // SEND_STRING("\nTD: ");
+    // for (uint8_t i = 0; i < encoded_length + 5; i++) {
+    //     send_byte(array[i]);
+    //     SEND_STRING(" ");
+    // }
+}
\ No newline at end of file
diff --git a/quantum/api/api_sysex.h b/quantum/api/api_sysex.h
new file mode 100644 (file)
index 0000000..b947b60
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _API_SYSEX_H_
+#define _API_SYSEX_H_
+
+#include "api.h"
+
+void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length);
+
+#define SEND_BYTES(mt, dt, b, l) send_bytes_sysex(mt, dt, b, l)
+
+#endif
\ No newline at end of file
index fc6fcdeef1df82c2c9d384c3ac5457064c909190..8022ca67298584c36491f81845be0f23735a09fe 100644 (file)
        Q__NOTE(_E4), Q__NOTE(_C4), \
        Q__NOTE(_E4),
 
+/* Requires: PLAY_NOTE_ARRAY(..., ..., STACCATO); */
+#define IN_LIKE_FLINT \
+    E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4),  \
+    E__NOTE(_AS4), E__NOTE(_B4),  QD_NOTE(_CS4), \
+    E__NOTE(_B4),  E__NOTE(_CS4), QD_NOTE(_DS4), \
+    E__NOTE(_CS4), E__NOTE(_B4),  QD_NOTE(_AS4), \
+    E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4),
+
 #define GOODBYE_SOUND \
     E__NOTE(_E7),     \
     E__NOTE(_A6),     \
index 6d4172a06c2dedd3def472ea500ec233f69eb4a8..19f7b646ef8eb2a71304e4bb9a5b612283da27c5 100644 (file)
@@ -18,7 +18,7 @@ void voice_iterate() {
 }
 
 void voice_deiterate() {
-    voice = (voice - 1) % number_of_voices;
+    voice = (voice - 1 + number_of_voices) % number_of_voices;
 }
 
 float voice_envelope(float frequency) {
@@ -31,6 +31,27 @@ float voice_envelope(float frequency) {
             polyphony_rate = 0;
                break;
 
+        case something:
+            polyphony_rate = 0;
+            switch (compensated_index) {
+                case 0 ... 9:
+                    note_timbre = TIMBRE_12;
+                    break;
+
+                case 10 ... 19:
+                    note_timbre = TIMBRE_25;
+                    break;
+
+                case 20 ... 200:
+                    note_timbre = .25 + .125 + pow(((float)compensated_index - 20) / (200 - 20), 2)*.125;
+                    break;
+
+                default:
+                    note_timbre = .25;
+                    break;
+            }
+            break;
+
         case butts_fader:
             polyphony_rate = 0;
             switch (compensated_index) {
index b2495b23b57b796c927f180936ba8c86101fddd3..b43def3d7d03c30f0912e2f71ecfd289d03d1f75 100644 (file)
@@ -11,6 +11,7 @@ float voice_envelope(float frequency);
 
 typedef enum {
     default_voice,
+    something,
     butts_fader,
     octave_crunch,
     duty_osc,
index 09a4fe7010b77b29e4cdb25a192bc6e74358685f..17c11faeb617e1fbaeae12af7622f6c4c429c10e 100644 (file)
@@ -5,46 +5,56 @@
 #define COL2ROW 0
 #define ROW2COL 1
 /* I/O pins */
-#define B0 0x30
-#define B1 0x31
-#define B2 0x32
-#define B3 0x33
-#define B4 0x34
-#define B5 0x35
-#define B6 0x36
-#define B7 0x37
-#define C0 0x60
-#define C1 0x61
-#define C2 0x62
-#define C3 0x63
-#define C4 0x64
-#define C5 0x65
-#define C6 0x66
-#define C7 0x67
-#define D0 0x90
-#define D1 0x91
-#define D2 0x92
-#define D3 0x93
-#define D4 0x94
-#define D5 0x95
-#define D6 0x96
-#define D7 0x97
-#define E0 0xC0
-#define E1 0xC1
-#define E2 0xC2
-#define E3 0xC3
-#define E4 0xC4
-#define E5 0xC5
-#define E6 0xC6
-#define E7 0xC7
-#define F0 0xF0
-#define F1 0xF1
-#define F2 0xF2
-#define F3 0xF3
-#define F4 0xF4
-#define F5 0xF5
-#define F6 0xF6
-#define F7 0xF7
+#ifndef F0
+    #define B0 0x30
+    #define B1 0x31
+    #define B2 0x32
+    #define B3 0x33
+    #define B4 0x34
+    #define B5 0x35
+    #define B6 0x36
+    #define B7 0x37
+    #define C0 0x60
+    #define C1 0x61
+    #define C2 0x62
+    #define C3 0x63
+    #define C4 0x64
+    #define C5 0x65
+    #define C6 0x66
+    #define C7 0x67
+    #define D0 0x90
+    #define D1 0x91
+    #define D2 0x92
+    #define D3 0x93
+    #define D4 0x94
+    #define D5 0x95
+    #define D6 0x96
+    #define D7 0x97
+    #define E0 0xC0
+    #define E1 0xC1
+    #define E2 0xC2
+    #define E3 0xC3
+    #define E4 0xC4
+    #define E5 0xC5
+    #define E6 0xC6
+    #define E7 0xC7
+    #define F0 0xF0
+    #define F1 0xF1
+    #define F2 0xF2
+    #define F3 0xF3
+    #define F4 0xF4
+    #define F5 0xF5
+    #define F6 0xF6
+    #define F7 0xF7
+    #define A0 0x00
+    #define A1 0x01
+    #define A2 0x02
+    #define A3 0x03
+    #define A4 0x04
+    #define A5 0x05
+    #define A6 0x06
+    #define A7 0x07
+#endif
 
 /* USART configuration */
 #ifdef BLUETOOTH_ENABLE
         } while(0)
 #   else
 #       error "USART configuration is needed."
-#endif
-
-// I'm fairly sure these aren't needed, but oh well - Jack
-
-/*
- * PS/2 Interrupt configuration
- */
-#ifdef PS2_USE_INT
-/* uses INT1 for clock line(ATMega32U4) */
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   1
-
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    0
-
-#define PS2_INT_INIT()  do {    \
-    EICRA |= ((1<<ISC11) |      \
-              (0<<ISC10));      \
-} while (0)
-#define PS2_INT_ON()  do {      \
-    EIMSK |= (1<<INT1);         \
-} while (0)
-#define PS2_INT_OFF() do {      \
-    EIMSK &= ~(1<<INT1);        \
-} while (0)
-#define PS2_INT_VECT    INT1_vect
-#endif
-
-/*
- * PS/2 Busywait configuration
- */
-#ifdef PS2_USE_BUSYWAIT
-#define PS2_CLOCK_PORT  PORTD
-#define PS2_CLOCK_PIN   PIND
-#define PS2_CLOCK_DDR   DDRD
-#define PS2_CLOCK_BIT   1
-
-#define PS2_DATA_PORT   PORTD
-#define PS2_DATA_PIN    PIND
-#define PS2_DATA_DDR    DDRD
-#define PS2_DATA_BIT    0
-#endif
-
+#   endif
 #endif
 
 #endif
diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h
new file mode 100644 (file)
index 0000000..e6dbc5b
--- /dev/null
@@ -0,0 +1,231 @@
+/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */
+#ifndef DYNAMIC_MACROS_H
+#define DYNAMIC_MACROS_H
+
+#include "action_layer.h"
+
+#ifndef DYNAMIC_MACRO_SIZE
+/* May be overridden with a custom value. Be aware that the effective
+ * macro length is half of this value: each keypress is recorded twice
+ * because of the down-event and up-event. This is not a bug, it's the
+ * intended behavior.
+ *
+ * Usually it should be fine to set the macro size to at least 256 but
+ * there have been reports of it being too much in some users' cases,
+ * so 128 is considered a safe default.
+ */
+#define DYNAMIC_MACRO_SIZE 128
+#endif
+
+/* DYNAMIC_MACRO_RANGE must be set as the last element of user's
+ * "planck_keycodes" enum prior to including this header. This allows
+ * us to 'extend' it.
+ */
+enum dynamic_macro_keycodes {
+    DYN_REC_START1 = DYNAMIC_MACRO_RANGE,
+    DYN_REC_START2,
+    DYN_MACRO_PLAY1,
+    DYN_MACRO_PLAY2,
+};
+
+/* Blink the LEDs to notify the user about some event. */
+void dynamic_macro_led_blink(void)
+{
+    backlight_toggle();
+    _delay_ms(100);
+    backlight_toggle();
+}
+
+/**
+ * Start recording of the dynamic macro.
+ *
+ * @param[out] macro_pointer The new macro buffer iterator.
+ * @param[in]  macro_buffer  The macro buffer used to initialize macro_pointer.
+ */
+void dynamic_macro_record_start(
+    keyrecord_t **macro_pointer, keyrecord_t *macro_buffer)
+{
+    dynamic_macro_led_blink();
+
+    clear_keyboard();
+    layer_clear();
+    *macro_pointer = macro_buffer;
+}
+
+/**
+ * Play the dynamic macro.
+ *
+ * @param macro_buffer[in] The beginning of the macro buffer being played.
+ * @param macro_end[in]    The element after the last macro buffer element.
+ * @param direction[in]    Either +1 or -1, which way to iterate the buffer.
+ */
+void dynamic_macro_play(
+    keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction)
+{
+    uint32_t saved_layer_state = layer_state;
+
+    clear_keyboard();
+    layer_clear();
+
+    while (macro_buffer != macro_end) {
+        process_record(macro_buffer);
+        macro_buffer += direction;
+    }
+
+    clear_keyboard();
+
+    layer_state = saved_layer_state;
+}
+
+/**
+ * Record a single key in a dynamic macro.
+ *
+ * @param macro_pointer[in,out] The current buffer position.
+ * @param macro_end2[in] The end of the other macro which shouldn't be overwritten.
+ * @param direction[in]  Either +1 or -1, which way to iterate the buffer.
+ * @param record[in]     The current keypress.
+ */
+void dynamic_macro_record_key(
+    keyrecord_t **macro_pointer,
+    keyrecord_t *macro_end2,
+    int8_t direction,
+    keyrecord_t *record)
+{
+    if (*macro_pointer + direction != macro_end2) {
+        **macro_pointer = *record;
+        *macro_pointer += direction;
+    } else {
+        /* Notify about the end of buffer. The blinks are paired
+         * because they should happen on both down and up events. */
+        backlight_toggle();
+    }
+}
+
+/**
+ * End recording of the dynamic macro. Essentially just update the
+ * pointer to the end of the macro.
+ */
+void dynamic_macro_record_end(keyrecord_t *macro_pointer, keyrecord_t **macro_end)
+{
+    dynamic_macro_led_blink();
+
+    *macro_end = macro_pointer;
+}
+
+/* Handle the key events related to the dynamic macros. Should be
+ * called from process_record_user() like this:
+ *
+ *   bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ *       if (!process_record_dynamic_macro(keycode, record)) {
+ *           return false;
+ *       }
+ *       <...THE REST OF THE FUNCTION...>
+ *   }
+ */
+bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record)
+{
+    /* Both macros use the same buffer but read/write on different
+     * ends of it.
+     *
+     * Macro1 is written left-to-right starting from the beginning of
+     * the buffer.
+     *
+     * Macro2 is written right-to-left starting from the end of the
+     * buffer.
+     *
+     * &macro_buffer   macro_end
+     *  v                   v
+     * +------------------------------------------------------------+
+     * |>>>>>> MACRO1 >>>>>>|    |<<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<|
+     * +------------------------------------------------------------+
+     *                           ^                                 ^
+     *                         r_macro_end                  r_macro_buffer
+     *
+     * During the recording when one macro encounters the end of the
+     * other macro, the recording is stopped. Apart from this, there
+     * are no arbitrary limits for the macros' length in relation to
+     * each other: for example one can either have two medium sized
+     * macros or one long macro and one short macro. Or even one empty
+     * and one using the whole buffer.
+     */
+    static keyrecord_t macro_buffer[DYNAMIC_MACRO_SIZE];
+
+    /* Pointer to the first buffer element after the first macro.
+     * Initially points to the very beginning of the buffer since the
+     * macro is empty. */
+    static keyrecord_t *macro_end = macro_buffer;
+
+    /* The other end of the macro buffer. Serves as the beginning of
+     * the second macro. */
+    static keyrecord_t *const r_macro_buffer = macro_buffer + DYNAMIC_MACRO_SIZE - 1;
+
+    /* Like macro_end but for the second macro. */
+    static keyrecord_t *r_macro_end = r_macro_buffer;
+
+    /* A persistent pointer to the current macro position (iterator)
+     * used during the recording. */
+    static keyrecord_t *macro_pointer = NULL;
+
+    /* 0   - no macro is being recorded right now
+     * 1,2 - either macro 1 or 2 is being recorded */
+    static uint8_t macro_id = 0;
+
+    if (macro_id == 0) {
+        /* No macro recording in progress. */
+        if (!record->event.pressed) {
+            switch (keycode) {
+            case DYN_REC_START1:
+                dynamic_macro_record_start(&macro_pointer, macro_buffer);
+                macro_id = 1;
+                return false;
+            case DYN_REC_START2:
+                dynamic_macro_record_start(&macro_pointer, r_macro_buffer);
+                macro_id = 2;
+                return false;
+            case DYN_MACRO_PLAY1:
+                dynamic_macro_play(macro_buffer, macro_end, +1);
+                return false;
+            case DYN_MACRO_PLAY2:
+                dynamic_macro_play(r_macro_buffer, r_macro_end, -1);
+                return false;
+            }
+        }
+    } else {
+        /* A macro is being recorded right now. */
+        switch (keycode) {
+        case MO(_DYN):
+            /* Use the layer key used to access the macro recording as
+             * a stop button. */
+            if (record->event.pressed) { /* Ignore the initial release
+                                          * just after the recoding
+                                          * starts. */
+                switch (macro_id) {
+                case 1:
+                    dynamic_macro_record_end(macro_pointer, &macro_end);
+                    break;
+                case 2:
+                    dynamic_macro_record_end(macro_pointer, &r_macro_end);
+                    break;
+                }
+                macro_id = 0;
+            }
+            return false;
+        default:
+            /* Store the key in the macro buffer and process it normally. */
+            switch (macro_id) {
+            case 1:
+                dynamic_macro_record_key(&macro_pointer, r_macro_end, +1, record);
+                break;
+            case 2:
+                dynamic_macro_record_key(&macro_pointer, macro_end, -1, record);
+                break;
+            }
+            return true;
+            break;
+        }
+    }
+
+    return true;
+}
+
+#endif
index 6216eefc9015acfc886526c2d23c262ace69d628..c15b0d32f870d8928d84b82877e12c86b0659a68 100644 (file)
@@ -1,6 +1,9 @@
 #include "eeconfig.h"
 #include "keycode.h"
 
+#ifndef KEYCODE_CONFIG_H
+#define KEYCODE_CONFIG_H
+
 uint16_t keycode_config(uint16_t keycode);
 
 /* NOTE: Not portable. Bit field order depends on implementation */
@@ -19,3 +22,5 @@ typedef union {
 } keymap_config_t;
 
 extern keymap_config_t keymap_config;
+
+#endif /* KEYCODE_CONFIG_H */
index a1586518398dad1c98737e418621ba28ab3627e8..ae56d16c75ebc488bb4ef667ec0f64763d2ffcdb 100644 (file)
@@ -84,6 +84,10 @@ enum quantum_keycodes {
     QK_MOD_TAP_MAX        = 0x6FFF,
     QK_TAP_DANCE          = 0x7100,
     QK_TAP_DANCE_MAX      = 0x71FF,
+#ifdef UNICODEMAP_ENABLE
+    QK_UNICODE_MAP        = 0x7800,
+    QK_UNICODE_MAP_MAX    = 0x7FFF,
+#endif
 #ifdef UNICODE_ENABLE
     QK_UNICODE            = 0x8000,
     QK_UNICODE_MAX        = 0xFFFF,
@@ -111,6 +115,7 @@ enum quantum_keycodes {
     MAGIC_UNSWAP_BACKSLASH_BACKSPACE,
     MAGIC_UNHOST_NKRO,
     MAGIC_UNSWAP_ALT_GUI,
+    MAGIC_TOGGLE_NKRO,
 
     // Leader key
 #ifndef DISABLE_LEADER
@@ -156,16 +161,16 @@ enum quantum_keycodes {
     BL_INC,
     BL_TOGG,
     BL_STEP,
-       
-       // RGB functionality
-       RGB_TOG,
-       RGB_MOD,
-       RGB_HUI,
-       RGB_HUD,
-       RGB_SAI,
-       RGB_SAD,
-       RGB_VAI,
-       RGB_VAD,
+
+    // RGB functionality
+    RGB_TOG,
+    RGB_MOD,
+    RGB_HUI,
+    RGB_HUD,
+    RGB_SAI,
+    RGB_SAD,
+    RGB_VAI,
+    RGB_VAD,
 
     // Left shift, open paren
     KC_LSPO,
@@ -173,6 +178,10 @@ enum quantum_keycodes {
     // Right shift, close paren
     KC_RSPC,
 
+    // Printing
+    PRINT_ON,
+    PRINT_OFF,
+
     // always leave at the end
     SAFE_RANGE
 };
@@ -190,6 +199,7 @@ enum quantum_keycodes {
 #define HYPR(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI)
 #define MEH(kc)  (kc | QK_LCTL | QK_LSFT | QK_LALT)
 #define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI)
+#define ALTG(kc) (kc | QK_RCTL | QK_RALT)
 
 #define MOD_HYPR 0xf
 #define MOD_MEH 0x7
@@ -294,7 +304,10 @@ enum quantum_keycodes {
 // ON_PRESS    = 1
 // ON_RELEASE  = 2
 // Unless you have a good reason not to do so, prefer  ON_PRESS (1) as your default.
-#define TO(layer, when) (layer | QK_TO | (when << 0x4))
+// In fact, we changed it to assume ON_PRESS for sanity/simplicity. If needed, you can add your own
+// keycode modeled after the old version, kept below for this.
+/* #define TO(layer, when) (layer | QK_TO | (when << 0x4)) */
+#define TO(layer) (layer | QK_TO | (ON_PRESS << 0x4))
 
 // Momentary switch layer - 256 layer max
 #define MO(layer) (layer | QK_MOMENTARY)
@@ -309,7 +322,7 @@ enum quantum_keycodes {
 #define OSL(layer) (layer | QK_ONE_SHOT_LAYER)
 
 // One-shot mod
-#define OSM(layer) (layer | QK_ONE_SHOT_MOD)
+#define OSM(mod) (mod | QK_ONE_SHOT_MOD)
 
 // M-od, T-ap - 256 keycode max
 #define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0xF) << 8))
@@ -334,5 +347,8 @@ enum quantum_keycodes {
     #define UC(n) UNICODE(n)
 #endif
 
+#ifdef UNICODEMAP_ENABLE
+    #define X(n) (n | QK_UNICODE_MAP)
+#endif
 
 #endif
index d0a8312c1eddbcd62e1d70c2d1758cedad219580..833e5a8f8d9f16929bb7ca7cb52cc4ffc272306c 100644 (file)
@@ -30,7 +30,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "quantum.h"
 
 #ifdef MIDI_ENABLE
-       #include "keymap_midi.h"
+       #include "process_midi.h"
 #endif
 
 extern keymap_config_t keymap_config;
index 4c309605472e3f0b7c831f56701419a72ae9d342..e5ef39552ad067d545e00cfd8e20e2378ce8f3c2 100644 (file)
 // Fourth row
 #define BP_COLON    LSFT(BP_DOT)    // :
 #define BP_COLN     BP_COLON
-#define BP_QUESTION LSFT(BP_QUOTE)  // ?
+#define BP_QUESTION LSFT(BP_APOS)  // ?
 #define BP_QEST     BP_QUESTION
 
 // Space bar
 // Third row
 #define BP_AE_LIGATURE              ALTGR(BP_A)         // æ
 #define BP_AE                       BP_AE_LIGATURE
-#define BP_U_GRAVE                  AGR(BP_U)           // ù
+#define BP_U_GRAVE                  ALTGR(BP_U)           // ù
 #define BP_UGRV                     BP_U_GRAVE
 #define BP_DEAD_TREMA               ALTGR(BP_I)         // dead ¨ (trema/umlaut/diaresis)
 #define BP_DTRM                     BP_DEAD_TREMA
diff --git a/quantum/keymap_extras/keymap_br_abnt2.h b/quantum/keymap_extras/keymap_br_abnt2.h
new file mode 100644 (file)
index 0000000..0df1777
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef KEYMAP_BR_ABNT2_H
+#define KEYMAP_BR_ABNT2_H
+
+#include "keymap_common.h"
+
+/* Scan codes for the Brazilian ABNT2 keyboard layout */
+
+#define BR_CCDL KC_SCLN      //  Ç   same scancode as ;: on US layout
+#define BR_SCLN KC_SLSH      //  ;:  same scancode as /? on US layout
+#define BR_QUOT KC_GRV       //  '"  same scancode as `~ on US layout
+#define BR_TILD KC_QUOT      //  ~^  dead keys, same scancode as '" on US layout
+#define BR_ACUT KC_LBRC      //  ´`  dead keys, same scancode as [{ on US layout
+#define BR_LBRC KC_RBRC      //  [{  same scancode as ]} on US layout
+#define BR_RBRC KC_BSLS      //  ]}  same scancode as \| on US layout
+#define BR_BSLS KC_NUBS      //  \|  uses the non-US hash scancode (#~, sometimes §±)
+#define BR_SLSH KC_INT1      //  /?  uses the INTL1 scancode
+
+#define BR_COLN LSFT(BR_SCLN)   // shifted :
+#define BR_DQT  LSFT(BR_QUOT)   // shifted "
+#define BR_CIRC LSFT(BR_TILD)   // shifted ^ (dead key)
+#define BR_GRAV LSFT(BR_ACUT)   // shifted ` (dead key)
+#define BR_LCBR LSFT(BR_LBRC)   // shifted {
+#define BR_RCBR LSFT(BR_RBRC)   // shifted }
+#define BR_PIPE LSFT(BR_BSLS)   // shifted |
+#define BR_QUES LSFT(BR_SLSH)   // shifted ?
+#define BR_TRMA LSFT(KC_6)      // shifted ¨ (dead key - trema accent)
+
+// On the ABNT2 the keypad comma and the keypad dot scancodes are switched
+// (presumably because in Brazil comma is used as the decimal separator)
+#define BR_KPDT KC_KP_COMMA  //  keypad .
+#define BR_KPCM KC_KP_DOT    //  keypad ,
+
+#define BR_1UP    LALT(KC_1)      // 1 superscript                    ¹   alt+1
+#define BR_2UP    LALT(KC_2)      // 2 superscript                    ²   alt+2
+#define BR_3UP    LALT(KC_3)      // 3 superscript                    ³   alt+3
+#define BR_PND    LALT(KC_4)      // Pound sign                       £   alt+4
+#define BR_CENT   LALT(KC_5)      // Cent sign                        ¢   alt+5
+#define BR_NOT    LALT(KC_6)      // Not sign                         ¬   alt+6
+#define BR_SECT   LALT(KC_EQL)    // Section sign                     §   alt+=
+#define BR_FORD   LALT(BR_LBRC)   // Feminine Ordinal Sign            ª   alt+[
+#define BR_MORD   LALT(BR_RBRC)   // Masculine Ordinal Sign           º   alt+]
+#define BR_DGRE   LALT(BR_SLSH)   // Degree sign                      °   alt+/
+
+#define BR_EURO   LALT(KC_E)      // Euro sign                        €   alt+e
+#define BR_NDTD   LALT(BR_TILD)   // Non-dead key tilde               ~   alt+~
+#define BR_NDAC   LALT(BR_ACUT)   // Non-dead key acute accent        ´   alt+´
+#define BR_NDGV   LALT(BR_QUOT)   // Non-dead key grave accent        `   alt+'
+#define BR_NDCR   LALT(BR_CIRC)   // Non-dead key circumflex accent   ^   alt+^ (alt+shift+~)
+#define BR_NDTR   LALT(BR_TRMA)   // Non-dead key trema accent        ¨   alt+¨ (alt+shift+6)
+
+// For 101-key keyboard layouts, the ABNT2 layout allows
+// the slash and question mark to be typed using alt+q and alt+w.
+// The shortcuts are provided here for completeness' sake,
+// but it's recommended to use BR_SLSH and BR_QUES instead
+#define BR_ASLS   LALT(KC_Q)
+#define BR_AQST   LALT(KC_W)
+
+#endif
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
new file mode 100644 (file)
index 0000000..0bc20c7
--- /dev/null
@@ -0,0 +1,255 @@
+#ifndef KEYMAP_CANADIAN_MULTILINGUAG_H
+#define KEYMAP_CANADIAN_MULTILINGUAG_H
+
+#include "keymap.h"
+
+// Alt gr
+#ifndef ALTGR
+#define ALTGR(kc)   RALT(kc)
+#endif
+#ifndef ALGR
+#define ALGR(kc)    ALTGR(kc)
+#endif
+
+#define CSA_ALTGR   KC_RALT
+#define CSA_ALGR    CSA_ALTGR
+
+#ifndef GR2A
+#define GR2A(kc)    RCTL(kc)
+#endif
+
+// Normal characters
+// First row
+#define CSA_SLASH   KC_GRV      // /
+#define CSA_SLSH    CSA_SLASH
+
+// Second row
+#define CSA_DEAD_CIRCUMFLEX     KC_LBRACKET         // dead ^
+#define CSA_DCRC                CSA_DEAD_CIRCUMFLEX
+#define CSA_C_CEDILLA           KC_RBRACKET         // Ç
+#define CSA_CCED                CSA_C_CEDILLA
+
+// Third row
+#define CSA_E_GRAVE     KC_QUOT     // è
+#define CSA_EGRV        CSA_E_GRAVE
+#define CSA_A_GRAVE     KC_BSLASH   // à
+#define CSA_AGRV        CSA_A_GRAVE
+
+// Fourth row
+#define CSA_U_GRAVE     KC_NONUS_BSLASH     // ù
+#define CSA_UGRV        CSA_U_GRAVE
+#define CSA_E_ACUTE     KC_SLSH             // é
+#define CSA_ECUT        CSA_E_ACUTE
+
+// Shifted characters
+// First row
+#define CSA_BACKSLASH   LSFT(CSA_SLASH) /* \ */
+#define CSA_BSLS        CSA_BACKSLASH
+#define CSA_QUESTION    LSFT(KC_6)      // ?
+#define CSA_QEST        CSA_QUESTION
+
+// Second row
+#define CSA_DEAD_TREMA  LSFT(CSA_DEAD_CIRCUMFLEX)    // dead trema/umlaut/diaresis for ä ë ï ö ü
+#define CSA_DTRM        CSA_DEAD_TREMA
+
+// Third row
+// all same as US-QWERTY, or capitalised character of the non-shifted key
+
+// Fourth row
+#define CSA_APOSTROPHE      LSFT(KC_COMMA)  // '
+#define CSA_APOS            CSA_APOSTROPHE
+#define CSA_DOUBLE_QUOTE    LSFT(KC_DOT)    // "
+#define CSA_DQOT            CSA_DOUBLE_QUOTE
+
+// Alt Gr-ed characters
+// First row
+#define CSA_PIPE                ALTGR(CSA_SLASH)        // |
+#define CSA_CURRENCY            ALTGR(KC_4)             // ¤
+#define CSA_CURR                CSA_CURRENCY
+#define CSA_LEFT_CURLY_BRACE    ALTGR(KC_7)             // {
+#define CSA_LCBR                CSA_LEFT_CURLY_BRACE
+#define CSA_RIGHT_CURLY_BRACE   ALTGR(KC_8)             // }
+#define CSA_RCBR                CSA_RIGHT_CURLY_BRACE
+#define CSA_LBRACKET            ALTGR(KC_9)             // [
+#define CSA_LBRC                CSA_LBRACKET
+#define CSA_RBRACKET            ALTGR(KC_0)             // ]
+#define CSA_RBRC                CSA_RBRACKET
+#define CSA_NEGATION            ALTGR(KC_EQUAL)         // ¬
+#define CSA_NEGT                CSA_NEGATION
+
+// Second row
+// euro symbol not available on Linux? (X.org)
+#define CSA_EURO        ALTGR(KC_E)                 // €
+#define CSA_DEAD_GRAVE  ALTGR(CSA_DEAD_CIRCUMFLEX)
+#define CSA_DGRV        CSA_DEAD_GRAVE              // dead `
+#define CSA_DEAD_TILDE  ALTGR(CSA_C_CEDILLA)        // ~
+#define CSA_DTLD        CSA_DEAD_TILDE
+
+// Third row
+#define CSA_DEGREE  ALTGR(KC_SCOLON)    // °
+#define CSA_DEGR    CSA_DEGREE
+
+// Fourth row
+#define CSA_LEFT_GUILLEMET      ALTGR(KC_Z)         // «
+#define CSA_LGIL                CSA_LEFT_GUILLEMET
+#define CSA_RIGHT_GUILLEMET     ALTGR(KC_X)         // »
+#define CSA_RGIL                CSA_RIGHT_GUILLEMET
+#define CSA_LESS                ALTGR(KC_COMMA)     // <
+#define CSA_GREATER             ALTGR(KC_DOT)       // >
+#define CSA_GRTR                CSA_GREATER
+
+// Space bar
+#define CSA_NON_BREAKING_SPACE  ALTGR(KC_SPACE)
+#define CSA_NBSP                CSA_NON_BREAKING_SPACE
+
+// GR2A-ed characters
+// First row
+#define CSA_SUPERSCRIPT_ONE     GR2A(KC_1)  // ¹
+#define CSA_SUP1                CSA_SUPERSCRIPT_ONE
+#define CSA_SUPERSCRIPT_TWO     GR2A(KC_2)  // ²
+#define CSA_SUP2                CSA_SUPERSCRIPT_TWO
+#define CSA_SUPERSCRIPT_THREE   GR2A(KC_3)  // ³
+#define CSA_SUP3                CSA_SUPERSCRIPT_THREE
+#define CSA_ONE_QUARTER         GR2A(KC_4)  // ¼
+#define CSA_1QRT                CSA_ONE_QUARTER
+#define CSA_ONE_HALF            GR2A(KC_5)  // ½
+#define CSA_1HLF                CSA_ONE_HALF
+#define CSA_THREE_QUARTERS      GR2A(KC_6)  // ¾
+#define CSA_3QRT                CSA_THREE_QUARTERS
+// nothing on 7-0 and -
+#define CSA_DEAD_CEDILLA        GR2A(KC_EQUAL)  // dead ¸
+#define CSA_DCED                CSA_DEAD_CEDILLA
+
+// Second row
+#define CSA_OMEGA           GR2A(KC_Q)  // ω
+#define CSA_OMEG            CSA_OMEGA
+#define CSA_L_STROKE        GR2A(KC_W)  // ł
+#define CSA_LSTK            CSA_L_STROKE
+#define CSA_OE_LIGATURE     GR2A(KC_E)  // œ
+#define CSA_OE              CSA_OE_LIGATURE
+#define CSA_PARAGRAPH       GR2A(KC_R)  // ¶
+#define CSA_PARG            CSA_PARAGRAPH
+#define CSA_T_STROKE        GR2A(KC_T)  // ŧ
+#define CSA_LEFT_ARROW      GR2A(KC_Y)  // ←
+#define CSA_LARW            CSA_LEFT_ARROW
+#define CSA_DOWN_ARROW      GR2A(KC_U)  // ↓
+#define CSA_DARW            CSA_DOWN_ARROW
+#define CSA_RIGHT_ARROW     GR2A(KC_I)  // →
+#define CSA_RARW            CSA_RIGHT_ARROW
+#define CSA_O_STROKE        GR2A(KC_O)  // ø
+#define CSA_OSTK            CSA_O_STROKE
+#define CSA_THORN           GR2A(KC_P)  // þ
+#define CSA_THRN            CSA_THORN
+// nothing on ^
+#define CSA_TILDE           GR2A(CSA_C_CEDILLA)  // dead ~
+#define CSA_TILD            CSA_TILDE
+
+// Third row
+#define CSA_AE_LIGATURE     GR2A(KC_A)      // æ
+#define CSA_AE              CSA_AE_LIGATURE
+#define CSA_SHARP_S         GR2A(KC_S)      // ß
+#define CSA_SRPS            CSA_SHARP_S
+#define CSA_ETH             GR2A(KC_D)      // ð
+// nothing on F
+#define CSA_ENG             GR2A(KC_G)      // ŋ
+#define CSA_H_SRTOKE        GR2A(KC_H)      // ħ
+#define CSA_HSTK            CSA_H_SRTOKE
+#define CSA_IJ_LIGATURE     GR2A(KC_J)      // ij
+#define CSA_IJ              CSA_IJ_LIGATURE
+#define CSA_KRA             GR2A(KC_K)      // ĸ
+#define CSA_L_FLOWN_DOT     GR2A(KC_L)      // ŀ
+#define CSA_LFLD            CSA_L_FLOWN_DOT
+#define CSA_DEAD_ACUTE      GR2A(KC_SCLN)   // dead acute accent
+#define CSA_DACT            CSA_DEAD_ACUTE
+// nothing on È & À
+
+// Fourth row
+#define CSA_CENT                GR2A(KC_C)  // ¢
+#define CSA_LEFT_DOUBLE_QUOTE   GR2A(KC_V)  // “
+#define CSA_LDQT                CSA_LEFT_DOUBLE_QUOTE
+#define CSA_RIGHT_DOUBLE_QUOTE  GR2A(KC_B)  // ”
+#define CSA_RDQT                CSA_RIGHT_DOUBLE_QUOTE
+#define CSA_N_APOSTROPHE        GR2A(KC_N)  // ʼn (deprecated unicode codepoint)
+#define CSA_NAPO                CSA_N_APOSTROPHE
+#define CSA_MU                  GR2A(KC_M)  // μ
+#define CSA_HORIZONTAL_BAR      GR2A(KC_COMMA)  // ―
+#define CSA_HZBR                CSA_HORIZONTAL_BAR
+#define CSA_DEAD_DOT_ABOVE      GR2A(KC_DOT)    // dead ˙
+#define CSA_DDTA                CSA_DEAD_DOT_ABOVE
+
+// GR2A-shifted characters (different from capitalised GR2A-ed characters)
+// First row
+#define CSA_SOFT_HYPHEN         GR2A(LSFT(CSA_SLASH))   // soft-hyphen, appears as a hyphen in wrapped word
+#define CSA_SHYP                CSA_SOFT_HYPHEN
+#define CSA_INVERTED_EXCLAIM    GR2A(KC_EXCLAIM)    // ¡
+#define CSA_IXLM                CSA_INVERTED_EXCLAIM
+// nothing on 2
+#define CSA_POUND               GR2A(LSFT(KC_3))    // £
+#define CSA_GBP                 CSA_POUND_SIGN
+// already on ALTGR(KC_E)
+#define CSA_EURO_BIS            GR2A(LSFT(KC_4))    // €
+#define CSA_EURB                CSA_EURO_BIS
+#define CSA_THREE_EIGHTHS       GR2A(LSFT(KC_5))    // ⅜
+#define CSA_3ON8                CSA_THREE_EIGHTHS
+#define CSA_FIVE_EIGHTHS        GR2A(LSFT(KC_6))    // ⅝
+#define CSA_5ON8                CSA_FIVE_EIGHTHS
+#define CSA_SEVEN_EIGHTHS       GR2A(LSFT(KC_7))    // ⅞
+#define CSA_7ON8                CSA_SEVEN_EIGHTHS
+#define CSA_TRADEMARK           GR2A(LSFT(KC_8))    // ™
+#define CSA_TM                  CSA_TRADEMARK
+#define CSA_PLUS_MINUS          GR2A(LSFT(KC_9))    // ±
+#define CSA_PSMS                CSA_PLUS_MINUS
+// nothing on 0
+#define CSA_INVERTED_QUESTION   GR2A(LSFT(KC_MINUS))    // ¿
+#define CSA_IQST                CSA_INVERTED_QUESTION
+#define CSA_DEAD_OGONEK         GR2A(LSFT(KC_EQUAL))    // dead ˛
+#define CSA_DOGO                CSA_DEAD_OGONEK
+
+// Second row
+#define CSA_REGISTERED_TRADEMARK    GR2A(LSFT(KC_R))        // ®
+#define CSA_RTM                     CSA_REGISTERED_TRADEMARK
+#define CSA_YEN                     GR2A(LSFT(KC_Y))        // ¥
+#define CSA_YUAN                    CSA_YEN
+#define CSA_UP_ARROW                LSFT(CSA_DOWN_ARROW)    // ↑
+#define CSA_DOTLESS_I               GR2A(LSFT(KC_I))        // ı
+#define CSA_DLSI                    CSA_DOTLESS_I
+#define CSA_DEAD_RING               GR2A(LSFT(CSA_DCRC))    // dead °
+#define CSA_DRNG                    CSA_DEAD_RING
+#define CSA_DEAD_MACRON             GR2A(LSFT(CSA_C_CEDILLA))   // dead ¯
+#define CSA_DMCR                    CSA_DEAD_MACRON
+
+// Third row
+#define CSA_SECTION                 GR2A(LSFT(KC_S))        // §
+#define CSA_SECT                    CSA_SECTION
+#define CSA_ORDINAL_INDICATOR_A     GR2A(LSFT(KC_F))        // ª
+#define CSA_ORDA                    CSA_ORDINAL_INDICATOR_A
+#define CSA_DEAD_DOUBLE_ACUTE       LSFT(CSA_DEAD_ACUTE)    // ˝
+#define CSA_DDCT                    CSA_DEAD_DOUBLE_ACUTE
+#define CSA_DEAD_CARON              GR2A(LSFT(CSA_E_GRAVE)) // dead ˇ
+#define CSA_DCAR                    CSA_DEAD_CARON
+#define CSA_DEAD_BREVE              GR2A(LSFT(CSA_A_GRAVE)) // dead ˘
+#define CSA_DBRV                    CSA_DEAD_BREVE
+
+// Fourth row
+#define CSA_BROKEN_PIPE         GR2A(LSFT(CSA_U_GRAVE)) // ¦
+#define CSA_BPIP                CSA_BROKEN_PIPE
+#define CSA_COPYRIGHT           GR2A(LSFT(KC_C))        // ©
+#define CSA_CPRT                CSA_COPYRIGHT
+#define CSA_LEFT_QUOTE          GR2A(LSFT(KC_V))        // ‘
+#define CSA_LQOT                CSA_LEFT_QUOTE
+#define CSA_RIGHT_QUOTE         GR2A(LSFT(KC_B))        // ’
+#define CSA_RQOT                CSA_RIGHT_QUOTE
+#define CSA_EIGHTH_NOTE         GR2A(LSFT(KC_N))        // ♪
+#define CSA_8NOT                CSA_EIGHTH_NOTE
+#define CSA_ORDINAL_INDICATOR_O GR2A(LSFT(KC_M))        // º
+#define CSA_ORDO                CSA_ORDINAL_INDICATOR_O
+#define CSA_TIMES               GR2A(LSFT(KC_COMMA))    // ×
+#define CSA_TIMS                CSA_TIMES
+#define CSA_OBELUS              GR2A(LSFT(KC_DOT))      // ÷
+#define CSA_OBEL                CSA_OBELUS
+// more conventional name of the symbol
+#define CSA_DIVISION_SIGN       CSA_OBELUS
+#define CSA_DVSN                CSA_DIVISION_SIGN
+// TODO GR2A(LSFT(CSA_E_ACUTE))
+
+#endif
index e855056e83209f6c7eb527da1d2ba2dde68f4871..a0feed850df09dd4e01b7b701d81b2862799a1cc 100644 (file)
 #define DV_LBRC        KC_MINS
 #define DV_RBRC        KC_EQL
 
-#define DV_QUOT KC_Q
+#define DV_QUOT        KC_Q
 #define DV_COMM        KC_W
 #define DV_DOT KC_E
 #define DV_P   KC_R
 #define DV_Y   KC_T
 #define        DV_F    KC_Y
 #define DV_G   KC_U
-#define DV_C   KC_I
+#define DV_C   KC_I
 #define        DV_R    KC_O
 #define DV_L   KC_P
 #define DV_SLSH        KC_LBRC
 #define DV_EQL KC_RBRC
+#define DV_BSLS        KC_BSLS
 
 #define DV_A   KC_A
 #define DV_O   KC_S
 #define DV_RPRN        LSFT(DV_0)
 #define DV_LCBR        LSFT(DV_LBRC)
 #define DV_RCBR        LSFT(DV_RBRC)
-#define DV_UNDS LSFT(DV_MINS)
-#define DV_PLUS LSFT(DV_EQL)
+
+#define DV_DQUO        LSFT(DV_QUOT)
+#define DV_LABK        LSFT(DV_COMM)
+#define DV_RABK        LSFT(DV_DOT)
+
+#define DV_QUES        LSFT(DV_SLSH)
+#define DV_PLUS        LSFT(DV_EQL)
+#define DV_PIPE        LSFT(DV_BSLS)
+
+#define DV_UNDS        LSFT(DV_MINS)
+
+#define DV_COLN        LSFT(DV_SCLN)
 
 #endif
diff --git a/quantum/keymap_extras/keymap_dvp.h b/quantum/keymap_extras/keymap_dvp.h
new file mode 100644 (file)
index 0000000..83f49a5
--- /dev/null
@@ -0,0 +1,82 @@
+#ifndef KEYMAP_DVP_H
+#define KEYMAP_DVP_H
+
+#include "keymap.h"
+
+// Normal characters
+#define DP_DLR KC_GRV
+#define DP_AMPR        KC_1
+#define DP_LBRC        KC_2
+#define DP_LCBR        KC_3
+#define DP_RCBR        KC_4
+#define DP_LPRN        KC_5
+#define DP_EQL KC_6
+#define DP_ASTR        KC_7
+#define DP_RPRN        KC_8
+#define DP_PLUS        KC_9
+#define DP_RBRC        KC_0
+#define DP_EXLM        KC_MINS
+#define DP_HASH        KC_EQL
+
+#define DP_SCLN        KC_Q
+#define DP_COMM        KC_W
+#define DP_DOT KC_E
+#define DP_P   KC_R
+#define DP_Y   KC_T
+#define DP_F   KC_Y
+#define DP_G   KC_U
+#define DP_C   KC_I
+#define DP_R   KC_O
+#define DP_L   KC_P
+#define DP_SLSH        KC_LBRC
+#define DP_AT  KC_RBRC
+#define DP_BSLS        KC_BSLS
+
+#define DP_A   KC_A
+#define DP_O   KC_S
+#define DP_E   KC_D
+#define DP_U   KC_F
+#define DP_I   KC_G
+#define DP_D   KC_H
+#define DP_H   KC_J
+#define DP_T   KC_K
+#define DP_N   KC_L
+#define DP_S   KC_SCLN
+#define DP_MINS        KC_QUOT
+
+#define DP_QUOT        KC_Z
+#define DP_Q   KC_X
+#define DP_J   KC_C
+#define DP_K   KC_V
+#define DP_X   KC_B
+#define DP_B   KC_N
+#define DP_M   KC_M
+#define DP_W   KC_COMM
+#define DP_V   KC_DOT
+#define DP_Z   KC_SLSH
+
+// Shifted characters
+#define DP_TILD        LSFT(DP_DLR)
+#define DP_PERC        LSFT(DP_AMPR)
+#define DP_7   LSFT(DP_LBRC)
+#define DP_5   LSFT(DP_LCBR)
+#define DP_3   LSFT(DP_RCBR)
+#define DP_1   LSFT(DP_LPRN)
+#define DP_9   LSFT(DP_EQL)
+#define DP_0   LSFT(DP_ASTR)
+#define DP_2   LSFT(DP_RPRN)
+#define DP_4   LSFT(DP_PLUS)
+#define DP_6   LSFT(DP_RBRC)
+#define DP_8   LSFT(DP_EXLM)
+#define DP_GRV LSFT(DP_HASH)
+
+#define DP_COLN        LSFT(DP_SCLN)
+#define DP_LABK        LSFT(DP_COMM)
+#define DP_RABK        LSFT(DP_DOT)
+#define DP_QUES        LSFT(DP_SLSH)
+#define DP_CIRC        LSFT(DP_AT)
+#define DP_PIPE        LSFT(DP_BSLS)
+#define DP_UNDS        LSFT(DP_MINS)
+#define DP_DQUO        LSFT(DP_QUOT)
+
+#endif
index 3fd9713575a5fdb4319fb2b317e55b0b60b56831..87d4bb24cf5a440a4d735888af5a88033508a1e6 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define FR_CH_ALGR KC_RALT
 
 // normal characters
index 2a44c80b14e77bf0964204d5d7fe78c48de8035c..834c69650ecfa574a11e4482d87dcf42e2e90be0 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define NO_ALGR KC_RALT
 
 // Normal characters
@@ -80,4 +80,4 @@
 #define FR_EURO        ALGR(KC_E)
 #define FR_BULT        ALGR(FR_DLR)
 
-#endif
\ No newline at end of file
+#endif
index 3f9ae8bade2efa713f5a3d012ba3795612c5de47..7e2e0ed44e15840c4543df6c1325f3bbcb75c8bf 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define DE_ALGR KC_RALT
 
 // normal characters
index 6a782bcd7bb5fe193387140f70daf230ffd72ca1..b66d582a4413ecc6987e74c1b73b4f3200694b91 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define CH_ALGR KC_RALT
 
 // normal characters
diff --git a/quantum/keymap_extras/keymap_jp.h b/quantum/keymap_extras/keymap_jp.h
new file mode 100644 (file)
index 0000000..e81b595
--- /dev/null
@@ -0,0 +1,62 @@
+/* JP106-layout (Japanese Standard)
+ *
+ * For more information, see
+ * http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html
+ * note: This website is written in Japanese.
+ */
+
+
+#ifndef KEYMAP_JP_H
+#define KEYMAP_JP_H
+
+
+#include "keymap.h"
+
+
+#define JP_ZHTG KC_GRV  // hankaku/zenkaku|kanzi
+#define JP_YEN  KC_INT3 // yen, |
+#define JP_CIRC KC_EQL  // ^, ~
+#define JP_AT   KC_LBRC // @, `
+#define JP_LBRC KC_RBRC // [, {
+#define JP_COLN KC_QUOT // :, *
+#define JP_RBRC KC_NUHS // ], }
+#define JP_BSLS KC_INT1 // \, _
+#define JP_MHEN KC_INT5 // muhenkan
+#define JP_HENK KC_INT4 // henkan
+#define JP_KANA KC_INT2 // katakana/hiragana|ro-mazi
+
+
+//Aliases for shifted symbols
+#define JP_DQT  LSFT(KC_2)    // "
+#define JP_AMPR LSFT(KC_6)    // &
+#define JP_QUOT LSFT(KC_7)    // '
+#define JP_LPRN LSFT(KC_8)    // (
+#define JP_RPRN LSFT(KC_9)    // )
+#define JP_EQL  LSFT(KC_MINS) // =
+#define JP_TILD LSFT(JP_CIRC) // ~
+#define JP_PIPE LSFT(JP_YEN)  // |
+#define JP_GRV  LSFT(JP_AT)   // `
+#define JP_LCBR LSFT(JP_LBRC) // {
+#define JP_PLUS LSFT(KC_SCLN) // +
+#define JP_ASTR LSFT(JP_COLN) // *
+#define JP_RCBR LSFT(JP_RBRC) // }
+#define JP_UNDS LSFT(JP_BSLS) // _
+
+
+// These symbols are correspond to US101-layout.
+#define JP_MINS KC_MINS // -
+#define JP_SCLN KC_SCLN // ;
+#define JP_COMM KC_COMM // ,
+#define JP_DOT  KC_DOT  // .
+#define JP_SLSH KC_SLSH // /
+// shifted
+#define JP_EXLM KC_EXLM // !
+#define JP_HASH KC_HASH // #
+#define JP_DLR  KC_DLR  // $
+#define JP_PERC KC_PERC // %
+#define JP_LT   KC_LT   // <
+#define JP_GT   KC_GT   // >
+#define JP_QUES KC_QUES // ?
+
+
+#endif
index 3acb8b69838530187c978c05f2731b60922537cc..9b0ef35ca991adf1e17a188f4f6f982a2942f313 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define NO_ALGR KC_RALT
 
 // Normal characters
@@ -13,7 +13,7 @@
 #define NO_ACUT        KC_EQL
 
 #define NO_AM  KC_LBRC
-#define NO_QUOT        KC_RBRC
+#define NO_QUOT        KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
 #define NO_AE  KC_SCLN
 #define NO_OSLH        KC_QUOT
 #define        NO_APOS KC_NUHS
@@ -25,7 +25,7 @@
 #define NO_SECT LSFT(NO_HALF)
 #define NO_QUO2        LSFT(KC_2)
 #define NO_BULT LSFT(KC_4)
-#define NO_AMP LSFT(KC_6)
+#define NO_AMPR        LSFT(KC_6)
 #define NO_SLSH LSFT(KC_7)
 #define NO_LPRN        LSFT(KC_8)
 #define NO_RPRN        LSFT(KC_9)
index 018bfeae592cacf6484802d21fe1bb40fdf3cabe..5c4e8c4955fe5875d7a5fe3fcdd5ed185ddfa5a5 100644 (file)
@@ -13,7 +13,7 @@
 #undef NO_BSLS
 #define NO_BSLS KC_EQL  // '\'
 #undef NO_CIRC
-#define NO_CIRC LSFT(C_RBRC)  // ^
+#define NO_CIRC LSFT(KC_RBRC)  // ^
 #undef NO_GRV
 #define NO_GRV LSFT(NO_BSLS)  //
 #undef NO_OSLH
diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h
new file mode 100644 (file)
index 0000000..237e9ab
--- /dev/null
@@ -0,0 +1,77 @@
+#ifndef KEYMAP_RUSSIAN_H
+#define KEYMAP_RUSSIAN_H
+
+#include "keymap.h"
+
+// Normal Chracters      // reg   SHIFT
+#define RU_A     KC_F    // а and А
+#define RU_BE    KC_COMM // б and Б
+#define RU_VE    KC_D    // в and В
+#define RU_GHE   KC_U    // г and Г
+#define RU_DE    KC_L    // д and Д
+#define RU_IE    KC_T    // е and Е
+#define RU_IO    KC_GRV  // ё and Ё
+#define RU_ZHE   KC_SCLN // ж and Ж
+#define RU_ZE    KC_P    // з and З
+#define RU_I     KC_B    // и and И
+#define RU_SRT_I KC_Q    // й and Й
+#define RU_KA    KC_R    // к and К
+#define RU_EL    KC_K    // л and Л
+#define RU_EM    KC_V    // м and М
+#define RU_EN    KC_Y    // н and Н
+#define RU_O     KC_J    // о and О
+#define RU_PE    KC_G    // п and П
+#define RU_ER    KC_H    // р and Р
+#define RU_ES    KC_C    // с and С
+#define RU_TE    KC_N    // т and Т
+#define RU_U     KC_E    // у and У
+#define RU_EF    KC_A    // ф and Ф
+#define RU_HA    KC_LBRC // х and Х
+#define RU_TSE   KC_W    // ц and Ц
+#define RU_CHE   KC_X    // ч and Ч
+#define RU_SHA   KC_I    // ш and Ш
+#define RU_SHCHA KC_O    // щ and Щ
+#define RU_HSIGN KC_RBRC // ъ and Ъ
+#define RU_YERU  KC_S    // ы and Ы
+#define RU_SSIGN KC_M    // ь and Ь
+#define RU_E     KC_QUOT // э and Э
+#define RU_YU    KC_DOT  // ю and Ю
+#define RU_YA    KC_Z    // я and Я
+
+#define RU_1     KC_1    // 1 and !
+#define RU_2     KC_2    // 2 and "
+#define RU_3     KC_3    // 3 and №
+#define RU_4     KC_4    // 4 and ;
+#define RU_5     KC_5    // 5 and %
+#define RU_6     KC_6    // 6 and :
+#define RU_7     KC_7    // 7 and ?
+#define RU_8     KC_8    // 8 and *
+#define RU_9     KC_9    // 9 and (
+#define RU_0     KC_0    // 0 and )
+
+#define RU_MINS  KC_MINS // - and _
+#define RU_EQL   KC_EQL  // = and +
+#define RU_BSLS  KC_BSLS // \ and /
+#define RU_DOT   KC_SLSH // . and ,
+
+// Shifted Chracters
+#define RU_EXLM LSFT(RU_1) // !
+#define RU_DQUT LSFT(RU_2) // "
+#define RU_NMRO LSFT(RU_3) // №
+#define RU_SCLN LSFT(RU_4) // ;
+#define RU_PERC LSFT(RU_5) // %
+#define RU_COLN LSFT(RU_6) // :
+#define RU_QUES LSFT(RU_7) // ?
+#define RU_ASTR LSFT(RU_8) // *
+#define RU_LPRN LSFT(RU_9) // (
+#define RU_RPRN LSFT(RU_0) // )
+
+#define RU_UNDR LSFT(RU_MINS) // _
+#define RU_PLUS LSFT(RU_EQL)  // +
+#define RU_SLSH LSFT(RU_BSLS) // /
+#define RU_COMM LSFT(RU_DOT)  // ,
+
+// Alt Gr-ed characters
+#define RU_RUBL RALT(RU_8) // ₽
+
+#endif
index af76e39fcb6a1bffeb2caf68046ea907a2963b83..4ba568af230e5eccc5f1b5db6b6e5b4555a3b921 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define NO_ALGR KC_RALT
 
 // Normal characters
index 5c5d9517910d12acc0ce43d67e629e5c2fcc2111..00c87afc3e5c2bc3836c076cc2e8ab537834db99 100644 (file)
@@ -4,7 +4,7 @@
 #include "keymap.h"
 
 // Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
 #define NO_ALGR KC_RALT
 
 // Normal characters
@@ -33,4 +33,4 @@
 
 #define UK_AACT ALGR(KC_A)
 
-#endif
\ No newline at end of file
+#endif
diff --git a/quantum/keymap_extras/keymap_unicode_cyrillic.h b/quantum/keymap_extras/keymap_unicode_cyrillic.h
new file mode 100644 (file)
index 0000000..a40626d
--- /dev/null
@@ -0,0 +1,163 @@
+#ifndef KEYMAP_CYRILLIC_H
+#define KEYMAP_CYRILLIC_H
+
+#include "keymap.h"
+
+/*
+ * This is based off of
+ * https://en.wikipedia.org/wiki/Cyrillic_script
+ *
+ * Unicode is iffy, a software implementation is preferred
+ */
+
+// Capital                   Char russian/ukrainian/bulgarian
+#define CY_A     UC(0x0410) // А  rus ukr bul
+#define CY_BE    UC(0x0411) // Б  rus ukr bul
+#define CY_VE    UC(0x0412) // В  rus ukr bul
+#define CY_GHE   UC(0x0413) // Г  rus ukr bul
+#define CY_GHEUP UC(0x0490) // Ґ      ukr
+#define CY_DE    UC(0x0414) // Д  rus ukr bul
+#define CY_DJE   UC(0x0402) // Ђ
+#define CY_GJE   UC(0x0403) // Ѓ
+#define CY_IE    UC(0x0415) // Е  rus ukr bul
+#define CY_IO    UC(0x0401) // Ё  rus
+#define CY_UIE   UC(0x0404) // Є      ukr
+#define CY_ZHE   UC(0x0416) // Ж  rus ukr bul
+#define CY_ZE    UC(0x0417) // З  rus ukr bul
+#define CY_DZE   UC(0x0405) // Ѕ
+#define CY_I     UC(0x0418) // И  rus ukr bul
+#define CY_B_U_I UC(0x0406) // І      ukr
+#define CY_YI    UC(0x0407) // Ї      ukr
+#define CY_SRT_I UC(0x0419) // Й  rus ukr bul
+#define CY_JE    UC(0x0408) // Ј
+#define CY_KA    UC(0x041a) // К  rus ukr bul
+#define CY_EL    UC(0x041b) // Л  rus ukr bul
+#define CY_LJE   UC(0x0409) // Љ
+#define CY_EM    UC(0x041c) // М  rus ukr bul
+#define CY_EN    UC(0x041d) // Н  rus ukr bul
+#define CY_NJE   UC(0x040a) // Њ
+#define CY_O     UC(0x041e) // О  rus ukr bul
+#define CY_PE    UC(0x041f) // П  rus ukr bul
+#define CY_ER    UC(0x0420) // Р  rus ukr bul
+#define CY_ES    UC(0x0421) // С  rus ukr bul
+#define CY_TE    UC(0x0422) // Т  rus ukr bul
+#define CY_TSHE  UC(0x040b) // Ћ
+#define CY_KJE   UC(0x040c) // Ќ
+#define CY_U     UC(0x0423) // У  rus ukr bul
+#define CY_SRT_U UC(0x040e) // Ў
+#define CY_EF    UC(0x0424) // Ф  rus ukr bul
+#define CY_HA    UC(0x0425) // Х  rus     bul
+#define CY_TSE   UC(0x0426) // Ц  rus ukr bul
+#define CY_CHE   UC(0x0427) // Ч  rus ukr bul
+#define CY_DZHE  UC(0x040f) // Џ
+#define CY_SHA   UC(0x0428) // Ш  rus ukr bul
+#define CY_SHCHA UC(0x0429) // Щ  rus ukr bul
+#define CY_HSIGN UC(0x042a) // Ъ  rus     bul
+#define CY_YERU  UC(0x042b) // Ы  rus
+#define CY_SSIGN UC(0x042c) // Ь  rus ukr bul
+#define CY_E     UC(0x042d) // Э  rus
+#define CY_YU    UC(0x042e) // Ю  rus ukr bul
+#define CY_YA    UC(0x042f) // Я  rus ukr bul
+// Important Cyrillic non-Slavic letters
+#define CY_PALOCHKA UC(0x04c0) // Ӏ
+#define CY_SCHWA UC(0x04d8) // Ә
+#define CY_GHE_S UC(0x0492) // Ғ
+#define CY_ZE_D  UC(0x0498) // Ҙ
+#define CY_ES_D  UC(0x04aa) // Ҫ
+#define CY_BR_KA UC(0x04a0) // Ҡ
+#define CY_ZHE_D UC(0x0496) // Җ
+#define CY_KA_D  UC(0x049a) // Қ
+#define CY_EN_D  UC(0x04a2) // Ң
+#define CY_ENGHE UC(0x04a4) // Ҥ
+#define CY_BRD_O UC(0x04e8) // Ө
+#define CY_STR_U UC(0x04ae) // Ү
+#define CY_S_U_S UC(0x04b0) // Ұ
+#define CY_SHHA  UC(0x04ba) // Һ
+#define CY_HA_D  UC(0x04b2) // Ҳ
+
+
+// Small
+#define CY_a     UC(0x0430) // a  rus ukr bul
+#define CY_be    UC(0x0431) // б  rus ukr bul
+#define CY_ve    UC(0x0432) // в  rus ukr bul
+#define CY_ghe   UC(0x0433) // г  rus ukr bul
+#define CY_gheup UC(0x0491) // ґ      ukr
+#define CY_de    UC(0x0434) // д  rus ukr bul
+#define CY_dje   UC(0x0452) // ђ
+#define CY_gje   UC(0x0453) // ѓ
+#define CY_ie    UC(0x0435) // е  rus ukr bul
+#define CY_io    UC(0x0451) // ё  rus
+#define CY_uie   UC(0x0454) // є      ukr
+#define CY_zhe   UC(0x0436) // ж  rus ukr bul
+#define CY_ze    UC(0x0437) // з  rus ukr bul
+#define CY_dze   UC(0x0455) // ѕ
+#define CY_i     UC(0x0438) // и  rus ukr bul
+#define CY_b_u_i UC(0x0456) // і      ukr
+#define CY_yi    UC(0x0457) // ї      ukr
+#define CY_srt_i UC(0x0439) // й  rus ukr bul
+#define CY_je    UC(0x0458) // ј
+#define CY_ka    UC(0x043a) // к  rus ukr bul
+#define CY_el    UC(0x043b) // л  rus ukr bul
+#define CY_lje   UC(0x0459) // љ
+#define CY_em    UC(0x043c) // м  rus ukr bul
+#define CY_en    UC(0x043d) // н  rus ukr bul
+#define CY_nje   UC(0x045a) // њ
+#define CY_o     UC(0x043e) // о  rus ukr bul
+#define CY_pe    UC(0x043f) // п  rus ukr bul
+#define CY_er    UC(0x0440) // р  rus ukr bul
+#define CY_es    UC(0x0441) // с  rus ukr bul
+#define CY_te    UC(0x0442) // т  rus ukr bul
+#define CY_tshe  UC(0x045b) // ћ
+#define CY_kje   UC(0x045c) // ќ
+#define CY_u     UC(0x0443) // у  rus ukr bul
+#define CY_srt_u UC(0x045e) // ў
+#define CY_ef    UC(0x0444) // ф  rus ukr bul
+#define CY_ha    UC(0x0445) // х  rus ukr bul
+#define CY_tse   UC(0x0446) // ц  rus ukr bul
+#define CY_che   UC(0x0447) // ч  rus ukr bul
+#define CY_dzhe  UC(0x045f) // џ
+#define CY_sha   UC(0x0448) // ш  rus ukr bul
+#define CY_shcha UC(0x0449) // щ  rus ukr bul
+#define CY_hsign UC(0x044a) // ъ  rus     bul
+#define CY_yeru  UC(0x044b) // ы  rus
+#define CY_ssign UC(0x044c) // ь  rus ukr bul
+#define CY_e     UC(0x044d) // э  rus
+#define CY_yu    UC(0x044e) // ю  rus ukr bul
+#define CY_ya    UC(0x044f) // я  rus ukr bul
+// Important Cyrillic non-Slavic letters
+#define CY_palochka UC(0x04cf) // ӏ
+#define CY_schwa UC(0x04d9) // ә
+#define CY_ghe_s UC(0x0493) // ғ
+#define CY_ze_d  UC(0x0499) // ҙ
+#define CY_es_d  UC(0x04ab) // ҫ
+#define CY_br_ka UC(0x04a1) // ҡ
+#define CY_zhe_d UC(0x0497) // җ
+#define CY_ka_d  UC(0x049b) // қ
+#define CY_en_d  UC(0x04a3) // ң
+#define CY_enghe UC(0x04a5) // ҥ
+#define CY_brd_o UC(0x04e9) // ө
+#define CY_str_u UC(0x04af) // ү
+#define CY_s_u_s UC(0x04b1) // ұ
+#define CY_shha  UC(0x04bb) // һ
+#define CY_ha_d  UC(0x04b3) // ҳ
+
+
+// Extra
+#define CY_slr_ve UC(0x1c80) // ᲀ CYRILLIC SMALL LETTER ROUNDED VE
+#define CY_ll_de  UC(0x1c81) // ᲁ CYRILLIC SMALL LETTER LONG-LEGGED DE
+#define CY_ZEMLYA UC(0xa640) // Ꙁ CYRILLIC CAPITAL LETTER ZEMLYA
+#define CY_zemlya UC(0xa641) // ꙁ CYRILLIC SMALL LETTER ZEMLYA
+#define CY_RV_DZE UC(0xa644) // Ꙅ CYRILLIC CAPITAL LETTER REVERSED DZE
+#define CY_rv_DZE UC(0xa645) // ꙅ CYRILLIC SMALL LETTER REVERSED DZE
+#define CY_slw_es UC(0x1c83) // ᲃ CYRILLIC SMALL LETTER WIDE ES
+#define CY_st_te  UC(0x1c84) // ᲄ CYRILLIC SMALL LETTER TALL TE
+#define CY_3l_te  UC(0x1c85) // ᲅ CYRILLIC SMALL LETTER THREE-LEGGED TE
+#define CY_thsign UC(0x1c86) // ᲆ CYRILLIC SMALL LETTER TALL HARD SIGN
+#define CY_YERUBY UC(0xa650) // Ꙑ CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+#define CY_yeruby UC(0xa651) // ꙑ CYRILLIC SMALL LETTER YERU WITH BACK YER
+#define CY_RUBL   UC(0x20bd) // ₽
+#define CY_NMRO   UC(0x2116) // №
+
+// The letters Zje and Sje are made for other letters and accent marks
+
+#endif
index 401845e8552bd6cee3f53596e4c05610c4d15e4f..a883b1388487130f5c783bd6b1f5df603718000b 100755 (executable)
 #include <util/delay.h>
 #include "debug.h"
 
+#ifdef RGBW_BB_TWI
+
+// Port for the I2C
+#define I2C_DDR DDRD
+#define I2C_PIN PIND
+#define I2C_PORT PORTD
+
+// Pins to be used in the bit banging
+#define I2C_CLK 0
+#define I2C_DAT 1
+
+#define I2C_DATA_HI()\
+I2C_DDR &= ~ (1 << I2C_DAT);\
+I2C_PORT |= (1 << I2C_DAT);
+#define I2C_DATA_LO()\
+I2C_DDR |= (1 << I2C_DAT);\
+I2C_PORT &= ~ (1 << I2C_DAT);
+
+#define I2C_CLOCK_HI()\
+I2C_DDR &= ~ (1 << I2C_CLK);\
+I2C_PORT |= (1 << I2C_CLK);
+#define I2C_CLOCK_LO()\
+I2C_DDR |= (1 << I2C_CLK);\
+I2C_PORT &= ~ (1 << I2C_CLK);
+
+#define I2C_DELAY 1
+
+void I2C_WriteBit(unsigned char c)
+{
+    if (c > 0)
+    {
+        I2C_DATA_HI();
+    }
+    else
+    {
+        I2C_DATA_LO();
+    }
+
+    I2C_CLOCK_HI();
+    _delay_us(I2C_DELAY);
+
+    I2C_CLOCK_LO();
+    _delay_us(I2C_DELAY);
+
+    if (c > 0)
+    {
+        I2C_DATA_LO();
+    }
+
+    _delay_us(I2C_DELAY);
+}
+
+// Inits bitbanging port, must be called before using the functions below
+//
+void I2C_Init()
+{
+    I2C_PORT &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
+
+    I2C_CLOCK_HI();
+    I2C_DATA_HI();
+
+    _delay_us(I2C_DELAY);
+}
+
+// Send a START Condition
+//
+void I2C_Start()
+{
+    // set both to high at the same time
+    I2C_DDR &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
+    _delay_us(I2C_DELAY);
+
+    I2C_DATA_LO();
+    _delay_us(I2C_DELAY);
+
+    I2C_CLOCK_LO();
+    _delay_us(I2C_DELAY);
+}
+
+// Send a STOP Condition
+//
+void I2C_Stop()
+{
+    I2C_CLOCK_HI();
+    _delay_us(I2C_DELAY);
+
+    I2C_DATA_HI();
+    _delay_us(I2C_DELAY);
+}
+
+// write a byte to the I2C slave device
+//
+unsigned char I2C_Write(unsigned char c)
+{
+    for (char i = 0; i < 8; i++)
+    {
+        I2C_WriteBit(c & 128);
+
+        c <<= 1;
+    }
+
+    
+    I2C_WriteBit(0);
+    _delay_us(I2C_DELAY);
+    _delay_us(I2C_DELAY);
+  
+    // _delay_us(I2C_DELAY);
+    //return I2C_ReadBit();
+    return 0;
+}
+
+
+#endif
+
 // Setleds for standard RGB
-void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds)
+void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds)
 {
    // ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
    ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF));
 }
 
-void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask)
+void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask)
 {
   // ws2812_DDRREG |= pinmask; // Enable DDR
   // new universal format (DDR)
@@ -34,14 +148,41 @@ void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pin
 }
 
 // Setleds for SK6812RGBW
-void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
+void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds)
 {
+
+  #ifdef RGBW_BB_TWI
+    uint8_t sreg_prev, twcr_prev;
+    sreg_prev=SREG;
+    twcr_prev=TWCR;
+    cli();
+    TWCR &= ~(1<<TWEN);
+    I2C_Init();
+    I2C_Start();
+    I2C_Write(0x84);
+    uint16_t datlen = leds<<2;
+    uint8_t curbyte;
+    uint8_t * data = (uint8_t*)ledarray;
+    while (datlen--) {
+      curbyte=*data++;
+      I2C_Write(curbyte);
+    }
+    I2C_Stop();
+    SREG=sreg_prev;
+    TWCR=twcr_prev;
+  #endif
+
+
   // ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR
   // new universal format (DDR)
   _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF);
 
   ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF));
-  _delay_us(80);
+
+
+  #ifndef RGBW_BB_TWI
+    _delay_us(80);
+  #endif
 }
 
 void ws2812_sendarray(uint8_t *data,uint16_t datlen)
@@ -123,7 +264,7 @@ void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi)
   cli();
 
   while (datlen--) {
-    curbyte=*data++;
+    curbyte=(*data++);
 
     asm volatile(
     "       ldi   %0,8  \n\t"
index 54eef22d9e00715606fee071c66ce2670437a086..9498e550e97fddb6a7456e1bc0bc004c246fa8bf 100755 (executable)
 #include <avr/io.h>
 #include <avr/interrupt.h>
 //#include "ws2812_config.h"
+//#include "i2cmaster.h"
+
+#define LIGHT_I2C 1
+#define LIGHT_I2C_ADDR        0x84
+#define LIGHT_I2C_ADDR_WRITE  ( (LIGHT_I2C_ADDR<<1) | I2C_WRITE )
+#define LIGHT_I2C_ADDR_READ   ( (LIGHT_I2C_ADDR<<1) | I2C_READ  )
+
+#define RGBW 1
+
+#ifdef RGBW
+  #define LED_TYPE struct cRGBW
+#else
+  #define LED_TYPE struct cRGB
+#endif
+
 
 /*
  *  Structure of the LED array
@@ -42,9 +57,9 @@ struct cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;};
  *         - Wait 50�s to reset the LEDs
  */
 
-void ws2812_setleds     (struct cRGB  *ledarray, uint16_t number_of_leds);
-void ws2812_setleds_pin (struct cRGB  *ledarray, uint16_t number_of_leds,uint8_t pinmask);
-void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds);
+void ws2812_setleds     (LED_TYPE *ledarray, uint16_t number_of_leds);
+void ws2812_setleds_pin (LED_TYPE *ledarray, uint16_t number_of_leds,uint8_t pinmask);
+void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
 
 /*
  * Old interface / Internal functions
index 3174e07390ca587351b842010f9a14b5f89d367c..07eb87bc362ed1bfa876ecff2d6676e2b8ed4bf6 100644 (file)
@@ -25,37 +25,65 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "debug.h"
 #include "util.h"
 #include "matrix.h"
+#include "timer.h"
+
 
 /* Set 0 if debouncing isn't needed */
 
 #ifndef DEBOUNCING_DELAY
 #   define DEBOUNCING_DELAY 5
 #endif
-static uint8_t debouncing = DEBOUNCING_DELAY;
+
+#if (DEBOUNCING_DELAY > 0)
+    static uint16_t debouncing_time;
+    static bool debouncing = false;
+#endif
+
+#if (MATRIX_COLS <= 8)
+#    define print_matrix_header()  print("\nr/c 01234567\n")
+#    define print_matrix_row(row)  print_bin_reverse8(matrix_get_row(row))
+#    define matrix_bitpop(i)       bitpop(matrix[i])
+#    define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+#    define print_matrix_header()  print("\nr/c 0123456789ABCDEF\n")
+#    define print_matrix_row(row)  print_bin_reverse16(matrix_get_row(row))
+#    define matrix_bitpop(i)       bitpop16(matrix[i])
+#    define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+#    define print_matrix_header()  print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+#    define print_matrix_row(row)  print_bin_reverse32(matrix_get_row(row))
+#    define matrix_bitpop(i)       bitpop32(matrix[i])
+#    define ROW_SHIFTER  ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+    extern const matrix_row_t matrix_mask[];
+#endif
 
 static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
 static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
 
 /* matrix state(1:on, 0:off) */
 static matrix_row_t matrix[MATRIX_ROWS];
+
+static matrix_row_t matrix_raw[MATRIX_ROWS];
 static matrix_row_t matrix_debouncing[MATRIX_ROWS];
 
-#if DIODE_DIRECTION == ROW2COL
-    static matrix_row_t matrix_reversed[MATRIX_COLS];
-    static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS];
-#endif
 
-#if MATRIX_COLS > 16
-    #define SHIFTER 1UL
-#else
-    #define SHIFTER 1
+#if (DIODE_DIRECTION == COL2ROW)
+    static void init_cols(void);
+    static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
+    static void unselect_rows(void);
+    static void select_row(uint8_t row);
+    static void unselect_row(uint8_t row);
+#else // ROW2COL
+    static void init_rows(void);
+    static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
+    static void unselect_cols(void);
+    static void unselect_col(uint8_t col);
+    static void select_col(uint8_t col);
 #endif
 
-static matrix_row_t read_cols(void);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
 __attribute__ ((weak))
 void matrix_init_quantum(void) {
     matrix_init_kb();
@@ -95,7 +123,7 @@ uint8_t matrix_cols(void) {
 }
 
 // void matrix_power_up(void) {
-// #if DIODE_DIRECTION == COL2ROW
+// #if (DIODE_DIRECTION == COL2ROW)
 //     for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) {
 //         /* DDRxn */
 //         _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF);
@@ -119,19 +147,26 @@ uint8_t matrix_cols(void) {
 // }
 
 void matrix_init(void) {
+
     // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
-    #ifdef __AVR_ATmega32U4__
+    #if  (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega32U4__))
         MCUCR |= _BV(JTD);
         MCUCR |= _BV(JTD);
     #endif
 
     // initialize row and col
+#if (DIODE_DIRECTION == COL2ROW)
     unselect_rows();
     init_cols();
+#else // ROW2COL
+    unselect_cols();
+    init_rows();
+#endif
 
     // initialize matrix state: all keys off
     for (uint8_t i=0; i < MATRIX_ROWS; i++) {
         matrix[i] = 0;
+        matrix_raw[i] = 0;
         matrix_debouncing[i] = 0;
     }
 
@@ -141,71 +176,60 @@ void matrix_init(void) {
 uint8_t matrix_scan(void)
 {
 
-#if DIODE_DIRECTION == COL2ROW
-    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-        select_row(i);
-        wait_us(30);  // without this wait read unstable value.
-        matrix_row_t cols = read_cols();
-        if (matrix_debouncing[i] != cols) {
-            matrix_debouncing[i] = cols;
-            if (debouncing) {
-                debug("bounce!: "); debug_hex(debouncing); debug("\n");
-            }
-            debouncing = DEBOUNCING_DELAY;
-        }
-        unselect_rows();
-    }
+#if (DIODE_DIRECTION == COL2ROW)
 
-    if (debouncing) {
-        if (--debouncing) {
-            wait_ms(1);
-        } else {
-            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-                matrix[i] = matrix_debouncing[i];
+    // Set row, read cols
+    for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+#       if (DEBOUNCING_DELAY > 0)
+            bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row);
+
+            if (matrix_changed) {
+                debouncing = true;
+                debouncing_time = timer_read();
             }
-        }
+
+#       else
+            read_cols_on_row(matrix, current_row);
+#       endif
+
     }
-#else
-    for (uint8_t i = 0; i < MATRIX_COLS; i++) {
-        select_row(i);
-        wait_us(30);  // without this wait read unstable value.
-        matrix_row_t rows = read_cols();
-        if (matrix_reversed_debouncing[i] != rows) {
-            matrix_reversed_debouncing[i] = rows;
-            if (debouncing) {
-                debug("bounce!: "); debug_hex(debouncing); debug("\n");
+
+#else // ROW2COL
+
+    // Set col, read rows
+    for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+#       if (DEBOUNCING_DELAY > 0)
+            bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col);
+            if (matrix_changed) {
+                debouncing = true;
+                debouncing_time = timer_read();
             }
-            debouncing = DEBOUNCING_DELAY;
-        }
-        unselect_rows();
+#       else
+             read_rows_on_col(matrix, current_col);
+#       endif
+
     }
 
-    if (debouncing) {
-        if (--debouncing) {
-            wait_ms(1);
-        } else {
-            for (uint8_t i = 0; i < MATRIX_COLS; i++) {
-                matrix_reversed[i] = matrix_reversed_debouncing[i];
+#endif
+
+#   if (DEBOUNCING_DELAY > 0)
+        if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+                matrix[i] = matrix_debouncing[i];
             }
+            debouncing = false;
         }
-    }
-    for (uint8_t y = 0; y < MATRIX_ROWS; y++) {
-        matrix_row_t row = 0;
-        for (uint8_t x = 0; x < MATRIX_COLS; x++) {
-            row |= ((matrix_reversed[x] & (1<<y)) >> y) << x;
-        }
-        matrix[y] = row;
-    }
-#endif
+#   endif
 
     matrix_scan_quantum();
-
     return 1;
 }
 
 bool matrix_is_modified(void)
 {
+#if (DEBOUNCING_DELAY > 0)
     if (debouncing) return false;
+#endif
     return true;
 }
 
@@ -218,15 +242,22 @@ bool matrix_is_on(uint8_t row, uint8_t col)
 inline
 matrix_row_t matrix_get_row(uint8_t row)
 {
+    // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+    // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+    return matrix[row] & matrix_mask[row];
+#else
     return matrix[row];
+#endif
 }
 
 void matrix_print(void)
 {
-    print("\nr/c 0123456789ABCDEF\n");
+    print_matrix_header();
+
     for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
         phex(row); print(": ");
-        pbin_reverse16(matrix_get_row(row));
+        print_matrix_row(row);
         print("\n");
     }
 }
@@ -235,63 +266,148 @@ uint8_t matrix_key_count(void)
 {
     uint8_t count = 0;
     for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-        count += bitpop16(matrix[i]);
+        count += matrix_bitpop(i);
     }
     return count;
 }
 
+
+
+#if (DIODE_DIRECTION == COL2ROW)
+
 static void init_cols(void)
 {
-#if DIODE_DIRECTION == COL2ROW
-    for(int x = 0; x < MATRIX_COLS; x++) {
-        int pin = col_pins[x];
-#else
-    for(int x = 0; x < MATRIX_ROWS; x++) {
-        int pin = row_pins[x];
-#endif
-        _SFR_IO8((pin >> 4) + 1) &=  ~_BV(pin & 0xF);
-        _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
+    for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+        uint8_t pin = col_pins[x];
+        _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+        _SFR_IO8((pin >> 4) + 2) |=  _BV(pin & 0xF); // HI
     }
 }
 
-static matrix_row_t read_cols(void)
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
 {
-    matrix_row_t result = 0;
+    // Store last value of row prior to reading
+    matrix_row_t last_row_value = current_matrix[current_row];
 
-#if DIODE_DIRECTION == COL2ROW
-    for(int x = 0; x < MATRIX_COLS; x++) {     
-        int pin = col_pins[x];
-#else
-    for(int x = 0; x < MATRIX_ROWS; x++) {
-        int pin = row_pins[x];
-#endif
-        result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (SHIFTER << x);
+    // Clear data in matrix row
+    current_matrix[current_row] = 0;
+
+    // Select row and wait for row selecton to stabilize
+    select_row(current_row);
+    wait_us(30);
+
+    // For each col...
+    for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+        // Select the col pin to read (active low)
+        uint8_t pin = col_pins[col_index];
+        uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
+
+        // Populate the matrix row with the state of the col pin
+        current_matrix[current_row] |=  pin_state ? 0 : (ROW_SHIFTER << col_index);
     }
-    return result;
+
+    // Unselect row
+    unselect_row(current_row);
+
+    return (last_row_value != current_matrix[current_row]);
+}
+
+static void select_row(uint8_t row)
+{
+    uint8_t pin = row_pins[row];
+    _SFR_IO8((pin >> 4) + 1) |=  _BV(pin & 0xF); // OUT
+    _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_row(uint8_t row)
+{
+    uint8_t pin = row_pins[row];
+    _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+    _SFR_IO8((pin >> 4) + 2) |=  _BV(pin & 0xF); // HI
 }
 
 static void unselect_rows(void)
 {
-#if DIODE_DIRECTION == COL2ROW
-    for(int x = 0; x < MATRIX_ROWS; x++) { 
-        int pin = row_pins[x];
-#else
-    for(int x = 0; x < MATRIX_COLS; x++) { 
-        int pin = col_pins[x];
-#endif
-        _SFR_IO8((pin >> 4) + 1) &=  ~_BV(pin & 0xF);
-        _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
+    for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+        uint8_t pin = row_pins[x];
+        _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+        _SFR_IO8((pin >> 4) + 2) |=  _BV(pin & 0xF); // HI
     }
 }
 
-static void select_row(uint8_t row)
+#else // ROW2COL
+
+static void init_rows(void)
 {
+    for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+        uint8_t pin = row_pins[x];
+        _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+        _SFR_IO8((pin >> 4) + 2) |=  _BV(pin & 0xF); // HI
+    }
+}
 
-#if DIODE_DIRECTION == COL2ROW
-    int pin = row_pins[row];
-#else
-    int pin = col_pins[row];
-#endif
-    _SFR_IO8((pin >> 4) + 1) |=  _BV(pin & 0xF);
-    _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF);
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+    bool matrix_changed = false;
+
+    // Select col and wait for col selecton to stabilize
+    select_col(current_col);
+    wait_us(30);
+
+    // For each row...
+    for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++)
+    {
+
+        // Store last value of row prior to reading
+        matrix_row_t last_row_value = current_matrix[row_index];
+
+        // Check row pin state
+        if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
+        {
+            // Pin LO, set col bit
+            current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+        }
+        else
+        {
+            // Pin HI, clear col bit
+            current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+        }
+
+        // Determine if the matrix changed state
+        if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
+        {
+            matrix_changed = true;
+        }
+    }
+
+    // Unselect col
+    unselect_col(current_col);
+
+    return matrix_changed;
 }
+
+static void select_col(uint8_t col)
+{
+    uint8_t pin = col_pins[col];
+    _SFR_IO8((pin >> 4) + 1) |=  _BV(pin & 0xF); // OUT
+    _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_col(uint8_t col)
+{
+    uint8_t pin = col_pins[col];
+    _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+    _SFR_IO8((pin >> 4) + 2) |=  _BV(pin & 0xF); // HI
+}
+
+static void unselect_cols(void)
+{
+    for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+        uint8_t pin = col_pins[x];
+        _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+        _SFR_IO8((pin >> 4) + 2) |=  _BV(pin & 0xF); // HI
+    }
+}
+
+#endif
diff --git a/quantum/pincontrol.h b/quantum/pincontrol.h
new file mode 100644 (file)
index 0000000..36ce29e
--- /dev/null
@@ -0,0 +1,37 @@
+#pragma once
+// Some helpers for controlling gpio pins
+#include <avr/io.h>
+
+enum {
+  PinDirectionInput = 0,
+  PinDirectionOutput = 1,
+  PinLevelHigh = 1,
+  PinLevelLow = 0,
+};
+
+// ex: pinMode(B0, PinDirectionOutput);
+static inline void pinMode(uint8_t pin, int mode) {
+  uint8_t bv = _BV(pin & 0xf);
+  if (mode == PinDirectionOutput) {
+    _SFR_IO8((pin >> 4) + 1) |= bv;
+  } else {
+    _SFR_IO8((pin >> 4) + 1) &= ~bv;
+    _SFR_IO8((pin >> 4) + 2) &= ~bv;
+  }
+}
+
+// ex: digitalWrite(B0, PinLevelHigh);
+static inline void digitalWrite(uint8_t pin, int mode) {
+  uint8_t bv = _BV(pin & 0xf);
+  if (mode == PinLevelHigh) {
+    _SFR_IO8((pin >> 4) + 2) |= bv;
+  } else {
+    _SFR_IO8((pin >> 4) + 2) &= ~bv;
+  }
+}
+
+// Return true if the pin is HIGH
+// digitalRead(B0)
+static inline bool digitalRead(uint8_t pin) {
+  return _SFR_IO8(pin >> 4) & _BV(pin & 0xf);
+}
index d6ab9c6264bb7e39dcff18f8cd77c6c418cb1aa1..577dad43acabd89f4934d1c9bfbd7941ad7b4b9d 100644 (file)
@@ -1,13 +1,15 @@
 #include "process_midi.h"
 
 bool midi_activated = false;
-uint8_t starting_note = 0x0C;
-int offset = 7;
+uint8_t midi_starting_note = 0x0C;
+int midi_offset = 7;
 
 bool process_midi(uint16_t keycode, keyrecord_t *record) {
     if (keycode == MI_ON && record->event.pressed) {
       midi_activated = true;
+#ifdef AUDIO_ENABLE
       music_scale_user();
+#endif
       return false;
     }
 
@@ -20,42 +22,42 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {
     if (midi_activated) {
       if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
           if (record->event.pressed) {
-              starting_note++; // Change key
+              midi_starting_note++; // Change key
               midi_send_cc(&midi_device, 0, 0x7B, 0);
           }
           return false;
       }
       if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
           if (record->event.pressed) {
-              starting_note--; // Change key
+              midi_starting_note--; // Change key
               midi_send_cc(&midi_device, 0, 0x7B, 0);
           }
           return false;
       }
       if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
-          offset++; // Change scale
+          midi_offset++; // Change scale
           midi_send_cc(&midi_device, 0, 0x7B, 0);
           return false;
       }
       if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
-          offset--; // Change scale
+          midi_offset--; // Change scale
           midi_send_cc(&midi_device, 0, 0x7B, 0);
           return false;
       }
       // basic
-      // uint8_t note = (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row);
+      // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row);
       // advanced
-      // uint8_t note = (starting_note + record->event.key.col + offset)+12*(MATRIX_ROWS - record->event.key.row);
+      // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row);
       // guitar
-      uint8_t note = (starting_note + record->event.key.col + offset)+5*(MATRIX_ROWS - record->event.key.row);
+      uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row);
       // violin
-      // uint8_t note = (starting_note + record->event.key.col + offset)+7*(MATRIX_ROWS - record->event.key.row);
+      // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row);
 
       if (record->event.pressed) {
-        // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
+        // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
         midi_send_noteon(&midi_device, 0, note, 127);
       } else {
-        // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
+        // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
         midi_send_noteoff(&midi_device, 0, note, 127);
       }
 
@@ -63,4 +65,4 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {
         return false;
     }
   return true;
-}
\ No newline at end of file
+}
index c8f3ddb9001c25186eeeba05cbb15440c3a39ee4..bae43943e09cd85a76f3f9d44fc0a2e24e4165bc 100644 (file)
@@ -1,11 +1,12 @@
 #include "process_music.h"
 
 bool music_activated = false;
-uint8_t starting_note = 0x0C;
-int offset = 7;
+uint8_t music_starting_note = 0x0C;
+int music_offset = 7;
 
 // music sequencer
 static bool music_sequence_recording = false;
+static bool music_sequence_recorded = false;
 static bool music_sequence_playing = false;
 static float music_sequence[16] = {0};
 static uint8_t music_sequence_count = 0;
@@ -77,6 +78,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
       if (keycode == KC_LCTL && record->event.pressed) { // Start recording
         stop_all_notes();
         music_sequence_recording = true;
+        music_sequence_recorded = false;
         music_sequence_playing = false;
         music_sequence_count = 0;
         return false;
@@ -84,12 +86,15 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
 
       if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing
         stop_all_notes();
+        if (music_sequence_recording) { // was recording
+          music_sequence_recorded = true;
+        }
         music_sequence_recording = false;
         music_sequence_playing = false;
         return false;
       }
 
-      if (keycode == KC_LGUI && record->event.pressed) { // Start playing
+      if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing
         stop_all_notes();
         music_sequence_recording = false;
         music_sequence_playing = true;
@@ -110,7 +115,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
         return false;
       }
 
-      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row));
+      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row));
       if (record->event.pressed) {
         play_note(freq, 0xF);
         if (music_sequence_recording) {
diff --git a/quantum/process_keycode/process_printer.c b/quantum/process_keycode/process_printer.c
new file mode 100644 (file)
index 0000000..2e11dd3
--- /dev/null
@@ -0,0 +1,254 @@
+#include "process_printer.h"
+#include "action_util.h"
+
+bool printing_enabled = false;
+uint8_t character_shift = 0;
+
+void enabled_printing() {
+       printing_enabled = true;
+       serial_init();
+}
+
+void disable_printing() {
+       printing_enabled = false;
+}
+
+uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29};
+
+// uint8_t keycode_to_ascii[0xFF][2];
+
+// keycode_to_ascii[KC_MINS] = {0x2D, 0x5F};
+
+void print_char(char c) {
+       USB_Disable();
+       serial_send(c);
+       USB_Init();
+}
+
+void print_box_string(uint8_t text[]) {
+       uint8_t len = strlen(text);
+       uint8_t out[len * 3 + 8];
+       out[0] = 0xDA;
+       for (uint8_t i = 0; i < len; i++) {
+               out[i+1] = 0xC4;
+       }
+       out[len + 1] = 0xBF;
+       out[len + 2] = '\n';
+
+       out[len + 3] = 0xB3;
+       for (uint8_t i = 0; i < len; i++) {
+               out[len + 4 + i] = text[i];
+       }
+       out[len * 2 + 4] = 0xB3;
+       out[len * 2 + 5] = '\n';
+
+
+       out[len * 2 + 6] = 0xC0;
+       for (uint8_t i = 0; i < len; i++) {
+               out[len * 2 + 7 + i] = 0xC4;
+       }
+       out[len * 3 + 7] = 0xD9;
+       out[len * 3 + 8] = '\n';
+
+       print_string(out); 
+}
+
+void print_string(char c[]) {
+       for(uint8_t i = 0; i < strlen(c); i++)
+               print_char(c[i]);
+}
+
+bool process_printer(uint16_t keycode, keyrecord_t *record) {
+       if (keycode == PRINT_ON) {
+               enabled_printing();
+               return false;
+       }
+       if (keycode == PRINT_OFF) {
+               disable_printing();
+               return false;
+       }
+
+       if (printing_enabled) {
+               switch(keycode) {
+                       case KC_EXLM ... KC_RPRN:
+                       case KC_UNDS:
+                       case KC_PLUS:
+                       case KC_LCBR:
+                       case KC_RCBR:
+                       case KC_PIPE:
+                       case KC_TILD:
+                               keycode &= 0xFF;
+                       case KC_LSFT:
+                       case KC_RSFT:
+                               if (record->event.pressed) {
+                                       character_shift++;
+                               } else {
+                                       character_shift--;
+                               }
+                               return false;
+                       break;
+               }
+
+               switch(keycode) {
+                       case KC_F1:
+                               if (record->event.pressed) {
+                                       print_box_string("This is a line of text!");
+                               }
+                               return false;
+                       case KC_ESC:
+                               if (record->event.pressed) {
+                                       print_char(0x1B);
+                               }
+                               return false;
+                       break;
+                       case KC_SPC:
+                               if (record->event.pressed) {
+                                       print_char(0x20);
+                               }
+                               return false;
+                       break;
+                       case KC_A ... KC_Z:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x41 + (keycode - KC_A));
+                                       } else {
+                                               print_char(0x61 + (keycode - KC_A));
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_1 ... KC_0:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                                       print_char(shifted_numbers[keycode - KC_1]);
+                                       } else {
+                                                       print_char(0x30 + ((keycode - KC_1 + 1) % 10));
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_ENT:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x0C);
+                                       } else {
+                                               print_char(0x0A);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_BSPC:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x18);
+                                       } else {
+                                               print_char(0x1A);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_DOT:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x3E);
+                                       } else {
+                                               print_char(0x2E);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_COMM:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x3C);
+                                       } else {
+                                               print_char(0x2C);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_SLSH:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x3F);
+                                       } else {
+                                               print_char(0x2F);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_QUOT:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x22);
+                                       } else {
+                                               print_char(0x27);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_GRV:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7E);
+                                       } else {
+                                               print_char(0x60);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_MINS:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x5F);
+                                       } else {
+                                               print_char(0x2D);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_EQL:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x2B);
+                                       } else {
+                                               print_char(0x3D);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_LBRC:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7B);
+                                       } else {
+                                               print_char(0x5B);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_RBRC:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7D);
+                                       } else {
+                                               print_char(0x5D);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_BSLS:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7C);
+                                       } else {
+                                               print_char(0x5C);
+                                       }
+                               }
+                               return false;
+                       break;
+               }
+       }
+       return true;
+
+}
\ No newline at end of file
diff --git a/quantum/process_keycode/process_printer.h b/quantum/process_keycode/process_printer.h
new file mode 100644 (file)
index 0000000..fdd36d7
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef PROCESS_PRINTER_H
+#define PROCESS_PRINTER_H
+
+#include "quantum.h"
+
+#include "protocol/serial.h"
+
+#endif
\ No newline at end of file
diff --git a/quantum/process_keycode/process_printer_bb.c b/quantum/process_keycode/process_printer_bb.c
new file mode 100644 (file)
index 0000000..1924d03
--- /dev/null
@@ -0,0 +1,260 @@
+#include "process_printer.h"
+#include "action_util.h"
+
+bool printing_enabled = false;
+uint8_t character_shift = 0;
+
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_MASK _BV(PD3)
+#define SERIAL_DELAY 52
+
+inline static
+void serial_delay(void) {
+  _delay_us(SERIAL_DELAY);
+}
+
+inline static
+void serial_high(void) {
+  SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_low(void) {
+  SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_output(void) {
+  SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
+}
+
+
+void enabled_printing() {
+       printing_enabled = true;
+       serial_output();
+       serial_high();
+}
+
+void disable_printing() {
+       printing_enabled = false;
+}
+
+uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29};
+
+// uint8_t keycode_to_ascii[0xFF][2];
+
+// keycode_to_ascii[KC_MINS] = {0x2D, 0x5F};
+
+void print_char(char c) {
+  uint8_t b = 8;
+  serial_output();
+  while( b-- ) {
+    if(c & (1 << b)) {
+      serial_high();
+    } else {
+      serial_low();
+    }
+    serial_delay();
+  }
+}
+
+void print_string(char c[]) {
+       for(uint8_t i = 0; i < strlen(c); i++)
+               print_char(c[i]);
+}
+
+bool process_printer(uint16_t keycode, keyrecord_t *record) {
+       if (keycode == PRINT_ON) {
+               enabled_printing();
+               return false;
+       }
+       if (keycode == PRINT_OFF) {
+               disable_printing();
+               return false;
+       }
+
+       if (printing_enabled) {
+               switch(keycode) {
+                       case KC_EXLM ... KC_RPRN:
+                       case KC_UNDS:
+                       case KC_PLUS:
+                       case KC_LCBR:
+                       case KC_RCBR:
+                       case KC_PIPE:
+                       case KC_TILD:
+                               keycode &= 0xFF;
+                       case KC_LSFT:
+                       case KC_RSFT:
+                               if (record->event.pressed) {
+                                       character_shift++;
+                               } else {
+                                       character_shift--;
+                               }
+                               return false;
+                       break;
+               }
+
+               switch(keycode) {
+                       case KC_F1:
+                               if (record->event.pressed) {
+                                       print_string("This is a line of text!\n\n\n");
+                               }
+                               return false;
+                       case KC_ESC:
+                               if (record->event.pressed) {
+                                       print_char(0x1B);
+                               }
+                               return false;
+                       break;
+                       case KC_SPC:
+                               if (record->event.pressed) {
+                                       print_char(0x20);
+                               }
+                               return false;
+                       break;
+                       case KC_A ... KC_Z:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x41 + (keycode - KC_A));
+                                       } else {
+                                               print_char(0x61 + (keycode - KC_A));
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_1 ... KC_0:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                                       print_char(shifted_numbers[keycode - KC_1]);
+                                       } else {
+                                                       print_char(0x30 + ((keycode - KC_1 + 1) % 10));
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_ENT:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x0C);
+                                       } else {
+                                               print_char(0x0A);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_BSPC:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x18);
+                                       } else {
+                                               print_char(0x1A);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_DOT:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x3E);
+                                       } else {
+                                               print_char(0x2E);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_COMM:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x3C);
+                                       } else {
+                                               print_char(0x2C);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_SLSH:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x3F);
+                                       } else {
+                                               print_char(0x2F);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_QUOT:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x22);
+                                       } else {
+                                               print_char(0x27);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_GRV:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7E);
+                                       } else {
+                                               print_char(0x60);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_MINS:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x5F);
+                                       } else {
+                                               print_char(0x2D);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_EQL:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x2B);
+                                       } else {
+                                               print_char(0x3D);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_LBRC:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7B);
+                                       } else {
+                                               print_char(0x5B);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_RBRC:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7D);
+                                       } else {
+                                               print_char(0x5D);
+                                       }
+                               }
+                               return false;
+                       break;
+                       case KC_BSLS:
+                               if (record->event.pressed) {
+                                       if (character_shift) {
+                                               print_char(0x7C);
+                                       } else {
+                                               print_char(0x5C);
+                                       }
+                               }
+                               return false;
+                       break;
+               }
+       }
+       return true;
+
+}
\ No newline at end of file
index 9b172e1b6c92ee8102da869dc37a927201afb3b6..6ae362c4c2f32487040ae5041afeccf16aa4cf39 100644 (file)
 #include "quantum.h"
+#include "action_tapping.h"
 
-static qk_tap_dance_state_t qk_tap_dance_state;
+static uint16_t last_td;
+static int8_t highest_td = -1;
 
-static void _process_tap_dance_action_pair (qk_tap_dance_state_t *state,
-                                            uint16_t kc1, uint16_t kc2) {
-  uint16_t kc;
+void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data;
 
-  if (state->count == 0)
-    return;
-
-  kc = (state->count == 1) ? kc1 : kc2;
+  if (state->count == 1) {
+    register_code16 (pair->kc1);
+  } else if (state->count == 2) {
+    register_code16 (pair->kc2);
+  }
+}
 
-  register_code (kc);
-  unregister_code (kc);
+void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data;
 
-  if (state->count >= 2) {
-    reset_tap_dance (state);
+  if (state->count == 1) {
+    unregister_code16 (pair->kc1);
+  } else if (state->count == 2) {
+    unregister_code16 (pair->kc2);
   }
 }
 
-static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
-                                          qk_tap_dance_user_fn_t fn)
+static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
+                                                 void *user_data,
+                                                 qk_tap_dance_user_fn_t fn)
 {
-  fn(state);
+  if (fn) {
+    fn(state, user_data);
+  }
 }
 
-void process_tap_dance_action (uint16_t keycode)
+static inline void process_tap_dance_action_on_each_tap (qk_tap_dance_action_t *action)
 {
-  uint16_t idx = keycode - QK_TAP_DANCE;
-  qk_tap_dance_action_t action;
-
-  action = tap_dance_actions[idx];
+  _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_each_tap);
+}
 
-  switch (action.type) {
-  case QK_TAP_DANCE_TYPE_PAIR:
-    _process_tap_dance_action_pair (&qk_tap_dance_state,
-                                    action.pair.kc1, action.pair.kc2);
-    break;
-  case QK_TAP_DANCE_TYPE_FN:
-    _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn);
-    break;
+static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_action_t *action)
+{
+  if (action->state.finished)
+    return;
+  action->state.finished = true;
+  _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished);
+}
 
-  default:
-    break;
-  }
+static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *action)
+{
+  _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset);
 }
 
 bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
-  bool r = true;
+  uint16_t idx = keycode - QK_TAP_DANCE;
+  qk_tap_dance_action_t *action;
+
+  if (last_td && last_td != keycode) {
+    (&tap_dance_actions[last_td - QK_TAP_DANCE])->state.interrupted = true;
+  }
 
   switch(keycode) {
   case QK_TAP_DANCE ... QK_TAP_DANCE_MAX:
-    if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) {
-      process_tap_dance_action (qk_tap_dance_state.keycode);
-    } else {
-      r = false;
-    }
+    if ((int16_t)idx > highest_td)
+      highest_td = idx;
+    action = &tap_dance_actions[idx];
 
+    action->state.pressed = record->event.pressed;
     if (record->event.pressed) {
-      qk_tap_dance_state.keycode = keycode;
-      qk_tap_dance_state.timer = timer_read ();
-      qk_tap_dance_state.count++;
+      action->state.keycode = keycode;
+      action->state.count++;
+      action->state.timer = timer_read();
+      process_tap_dance_action_on_each_tap (action);
+
+      if (last_td && last_td != keycode) {
+        qk_tap_dance_action_t *paction = &tap_dance_actions[last_td - QK_TAP_DANCE];
+        paction->state.interrupted = true;
+        process_tap_dance_action_on_dance_finished (paction);
+        reset_tap_dance (&paction->state);
+      }
+
+      last_td = keycode;
     }
+
     break;
 
   default:
-    if (qk_tap_dance_state.keycode) {
-      process_tap_dance_action (qk_tap_dance_state.keycode);
-
-      reset_tap_dance (&qk_tap_dance_state);
+    if (!record->event.pressed)
+      return true;
+
+    if (highest_td == -1)
+      return true;
+
+    for (int i = 0; i <= highest_td; i++) {
+      action = &tap_dance_actions[i];
+      if (action->state.count == 0)
+        continue;
+      action->state.interrupted = true;
+      process_tap_dance_action_on_dance_finished (action);
+      reset_tap_dance (&action->state);
     }
     break;
   }
 
-  return r;
+  return true;
 }
 
 void matrix_scan_tap_dance () {
-  if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) {
-    process_tap_dance_action (qk_tap_dance_state.keycode);
+  if (highest_td == -1)
+    return;
 
-    reset_tap_dance (&qk_tap_dance_state);
+  for (int i = 0; i <= highest_td; i++) {
+    qk_tap_dance_action_t *action = &tap_dance_actions[i];
+
+    if (action->state.count && timer_elapsed (action->state.timer) > TAPPING_TERM) {
+      process_tap_dance_action_on_dance_finished (action);
+      reset_tap_dance (&action->state);
+    }
   }
 }
 
 void reset_tap_dance (qk_tap_dance_state_t *state) {
-  state->keycode = 0;
+  qk_tap_dance_action_t *action;
+
+  if (state->pressed)
+    return;
+
+  action = &tap_dance_actions[state->keycode - QK_TAP_DANCE];
+
+  process_tap_dance_action_on_reset (action);
+
   state->count = 0;
+  state->interrupted = false;
+  state->finished = false;
+  last_td = 0;
 }
index b9d7c7fcf452c8134f43ca8db52d11c2dae8fc20..f753cbba665fd316dff284d8a0318a363505af79 100644 (file)
@@ -11,41 +11,48 @@ typedef struct
   uint8_t count;
   uint16_t keycode;
   uint16_t timer;
+  bool interrupted;
+  bool pressed;
+  bool finished;
 } qk_tap_dance_state_t;
 
 #define TD(n) (QK_TAP_DANCE + n)
 
-typedef enum
-{
-  QK_TAP_DANCE_TYPE_PAIR,
-  QK_TAP_DANCE_TYPE_FN,
-} qk_tap_dance_type_t;
-
-typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state);
+typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state, void *user_data);
 
 typedef struct
 {
-  qk_tap_dance_type_t type;
-  union {
-    struct {
-      uint16_t kc1;
-      uint16_t kc2;
-    } pair;
-    qk_tap_dance_user_fn_t fn;
-  };
+  struct {
+    qk_tap_dance_user_fn_t on_each_tap;
+    qk_tap_dance_user_fn_t on_dance_finished;
+    qk_tap_dance_user_fn_t on_reset;
+  } fn;
+  qk_tap_dance_state_t state;
+  void *user_data;
 } qk_tap_dance_action_t;
 
+typedef struct
+{
+  uint16_t kc1;
+  uint16_t kc2;
+} qk_tap_dance_pair_t;
+
 #define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
-    .type = QK_TAP_DANCE_TYPE_PAIR,         \
-    .pair = { kc1, kc2 }                    \
+    .fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \
+    .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }),  \
+  }
+
+#define ACTION_TAP_DANCE_FN(user_fn) {  \
+    .fn = { NULL, user_fn, NULL }, \
+    .user_data = NULL, \
   }
 
-#define ACTION_TAP_DANCE_FN(user_fn) { \
-    .type = QK_TAP_DANCE_TYPE_FN, \
-    .fn = user_fn                 \
+#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \
+    .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \
+    .user_data = NULL, \
   }
 
-extern const qk_tap_dance_action_t tap_dance_actions[];
+extern qk_tap_dance_action_t tap_dance_actions[];
 
 /* To be used internally */
 
@@ -53,6 +60,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record);
 void matrix_scan_tap_dance (void);
 void reset_tap_dance (qk_tap_dance_state_t *state);
 
+void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data);
+void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data);
+
 #else
 
 #define TD(n) KC_NO
index ad5d7f86b70cfc1ad621f0655f80f335e015386a..cd3a610b4db49f03449b13763a375b779faebde0 100644 (file)
@@ -2,6 +2,7 @@
 
 static uint8_t input_mode;
 
+__attribute__((weak))
 uint16_t hex_to_keycode(uint8_t hex)
 {
   if (hex == 0x0) {
@@ -13,45 +14,251 @@ uint16_t hex_to_keycode(uint8_t hex)
   }
 }
 
-void set_unicode_mode(uint8_t os_target)
+void set_unicode_input_mode(uint8_t os_target)
 {
   input_mode = os_target;
 }
 
+uint8_t get_unicode_input_mode(void) {
+  return input_mode;
+}
+
+__attribute__((weak))
+void unicode_input_start (void) {
+  switch(input_mode) {
+  case UC_OSX:
+    register_code(KC_LALT);
+    break;
+  case UC_LNX:
+    register_code(KC_LCTL);
+    register_code(KC_LSFT);
+    register_code(KC_U);
+    unregister_code(KC_U);
+    unregister_code(KC_LSFT);
+    unregister_code(KC_LCTL);
+    break;
+  case UC_WIN:
+    register_code(KC_LALT);
+    register_code(KC_PPLS);
+    unregister_code(KC_PPLS);
+    break;
+  case UC_WINC:
+    register_code(KC_RALT);
+    unregister_code(KC_RALT);
+    register_code(KC_U);
+    unregister_code(KC_U);
+  }
+  wait_ms(UNICODE_TYPE_DELAY);
+}
+
+__attribute__((weak))
+void unicode_input_finish (void) {
+  switch(input_mode) {
+  case UC_OSX:
+  case UC_WIN:
+    unregister_code(KC_LALT);
+    break;
+  case UC_LNX:
+    register_code(KC_SPC);
+    unregister_code(KC_SPC);
+    break;
+  }
+}
+
+void register_hex(uint16_t hex) {
+  for(int i = 3; i >= 0; i--) {
+    uint8_t digit = ((hex >> (i*4)) & 0xF);
+    register_code(hex_to_keycode(digit));
+    unregister_code(hex_to_keycode(digit));
+  }
+}
+
 bool process_unicode(uint16_t keycode, keyrecord_t *record) {
   if (keycode > QK_UNICODE && record->event.pressed) {
     uint16_t unicode = keycode & 0x7FFF;
-    switch(input_mode) {
-      case UC_OSX:
-        register_code(KC_LALT);
-        break;
-      case UC_LNX:
-        register_code(KC_LCTL);
-        register_code(KC_LSFT);
-        register_code(KC_U);
-        unregister_code(KC_U);
-        break;
-      case UC_WIN:
-        register_code(KC_LALT);
-        register_code(KC_PPLS);
-        unregister_code(KC_PPLS);
-        break;
+    unicode_input_start();
+    register_hex(unicode);
+    unicode_input_finish();
+  }
+  return true;
+}
+
+#ifdef UNICODEMAP_ENABLE
+__attribute__((weak))
+const uint32_t PROGMEM unicode_map[] = {
+};
+
+void register_hex32(uint32_t hex) {
+  uint8_t onzerostart = 1;
+  for(int i = 7; i >= 0; i--) {
+    if (i <= 3) {
+      onzerostart = 0;
     }
-    for(int i = 3; i >= 0; i--) {
-        uint8_t digit = ((unicode >> (i*4)) & 0xF);
+    uint8_t digit = ((hex >> (i*4)) & 0xF);
+    if (digit == 0) {
+      if (onzerostart == 0) {
         register_code(hex_to_keycode(digit));
         unregister_code(hex_to_keycode(digit));
+      }
+    } else {
+      register_code(hex_to_keycode(digit));
+      unregister_code(hex_to_keycode(digit));
+      onzerostart = 0;
     }
-    switch(input_mode) {
-      case UC_OSX:
-      case UC_WIN:
-        unregister_code(KC_LALT);
-        break;
-      case UC_LNX:
-        unregister_code(KC_LCTL);
-        unregister_code(KC_LSFT);
+  }
+}
+
+__attribute__((weak))
+void unicode_map_input_error() {}
+
+bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
+  if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) {
+    const uint32_t* map = unicode_map;
+    uint16_t index = keycode & 0x7FF;
+    uint32_t code = pgm_read_dword_far(&map[index]);
+    if ((code > 0xFFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
+      // when character is out of range supported by the OS
+      unicode_map_input_error();
+    } else {
+      unicode_input_start();
+      register_hex32(code);
+      unicode_input_finish();
+    }
+  }
+  return true;
+}
+#endif
+
+#ifdef UCIS_ENABLE
+qk_ucis_state_t qk_ucis_state;
+
+void qk_ucis_start(void) {
+  qk_ucis_state.count = 0;
+  qk_ucis_state.in_progress = true;
+
+  qk_ucis_start_user();
+}
+
+__attribute__((weak))
+void qk_ucis_start_user(void) {
+  unicode_input_start();
+  register_hex(0x2328);
+  unicode_input_finish();
+}
+
+static bool is_uni_seq(char *seq) {
+  uint8_t i;
+
+  for (i = 0; seq[i]; i++) {
+    uint16_t code;
+    if (('1' <= seq[i]) && (seq[i] <= '0'))
+      code = seq[i] - '1' + KC_1;
+    else
+      code = seq[i] - 'a' + KC_A;
+
+    if (i > qk_ucis_state.count || qk_ucis_state.codes[i] != code)
+      return false;
+  }
+
+  return (qk_ucis_state.codes[i] == KC_ENT ||
+          qk_ucis_state.codes[i] == KC_SPC);
+}
+
+__attribute__((weak))
+void qk_ucis_symbol_fallback (void) {
+  for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) {
+    uint8_t code = qk_ucis_state.codes[i];
+    register_code(code);
+    unregister_code(code);
+    wait_ms(UNICODE_TYPE_DELAY);
+  }
+}
+
+void register_ucis(const char *hex) {
+  for(int i = 0; hex[i]; i++) {
+    uint8_t kc = 0;
+    char c = hex[i];
+
+    switch (c) {
+    case '0':
+      kc = KC_0;
+      break;
+    case '1' ... '9':
+      kc = c - '1' + KC_1;
+      break;
+    case 'a' ... 'f':
+      kc = c - 'a' + KC_A;
+      break;
+    case 'A' ... 'F':
+      kc = c - 'A' + KC_A;
+      break;
+    }
+
+    if (kc) {
+      register_code (kc);
+      unregister_code (kc);
+      wait_ms (UNICODE_TYPE_DELAY);
+    }
+  }
+}
+
+bool process_ucis (uint16_t keycode, keyrecord_t *record) {
+  uint8_t i;
+
+  if (!qk_ucis_state.in_progress)
+    return true;
+
+  if (qk_ucis_state.count >= UCIS_MAX_SYMBOL_LENGTH &&
+      !(keycode == KC_BSPC || keycode == KC_ESC || keycode == KC_SPC || keycode == KC_ENT)) {
+    return false;
+  }
+
+  if (!record->event.pressed)
+    return true;
+
+  qk_ucis_state.codes[qk_ucis_state.count] = keycode;
+  qk_ucis_state.count++;
+
+  if (keycode == KC_BSPC) {
+    if (qk_ucis_state.count >= 2) {
+      qk_ucis_state.count -= 2;
+      return true;
+    } else {
+      qk_ucis_state.count--;
+      return false;
+    }
+  }
+
+  if (keycode == KC_ENT || keycode == KC_SPC || keycode == KC_ESC) {
+    bool symbol_found = false;
+
+    for (i = qk_ucis_state.count; i > 0; i--) {
+      register_code (KC_BSPC);
+      unregister_code (KC_BSPC);
+      wait_ms(UNICODE_TYPE_DELAY);
+    }
+
+    if (keycode == KC_ESC) {
+      qk_ucis_state.in_progress = false;
+      return false;
+    }
+
+    unicode_input_start();
+    for (i = 0; ucis_symbol_table[i].symbol; i++) {
+      if (is_uni_seq (ucis_symbol_table[i].symbol)) {
+        symbol_found = true;
+        register_ucis(ucis_symbol_table[i].code + 2);
         break;
+      }
+    }
+    if (!symbol_found) {
+      qk_ucis_symbol_fallback();
     }
+    unicode_input_finish();
+
+    qk_ucis_state.in_progress = false;
+    return false;
   }
   return true;
-}
\ No newline at end of file
+}
+#endif
index ca17f8f66999f66452ea262cb831e81682776306..f17cfa6cf24078b73cd1a2ac371f67573b72ddbf 100644 (file)
@@ -3,15 +3,60 @@
 
 #include "quantum.h"
 
-#define UC_OSX 0
-#define UC_LNX 1
-#define UC_WIN 2
-#define UC_BSD 3
+#define UC_OSX 0  // Mac OS X
+#define UC_LNX 1  // Linux
+#define UC_WIN 2  // Windows 'HexNumpad'
+#define UC_BSD 3  // BSD (not implemented)
+#define UC_WINC 4 // WinCompose https://github.com/samhocevar/wincompose
+
+#ifndef UNICODE_TYPE_DELAY
+#define UNICODE_TYPE_DELAY 10
+#endif
 
 void set_unicode_input_mode(uint8_t os_target);
+uint8_t get_unicode_input_mode(void);
+void unicode_input_start(void);
+void unicode_input_finish(void);
+void register_hex(uint16_t hex);
 
 bool process_unicode(uint16_t keycode, keyrecord_t *record);
 
+#ifdef UNICODEMAP_ENABLE
+void unicode_map_input_error(void);
+bool process_unicode_map(uint16_t keycode, keyrecord_t *record);
+#endif
+
+#ifdef UCIS_ENABLE
+#ifndef UCIS_MAX_SYMBOL_LENGTH
+#define UCIS_MAX_SYMBOL_LENGTH 32
+#endif
+
+typedef struct {
+  char *symbol;
+  char *code;
+} qk_ucis_symbol_t;
+
+typedef struct {
+  uint8_t count;
+  uint16_t codes[UCIS_MAX_SYMBOL_LENGTH];
+  bool in_progress:1;
+} qk_ucis_state_t;
+
+extern qk_ucis_state_t qk_ucis_state;
+
+#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, NULL}}
+#define UCIS_SYM(name, code) {name, #code}
+
+extern const qk_ucis_symbol_t ucis_symbol_table[];
+
+void qk_ucis_start(void);
+void qk_ucis_start_user(void);
+void qk_ucis_symbol_fallback (void);
+void register_ucis(const char *hex);
+bool process_ucis (uint16_t keycode, keyrecord_t *record);
+
+#endif
+
 #define UC_BSPC        UC(0x0008)
 
 #define UC_SPC UC(0x0020)
@@ -119,4 +164,4 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record);
 #define UC_TILD        UC(0x007E)
 #define UC_DEL UC(0x007F)
 
-#endif
\ No newline at end of file
+#endif
index bc2da510f2f902149a9a1c93e217474b29d559c3..f653564a67dea8396b04db82500c4b9dc531a480 100644 (file)
@@ -1,5 +1,46 @@
 #include "quantum.h"
 
+#ifndef TAPPING_TERM
+#define TAPPING_TERM 200
+#endif
+
+static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
+  switch (code) {
+  case QK_MODS ... QK_MODS_MAX:
+    break;
+  default:
+    return;
+  }
+
+  if (code & QK_LCTL)
+    f(KC_LCTL);
+  if (code & QK_LSFT)
+    f(KC_LSFT);
+  if (code & QK_LALT)
+    f(KC_LALT);
+  if (code & QK_LGUI)
+    f(KC_LGUI);
+
+  if (code & QK_RCTL)
+    f(KC_RCTL);
+  if (code & QK_RSFT)
+    f(KC_RSFT);
+  if (code & QK_RALT)
+    f(KC_RALT);
+  if (code & QK_RGUI)
+    f(KC_RGUI);
+}
+
+void register_code16 (uint16_t code) {
+  do_code16 (code, register_code);
+  register_code (code);
+}
+
+void unregister_code16 (uint16_t code) {
+  unregister_code (code);
+  do_code16 (code, unregister_code);
+}
+
 __attribute__ ((weak))
 bool process_action_kb(keyrecord_t *record) {
   return true;
@@ -38,6 +79,7 @@ void reset_keyboard(void) {
 #endif
 
 static bool shift_interrupted[2] = {0, 0};
+static uint16_t scs_timer = 0;
 
 bool process_record_quantum(keyrecord_t *record) {
 
@@ -46,18 +88,20 @@ bool process_record_quantum(keyrecord_t *record) {
   uint16_t keycode;
 
   #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
-    uint8_t layer;
+    /* TODO: Use store_or_get_action() or a similar function. */
+    if (!disable_action_cache) {
+      uint8_t layer;
 
-    if (record->event.pressed) {
-      layer = layer_switch_get_layer(key);
-      update_source_layers_cache(key, layer);
-    } else {
-      layer = read_source_layers_cache(key);
-    }
-    keycode = keymap_key_to_keycode(layer, key);
-  #else
-    keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key);
+      if (record->event.pressed) {
+        layer = layer_switch_get_layer(key);
+        update_source_layers_cache(key, layer);
+      } else {
+        layer = read_source_layers_cache(key);
+      }
+      keycode = keymap_key_to_keycode(layer, key);
+    } else
   #endif
+    keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key);
 
     // This is how you use actions here
     // if (keycode == KC_LEAD) {
@@ -86,6 +130,15 @@ bool process_record_quantum(keyrecord_t *record) {
   #endif
   #ifdef UNICODE_ENABLE
     process_unicode(keycode, record) &&
+  #endif
+  #ifdef UCIS_ENABLE
+    process_ucis(keycode, record) &&
+  #endif
+  #ifdef PRINTING_ENABLE
+    process_printer(keycode, record) &&
+  #endif
+  #ifdef UNICODEMAP_ENABLE
+    process_unicode_map(keycode, record) &&
   #endif
       true)) {
     return false;
@@ -157,7 +210,7 @@ bool process_record_quantum(keyrecord_t *record) {
          return false;
       break;
        #endif
-    case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI:
+    case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:
       if (record->event.pressed) {
         // MAGIC actions (BOOTMAGIC without the boot)
         if (!eeconfig_is_enabled()) {
@@ -165,54 +218,80 @@ bool process_record_quantum(keyrecord_t *record) {
         }
         /* keymap config */
         keymap_config.raw = eeconfig_read_keymap();
-        if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) {
-            keymap_config.swap_control_capslock = 1;
-        } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) {
-            keymap_config.capslock_to_control = 1;
-        } else if (keycode == MAGIC_SWAP_LALT_LGUI) {
-            keymap_config.swap_lalt_lgui = 1;
-        } else if (keycode == MAGIC_SWAP_RALT_RGUI) {
-            keymap_config.swap_ralt_rgui = 1;
-        } else if (keycode == MAGIC_NO_GUI) {
-            keymap_config.no_gui = 1;
-        } else if (keycode == MAGIC_SWAP_GRAVE_ESC) {
-            keymap_config.swap_grave_esc = 1;
-        } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) {
-            keymap_config.swap_backslash_backspace = 1;
-        } else if (keycode == MAGIC_HOST_NKRO) {
-            keymap_config.nkro = 1;
-        } else if (keycode == MAGIC_SWAP_ALT_GUI) {
-            keymap_config.swap_lalt_lgui = 1;
-            keymap_config.swap_ralt_rgui = 1;
-        }
-        /* UNs */
-        else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) {
-            keymap_config.swap_control_capslock = 0;
-        } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) {
-            keymap_config.capslock_to_control = 0;
-        } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) {
-            keymap_config.swap_lalt_lgui = 0;
-        } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) {
-            keymap_config.swap_ralt_rgui = 0;
-        } else if (keycode == MAGIC_UNNO_GUI) {
-            keymap_config.no_gui = 0;
-        } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) {
-            keymap_config.swap_grave_esc = 0;
-        } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) {
-            keymap_config.swap_backslash_backspace = 0;
-        } else if (keycode == MAGIC_UNHOST_NKRO) {
-            keymap_config.nkro = 0;
-        } else if (keycode == MAGIC_UNSWAP_ALT_GUI) {
-            keymap_config.swap_lalt_lgui = 0;
-            keymap_config.swap_ralt_rgui = 0;
+        switch (keycode)
+        {
+          case MAGIC_SWAP_CONTROL_CAPSLOCK:
+            keymap_config.swap_control_capslock = true;
+            break;
+          case MAGIC_CAPSLOCK_TO_CONTROL:
+            keymap_config.capslock_to_control = true;
+            break;
+          case MAGIC_SWAP_LALT_LGUI:
+            keymap_config.swap_lalt_lgui = true;
+            break;
+          case MAGIC_SWAP_RALT_RGUI:
+            keymap_config.swap_ralt_rgui = true;
+            break;
+          case MAGIC_NO_GUI:
+            keymap_config.no_gui = true;
+            break;
+          case MAGIC_SWAP_GRAVE_ESC:
+            keymap_config.swap_grave_esc = true;
+            break;
+          case MAGIC_SWAP_BACKSLASH_BACKSPACE:
+            keymap_config.swap_backslash_backspace = true;
+            break;
+          case MAGIC_HOST_NKRO:
+            keymap_config.nkro = true;
+            break;
+          case MAGIC_SWAP_ALT_GUI:
+            keymap_config.swap_lalt_lgui = true;
+            keymap_config.swap_ralt_rgui = true;
+            break;
+          case MAGIC_UNSWAP_CONTROL_CAPSLOCK:
+            keymap_config.swap_control_capslock = false;
+            break;
+          case MAGIC_UNCAPSLOCK_TO_CONTROL:
+            keymap_config.capslock_to_control = false;
+            break;
+          case MAGIC_UNSWAP_LALT_LGUI:
+            keymap_config.swap_lalt_lgui = false;
+            break;
+          case MAGIC_UNSWAP_RALT_RGUI:
+            keymap_config.swap_ralt_rgui = false;
+            break;
+          case MAGIC_UNNO_GUI:
+            keymap_config.no_gui = false;
+            break;
+          case MAGIC_UNSWAP_GRAVE_ESC:
+            keymap_config.swap_grave_esc = false;
+            break;
+          case MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
+            keymap_config.swap_backslash_backspace = false;
+            break;
+          case MAGIC_UNHOST_NKRO:
+            keymap_config.nkro = false;
+            break;
+          case MAGIC_UNSWAP_ALT_GUI:
+            keymap_config.swap_lalt_lgui = false;
+            keymap_config.swap_ralt_rgui = false;
+            break;
+          case MAGIC_TOGGLE_NKRO:
+            keymap_config.nkro = !keymap_config.nkro;
+            break;
+          default:
+            break;
         }
         eeconfig_update_keymap(keymap_config.raw);
+        clear_keyboard(); // clear to prevent stuck keys
+
         return false;
       }
       break;
     case KC_LSPO: {
       if (record->event.pressed) {
         shift_interrupted[0] = false;
+        scs_timer = timer_read ();
         register_mods(MOD_BIT(KC_LSFT));
       }
       else {
@@ -222,19 +301,20 @@ bool process_record_quantum(keyrecord_t *record) {
             shift_interrupted[1] = true;
           }
         #endif
-        if (!shift_interrupted[0]) {
+        if (!shift_interrupted[0] && timer_elapsed(scs_timer) < TAPPING_TERM) {
           register_code(LSPO_KEY);
           unregister_code(LSPO_KEY);
         }
         unregister_mods(MOD_BIT(KC_LSFT));
       }
       return false;
-      break;
+      // break;
     }
 
     case KC_RSPC: {
       if (record->event.pressed) {
         shift_interrupted[1] = false;
+        scs_timer = timer_read ();
         register_mods(MOD_BIT(KC_RSFT));
       }
       else {
@@ -244,14 +324,14 @@ bool process_record_quantum(keyrecord_t *record) {
             shift_interrupted[1] = true;
           }
         #endif
-        if (!shift_interrupted[1]) {
+        if (!shift_interrupted[1] && timer_elapsed(scs_timer) < TAPPING_TERM) {
           register_code(RSPC_KEY);
           unregister_code(RSPC_KEY);
         }
         unregister_mods(MOD_BIT(KC_RSFT));
       }
       return false;
-      break;
+      // break;
     }
     default: {
       shift_interrupted[0] = true;
@@ -729,6 +809,51 @@ void backlight_set(uint8_t level)
 #endif // backlight
 
 
+// Functions for spitting out values
+//
+
+void send_dword(uint32_t number) { // this might not actually work
+    uint16_t word = (number >> 16);
+    send_word(word);
+    send_word(number & 0xFFFFUL);
+}
+
+void send_word(uint16_t number) {
+    uint8_t byte = number >> 8;
+    send_byte(byte);
+    send_byte(number & 0xFF);
+}
+
+void send_byte(uint8_t number) {
+    uint8_t nibble = number >> 4;
+    send_nibble(nibble);
+    send_nibble(number & 0xF);
+}
+
+void send_nibble(uint8_t number) {
+    switch (number) {
+        case 0:
+            register_code(KC_0);
+            unregister_code(KC_0);
+            break;
+        case 1 ... 9:
+            register_code(KC_1 + (number - 1));
+            unregister_code(KC_1 + (number - 1));
+            break;
+        case 0xA ... 0xF:
+            register_code(KC_A + (number - 0xA));
+            unregister_code(KC_A + (number - 0xA));
+            break;
+    }
+}
+
+void api_send_unicode(uint32_t unicode) {
+#ifdef API_ENABLE
+    uint8_t chunk[4];
+    dword_to_bytes(unicode, chunk);
+    MT_SEND_DATA(DT_UNICODE, chunk, 5);
+#endif
+}
 
 __attribute__ ((weak))
 void led_set_user(uint8_t usb_led) {
index 7ebfb24e302d5d1de0a8cd0a26d31f349518fb43..e6adf974aba58aa006a876c58d00f2d19d6099c7 100644 (file)
@@ -25,6 +25,7 @@
 #include "led.h"
 #include "action_util.h"
 #include <stdlib.h>
+#include "print.h"
 
 
 extern uint32_t default_layer_state;
@@ -58,6 +59,10 @@ extern uint32_t default_layer_state;
 
 #include "process_tap_dance.h"
 
+#ifdef PRINTING_ENABLE
+       #include "process_printer.h"
+#endif
+
 #define SEND_STRING(str) send_string(PSTR(str))
 void send_string(const char *str);
 
@@ -82,6 +87,9 @@ void reset_keyboard(void);
 void startup_user(void);
 void shutdown_user(void);
 
+void register_code16 (uint16_t code);
+void unregister_code16 (uint16_t code);
+
 #ifdef BACKLIGHT_ENABLE
 void backlight_init_ports(void);
 
@@ -102,8 +110,15 @@ void breathing_speed_dec(uint8_t value);
 #endif
 
 #endif
+void send_dword(uint32_t number);
+void send_word(uint16_t number);
+void send_byte(uint8_t number);
+void send_nibble(uint8_t number);
+
 
 void led_set_user(uint8_t usb_led);
 void led_set_kb(uint8_t usb_led);
 
+void api_send_unicode(uint32_t unicode);
+
 #endif
index b1b0f035d58d48bc53035db4655c04963d385b48..625971e0fe616d33dab4211a0df12902d169e37c 100644 (file)
 #include "rgblight.h"
 #include "debug.h"
 
+// Lightness curve using the CIE 1931 lightness formula
+//Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm
 const uint8_t DIM_CURVE[] PROGMEM = {
-       0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
-       3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-       4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
-       6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-       8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11,
-       11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15,
-       15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20,
-       20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26,
-       27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35,
-       36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47,
-       48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
-       63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82,
-       83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109,
-       110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144,
-       146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190,
-       193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255,
+    0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+    2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+    3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
+    5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
+    7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
+    10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
+    13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
+    17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
+    22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
+    28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
+    34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
+    41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
+    49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
+    58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+    68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
+    80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
+    92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
+    106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
+    121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
+    138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
+    155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
+    175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
+    196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
+    218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
+    242, 245, 247, 250, 252, 255,
+    };
+
+const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {
+  0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9,
+  10, 11, 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35,
+  37, 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76,
+  79, 82, 85, 88, 90, 93, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124,
+  127, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, 173,
+  176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, 213, 215,
+  218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240, 241, 243, 244,
+  245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255,
+  255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246,
+  245, 244, 243, 241, 240, 238, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220,
+  218, 215, 213, 211, 208, 206, 203, 201, 198, 196, 193, 190, 188, 185, 182, 179,
+  176, 173, 170, 167, 165, 162, 158, 155, 152, 149, 146, 143, 140, 137, 134, 131,
+  128, 124, 121, 118, 115, 112, 109, 106, 103, 100, 97, 93, 90, 88, 85, 82,
+  79, 76, 73, 70, 67, 65, 62, 59, 57, 54, 52, 49, 47, 44, 42, 40,
+  37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 17, 15, 14, 12, 11,
+  10, 9, 7, 6, 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0
 };
-const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124,127,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,128,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0};
+
+__attribute__ ((weak))
 const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
+__attribute__ ((weak))
 const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
+__attribute__ ((weak))
 const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20};
+__attribute__ ((weak))
 const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
+__attribute__ ((weak))
 const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20};
 
 rgblight_config_t rgblight_config;
 rgblight_config_t inmem_config;
-struct cRGB led[RGBLED_NUM];
+
+LED_TYPE led[RGBLED_NUM];
 uint8_t rgblight_inited = 0;
+bool rgblight_timer_enabled = false;
+
+void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
+  uint8_t r = 0, g = 0, b = 0, base, color;
 
+  if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
+    r = val;
+    g = val;
+    b = val;
+  } else {
+    base = ((255 - sat) * val) >> 8;
+    color = (val - base) * (hue % 60) / 60;
+
+    switch (hue / 60) {
+      case 0:
+        r = val;
+        g = base + color;
+        b = base;
+        break;
+      case 1:
+        r = val - color;
+        g = val;
+        b = base;
+        break;
+      case 2:
+        r = base;
+        g = val;
+        b = base + color;
+        break;
+      case 3:
+        r = base;
+        g = val - color;
+        b = val;
+        break;
+      case 4:
+        r = base + color;
+        g = base;
+        b = val;
+        break;
+      case 5:
+        r = val;
+        g = base;
+        b = val - color;
+        break;
+    }
+  }
+  r = pgm_read_byte(&DIM_CURVE[r]);
+  g = pgm_read_byte(&DIM_CURVE[g]);
+  b = pgm_read_byte(&DIM_CURVE[b]);
 
-void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) {
-       /* convert hue, saturation and brightness ( HSB/HSV ) to RGB
-       The DIM_CURVE is used only on brightness/value and on saturation (inverted).
-       This looks the most natural.
-       */
-  uint8_t r = 0, g = 0, b = 0;
-
-  val = pgm_read_byte(&DIM_CURVE[val]);
-       sat = 255 - pgm_read_byte(&DIM_CURVE[255 - sat]);
-
-       uint8_t base;
-
-       if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
-               r = val;
-               g = val;
-               b = val;
-       } else  {
-               base = ((255 - sat) * val) >> 8;
-
-               switch (hue / 60) {
-               case 0:
-                       r = val;
-                       g = (((val - base)*hue) / 60) + base;
-                       b = base;
-                       break;
-
-               case 1:
-                       r = (((val - base)*(60 - (hue % 60))) / 60) + base;
-                       g = val;
-                       b = base;
-                       break;
-
-               case 2:
-                       r = base;
-                       g = val;
-                       b = (((val - base)*(hue % 60)) / 60) + base;
-                       break;
-
-               case 3:
-                       r = base;
-                       g = (((val - base)*(60 - (hue % 60))) / 60) + base;
-                       b = val;
-                       break;
-
-               case 4:
-                       r = (((val - base)*(hue % 60)) / 60) + base;
-                       g = base;
-                       b = val;
-                       break;
-
-               case 5:
-                       r = val;
-                       g = base;
-                       b = (((val - base)*(60 - (hue % 60))) / 60) + base;
-                       break;
-               }
-       }
-  setrgb(r,g,b, led1);
-}
-
-void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) {
+  setrgb(r, g, b, led1);
+}
+
+void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
   (*led1).r = r;
   (*led1).g = g;
   (*led1).b = b;
@@ -111,103 +139,115 @@ void eeconfig_update_rgblight(uint32_t val) {
   eeprom_update_dword(EECONFIG_RGBLIGHT, val);
 }
 void eeconfig_update_rgblight_default(void) {
-       dprintf("eeconfig_update_rgblight_default\n");
-       rgblight_config.enable = 1;
-       rgblight_config.mode = 1;
-       rgblight_config.hue = 200;
-       rgblight_config.sat = 204;
-       rgblight_config.val = 204;
-       eeconfig_update_rgblight(rgblight_config.raw);
+  dprintf("eeconfig_update_rgblight_default\n");
+  rgblight_config.enable = 1;
+  rgblight_config.mode = 1;
+  rgblight_config.hue = 0;
+  rgblight_config.sat = 255;
+  rgblight_config.val = 255;
+  eeconfig_update_rgblight(rgblight_config.raw);
 }
 void eeconfig_debug_rgblight(void) {
-       dprintf("rgblight_config eprom\n");
-       dprintf("rgblight_config.enable = %d\n", rgblight_config.enable);
-       dprintf("rghlight_config.mode = %d\n", rgblight_config.mode);
-       dprintf("rgblight_config.hue = %d\n", rgblight_config.hue);
-       dprintf("rgblight_config.sat = %d\n", rgblight_config.sat);
-       dprintf("rgblight_config.val = %d\n", rgblight_config.val);
+  dprintf("rgblight_config eprom\n");
+  dprintf("rgblight_config.enable = %d\n", rgblight_config.enable);
+  dprintf("rghlight_config.mode = %d\n", rgblight_config.mode);
+  dprintf("rgblight_config.hue = %d\n", rgblight_config.hue);
+  dprintf("rgblight_config.sat = %d\n", rgblight_config.sat);
+  dprintf("rgblight_config.val = %d\n", rgblight_config.val);
 }
 
 void rgblight_init(void) {
   debug_enable = 1; // Debug ON!
-       dprintf("rgblight_init called.\n");
+  dprintf("rgblight_init called.\n");
   rgblight_inited = 1;
-       dprintf("rgblight_init start!\n");
+  dprintf("rgblight_init start!\n");
   if (!eeconfig_is_enabled()) {
-               dprintf("rgblight_init eeconfig is not enabled.\n");
+    dprintf("rgblight_init eeconfig is not enabled.\n");
     eeconfig_init();
-               eeconfig_update_rgblight_default();
+    eeconfig_update_rgblight_default();
   }
   rgblight_config.raw = eeconfig_read_rgblight();
-       if (!rgblight_config.mode) {
-               dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
-               eeconfig_update_rgblight_default();
-               rgblight_config.raw = eeconfig_read_rgblight();
-       }
-       eeconfig_debug_rgblight(); // display current eeprom values
+  if (!rgblight_config.mode) {
+    dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
+    eeconfig_update_rgblight_default();
+    rgblight_config.raw = eeconfig_read_rgblight();
+  }
+  eeconfig_debug_rgblight(); // display current eeprom values
 
-       #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
-               rgblight_timer_init(); // setup the timer
-       #endif
+  #ifdef RGBLIGHT_ANIMATIONS
+    rgblight_timer_init(); // setup the timer
+  #endif
 
   if (rgblight_config.enable) {
     rgblight_mode(rgblight_config.mode);
   }
 }
 
+void rgblight_update_dword(uint32_t dword) {
+  rgblight_config.raw = dword;
+  eeconfig_update_rgblight(rgblight_config.raw);
+  if (rgblight_config.enable)
+    rgblight_mode(rgblight_config.mode);
+  else {
+    #ifdef RGBLIGHT_ANIMATIONS
+      rgblight_timer_disable();
+    #endif
+      rgblight_set();
+  }
+}
+
 void rgblight_increase(void) {
-       uint8_t mode = 0;
+  uint8_t mode = 0;
   if (rgblight_config.mode < RGBLIGHT_MODES) {
     mode = rgblight_config.mode + 1;
   }
-       rgblight_mode(mode);
+  rgblight_mode(mode);
 }
-
 void rgblight_decrease(void) {
-       uint8_t mode = 0;
-  if (rgblight_config.mode > 1) { //mode will never < 1, if mode is less than 1, eeprom need to be initialized.
-    mode = rgblight_config.mode-1;
+  uint8_t mode = 0;
+  // Mode will never be < 1. If it ever is, eeprom needs to be initialized.
+  if (rgblight_config.mode > 1) {
+    mode = rgblight_config.mode - 1;
   }
-       rgblight_mode(mode);
+  rgblight_mode(mode);
 }
-
 void rgblight_step(void) {
-       uint8_t mode = 0;
+  uint8_t mode = 0;
   mode = rgblight_config.mode + 1;
   if (mode > RGBLIGHT_MODES) {
     mode = 1;
   }
-       rgblight_mode(mode);
+  rgblight_mode(mode);
 }
 
 void rgblight_mode(uint8_t mode) {
-       if (!rgblight_config.enable) {
-               return;
-       }
-  if (mode<1) {
-               rgblight_config.mode = 1;
-       } else if (mode > RGBLIGHT_MODES) {
-               rgblight_config.mode = RGBLIGHT_MODES;
-       } else {
-               rgblight_config.mode = mode;
-       }
+  if (!rgblight_config.enable) {
+    return;
+  }
+  if (mode < 1) {
+    rgblight_config.mode = 1;
+  } else if (mode > RGBLIGHT_MODES) {
+    rgblight_config.mode = RGBLIGHT_MODES;
+  } else {
+    rgblight_config.mode = mode;
+  }
   eeconfig_update_rgblight(rgblight_config.raw);
   xprintf("rgblight mode: %u\n", rgblight_config.mode);
-       if (rgblight_config.mode == 1) {
-               #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
-                       rgblight_timer_disable();
-               #endif
-       } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) {
-               // MODE 2-5, breathing
-               // MODE 6-8, rainbow mood
-               // MODE 9-14, rainbow swirl
-               // MODE 15-20, snake
-               // MODE 21-23, knight
-
-               #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
-                       rgblight_timer_enable();
-               #endif
-       }
+  if (rgblight_config.mode == 1) {
+    #ifdef RGBLIGHT_ANIMATIONS
+      rgblight_timer_disable();
+    #endif
+  } else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 23) {
+    // MODE 2-5, breathing
+    // MODE 6-8, rainbow mood
+    // MODE 9-14, rainbow swirl
+    // MODE 15-20, snake
+    // MODE 21-23, knight
+
+    #ifdef RGBLIGHT_ANIMATIONS
+      rgblight_timer_enable();
+    #endif
+  }
   rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
 }
 
@@ -215,306 +255,343 @@ void rgblight_toggle(void) {
   rgblight_config.enable ^= 1;
   eeconfig_update_rgblight(rgblight_config.raw);
   xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable);
-       if (rgblight_config.enable) {
-               rgblight_mode(rgblight_config.mode);
-       } else {
+  if (rgblight_config.enable) {
+    rgblight_mode(rgblight_config.mode);
+  } else {
+    #ifdef RGBLIGHT_ANIMATIONS
+      rgblight_timer_disable();
+    #endif
+    _delay_ms(50);
+    rgblight_set();
+  }
+}
 
-               #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
-                       rgblight_timer_disable();
-               #endif
-               _delay_ms(50);
-               rgblight_set();
-       }
+void rgblight_enable(void) {
+  rgblight_config.enable = 1;
+  eeconfig_update_rgblight(rgblight_config.raw);
+  xprintf("rgblight enable: rgblight_config.enable = %u\n", rgblight_config.enable);
+  rgblight_mode(rgblight_config.mode);
 }
 
 
-void rgblight_increase_hue(void){
-       uint16_t hue;
+void rgblight_increase_hue(void) {
+  uint16_t hue;
   hue = (rgblight_config.hue+RGBLIGHT_HUE_STEP) % 360;
   rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val);
 }
-void rgblight_decrease_hue(void){
-       uint16_t hue;
-       if (rgblight_config.hue-RGBLIGHT_HUE_STEP <0 ) {
-               hue = (rgblight_config.hue+360-RGBLIGHT_HUE_STEP) % 360;
-       } else {
-               hue = (rgblight_config.hue-RGBLIGHT_HUE_STEP) % 360;
-       }
+void rgblight_decrease_hue(void) {
+  uint16_t hue;
+  if (rgblight_config.hue-RGBLIGHT_HUE_STEP < 0) {
+    hue = (rgblight_config.hue + 360 - RGBLIGHT_HUE_STEP) % 360;
+  } else {
+    hue = (rgblight_config.hue - RGBLIGHT_HUE_STEP) % 360;
+  }
   rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val);
 }
 void rgblight_increase_sat(void) {
-       uint8_t sat;
+  uint8_t sat;
   if (rgblight_config.sat + RGBLIGHT_SAT_STEP > 255) {
     sat = 255;
   } else {
-    sat = rgblight_config.sat+RGBLIGHT_SAT_STEP;
+    sat = rgblight_config.sat + RGBLIGHT_SAT_STEP;
   }
   rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val);
 }
-void rgblight_decrease_sat(void){
-       uint8_t sat;
+void rgblight_decrease_sat(void) {
+  uint8_t sat;
   if (rgblight_config.sat - RGBLIGHT_SAT_STEP < 0) {
     sat = 0;
   } else {
-    sat = rgblight_config.sat-RGBLIGHT_SAT_STEP;
+    sat = rgblight_config.sat - RGBLIGHT_SAT_STEP;
   }
   rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val);
 }
-void rgblight_increase_val(void){
-       uint8_t val;
+void rgblight_increase_val(void) {
+  uint8_t val;
   if (rgblight_config.val + RGBLIGHT_VAL_STEP > 255) {
     val = 255;
   } else {
-    val = rgblight_config.val+RGBLIGHT_VAL_STEP;
+    val = rgblight_config.val + RGBLIGHT_VAL_STEP;
   }
   rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val);
 }
 void rgblight_decrease_val(void) {
-       uint8_t val;
+  uint8_t val;
   if (rgblight_config.val - RGBLIGHT_VAL_STEP < 0) {
     val = 0;
   } else {
-    val = rgblight_config.val-RGBLIGHT_VAL_STEP;
+    val = rgblight_config.val - RGBLIGHT_VAL_STEP;
   }
   rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val);
 }
 
-void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val){
-       inmem_config.raw = rgblight_config.raw;
+void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
+  inmem_config.raw = rgblight_config.raw;
   if (rgblight_config.enable) {
-    struct cRGB tmp_led;
+    LED_TYPE tmp_led;
     sethsv(hue, sat, val, &tmp_led);
-               inmem_config.hue = hue;
-               inmem_config.sat = sat;
-               inmem_config.val = val;
+    inmem_config.hue = hue;
+    inmem_config.sat = sat;
+    inmem_config.val = val;
     // dprintf("rgblight set hue [MEMORY]: %u,%u,%u\n", inmem_config.hue, inmem_config.sat, inmem_config.val);
     rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b);
   }
 }
-void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){
+void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) {
   if (rgblight_config.enable) {
-               if (rgblight_config.mode == 1) {
-                       // same static color
-                       rgblight_sethsv_noeeprom(hue, sat, val);
-               } else {
-                       // all LEDs in same color
-                       if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
-                               // breathing mode, ignore the change of val, use in memory value instead
-                               val = rgblight_config.val;
-                       } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) {
-                               // rainbow mood and rainbow swirl, ignore the change of hue
-                               hue = rgblight_config.hue;
-                       }
-               }
-               rgblight_config.hue = hue;
-               rgblight_config.sat = sat;
-               rgblight_config.val = val;
-               eeconfig_update_rgblight(rgblight_config.raw);
-               xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
-  }
-}
-
-void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b){
+    if (rgblight_config.mode == 1) {
+      // same static color
+      rgblight_sethsv_noeeprom(hue, sat, val);
+    } else {
+      // all LEDs in same color
+      if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
+        // breathing mode, ignore the change of val, use in memory value instead
+        val = rgblight_config.val;
+      } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) {
+        // rainbow mood and rainbow swirl, ignore the change of hue
+        hue = rgblight_config.hue;
+      }
+    }
+    rgblight_config.hue = hue;
+    rgblight_config.sat = sat;
+    rgblight_config.val = val;
+    eeconfig_update_rgblight(rgblight_config.raw);
+    xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
+  }
+}
+
+void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
   // dprintf("rgblight set rgb: %u,%u,%u\n", r,g,b);
-  for (uint8_t i=0;i<RGBLED_NUM;i++) {
+  for (uint8_t i = 0; i < RGBLED_NUM; i++) {
     led[i].r = r;
     led[i].g = g;
     led[i].b = b;
   }
   rgblight_set();
-
 }
 
 void rgblight_set(void) {
-       if (rgblight_config.enable) {
-               ws2812_setleds(led, RGBLED_NUM);
-       } else {
-               for (uint8_t i=0;i<RGBLED_NUM;i++) {
-           led[i].r = 0;
-           led[i].g = 0;
-           led[i].b = 0;
-         }
-               ws2812_setleds(led, RGBLED_NUM);
-       }
+  if (rgblight_config.enable) {
+    #ifdef RGBW
+      ws2812_setleds_rgbw(led, RGBLED_NUM);
+    #else
+      ws2812_setleds(led, RGBLED_NUM);
+    #endif
+  } else {
+    for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+      led[i].r = 0;
+      led[i].g = 0;
+      led[i].b = 0;
+    }
+    #ifdef RGBW
+      ws2812_setleds_rgbw(led, RGBLED_NUM);
+    #else
+      ws2812_setleds(led, RGBLED_NUM);
+    #endif
+  }
 }
 
-
-#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+#ifdef RGBLIGHT_ANIMATIONS
 
 // Animation timer -- AVR Timer3
 void rgblight_timer_init(void) {
-       static uint8_t rgblight_timer_is_init = 0;
-       if (rgblight_timer_is_init) {
-               return;
-       }
-       rgblight_timer_is_init = 1;
-       /* Timer 3 setup */
-       TCCR3B = _BV(WGM32) //CTC mode OCR3A as TOP
-             | _BV(CS30); //Clock selelct: clk/1
-       /* Set TOP value */
-       uint8_t sreg = SREG;
-       cli();
-       OCR3AH = (RGBLED_TIMER_TOP>>8)&0xff;
-       OCR3AL = RGBLED_TIMER_TOP&0xff;
-       SREG = sreg;
+  // static uint8_t rgblight_timer_is_init = 0;
+  // if (rgblight_timer_is_init) {
+  //   return;
+  // }
+  // rgblight_timer_is_init = 1;
+  // /* Timer 3 setup */
+  // TCCR3B = _BV(WGM32) // CTC mode OCR3A as TOP
+  //       | _BV(CS30); // Clock selelct: clk/1
+  // /* Set TOP value */
+  // uint8_t sreg = SREG;
+  // cli();
+  // OCR3AH = (RGBLED_TIMER_TOP >> 8) & 0xff;
+  // OCR3AL = RGBLED_TIMER_TOP & 0xff;
+  // SREG = sreg;
+
+  rgblight_timer_enabled = true;
 }
 void rgblight_timer_enable(void) {
-       TIMSK3 |= _BV(OCIE3A);
-       dprintf("TIMER3 enabled.\n");
+  rgblight_timer_enabled = true;
+  dprintf("TIMER3 enabled.\n");
 }
 void rgblight_timer_disable(void) {
-       TIMSK3 &= ~_BV(OCIE3A);
-       dprintf("TIMER3 disabled.\n");
+  rgblight_timer_enabled = false;
+  dprintf("TIMER3 disabled.\n");
 }
 void rgblight_timer_toggle(void) {
-       TIMSK3 ^= _BV(OCIE3A);
-       dprintf("TIMER3 toggled.\n");
-}
-
-ISR(TIMER3_COMPA_vect) {
-       // Mode = 1, static light, do nothing here
-       if (rgblight_config.mode>=2 && rgblight_config.mode<=5) {
-               // mode = 2 to 5, breathing mode
-               rgblight_effect_breathing(rgblight_config.mode-2);
-
-       } else if (rgblight_config.mode>=6 && rgblight_config.mode<=8) {
-               rgblight_effect_rainbow_mood(rgblight_config.mode-6);
-       } else if (rgblight_config.mode>=9 && rgblight_config.mode<=14) {
-               rgblight_effect_rainbow_swirl(rgblight_config.mode-9);
-       } else if (rgblight_config.mode>=15 && rgblight_config.mode<=20) {
-               rgblight_effect_snake(rgblight_config.mode-15);
-       } else if (rgblight_config.mode>=21 && rgblight_config.mode<=23) {
-               rgblight_effect_knight(rgblight_config.mode-21);
-       }
+  rgblight_timer_enabled ^= rgblight_timer_enabled;
+  dprintf("TIMER3 toggled.\n");
+}
+
+void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b) {
+  rgblight_enable();
+  rgblight_mode(1);
+  rgblight_setrgb(r, g, b);
+}
+
+void rgblight_task(void) {
+  if (rgblight_timer_enabled) {
+    // mode = 1, static light, do nothing here
+    if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
+      // mode = 2 to 5, breathing mode
+      rgblight_effect_breathing(rgblight_config.mode - 2);
+    } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 8) {
+      // mode = 6 to 8, rainbow mood mod
+      rgblight_effect_rainbow_mood(rgblight_config.mode - 6);
+    } else if (rgblight_config.mode >= 9 && rgblight_config.mode <= 14) {
+      // mode = 9 to 14, rainbow swirl mode
+      rgblight_effect_rainbow_swirl(rgblight_config.mode - 9);
+    } else if (rgblight_config.mode >= 15 && rgblight_config.mode <= 20) {
+      // mode = 15 to 20, snake mode
+      rgblight_effect_snake(rgblight_config.mode - 15);
+    } else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) {
+      // mode = 21 to 23, knight mode
+      rgblight_effect_knight(rgblight_config.mode - 21);
+    }
+  }
 }
 
-// effects
+// Effects
 void rgblight_effect_breathing(uint8_t interval) {
-       static uint8_t pos = 0;
-       static uint16_t last_timer = 0;
+  static uint8_t pos = 0;
+  static uint16_t last_timer = 0;
 
-       if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_BREATHING_INTERVALS[interval])) return;
-       last_timer = timer_read();
+  if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_BREATHING_INTERVALS[interval])) {
+    return;
+  }
+  last_timer = timer_read();
 
-       rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&RGBLED_BREATHING_TABLE[pos]));
-       pos = (pos+1) % 256;
+  rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&RGBLED_BREATHING_TABLE[pos]));
+  pos = (pos + 1) % 256;
 }
-
 void rgblight_effect_rainbow_mood(uint8_t interval) {
-       static uint16_t current_hue=0;
-       static uint16_t last_timer = 0;
+  static uint16_t current_hue = 0;
+  static uint16_t last_timer = 0;
 
-       if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval])) return;
-       last_timer = timer_read();
-       rgblight_sethsv_noeeprom(current_hue, rgblight_config.sat, rgblight_config.val);
-       current_hue = (current_hue+1) % 360;
+  if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval])) {
+    return;
+  }
+  last_timer = timer_read();
+  rgblight_sethsv_noeeprom(current_hue, rgblight_config.sat, rgblight_config.val);
+  current_hue = (current_hue + 1) % 360;
 }
-
 void rgblight_effect_rainbow_swirl(uint8_t interval) {
-       static uint16_t current_hue=0;
-       static uint16_t last_timer = 0;
-       uint16_t hue;
-       uint8_t i;
-       if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval/2])) return;
-       last_timer = timer_read();
-       for (i=0; i<RGBLED_NUM; i++) {
-               hue = (360/RGBLED_NUM*i+current_hue)%360;
-               sethsv(hue, rgblight_config.sat, rgblight_config.val, &led[i]);
-       }
-       rgblight_set();
-
-       if (interval % 2) {
-               current_hue = (current_hue+1) % 360;
-       } else {
-               if (current_hue -1 < 0) {
-                       current_hue = 359;
-               } else {
-                       current_hue = current_hue - 1;
-               }
-
-       }
+  static uint16_t current_hue = 0;
+  static uint16_t last_timer = 0;
+  uint16_t hue;
+  uint8_t i;
+  if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval / 2])) {
+    return;
+  }
+  last_timer = timer_read();
+  for (i = 0; i < RGBLED_NUM; i++) {
+    hue = (360 / RGBLED_NUM * i + current_hue) % 360;
+    sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]);
+  }
+  rgblight_set();
+
+  if (interval % 2) {
+    current_hue = (current_hue + 1) % 360;
+  } else {
+    if (current_hue - 1 < 0) {
+      current_hue = 359;
+    } else {
+      current_hue = current_hue - 1;
+    }
+  }
 }
 void rgblight_effect_snake(uint8_t interval) {
-       static uint8_t pos=0;
-       static uint16_t last_timer = 0;
-       uint8_t i,j;
-       int8_t k;
-       int8_t increament = 1;
-       if (interval%2) increament = -1;
-       if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_SNAKE_INTERVALS[interval/2])) return;
-       last_timer = timer_read();
-       for (i=0;i<RGBLED_NUM;i++) {
-               led[i].r=0;
-               led[i].g=0;
-               led[i].b=0;
-               for (j=0;j<RGBLIGHT_EFFECT_SNAKE_LENGTH;j++) {
-                       k = pos+j*increament;
-                       if (k<0) k = k+RGBLED_NUM;
-                       if (i==k) {
-                               sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), &led[i]);
-                       }
-               }
-       }
-       rgblight_set();
-       if (increament == 1) {
-               if (pos - 1 < 0) {
-                       pos = RGBLED_NUM-1;
-               } else {
-                       pos -= 1;
-               }
-       } else {
-               pos = (pos+1)%RGBLED_NUM;
-       }
-
+  static uint8_t pos = 0;
+  static uint16_t last_timer = 0;
+  uint8_t i, j;
+  int8_t k;
+  int8_t increment = 1;
+  if (interval % 2) {
+    increment = -1;
+  }
+  if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_SNAKE_INTERVALS[interval / 2])) {
+    return;
+  }
+  last_timer = timer_read();
+  for (i = 0; i < RGBLED_NUM; i++) {
+    led[i].r = 0;
+    led[i].g = 0;
+    led[i].b = 0;
+    for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
+      k = pos + j * increment;
+      if (k < 0) {
+        k = k + RGBLED_NUM;
+      }
+      if (i == k) {
+        sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), (LED_TYPE *)&led[i]);
+      }
+    }
+  }
+  rgblight_set();
+  if (increment == 1) {
+    if (pos - 1 < 0) {
+      pos = RGBLED_NUM - 1;
+    } else {
+      pos -= 1;
+    }
+  } else {
+    pos = (pos + 1) % RGBLED_NUM;
+  }
 }
-
 void rgblight_effect_knight(uint8_t interval) {
-       static int8_t pos=0;
-       static uint16_t last_timer = 0;
-       uint8_t i,j,cur;
-       int8_t k;
-       struct cRGB preled[RGBLED_NUM];
-       static int8_t increament = -1;
-       if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) return;
-       last_timer = timer_read();
-       for (i=0;i<RGBLED_NUM;i++) {
-               preled[i].r=0;
-               preled[i].g=0;
-               preled[i].b=0;
-               for (j=0;j<RGBLIGHT_EFFECT_KNIGHT_LENGTH;j++) {
-                       k = pos+j*increament;
-                       if (k<0) k = 0;
-                       if (k>=RGBLED_NUM) k=RGBLED_NUM-1;
-                       if (i==k) {
-                               sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, &preled[i]);
-                       }
-               }
-       }
-       if (RGBLIGHT_EFFECT_KNIGHT_OFFSET) {
-               for (i=0;i<RGBLED_NUM;i++) {
-                       cur = (i+RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM;
-                       led[i].r = preled[cur].r;
-                       led[i].g = preled[cur].g;
-                       led[i].b = preled[cur].b;
-               }
-       }
-       rgblight_set();
-       if (increament == 1) {
-               if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
-                       pos = 0- RGBLIGHT_EFFECT_KNIGHT_LENGTH;
-                       increament = -1;
-               } else {
-                       pos -= 1;
-               }
-       } else {
-               if (pos+1>RGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
-                       pos = RGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH-1;
-                       increament = 1;
-               } else {
-                       pos += 1;
-               }
-       }
-
-}
-
-#endif
\ No newline at end of file
+  static int8_t pos = 0;
+  static uint16_t last_timer = 0;
+  uint8_t i, j, cur;
+  int8_t k;
+  LED_TYPE preled[RGBLED_NUM];
+  static int8_t increment = -1;
+  if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) {
+    return;
+  }
+  last_timer = timer_read();
+  for (i = 0; i < RGBLED_NUM; i++) {
+    preled[i].r = 0;
+    preled[i].g = 0;
+    preled[i].b = 0;
+    for (j = 0; j < RGBLIGHT_EFFECT_KNIGHT_LENGTH; j++) {
+      k = pos + j * increment;
+      if (k < 0) {
+        k = 0;
+      }
+      if (k >= RGBLED_NUM) {
+        k = RGBLED_NUM - 1;
+      }
+      if (i == k) {
+        sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&preled[i]);
+      }
+    }
+  }
+  if (RGBLIGHT_EFFECT_KNIGHT_OFFSET) {
+    for (i = 0; i < RGBLED_NUM; i++) {
+      cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM;
+      led[i].r = preled[cur].r;
+      led[i].g = preled[cur].g;
+      led[i].b = preled[cur].b;
+    }
+  }
+  rgblight_set();
+  if (increment == 1) {
+    if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
+      pos = 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH;
+      increment = -1;
+    } else {
+      pos -= 1;
+    }
+  } else {
+    if (pos + 1 > RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
+      pos = RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1;
+      increment = 1;
+    } else {
+      pos += 1;
+    }
+  }
+}
+
+#endif
index def26c428cdf270ba14dc7f7e75ac4ed8fa25010..aa1d026e0e6e100c5ab7eef8d83cfc0d8725b6df 100644 (file)
@@ -1,8 +1,7 @@
 #ifndef RGBLIGHT_H
 #define RGBLIGHT_H
 
-
-#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+#ifdef RGBLIGHT_ANIMATIONS
        #define RGBLIGHT_MODES 23
 #else
        #define RGBLIGHT_MODES 1
 #endif
 
 #define RGBLED_TIMER_TOP F_CPU/(256*64)
+// #define RGBLED_TIMER_TOP 0xFF10
 
 #include <stdint.h>
 #include <stdbool.h>
 #include "eeconfig.h"
 #include "light_ws2812.h"
 
+extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM;
+extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_SNAKE_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_KNIGHT_INTERVALS[3] PROGMEM;
+
 typedef union {
   uint32_t raw;
   struct {
@@ -55,9 +61,11 @@ void rgblight_init(void);
 void rgblight_increase(void);
 void rgblight_decrease(void);
 void rgblight_toggle(void);
+void rgblight_enable(void);
 void rgblight_step(void);
 void rgblight_mode(uint8_t mode);
 void rgblight_set(void);
+void rgblight_update_dword(uint32_t dword);
 void rgblight_increase_hue(void);
 void rgblight_decrease_hue(void);
 void rgblight_increase_sat(void);
@@ -72,10 +80,15 @@ void eeconfig_update_rgblight(uint32_t val);
 void eeconfig_update_rgblight_default(void);
 void eeconfig_debug_rgblight(void);
 
-void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1);
-void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1);
+void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
+void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1);
 void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
 
+#define EZ_RGB(val) rgblight_show_solid_color((val >> 16) & 0xFF, (val >> 8) & 0xFF, val & 0xFF)
+void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b);
+
+void rgblight_task(void);
+
 void rgblight_timer_init(void);
 void rgblight_timer_enable(void);
 void rgblight_timer_disable(void);
index fb4c45a8dc04a87549844e52cfa6adbec55ecc87..2c87d64c29c14b395e600ec528ccbdf1891c8d7f 100644 (file)
@@ -31,9 +31,6 @@ SOFTWARE.
 // https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing
 // http://www.stuartcheshire.org/papers/COBSforToN.pdf
 
-#define MAX_FRAME_SIZE 1024
-#define NUM_LINKS 2
-
 typedef struct byte_stuffer_state {
     uint16_t next_zero;
     uint16_t data_pos;
index 2cc88beb42a1144584fe0f568684ab6cc8bca6f9..97e8968564a4e9e77f09f6ba85ae67d7f1d55387 100644 (file)
@@ -27,6 +27,9 @@ SOFTWARE.
 
 #include <stdint.h>
 
+#define MAX_FRAME_SIZE 1024
+#define NUM_LINKS 2
+
 void init_byte_stuffer(void);
 void byte_stuffer_recv_byte(uint8_t link, uint8_t data);
 void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size);
index f418d11ceb68af37034670b953f80d8dcbb33768..ff795fe20176df00e21b94d8bbe2b3f398d5f623 100644 (file)
@@ -31,6 +31,10 @@ SOFTWARE.
 static remote_object_t* remote_objects[MAX_REMOTE_OBJECTS];
 static uint32_t num_remote_objects = 0;
 
+void reinitialize_serial_link_transport(void) {
+    num_remote_objects = 0;
+}
+
 void add_remote_objects(remote_object_t** _remote_objects, uint32_t _num_remote_objects) {
     unsigned int i;
     for(i=0;i<_num_remote_objects;i++) {
index 9a052d880956c0d6fe54896d90276f2b06603407..2c5d890b219aa02bd15845922c57d82e604fa53f 100644 (file)
@@ -82,7 +82,7 @@ typedef struct { \
         remote_object_t* obj = (remote_object_t*)&remote_object_##name; \
         uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\
         triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \
-        return triple_buffer_read_internal(obj->object_size, tb); \
+        return (type*)triple_buffer_read_internal(obj->object_size, tb); \
     }
 
 #define MASTER_TO_SINGLE_SLAVE_OBJECT(name, type) \
@@ -112,7 +112,7 @@ typedef struct { \
         remote_object_t* obj = (remote_object_t*)&remote_object_##name; \
         uint8_t* start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size);\
         triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \
-        return triple_buffer_read_internal(obj->object_size, tb); \
+        return (type*)triple_buffer_read_internal(obj->object_size, tb); \
     }
 
 #define SLAVE_TO_MASTER_OBJECT(name, type) \
@@ -139,12 +139,13 @@ typedef struct { \
         uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\
         start+=slave * REMOTE_OBJECT_SIZE(obj->object_size); \
         triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \
-        return triple_buffer_read_internal(obj->object_size, tb); \
+        return (type*)triple_buffer_read_internal(obj->object_size, tb); \
     }
 
 #define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name
 
 void add_remote_objects(remote_object_t** remote_objects, uint32_t num_remote_objects);
+void reinitialize_serial_link_transport(void);
 void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size);
 void update_transport(void);
 
diff --git a/quantum/serial_link/tests/byte_stuffer_tests.c b/quantum/serial_link/tests/byte_stuffer_tests.c
deleted file mode 100644 (file)
index 64b170e..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/byte_stuffer.h"
-#include "serial_link/protocol/byte_stuffer.c"
-#include "serial_link/protocol/frame_validator.h"
-#include "serial_link/protocol/physical.h"
-
-static uint8_t sent_data[MAX_FRAME_SIZE*2];
-static uint16_t sent_data_size;
-
-Describe(ByteStuffer);
-BeforeEach(ByteStuffer) {
-    init_byte_stuffer();
-    sent_data_size = 0;
-}
-AfterEach(ByteStuffer) {}
-
-void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) {
-    mock(data, size);
-}
-
-void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
-    memcpy(sent_data + sent_data_size, data, size);
-    sent_data_size += size;
-}
-
-Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) {
-    never_expect(validator_recv_frame);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) {
-    never_expect(validator_recv_frame);
-    byte_stuffer_recv_byte(0, 0xFF);
-}
-
-Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) {
-    never_expect(validator_recv_frame);
-    byte_stuffer_recv_byte(0, 0x4A);
-}
-
-Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) {
-    never_expect(validator_recv_frame);
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_single_byte_valid_frame) {
-    uint8_t expected[] = {0x37};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(1)),
-        when(data, is_equal_to_contents_of(expected, 1))
-    );
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 0x37);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_three_bytes_valid_frame) {
-    uint8_t expected[] = {0x37, 0x99, 0xFF};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(3)),
-        when(data, is_equal_to_contents_of(expected, 3))
-    );
-    byte_stuffer_recv_byte(0, 4);
-    byte_stuffer_recv_byte(0, 0x37);
-    byte_stuffer_recv_byte(0, 0x99);
-    byte_stuffer_recv_byte(0, 0xFF);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_single_zero_valid_frame) {
-    uint8_t expected[] = {0};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(1)),
-        when(data, is_equal_to_contents_of(expected, 1))
-    );
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_valid_frame_with_zeroes) {
-    uint8_t expected[] = {5, 0, 3, 0};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(expected, 4))
-    );
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 5);
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 3);
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_two_valid_frames) {
-    uint8_t expected1[] = {5, 0};
-    uint8_t expected2[] = {3};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(2)),
-        when(data, is_equal_to_contents_of(expected1, 2))
-    );
-    expect(validator_recv_frame,
-        when(size, is_equal_to(1)),
-        when(data, is_equal_to_contents_of(expected2, 1))
-    );
-    byte_stuffer_recv_byte(1, 2);
-    byte_stuffer_recv_byte(1, 5);
-    byte_stuffer_recv_byte(1, 1);
-    byte_stuffer_recv_byte(1, 0);
-    byte_stuffer_recv_byte(1, 2);
-    byte_stuffer_recv_byte(1, 3);
-    byte_stuffer_recv_byte(1, 0);
-}
-
-Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) {
-    uint8_t expected[] = {5, 7};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(2)),
-        when(data, is_equal_to_contents_of(expected, 2))
-    );
-    byte_stuffer_recv_byte(1, 3);
-    byte_stuffer_recv_byte(1, 1);
-    byte_stuffer_recv_byte(1, 0);
-    byte_stuffer_recv_byte(1, 3);
-    byte_stuffer_recv_byte(1, 5);
-    byte_stuffer_recv_byte(1, 7);
-    byte_stuffer_recv_byte(1, 0);
-}
-
-Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) {
-    uint8_t expected[] = {5, 7};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(2)),
-        when(data, is_equal_to_contents_of(expected, 2))
-    );
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 9);
-    byte_stuffer_recv_byte(0, 4); // This should have been zero
-    byte_stuffer_recv_byte(0, 0);
-    byte_stuffer_recv_byte(0, 3);
-    byte_stuffer_recv_byte(0, 5);
-    byte_stuffer_recv_byte(0, 7);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) {
-    uint8_t expected[254];
-    int i;
-    for (i=0;i<254;i++) {
-        expected[i] = i + 1;
-    }
-    expect(validator_recv_frame,
-        when(size, is_equal_to(254)),
-        when(data, is_equal_to_contents_of(expected, 254))
-    );
-    byte_stuffer_recv_byte(0, 0xFF);
-    for (i=0;i<254;i++) {
-        byte_stuffer_recv_byte(0, i+1);
-    }
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) {
-    uint8_t expected[255];
-    int i;
-    for (i=0;i<254;i++) {
-        expected[i] = i + 1;
-    }
-    expected[254] = 7;
-    expect(validator_recv_frame,
-        when(size, is_equal_to(255)),
-        when(data, is_equal_to_contents_of(expected, 255))
-    );
-    byte_stuffer_recv_byte(0, 0xFF);
-    for (i=0;i<254;i++) {
-        byte_stuffer_recv_byte(0, i+1);
-    }
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 7);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) {
-    uint8_t expected[255];
-    int i;
-    for (i=0;i<254;i++) {
-        expected[i] = i + 1;
-    }
-    expected[254] = 0;
-    expect(validator_recv_frame,
-        when(size, is_equal_to(255)),
-        when(data, is_equal_to_contents_of(expected, 255))
-    );
-    byte_stuffer_recv_byte(0, 0xFF);
-    for (i=0;i<254;i++) {
-        byte_stuffer_recv_byte(0, i+1);
-    }
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_two_long_frames_and_some_more) {
-    uint8_t expected[515];
-    int i;
-    int j;
-    for (j=0;j<2;j++) {
-        for (i=0;i<254;i++) {
-            expected[i+254*j] = i + 1;
-        }
-    }
-    for (i=0;i<7;i++) {
-        expected[254*2+i] = i + 1;
-    }
-    expect(validator_recv_frame,
-        when(size, is_equal_to(515)),
-        when(data, is_equal_to_contents_of(expected, 510))
-    );
-    byte_stuffer_recv_byte(0, 0xFF);
-    for (i=0;i<254;i++) {
-        byte_stuffer_recv_byte(0, i+1);
-    }
-    byte_stuffer_recv_byte(0, 0xFF);
-    for (i=0;i<254;i++) {
-        byte_stuffer_recv_byte(0, i+1);
-    }
-    byte_stuffer_recv_byte(0, 8);
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 3);
-    byte_stuffer_recv_byte(0, 4);
-    byte_stuffer_recv_byte(0, 5);
-    byte_stuffer_recv_byte(0, 6);
-    byte_stuffer_recv_byte(0, 7);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) {
-    uint8_t expected[MAX_FRAME_SIZE] = {};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(MAX_FRAME_SIZE)),
-        when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE))
-    );
-    int i;
-    byte_stuffer_recv_byte(0, 1);
-    for(i=0;i<MAX_FRAME_SIZE;i++) {
-       byte_stuffer_recv_byte(0, 1);
-    }
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) {
-    uint8_t expected[1] = {0};
-    never_expect(validator_recv_frame);
-    int i;
-    byte_stuffer_recv_byte(0, 1);
-    for(i=0;i<MAX_FRAME_SIZE;i++) {
-       byte_stuffer_recv_byte(0, 1);
-    }
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, received_frame_is_aborted_when_its_too_long) {
-    uint8_t expected[1] = {1};
-    expect(validator_recv_frame,
-        when(size, is_equal_to(1)),
-        when(data, is_equal_to_contents_of(expected, 1))
-    );
-    int i;
-    byte_stuffer_recv_byte(0, 1);
-    for(i=0;i<MAX_FRAME_SIZE;i++) {
-       byte_stuffer_recv_byte(0, 1);
-    }
-    byte_stuffer_recv_byte(0, 2);
-    byte_stuffer_recv_byte(0, 1);
-    byte_stuffer_recv_byte(0, 0);
-}
-
-Ensure(ByteStuffer, does_nothing_when_sending_zero_size_frame) {
-    assert_that(sent_data_size, is_equal_to(0));
-    byte_stuffer_send_frame(0, NULL, 0);
-}
-
-Ensure(ByteStuffer, send_one_byte_frame) {
-    uint8_t data[] = {5};
-    byte_stuffer_send_frame(1, data, 1);
-    uint8_t expected[] = {2, 5, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_two_byte_frame) {
-    uint8_t data[] = {5, 0x77};
-    byte_stuffer_send_frame(0, data, 2);
-    uint8_t expected[] = {3, 5, 0x77, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_one_byte_frame_with_zero) {
-    uint8_t data[] = {0};
-    byte_stuffer_send_frame(0, data, 1);
-    uint8_t expected[] = {1, 1, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_two_byte_frame_starting_with_zero) {
-    uint8_t data[] = {0, 9};
-    byte_stuffer_send_frame(1, data, 2);
-    uint8_t expected[] = {1, 2, 9, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) {
-    uint8_t data[] = {9, 0};
-    byte_stuffer_send_frame(1, data, 2);
-    uint8_t expected[] = {2, 9, 1, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_three_byte_frame_zero_in_the_middle) {
-    uint8_t data[] = {9, 0, 0x68};
-    byte_stuffer_send_frame(0, data, 3);
-    uint8_t expected[] = {2, 9, 2, 0x68, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_three_byte_frame_data_in_the_middle) {
-    uint8_t data[] = {0, 0x55, 0};
-    byte_stuffer_send_frame(0, data, 3);
-    uint8_t expected[] = {1, 2, 0x55, 1, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_three_byte_frame_with_all_zeroes) {
-    uint8_t data[] = {0, 0, 0};
-    byte_stuffer_send_frame(0, data, 3);
-    uint8_t expected[] = {1, 1, 1, 1, 0};
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_frame_with_254_non_zeroes) {
-    uint8_t data[254];
-    int i;
-    for(i=0;i<254;i++) {
-        data[i] = i + 1;
-    }
-    byte_stuffer_send_frame(0, data, 254);
-    uint8_t expected[256];
-    expected[0] = 0xFF;
-    for(i=1;i<255;i++) {
-        expected[i] = i;
-    }
-    expected[255] = 0;
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_frame_with_255_non_zeroes) {
-    uint8_t data[255];
-    int i;
-    for(i=0;i<255;i++) {
-        data[i] = i + 1;
-    }
-    byte_stuffer_send_frame(0, data, 255);
-    uint8_t expected[258];
-    expected[0] = 0xFF;
-    for(i=1;i<255;i++) {
-        expected[i] = i;
-    }
-    expected[255] = 2;
-    expected[256] = 255;
-    expected[257] = 0;
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) {
-    uint8_t data[255];
-    int i;
-    for(i=0;i<254;i++) {
-        data[i] = i + 1;
-    }
-    data[255] = 0;
-    byte_stuffer_send_frame(0, data, 255);
-    uint8_t expected[258];
-    expected[0] = 0xFF;
-    for(i=1;i<255;i++) {
-        expected[i] = i;
-    }
-    expected[255] = 1;
-    expected[256] = 1;
-    expected[257] = 0;
-    assert_that(sent_data_size, is_equal_to(sizeof(expected)));
-    assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
-}
-
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_small_packet) {
-    uint8_t original_data[] = { 1, 2, 3};
-    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
-    expect(validator_recv_frame,
-        when(size, is_equal_to(sizeof(original_data))),
-        when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
-    );
-    int i;
-    for(i=0;i<sent_data_size;i++) {
-       byte_stuffer_recv_byte(1, sent_data[i]);
-    }
-}
-
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) {
-    uint8_t original_data[] = { 1, 0, 3, 0, 0, 9};
-    byte_stuffer_send_frame(1, original_data, sizeof(original_data));
-    expect(validator_recv_frame,
-        when(size, is_equal_to(sizeof(original_data))),
-        when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
-    );
-    int i;
-    for(i=0;i<sent_data_size;i++) {
-       byte_stuffer_recv_byte(0, sent_data[i]);
-    }
-}
-
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) {
-    uint8_t original_data[254];
-    int i;
-    for(i=0;i<254;i++) {
-        original_data[i] = i + 1;
-    }
-    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
-    expect(validator_recv_frame,
-        when(size, is_equal_to(sizeof(original_data))),
-        when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
-    );
-    for(i=0;i<sent_data_size;i++) {
-       byte_stuffer_recv_byte(1, sent_data[i]);
-    }
-}
-
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) {
-    uint8_t original_data[256];
-    int i;
-    for(i=0;i<254;i++) {
-        original_data[i] = i + 1;
-    }
-    original_data[254] = 22;
-    original_data[255] = 23;
-    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
-    expect(validator_recv_frame,
-        when(size, is_equal_to(sizeof(original_data))),
-        when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
-    );
-    for(i=0;i<sent_data_size;i++) {
-       byte_stuffer_recv_byte(1, sent_data[i]);
-    }
-}
-
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) {
-    uint8_t original_data[255];
-    int i;
-    for(i=0;i<254;i++) {
-        original_data[i] = i + 1;
-    }
-    original_data[254] = 0;
-    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
-    expect(validator_recv_frame,
-        when(size, is_equal_to(sizeof(original_data))),
-        when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
-    );
-    for(i=0;i<sent_data_size;i++) {
-       byte_stuffer_recv_byte(1, sent_data[i]);
-    }
-}
diff --git a/quantum/serial_link/tests/byte_stuffer_tests.cpp b/quantum/serial_link/tests/byte_stuffer_tests.cpp
new file mode 100644 (file)
index 0000000..ff49d72
--- /dev/null
@@ -0,0 +1,483 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+#include <vector>
+#include <algorithm>
+extern "C" {
+#include "serial_link/protocol/byte_stuffer.h"
+#include "serial_link/protocol/frame_validator.h"
+#include "serial_link/protocol/physical.h"
+}
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+class ByteStuffer : public ::testing::Test{
+public:
+    ByteStuffer() {
+        Instance = this;
+        init_byte_stuffer();
+    }
+
+    ~ByteStuffer() {
+        Instance = nullptr;
+    }
+
+    MOCK_METHOD3(validator_recv_frame, void (uint8_t link, uint8_t* data, uint16_t size));
+
+    void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+        std::copy(data, data + size, std::back_inserter(sent_data));
+    }
+    std::vector<uint8_t> sent_data;
+
+    static ByteStuffer* Instance;
+};
+
+ByteStuffer* ByteStuffer::Instance = nullptr;
+
+extern "C" {
+    void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) {
+        ByteStuffer::Instance->validator_recv_frame(link, data, size);
+    }
+
+    void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+        ByteStuffer::Instance->send_data(link, data, size);
+    }
+}
+
+TEST_F(ByteStuffer, receives_no_frame_for_a_single_zero_byte) {
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .Times(0);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_no_frame_for_a_single_FF_byte) {
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .Times(0);
+    byte_stuffer_recv_byte(0, 0xFF);
+}
+
+TEST_F(ByteStuffer, receives_no_frame_for_a_single_random_byte) {
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .Times(0);
+    byte_stuffer_recv_byte(0, 0x4A);
+}
+
+TEST_F(ByteStuffer, receives_no_frame_for_a_zero_length_frame) {
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .Times(0);
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_single_byte_valid_frame) {
+    uint8_t expected[] = {0x37};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 0x37);
+    byte_stuffer_recv_byte(0, 0);
+}
+TEST_F(ByteStuffer, receives_three_bytes_valid_frame) {
+    uint8_t expected[] = {0x37, 0x99, 0xFF};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 4);
+    byte_stuffer_recv_byte(0, 0x37);
+    byte_stuffer_recv_byte(0, 0x99);
+    byte_stuffer_recv_byte(0, 0xFF);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_single_zero_valid_frame) {
+    uint8_t expected[] = {0};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_valid_frame_with_zeroes) {
+    uint8_t expected[] = {5, 0, 3, 0};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 5);
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 3);
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+
+TEST_F(ByteStuffer, receives_two_valid_frames) {
+    uint8_t expected1[] = {5, 0};
+    uint8_t expected2[] = {3};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected1)));
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected2)));
+    byte_stuffer_recv_byte(1, 2);
+    byte_stuffer_recv_byte(1, 5);
+    byte_stuffer_recv_byte(1, 1);
+    byte_stuffer_recv_byte(1, 0);
+    byte_stuffer_recv_byte(1, 2);
+    byte_stuffer_recv_byte(1, 3);
+    byte_stuffer_recv_byte(1, 0);
+}
+
+TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_zero) {
+    uint8_t expected[] = {5, 7};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(1, 3);
+    byte_stuffer_recv_byte(1, 1);
+    byte_stuffer_recv_byte(1, 0);
+    byte_stuffer_recv_byte(1, 3);
+    byte_stuffer_recv_byte(1, 5);
+    byte_stuffer_recv_byte(1, 7);
+    byte_stuffer_recv_byte(1, 0);
+}
+
+TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) {
+    uint8_t expected[] = {5, 7};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 9);
+    byte_stuffer_recv_byte(0, 4); // This should have been zero
+    byte_stuffer_recv_byte(0, 0);
+    byte_stuffer_recv_byte(0, 3);
+    byte_stuffer_recv_byte(0, 5);
+    byte_stuffer_recv_byte(0, 7);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) {
+    uint8_t expected[254];
+    int i;
+    for (i=0;i<254;i++) {
+        expected[i] = i + 1;
+    }
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 0xFF);
+    for (i=0;i<254;i++) {
+        byte_stuffer_recv_byte(0, i+1);
+    }
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) {
+    uint8_t expected[255];
+    int i;
+    for (i=0;i<254;i++) {
+        expected[i] = i + 1;
+    }
+    expected[254] = 7;
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 0xFF);
+    for (i=0;i<254;i++) {
+        byte_stuffer_recv_byte(0, i+1);
+    }
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 7);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) {
+    uint8_t expected[255];
+    int i;
+    for (i=0;i<254;i++) {
+        expected[i] = i + 1;
+    }
+    expected[254] = 0;
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 0xFF);
+    for (i=0;i<254;i++) {
+        byte_stuffer_recv_byte(0, i+1);
+    }
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_two_long_frames_and_some_more) {
+    uint8_t expected[515];
+    int i;
+    int j;
+    for (j=0;j<2;j++) {
+        for (i=0;i<254;i++) {
+            expected[i+254*j] = i + 1;
+        }
+    }
+    for (i=0;i<7;i++) {
+        expected[254*2+i] = i + 1;
+    }
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    byte_stuffer_recv_byte(0, 0xFF);
+    for (i=0;i<254;i++) {
+        byte_stuffer_recv_byte(0, i+1);
+    }
+    byte_stuffer_recv_byte(0, 0xFF);
+    for (i=0;i<254;i++) {
+        byte_stuffer_recv_byte(0, i+1);
+    }
+    byte_stuffer_recv_byte(0, 8);
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 3);
+    byte_stuffer_recv_byte(0, 4);
+    byte_stuffer_recv_byte(0, 5);
+    byte_stuffer_recv_byte(0, 6);
+    byte_stuffer_recv_byte(0, 7);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) {
+    uint8_t expected[MAX_FRAME_SIZE] = {};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    int i;
+    byte_stuffer_recv_byte(0, 1);
+    for(i=0;i<MAX_FRAME_SIZE;i++) {
+       byte_stuffer_recv_byte(0, 1);
+    }
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) {
+    uint8_t expected[1] = {0};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .Times(0);
+    int i;
+    byte_stuffer_recv_byte(0, 1);
+    for(i=0;i<MAX_FRAME_SIZE;i++) {
+       byte_stuffer_recv_byte(0, 1);
+    }
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, received_frame_is_aborted_when_its_too_long) {
+    uint8_t expected[1] = {1};
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    int i;
+    byte_stuffer_recv_byte(0, 1);
+    for(i=0;i<MAX_FRAME_SIZE;i++) {
+       byte_stuffer_recv_byte(0, 1);
+    }
+    byte_stuffer_recv_byte(0, 2);
+    byte_stuffer_recv_byte(0, 1);
+    byte_stuffer_recv_byte(0, 0);
+}
+
+TEST_F(ByteStuffer, does_nothing_when_sending_zero_size_frame) {
+    EXPECT_EQ(sent_data.size(), 0);
+    byte_stuffer_send_frame(0, NULL, 0);
+}
+
+TEST_F(ByteStuffer, send_one_byte_frame) {
+    uint8_t data[] = {5};
+    byte_stuffer_send_frame(1, data, 1);
+    uint8_t expected[] = {2, 5, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_two_byte_frame) {
+    uint8_t data[] = {5, 0x77};
+    byte_stuffer_send_frame(0, data, 2);
+    uint8_t expected[] = {3, 5, 0x77, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_one_byte_frame_with_zero) {
+    uint8_t data[] = {0};
+    byte_stuffer_send_frame(0, data, 1);
+    uint8_t expected[] = {1, 1, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_zero) {
+    uint8_t data[] = {0, 9};
+    byte_stuffer_send_frame(1, data, 2);
+    uint8_t expected[] = {1, 2, 9, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) {
+    uint8_t data[] = {9, 0};
+    byte_stuffer_send_frame(1, data, 2);
+    uint8_t expected[] = {2, 9, 1, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_three_byte_frame_zero_in_the_middle) {
+    uint8_t data[] = {9, 0, 0x68};
+    byte_stuffer_send_frame(0, data, 3);
+    uint8_t expected[] = {2, 9, 2, 0x68, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_three_byte_frame_data_in_the_middle) {
+    uint8_t data[] = {0, 0x55, 0};
+    byte_stuffer_send_frame(0, data, 3);
+    uint8_t expected[] = {1, 2, 0x55, 1, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_three_byte_frame_with_all_zeroes) {
+    uint8_t data[] = {0, 0, 0};
+    byte_stuffer_send_frame(0, data, 3);
+    uint8_t expected[] = {1, 1, 1, 1, 0};
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes) {
+    uint8_t data[254];
+    int i;
+    for(i=0;i<254;i++) {
+        data[i] = i + 1;
+    }
+    byte_stuffer_send_frame(0, data, 254);
+    uint8_t expected[256];
+    expected[0] = 0xFF;
+    for(i=1;i<255;i++) {
+        expected[i] = i;
+    }
+    expected[255] = 0;
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_frame_with_255_non_zeroes) {
+    uint8_t data[255];
+    int i;
+    for(i=0;i<255;i++) {
+        data[i] = i + 1;
+    }
+    byte_stuffer_send_frame(0, data, 255);
+    uint8_t expected[258];
+    expected[0] = 0xFF;
+    for(i=1;i<255;i++) {
+        expected[i] = i;
+    }
+    expected[255] = 2;
+    expected[256] = 255;
+    expected[257] = 0;
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) {
+    uint8_t data[255];
+    int i;
+    for(i=0;i<254;i++) {
+        data[i] = i + 1;
+    }
+    data[254] = 0;
+    byte_stuffer_send_frame(0, data, 255);
+    uint8_t expected[258];
+    expected[0] = 0xFF;
+    for(i=1;i<255;i++) {
+        expected[i] = i;
+    }
+    expected[255] = 1;
+    expected[256] = 1;
+    expected[257] = 0;
+    EXPECT_THAT(sent_data, ElementsAreArray(expected));
+}
+
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet) {
+    uint8_t original_data[] = { 1, 2, 3};
+    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(original_data)));
+    int i;
+    for(auto& d : sent_data) {
+       byte_stuffer_recv_byte(1, d);
+    }
+}
+
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) {
+    uint8_t original_data[] = { 1, 0, 3, 0, 0, 9};
+    byte_stuffer_send_frame(1, original_data, sizeof(original_data));
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(original_data)));
+    int i;
+    for(auto& d : sent_data) {
+       byte_stuffer_recv_byte(1, d);
+    }
+}
+
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) {
+    uint8_t original_data[254];
+    int i;
+    for(i=0;i<254;i++) {
+        original_data[i] = i + 1;
+    }
+    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(original_data)));
+    for(auto& d : sent_data) {
+       byte_stuffer_recv_byte(1, d);
+    }
+}
+
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) {
+    uint8_t original_data[256];
+    int i;
+    for(i=0;i<254;i++) {
+        original_data[i] = i + 1;
+    }
+    original_data[254] = 22;
+    original_data[255] = 23;
+    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(original_data)));
+    for(auto& d : sent_data) {
+       byte_stuffer_recv_byte(1, d);
+    }
+}
+
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) {
+    uint8_t original_data[255];
+    int i;
+    for(i=0;i<254;i++) {
+        original_data[i] = i + 1;
+    }
+    original_data[254] = 0;
+    byte_stuffer_send_frame(0, original_data, sizeof(original_data));
+    EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(original_data)));
+    for(auto& d : sent_data) {
+       byte_stuffer_recv_byte(1, d);
+    }
+}
diff --git a/quantum/serial_link/tests/frame_router_tests.c b/quantum/serial_link/tests/frame_router_tests.c
deleted file mode 100644 (file)
index 6c806fa..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/byte_stuffer.c"
-#include "serial_link/protocol/frame_validator.c"
-#include "serial_link/protocol/frame_router.c"
-#include "serial_link/protocol/transport.h"
-
-static uint8_t received_data[256];
-static uint16_t received_data_size;
-
-typedef struct {
-    uint8_t sent_data[256];
-    uint16_t sent_data_size;
-} receive_buffer_t;
-
-typedef struct {
-    receive_buffer_t send_buffers[2];
-} router_buffer_t;
-
-router_buffer_t router_buffers[8];
-
-router_buffer_t* current_router_buffer;
-
-
-Describe(FrameRouter);
-BeforeEach(FrameRouter) {
-    init_byte_stuffer();
-    memset(router_buffers, 0, sizeof(router_buffers));
-    current_router_buffer = 0;
-}
-AfterEach(FrameRouter) {}
-
-typedef struct {
-    uint32_t data;
-    uint8_t extra[16];
-} frame_buffer_t;
-
-
-void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
-    receive_buffer_t* buffer = &current_router_buffer->send_buffers[link];
-    memcpy(buffer->sent_data + buffer->sent_data_size, data, size);
-    buffer->sent_data_size += size;
-}
-
-static void receive_data(uint8_t link, uint8_t* data, uint16_t size) {
-    int i;
-    for(i=0;i<size;i++) {
-        byte_stuffer_recv_byte(link, data[i]);
-    }
-}
-
-static void activate_router(uint8_t num) {
-    current_router_buffer = router_buffers + num;
-    router_set_master(num==0);
-}
-
-static void simulate_transport(uint8_t from, uint8_t to) {
-   activate_router(to);
-   if (from > to) {
-       receive_data(DOWN_LINK,
-               router_buffers[from].send_buffers[UP_LINK].sent_data,
-               router_buffers[from].send_buffers[UP_LINK].sent_data_size);
-   }
-   else if(to > from) {
-       receive_data(UP_LINK,
-               router_buffers[from].send_buffers[DOWN_LINK].sent_data,
-               router_buffers[from].send_buffers[DOWN_LINK].sent_data_size);
-   }
-}
-
-void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) {
-    mock(from, data, size);
-}
-
-
-Ensure(FrameRouter, master_broadcast_is_received_by_everyone) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(0);
-    router_send_frame(0xFF, (uint8_t*)&data, 4);
-    assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
-    expect(transport_recv_frame,
-        when(from, is_equal_to(0)),
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(&data.data, 4))
-    );
-    simulate_transport(0, 1);
-    assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
-    expect(transport_recv_frame,
-        when(from, is_equal_to(0)),
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(&data.data, 4))
-    );
-    simulate_transport(1, 2);
-    assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, master_send_is_received_by_targets) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(0);
-    router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4);
-    assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
-    simulate_transport(0, 1);
-    assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
-    expect(transport_recv_frame,
-        when(from, is_equal_to(0)),
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(&data.data, 4))
-    );
-    simulate_transport(1, 2);
-    assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
-    expect(transport_recv_frame,
-        when(from, is_equal_to(0)),
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(&data.data, 4))
-    );
-    simulate_transport(2, 3);
-    assert_that(router_buffers[3].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[3].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, first_link_sends_to_master) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(1);
-    router_send_frame(0, (uint8_t*)&data, 4);
-    assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
-    expect(transport_recv_frame,
-        when(from, is_equal_to(1)),
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(&data.data, 4))
-    );
-    simulate_transport(1, 0);
-    assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-    assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, second_link_sends_to_master) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(2);
-    router_send_frame(0, (uint8_t*)&data, 4);
-    assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
-    simulate_transport(2, 1);
-    assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
-    expect(transport_recv_frame,
-        when(from, is_equal_to(2)),
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(&data.data, 4))
-    );
-    simulate_transport(1, 0);
-    assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-    assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, master_sends_to_master_does_nothing) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(0);
-    router_send_frame(0, (uint8_t*)&data, 4);
-    assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-    assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, link_sends_to_other_link_does_nothing) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(1);
-    router_send_frame(2, (uint8_t*)&data, 4);
-    assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-    assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, master_receives_on_uplink_does_nothing) {
-    frame_buffer_t data;
-    data.data = 0xAB7055BB;
-    activate_router(1);
-    router_send_frame(0, (uint8_t*)&data, 4);
-    assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
-    assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
-    never_expect(transport_recv_frame);
-    activate_router(0);
-    receive_data(UP_LINK,
-        router_buffers[1].send_buffers[UP_LINK].sent_data,
-        router_buffers[1].send_buffers[UP_LINK].sent_data_size);
-    assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-    assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-}
diff --git a/quantum/serial_link/tests/frame_router_tests.cpp b/quantum/serial_link/tests/frame_router_tests.cpp
new file mode 100644 (file)
index 0000000..2bd5bf8
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+#include <array>
+extern "C" {
+    #include "serial_link/protocol/transport.h"
+    #include "serial_link/protocol/byte_stuffer.h"
+    #include "serial_link/protocol/frame_router.h"
+}
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+class FrameRouter : public testing::Test {
+public:
+    FrameRouter() :
+        current_router_buffer(nullptr)
+    {
+        Instance = this;
+        init_byte_stuffer();
+    }
+
+    ~FrameRouter() {
+        Instance = nullptr;
+    }
+
+    void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+        auto& buffer = current_router_buffer->send_buffers[link];
+        std::copy(data, data + size, std::back_inserter(buffer));
+    }
+
+    void receive_data(uint8_t link, uint8_t* data, uint16_t size) {
+        int i;
+        for(i=0;i<size;i++) {
+            byte_stuffer_recv_byte(link, data[i]);
+        }
+    }
+
+    void activate_router(uint8_t num) {
+        current_router_buffer = router_buffers + num;
+        router_set_master(num==0);
+    }
+
+    void simulate_transport(uint8_t from, uint8_t to) {
+       activate_router(to);
+       if (from > to) {
+           receive_data(DOWN_LINK,
+                   router_buffers[from].send_buffers[UP_LINK].data(),
+                   router_buffers[from].send_buffers[UP_LINK].size());
+       }
+       else if(to > from) {
+           receive_data(UP_LINK,
+                   router_buffers[from].send_buffers[DOWN_LINK].data(),
+                   router_buffers[from].send_buffers[DOWN_LINK].size());
+       }
+    }
+
+    MOCK_METHOD3(transport_recv_frame, void (uint8_t from, uint8_t* data, uint16_t size));
+
+    std::vector<uint8_t> received_data;
+
+    struct router_buffer {
+        std::vector<uint8_t> send_buffers[2];
+    };
+
+    router_buffer router_buffers[8];
+    router_buffer* current_router_buffer;
+
+    static FrameRouter* Instance;
+};
+
+FrameRouter* FrameRouter::Instance = nullptr;
+
+
+typedef struct {
+    std::array<uint8_t, 4> data;
+    uint8_t extra[16];
+} frame_buffer_t;
+
+
+extern "C" {
+    void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+        FrameRouter::Instance->send_data(link, data, size);
+    }
+
+
+    void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) {
+        FrameRouter::Instance->transport_recv_frame(from, data, size);
+    }
+}
+
+TEST_F(FrameRouter, master_broadcast_is_received_by_everyone) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(0);
+    router_send_frame(0xFF, (uint8_t*)&data, 4);
+    EXPECT_GT(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+    EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data.data)));
+    simulate_transport(0, 1);
+    EXPECT_GT(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+
+    EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data.data)));
+    simulate_transport(1, 2);
+    EXPECT_GT(router_buffers[2].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[2].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, master_send_is_received_by_targets) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(0);
+    router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4);
+    EXPECT_GT(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+
+    simulate_transport(0, 1);
+    EXPECT_GT(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+
+    EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data.data)));
+    simulate_transport(1, 2);
+    EXPECT_GT(router_buffers[2].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[2].send_buffers[UP_LINK].size(), 0);
+
+    EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data.data)));
+    simulate_transport(2, 3);
+    EXPECT_GT(router_buffers[3].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[3].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, first_link_sends_to_master) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(1);
+    router_send_frame(0, (uint8_t*)&data, 4);
+    EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+
+    EXPECT_CALL(*this, transport_recv_frame(1, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data.data)));
+    simulate_transport(1, 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, second_link_sends_to_master) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(2);
+    router_send_frame(0, (uint8_t*)&data, 4);
+    EXPECT_GT(router_buffers[2].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[2].send_buffers[DOWN_LINK].size(), 0);
+
+    simulate_transport(2, 1);
+    EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+
+    EXPECT_CALL(*this, transport_recv_frame(2, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data.data)));
+    simulate_transport(1, 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, master_sends_to_master_does_nothing) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(0);
+    router_send_frame(0, (uint8_t*)&data, 4);
+    EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, link_sends_to_other_link_does_nothing) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(1);
+    router_send_frame(2, (uint8_t*)&data, 4);
+    EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, master_receives_on_uplink_does_nothing) {
+    frame_buffer_t data;
+    data.data = {0xAB, 0x70, 0x55, 0xBB};
+    activate_router(1);
+    router_send_frame(0, (uint8_t*)&data, 4);
+    EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+
+    EXPECT_CALL(*this, transport_recv_frame(_, _, _))
+        .Times(0);
+    activate_router(0);
+    receive_data(UP_LINK,
+        router_buffers[1].send_buffers[UP_LINK].data(),
+        router_buffers[1].send_buffers[UP_LINK].size());
+    EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+    EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+}
diff --git a/quantum/serial_link/tests/frame_validator_tests.c b/quantum/serial_link/tests/frame_validator_tests.c
deleted file mode 100644 (file)
index d20947e..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/frame_validator.c"
-
-void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) {
-    mock(data, size);
-}
-
-void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size) {
-    mock(data, size);
-}
-
-Describe(FrameValidator);
-BeforeEach(FrameValidator) {}
-AfterEach(FrameValidator) {}
-
-Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) {
-    never_expect(route_incoming_frame);
-    uint8_t data[] = {1, 2};
-    validator_recv_frame(0, 0, 1);
-    validator_recv_frame(0, data, 2);
-    validator_recv_frame(0, data, 3);
-    validator_recv_frame(0, data, 4);
-}
-
-Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) {
-    uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3};
-    expect(route_incoming_frame,
-        when(size, is_equal_to(1)),
-        when(data, is_equal_to_contents_of(data, 1))
-    );
-    validator_recv_frame(0, data, 5);
-}
-
-Ensure(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) {
-    uint8_t data[] = {0x44, 0, 0, 0, 0};
-    never_expect(route_incoming_frame);
-    validator_recv_frame(1, data, 5);
-}
-
-Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) {
-    uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA};
-    expect(route_incoming_frame,
-        when(size, is_equal_to(4)),
-        when(data, is_equal_to_contents_of(data, 4))
-    );
-    validator_recv_frame(1, data, 8);
-}
-
-Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) {
-    uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47};
-    expect(route_incoming_frame,
-        when(size, is_equal_to(5)),
-        when(data, is_equal_to_contents_of(data, 5))
-    );
-    validator_recv_frame(0, data, 9);
-}
-
-Ensure(FrameValidator, sends_one_byte_with_correct_crc) {
-    uint8_t original[] = {0x44, 0, 0, 0, 0};
-    uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3};
-    expect(byte_stuffer_send_frame,
-        when(size, is_equal_to(sizeof(expected))),
-        when(data, is_equal_to_contents_of(expected, sizeof(expected)))
-    );
-    validator_send_frame(0, original, 1);
-}
-
-Ensure(FrameValidator, sends_five_bytes_with_correct_crc) {
-    uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0};
-    uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47};
-    expect(byte_stuffer_send_frame,
-        when(size, is_equal_to(sizeof(expected))),
-        when(data, is_equal_to_contents_of(expected, sizeof(expected)))
-    );
-    validator_send_frame(0, original, 5);
-}
diff --git a/quantum/serial_link/tests/frame_validator_tests.cpp b/quantum/serial_link/tests/frame_validator_tests.cpp
new file mode 100644 (file)
index 0000000..9223af8
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+extern "C" {
+#include "serial_link/protocol/frame_validator.h"
+}
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+class FrameValidator : public testing::Test {
+public:
+    FrameValidator() {
+        Instance = this;
+    }
+
+    ~FrameValidator() {
+        Instance = nullptr;
+    }
+
+    MOCK_METHOD3(route_incoming_frame, void (uint8_t link, uint8_t* data, uint16_t size));
+    MOCK_METHOD3(byte_stuffer_send_frame, void (uint8_t link, uint8_t* data, uint16_t size));
+
+    static FrameValidator* Instance;
+};
+
+FrameValidator* FrameValidator::Instance = nullptr;
+
+extern "C" {
+void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) {
+    FrameValidator::Instance->route_incoming_frame(link, data, size);
+}
+
+void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size) {
+    FrameValidator::Instance->byte_stuffer_send_frame(link, data, size);
+}
+}
+
+TEST_F(FrameValidator, doesnt_validate_frames_under_5_bytes) {
+    EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+        .Times(0);
+    uint8_t data[] = {1, 2};
+    validator_recv_frame(0, 0, 1);
+    validator_recv_frame(0, data, 2);
+    validator_recv_frame(0, data, 3);
+    validator_recv_frame(0, data, 4);
+}
+
+TEST_F(FrameValidator, validates_one_byte_frame_with_correct_crc) {
+    uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3};
+    EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data, 1)));
+    validator_recv_frame(0, data, 5);
+}
+
+TEST_F(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) {
+    uint8_t data[] = {0x44, 0, 0, 0, 0};
+    EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+        .Times(0);
+    validator_recv_frame(1, data, 5);
+}
+
+TEST_F(FrameValidator, validates_four_byte_frame_with_correct_crc) {
+    uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA};
+    EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data, 4)));
+    validator_recv_frame(1, data, 8);
+}
+
+TEST_F(FrameValidator, validates_five_byte_frame_with_correct_crc) {
+    uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47};
+    EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(data, 5)));
+    validator_recv_frame(0, data, 9);
+}
+
+TEST_F(FrameValidator, sends_one_byte_with_correct_crc) {
+    uint8_t original[] = {0x44, 0, 0, 0, 0};
+    uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3};
+    EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    validator_send_frame(0, original, 1);
+}
+
+TEST_F(FrameValidator, sends_five_bytes_with_correct_crc) {
+    uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0};
+    uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47};
+    EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _))
+        .With(Args<1, 2>(ElementsAreArray(expected)));
+    validator_send_frame(0, original, 5);
+}
diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk
new file mode 100644 (file)
index 0000000..b81515b
--- /dev/null
@@ -0,0 +1,22 @@
+serial_link_byte_stuffer_SRC :=\
+       $(SERIAL_PATH)/tests/byte_stuffer_tests.cpp \
+       $(SERIAL_PATH)/protocol/byte_stuffer.c
+
+serial_link_frame_validator_SRC := \
+       $(SERIAL_PATH)/tests/frame_validator_tests.cpp \
+       $(SERIAL_PATH)/protocol/frame_validator.c 
+
+serial_link_frame_router_SRC := \
+       $(SERIAL_PATH)/tests/frame_router_tests.cpp \
+       $(SERIAL_PATH)/protocol/byte_stuffer.c \
+       $(SERIAL_PATH)/protocol/frame_validator.c \
+       $(SERIAL_PATH)/protocol/frame_router.c
+
+serial_link_triple_buffered_object_SRC := \
+       $(SERIAL_PATH)/tests/triple_buffered_object_tests.cpp \
+       $(SERIAL_PATH)/protocol/triple_buffered_object.c 
+
+serial_link_transport_SRC := \
+       $(SERIAL_PATH)/tests/transport_tests.cpp \
+       $(SERIAL_PATH)/protocol/transport.c \
+       $(SERIAL_PATH)/protocol/triple_buffered_object.c 
diff --git a/quantum/serial_link/tests/testlist.mk b/quantum/serial_link/tests/testlist.mk
new file mode 100644 (file)
index 0000000..a80e888
--- /dev/null
@@ -0,0 +1,6 @@
+TEST_LIST +=\
+       serial_link_byte_stuffer\
+       serial_link_frame_validator\
+       serial_link_frame_router\
+       serial_link_triple_buffered_object\
+       serial_link_transport
\ No newline at end of file
diff --git a/quantum/serial_link/tests/transport_tests.c b/quantum/serial_link/tests/transport_tests.c
deleted file mode 100644 (file)
index 358e1b9..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/transport.c"
-#include "serial_link/protocol/triple_buffered_object.c"
-
-void signal_data_written(void) {
-    mock();
-}
-
-static uint8_t sent_data[2048];
-static uint16_t sent_data_size;
-
-void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) {
-    mock(destination);
-    memcpy(sent_data + sent_data_size, data, size);
-    sent_data_size += size;
-}
-
-typedef struct {
-    uint32_t test;
-} test_object1_t;
-
-typedef struct {
-    uint32_t test1;
-    uint32_t test2;
-} test_object2_t;
-
-MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1_t);
-MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1_t);
-SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t);
-
-static remote_object_t* test_remote_objects[] = {
-    REMOTE_OBJECT(master_to_slave),
-    REMOTE_OBJECT(master_to_single_slave),
-    REMOTE_OBJECT(slave_to_master),
-};
-
-Describe(Transport);
-BeforeEach(Transport) {
-    add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*));
-    sent_data_size = 0;
-}
-AfterEach(Transport) {}
-
-Ensure(Transport, write_to_local_signals_an_event) {
-    begin_write_master_to_slave();
-    expect(signal_data_written);
-    end_write_master_to_slave();
-    begin_write_slave_to_master();
-    expect(signal_data_written);
-    end_write_slave_to_master();
-    begin_write_master_to_single_slave(1);
-    expect(signal_data_written);
-    end_write_master_to_single_slave(1);
-}
-
-Ensure(Transport, writes_from_master_to_all_slaves) {
-    update_transport();
-    test_object1_t* obj = begin_write_master_to_slave();
-    obj->test = 5;
-    expect(signal_data_written);
-    end_write_master_to_slave();
-    expect(router_send_frame,
-            when(destination, is_equal_to(0xFF)));
-    update_transport();
-    transport_recv_frame(0, sent_data, sent_data_size);
-    test_object1_t* obj2 = read_master_to_slave();
-    assert_that(obj2, is_not_equal_to(NULL));
-    assert_that(obj2->test, is_equal_to(5));
-}
-
-Ensure(Transport, writes_from_slave_to_master) {
-    update_transport();
-    test_object1_t* obj = begin_write_slave_to_master();
-    obj->test = 7;
-    expect(signal_data_written);
-    end_write_slave_to_master();
-    expect(router_send_frame,
-            when(destination, is_equal_to(0)));
-    update_transport();
-    transport_recv_frame(3, sent_data, sent_data_size);
-    test_object1_t* obj2 = read_slave_to_master(2);
-    assert_that(read_slave_to_master(0), is_equal_to(NULL));
-    assert_that(obj2, is_not_equal_to(NULL));
-    assert_that(obj2->test, is_equal_to(7));
-}
-
-Ensure(Transport, writes_from_master_to_single_slave) {
-    update_transport();
-    test_object1_t* obj = begin_write_master_to_single_slave(3);
-    obj->test = 7;
-    expect(signal_data_written);
-    end_write_master_to_single_slave(3);
-    expect(router_send_frame,
-            when(destination, is_equal_to(4)));
-    update_transport();
-    transport_recv_frame(0, sent_data, sent_data_size);
-    test_object1_t* obj2 = read_master_to_single_slave();
-    assert_that(obj2, is_not_equal_to(NULL));
-    assert_that(obj2->test, is_equal_to(7));
-}
-
-Ensure(Transport, ignores_object_with_invalid_id) {
-    update_transport();
-    test_object1_t* obj = begin_write_master_to_single_slave(3);
-    obj->test = 7;
-    expect(signal_data_written);
-    end_write_master_to_single_slave(3);
-    expect(router_send_frame,
-            when(destination, is_equal_to(4)));
-    update_transport();
-    sent_data[sent_data_size - 1] = 44;
-    transport_recv_frame(0, sent_data, sent_data_size);
-    test_object1_t* obj2 = read_master_to_single_slave();
-    assert_that(obj2, is_equal_to(NULL));
-}
-
-Ensure(Transport, ignores_object_with_size_too_small) {
-    update_transport();
-    test_object1_t* obj = begin_write_master_to_slave();
-    obj->test = 7;
-    expect(signal_data_written);
-    end_write_master_to_slave();
-    expect(router_send_frame);
-    update_transport();
-    sent_data[sent_data_size - 2] = 0;
-    transport_recv_frame(0, sent_data, sent_data_size - 1);
-    test_object1_t* obj2 = read_master_to_slave();
-    assert_that(obj2, is_equal_to(NULL));
-}
-
-Ensure(Transport, ignores_object_with_size_too_big) {
-    update_transport();
-    test_object1_t* obj = begin_write_master_to_slave();
-    obj->test = 7;
-    expect(signal_data_written);
-    end_write_master_to_slave();
-    expect(router_send_frame);
-    update_transport();
-    sent_data[sent_data_size + 21] = 0;
-    transport_recv_frame(0, sent_data, sent_data_size + 22);
-    test_object1_t* obj2 = read_master_to_slave();
-    assert_that(obj2, is_equal_to(NULL));
-}
diff --git a/quantum/serial_link/tests/transport_tests.cpp b/quantum/serial_link/tests/transport_tests.cpp
new file mode 100644 (file)
index 0000000..21b7b16
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+extern "C" {
+#include "serial_link/protocol/transport.h"
+}
+
+struct test_object1 {
+    uint32_t test;
+};
+
+struct test_object2 {
+    uint32_t test1;
+    uint32_t test2;
+};
+
+MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1);
+MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1);
+SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1);
+
+static remote_object_t* test_remote_objects[] = {
+    REMOTE_OBJECT(master_to_slave),
+    REMOTE_OBJECT(master_to_single_slave),
+    REMOTE_OBJECT(slave_to_master),
+};
+
+class Transport : public testing::Test {
+public:
+    Transport() {
+        Instance = this;
+        add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*));
+    }
+
+    ~Transport() {
+        Instance = nullptr;
+        reinitialize_serial_link_transport();
+    }
+
+    MOCK_METHOD0(signal_data_written, void ());
+    MOCK_METHOD1(router_send_frame, void (uint8_t destination));
+
+    void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) {
+        router_send_frame(destination);
+        std::copy(data, data + size, std::back_inserter(sent_data));
+    }
+
+    static Transport* Instance;
+
+    std::vector<uint8_t> sent_data;
+};
+
+Transport* Transport::Instance = nullptr;
+
+extern "C" {
+void signal_data_written(void) {
+    Transport::Instance->signal_data_written();
+}
+
+void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) {
+    Transport::Instance->router_send_frame(destination, data, size);
+}
+}
+
+TEST_F(Transport, write_to_local_signals_an_event) {
+    begin_write_master_to_slave();
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_slave();
+    begin_write_slave_to_master();
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_slave_to_master();
+    begin_write_master_to_single_slave(1);
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_single_slave(1);
+}
+
+TEST_F(Transport, writes_from_master_to_all_slaves) {
+    update_transport();
+    test_object1* obj = begin_write_master_to_slave();
+    obj->test = 5;
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_slave();
+    EXPECT_CALL(*this, router_send_frame(0xFF));
+    update_transport();
+    transport_recv_frame(0, sent_data.data(), sent_data.size());
+    test_object1* obj2 = read_master_to_slave();
+    EXPECT_NE(obj2, nullptr);
+    EXPECT_EQ(obj2->test, 5);
+}
+
+TEST_F(Transport, writes_from_slave_to_master) {
+    update_transport();
+    test_object1* obj = begin_write_slave_to_master();
+    obj->test = 7;
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_slave_to_master();
+    EXPECT_CALL(*this, router_send_frame(0));
+    update_transport();
+    transport_recv_frame(3, sent_data.data(), sent_data.size());
+    test_object1* obj2 = read_slave_to_master(2);
+    EXPECT_EQ(read_slave_to_master(0), nullptr);
+    EXPECT_NE(obj2, nullptr);
+    EXPECT_EQ(obj2->test, 7);
+}
+
+TEST_F(Transport, writes_from_master_to_single_slave) {
+    update_transport();
+    test_object1* obj = begin_write_master_to_single_slave(3);
+    obj->test = 7;
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_single_slave(3);
+    EXPECT_CALL(*this, router_send_frame(4));
+    update_transport();
+    transport_recv_frame(0, sent_data.data(), sent_data.size());
+    test_object1* obj2 = read_master_to_single_slave();
+    EXPECT_NE(obj2, nullptr);
+    EXPECT_EQ(obj2->test, 7);
+}
+
+TEST_F(Transport, ignores_object_with_invalid_id) {
+    update_transport();
+    test_object1* obj = begin_write_master_to_single_slave(3);
+    obj->test = 7;
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_single_slave(3);
+    EXPECT_CALL(*this, router_send_frame(4));
+    update_transport();
+    sent_data[sent_data.size() - 1] = 44;
+    transport_recv_frame(0, sent_data.data(), sent_data.size());
+    test_object1* obj2 = read_master_to_single_slave();
+    EXPECT_EQ(obj2, nullptr);
+}
+
+TEST_F(Transport, ignores_object_with_size_too_small) {
+    update_transport();
+    test_object1* obj = begin_write_master_to_slave();
+    obj->test = 7;
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_slave();
+    EXPECT_CALL(*this, router_send_frame(_));
+    update_transport();
+    sent_data[sent_data.size() - 2] = 0;
+    transport_recv_frame(0, sent_data.data(), sent_data.size() - 1);
+    test_object1* obj2 = read_master_to_slave();
+    EXPECT_EQ(obj2, nullptr);
+}
+
+TEST_F(Transport, ignores_object_with_size_too_big) {
+    update_transport();
+    test_object1* obj = begin_write_master_to_slave();
+    obj->test = 7;
+    EXPECT_CALL(*this, signal_data_written());
+    end_write_master_to_slave();
+    EXPECT_CALL(*this, router_send_frame(_));
+    update_transport();
+    sent_data.resize(sent_data.size() + 22);
+    sent_data[sent_data.size() - 1] = 0;
+    transport_recv_frame(0, sent_data.data(), sent_data.size());
+    test_object1* obj2 = read_master_to_slave();
+    EXPECT_EQ(obj2, nullptr);
+}
diff --git a/quantum/serial_link/tests/triple_buffered_object_tests.c b/quantum/serial_link/tests/triple_buffered_object_tests.c
deleted file mode 100644 (file)
index 6f7c82b..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <cgreen/cgreen.h>
-#include "serial_link/protocol/triple_buffered_object.c"
-
-typedef struct {
-    uint8_t state;
-    uint32_t buffer[3];
-}test_object_t;
-
-test_object_t test_object;
-
-Describe(TripleBufferedObject);
-BeforeEach(TripleBufferedObject) {
-    triple_buffer_init((triple_buffer_object_t*)&test_object);
-}
-AfterEach(TripleBufferedObject) {}
-
-
-Ensure(TripleBufferedObject, writes_and_reads_object) {
-    *triple_buffer_begin_write(&test_object) = 0x3456ABCC;
-    triple_buffer_end_write(&test_object);
-    assert_that(*triple_buffer_read(&test_object), is_equal_to(0x3456ABCC));
-}
-
-Ensure(TripleBufferedObject, does_not_read_empty) {
-    assert_that(triple_buffer_read(&test_object), is_equal_to(NULL));
-}
-
-Ensure(TripleBufferedObject, writes_twice_and_reads_object) {
-    *triple_buffer_begin_write(&test_object) = 0x3456ABCC;
-    triple_buffer_end_write(&test_object);
-    *triple_buffer_begin_write(&test_object) = 0x44778899;
-    triple_buffer_end_write(&test_object);
-    assert_that(*triple_buffer_read(&test_object), is_equal_to(0x44778899));
-}
-
-Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) {
-    *triple_buffer_begin_write(&test_object) = 1;
-    triple_buffer_end_write(&test_object);
-    uint32_t* read = triple_buffer_read(&test_object);
-    *triple_buffer_begin_write(&test_object) = 2;
-    triple_buffer_end_write(&test_object);
-    assert_that(*read, is_equal_to(1));
-    assert_that(*triple_buffer_read(&test_object), is_equal_to(2));
-    assert_that(triple_buffer_read(&test_object), is_equal_to(NULL));
-}
-
-Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) {
-    *triple_buffer_begin_write(&test_object) = 1;
-    triple_buffer_end_write(&test_object);
-    uint32_t* read = triple_buffer_read(&test_object);
-    *triple_buffer_begin_write(&test_object) = 2;
-    triple_buffer_end_write(&test_object);
-    *triple_buffer_begin_write(&test_object) = 3;
-    triple_buffer_end_write(&test_object);
-    assert_that(*read, is_equal_to(1));
-    assert_that(*triple_buffer_read(&test_object), is_equal_to(3));
-    assert_that(triple_buffer_read(&test_object), is_equal_to(NULL));
-}
diff --git a/quantum/serial_link/tests/triple_buffered_object_tests.cpp b/quantum/serial_link/tests/triple_buffered_object_tests.cpp
new file mode 100644 (file)
index 0000000..7724bbe
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include "gtest/gtest.h"
+extern "C" {
+#include "serial_link/protocol/triple_buffered_object.h"
+}
+
+struct test_object{
+    uint8_t state;
+    uint32_t buffer[3];
+};
+
+test_object test_object;
+
+class TripleBufferedObject : public testing::Test {
+public:
+    TripleBufferedObject() {
+        triple_buffer_init((triple_buffer_object_t*)&test_object);
+    }
+};
+
+TEST_F(TripleBufferedObject, writes_and_reads_object) {
+    *triple_buffer_begin_write(&test_object) = 0x3456ABCC;
+    triple_buffer_end_write(&test_object);
+    EXPECT_EQ(*triple_buffer_read(&test_object), 0x3456ABCC);
+}
+
+TEST_F(TripleBufferedObject, does_not_read_empty) {
+    EXPECT_EQ(triple_buffer_read(&test_object), nullptr);
+}
+
+TEST_F(TripleBufferedObject, writes_twice_and_reads_object) {
+    *triple_buffer_begin_write(&test_object) = 0x3456ABCC;
+    triple_buffer_end_write(&test_object);
+    *triple_buffer_begin_write(&test_object) = 0x44778899;
+    triple_buffer_end_write(&test_object);
+    EXPECT_EQ(*triple_buffer_read(&test_object), 0x44778899);
+}
+
+TEST_F(TripleBufferedObject, performs_another_write_in_the_middle_of_read) {
+    *triple_buffer_begin_write(&test_object) = 1;
+    triple_buffer_end_write(&test_object);
+    uint32_t* read = triple_buffer_read(&test_object);
+    *triple_buffer_begin_write(&test_object) = 2;
+    triple_buffer_end_write(&test_object);
+    EXPECT_EQ(*read, 1);
+    EXPECT_EQ(*triple_buffer_read(&test_object), 2);
+    EXPECT_EQ(triple_buffer_read(&test_object), nullptr);
+}
+
+TEST_F(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) {
+    *triple_buffer_begin_write(&test_object) = 1;
+    triple_buffer_end_write(&test_object);
+    uint32_t* read = triple_buffer_read(&test_object);
+    *triple_buffer_begin_write(&test_object) = 2;
+    triple_buffer_end_write(&test_object);
+    *triple_buffer_begin_write(&test_object) = 3;
+    triple_buffer_end_write(&test_object);
+    EXPECT_EQ(*read, 1);
+    EXPECT_EQ(*triple_buffer_read(&test_object), 3);
+    EXPECT_EQ(triple_buffer_read(&test_object), nullptr);
+}
index 3f6d133c9b39a73c68f72aa9783d43a7e17a8388..4e2a6f00fd8ea2e3d2f25fa611a2cba9d6d98783 100644 (file)
@@ -1,75 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes        # Console for debug(+400)
-COMMAND_ENABLE ?= yes        # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= no            # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE ?= no            # MIDI controls
-UNICODE_ENABLE ?= no         # Unicode
-BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no           # Audio output on port C6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
        include ../../Makefile
-endif
-
-
+endif
\ No newline at end of file
index b2fb4dd98d2891932f2b15cdda88fc0b99bb78aa..b16f4cd76836b0da7be976173eebee329bb4fe35 100644 (file)
@@ -3,7 +3,7 @@
 
 ## Quantum MK Firmware
 
-For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+For the full Quantum feature list, see [the parent readme](/).
 
 ## Building
 
@@ -13,16 +13,16 @@ Depending on which keymap you would like to use, you will have to compile slight
 
 ### Default
 
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
 
 ### Other Keymaps
 
 Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
 
-To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
 
 ```
-$ make keymap=[default|jack|<name>]
+$ make [default|jack|<name>]
 ```
 
-Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
\ No newline at end of file
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/quantum/template/rules.mk b/quantum/template/rules.mk
new file mode 100644 (file)
index 0000000..5589814
--- /dev/null
@@ -0,0 +1,67 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=512
+
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no      # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes        # Console for debug(+400)
+COMMAND_ENABLE ?= yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= no            # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no            # MIDI controls
+UNICODE_ENABLE ?= no         # Unicode
+BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no           # Audio output on port C6
diff --git a/quantum/variable_trace.c b/quantum/variable_trace.c
new file mode 100644 (file)
index 0000000..de58024
--- /dev/null
@@ -0,0 +1,110 @@
+#include "variable_trace.h"
+#include <stddef.h>
+#include <string.h>
+
+#ifdef NO_PRINT
+#error "You need undef NO_PRINT to use the variable trace feature"
+#endif
+
+#ifndef CONSOLE_ENABLE
+#error "The console needs to be enabled in the makefile to use the variable trace feature"
+#endif
+
+
+#define NUM_TRACED_VARIABLES 1
+#ifndef MAX_VARIABLE_TRACE_SIZE
+    #define MAX_VARIABLE_TRACE_SIZE 4
+#endif
+
+typedef struct {
+    const char* name;
+    void* addr;
+    unsigned size;
+    const char* func;
+    int line;
+    uint8_t last_value[MAX_VARIABLE_TRACE_SIZE];
+
+} traced_variable_t;
+
+static traced_variable_t traced_variables[NUM_TRACED_VARIABLES];
+
+void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line) {
+    verify_traced_variables(func, line);
+    if (size > MAX_VARIABLE_TRACE_SIZE) {
+#if defined(__AVR__)
+       xprintf("Traced variable \"%S\" exceeds the maximum size %d\n", name, size);
+#else
+       xprintf("Traced variable \"%s\" exceeds the maximum size %d\n", name, size);
+#endif
+       size = MAX_VARIABLE_TRACE_SIZE;
+    }
+    int index = -1;
+    for (int i = 0; i < NUM_TRACED_VARIABLES; i++) {
+        if (index == -1 && traced_variables[i].addr == NULL){
+            index = i;
+        }
+        else if (strcmp_P(name, traced_variables[i].name)==0) {
+            index = i;
+            break;
+        }
+    }
+
+    if (index == -1) {
+        xprintf("You can only trace %d variables at the same time\n", NUM_TRACED_VARIABLES);
+        return;
+    }
+
+    traced_variable_t* t = &traced_variables[index];
+    t->name = name;
+    t->addr = addr;
+    t->size = size;
+    t->func = func;
+    t->line = line;
+    memcpy(&t->last_value[0], addr, size);
+
+}
+
+void remove_traced_variable(const char* name, const char* func, int line) {
+    verify_traced_variables(func, line);
+    for (int i = 0; i < NUM_TRACED_VARIABLES; i++) {
+        if (strcmp_P(name, traced_variables[i].name)==0) {
+            traced_variables[i].name = 0;
+            traced_variables[i].addr = NULL;
+            break;
+        }
+    }
+}
+
+void verify_traced_variables(const char* func, int line) {
+    for (int i = 0; i < NUM_TRACED_VARIABLES; i++) {
+        traced_variable_t* t = &traced_variables[i];
+        if (t->addr != NULL && t->name != NULL) {
+            if (memcmp(t->last_value, t->addr, t->size)!=0){
+#if defined(__AVR__)
+               xprintf("Traced variable \"%S\" has been modified\n", t->name);
+               xprintf("Between %S:%d\n", t->func, t->line);
+               xprintf("And %S:%d\n", func, line);
+
+#else
+               xprintf("Traced variable \"%s\" has been modified\n", t->name);
+               xprintf("Between %s:%d\n", t->func, t->line);
+               xprintf("And %s:%d\n", func, line);
+#endif
+               xprintf("Previous value ");
+               for (int j=0; j<t->size;j++) {
+                   print_hex8(t->last_value[j]);
+               }
+               xprintf("\nNew value ");
+               uint8_t* addr = (uint8_t*)(t->addr);
+               for (int j=0; j<t->size;j++) {
+                   print_hex8(addr[j]);
+               }
+               xprintf("\n");
+               memcpy(t->last_value, addr, t->size);
+           }
+        }
+
+        t->func = func;
+        t->line = line;
+    }
+}
diff --git a/quantum/variable_trace.h b/quantum/variable_trace.h
new file mode 100644 (file)
index 0000000..46bd827
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef VARIABLE_TRACE_H
+#define VARIABLE_TRACE_H
+
+// For more information about the variable tracing see the readme.
+
+#include "print.h"
+
+#ifdef NUM_TRACED_VARIABLES
+
+// Start tracing a variable at the memory address addr
+// The name can be anything and is used only for reporting
+// The size should usually be the same size as the variable you are interested in
+#define ADD_TRACED_VARIABLE(name, addr, size) \
+    add_traced_variable(PSTR(name), (void*)addr, size, PSTR(__FILE__), __LINE__)
+
+// Stop tracing the variable with the given name
+#define REMOVE_TRACED_VARIABLE(name) remove_traced_variable(PSTR(name), PSTR(__FILE__), __LINE__)
+
+// Call to get messages when the variable has been changed
+#define VERIFY_TRACED_VARIABLES() verify_traced_variables(PSTR(__FILE__), __LINE__)
+
+#else
+
+#define ADD_TRACED_VARIABLE(name, addr, size)
+#define REMOVE_TRACED_VARIABLE(name)
+#define VERIFY_TRACED_VARIABLES()
+
+#endif
+
+// Don't call directly, use the macros instead
+void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line);
+void remove_traced_variable(const char* name, const char* func, int line);
+void verify_traced_variables(const char* func, int line);
+#endif
index e0dcd56088fcd27f90e4942dee4745ced183e61a..90584cabcb8dcbaae3cc8473a6eca3590dd5bc1e 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -4,7 +4,7 @@
 
 This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/).
 
-## Official website
+## Official website (currently under construction with the move to the wiki)
 
 For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them.
 
@@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http
 * [Planck](/keyboards/planck/)
 * [Preonic](/keyboards/preonic/)
 * [Atomic](/keyboards/atomic/)
-* [ErgoDox EZ](/keyboards/ergodox_ez/)
+* [ErgoDox EZ](/keyboards/ergodox/)
 * [Clueboard](/keyboards/clueboard/)
 * [Cluepad](/keyboards/cluepad/)
 
@@ -31,856 +31,9 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j
 
 This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest:
 
-* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox_ez/); for the Planck, it's [here](keyboards/planck/) and so on.
+* [**The Wiki**](https://github.com/jackhumbert/qmk_firmware/wiki) - the entirity of the readme has been moved here
+* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on.
 * The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
   * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
   * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined.
-* The [TMK documentation](doc/TMK_readme.md). QMK is based on TMK, and this explains how it works internally.
-
-# Getting started
-
-Before you are able to compile, you'll need to install an environment for AVR development. You'll find the instructions for any OS below. If you find another/better way to set things up from scratch, please consider [making a pull request](https://github.com/jackhumbert/qmk_firmware/pulls) with your changes!
-
-## Build Environment Setup
-
-### Windows (Vista and later)
-1. If you have ever installed WinAVR, uninstall it.
-2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
-3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
-4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
-5. Double-click on the 1-setup-path-win batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
-6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
-7. Future build commands should be run from the MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it.
-
-### Mac
-If you're using [homebrew,](http://brew.sh/) you can use the following commands:
-
-    brew tap osx-cross/avr
-    brew install avr-libc
-    brew install dfu-programmer
-
-This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line.
-
-You can also try these instructions:
-
-1. Install Xcode from the App Store.
-2. Install the Command Line Tools from `Xcode->Preferences->Downloads`.
-3. Install [DFU-Programmer][dfu-prog].
-
-### Linux
-Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager.
-
-Debian/Ubuntu example:
-
-    sudo apt-get update
-    sudo apt-get install gcc-avr avr-libc dfu-programmer
-
-### Vagrant
-If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
-
-## Verify Your Installation
-1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
-2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
-3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
-4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
-
-# Customizing your keymap
-
-In every keymap folder, the following files are recommended:
-
-* `config.h` - the options to configure your keymap
-* `keymap.c` - all of your keymap code, required
-* `Makefile` - the features of QMK that are enabled, required to run `make` in your keymap folder
-* `readme.md` - a description of your keymap, how others might use it, and explanations of features 
-
-## The `make` command
-
-The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards/<keyboard>/`), or your keymap folder (`/keyboards/<keyboard>/keymaps/<keymap>/`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)).
-
-By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. Your .hex file will also be available on qmk.fm/keyboards/<keyboard>/keymaps/<keymap>/.
-
-Below are some definitions that will be useful:
-
-* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc.
-* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`.
-* The "keymap" folder is any keymap's folder, like `/keyboards/planck/keymaps/default`.
-
-Below is a list of the useful `make` commands in QMK:
-
-* `make` - cleans automatically and builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder
-  * `make keyboard=<keyboard>` - specifies the keyboard (only to be used in root)
-  * `make keymap=<keymap>` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder)
-* `make quick` - skips the clean step (cannot be used immediately after modifying config.h or Makefiles)
-* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ.
-  * `keyboard=` and `keymap=` are compatible with this
-* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root)
-* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root)
-* `make all-keymaps [keyboard=<keyboard>]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `<keyboard>`
-* `make all-keyboards-quick`, `make all-keyboards-default-quick` and `make all-keymaps-quick [keyboard=<keyboard>]` - like the normal "make-all-*" commands, but they skip the clean steps
-
-Other, less useful functionality:
-
-* `make COLOR=false` - turns off color output
-* `make SILENT=true` - turns off output besides errors/warnings
-* `make VERBOSE=true` - outputs all of the avr-gcc stuff (not interesting)
-
-## The `Makefile`
-
-There are 3 different `make` and `Makefile` locations:
-
-* root (`/`)
-* keyboard (`/keyboards/<keyboard>/`)
-* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`)
-
-The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **It is required if you want to run `make` in the keymap folder.**
-
-### Makefile options
-
-Set the variables to `no` to disable them, and `yes` to enable them.
-
-`BOOTMAGIC_ENABLE`
-
-This allows you to hold a key and the salt key (space by default) and have access to a various EEPROM settings that persist over power loss. It's advised you keep this disabled, as the settings are often changed by accident, and produce confusing results that makes it difficult to debug. It's one of the more common problems encountered in help sessions.
-
-`MOUSEKEY_ENABLE`
-
-This gives you control over cursor movements and clicks via keycodes/custom functions.
-
-`EXTRAKEY_ENABLE`
-
-This allows you to use the system and audio control key codes.
-
-`CONSOLE_ENABLE`
-
-TODO
-
-`COMMAND_ENABLE`
-
-TODO
-
-`SLEEP_LED_ENABLE`
-
-Enables your LED to breath while your computer is sleeping. Timer1 is being used here. This feature is largely unused and untested, and needs updating/abstracting.
-
-`NKRO_ENABLE`
-
-This allows for n-key rollover (default is 6) to be enabled. It is off by default, but can be forced by adding `#define FORCE_NKRO` to your config.h.
-
-`BACKLIGHT_ENABLE`
-
-This enables your backlight on Timer1 and ports B5, B6, or B7 (for now). You can specify your port by putting this in your `config.h`:
-
-    #define BACKLIGHT_PIN B7
-
-`MIDI_ENABLE`
-
-This enables MIDI sending and receiving with your keyboard. To enter MIDI send mode, you can use the keycode `MI_ON`, and `MI_OFF` to turn it off. This is a largely untested feature, but more information can be found in the `quantum/quantum.c` file.
-
-`UNICODE_ENABLE`
-
-This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported.
-
-`BLUETOOTH_ENABLE`
-
-This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins.
-
-`AUDIO_ENABLE`
-
-This allows you output audio on the C6 pin (needs abstracting). See the [audio section](#driving-a-speaker---audio-support) for more information.
-
-### Customizing Makefile options on a per-keymap basis
-
-If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard.
-
-So let's say your keyboard's makefile has `BACKLIGHT_ENABLE = yes` (or maybe doesn't even list the `BACKLIGHT_ENABLE` option, which would cause it to be off). You want your particular keymap to not have the debug console, so you make a file called `Makefile` and specify `BACKLIGHT_ENABLE = no`.
-
-You can use the `doc/keymap_makefile_example.md` as a template/starting point.
-
-## The `config.h` file
-
-There are 2 `config.h` locations:
-
-* keyboard (`/keyboards/<keyboard>/`)
-* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`)
-
-The keyboard `config.h` is included only if the keymap one doesn't exist. The format to use for your custom one [is here](/doc/keymap_config_h_example.h). If you want to override a setting from the parent `config.h` file, you need to do this:
-
-```c
-#undef MY_SETTING
-#define MY_SETTING 4
-```
-
-For a value of `4` for this imaginary setting. So we `undef` it first, then `define` it.
-
-You can then override any settings, rather than having to copy and paste the whole thing.
-
-## Going beyond the keycodes
-
-Aside from the [basic keycodes](doc/keycode.txt), your keymap can include shortcuts to common operations.
-
-### Switching and toggling layers
-
-`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
-
-`OSL(layer)` - momentary switch to *layer*, as a one-shot operation. So if you have a key that's defined as `OSL(1)`, and you tap that key, then only the very next keystroke would come from layer 1. You would drop back to layer zero immediately after that one keystroke. That's handy if you have a layer full of custom shortcuts -- for example, a dedicated key for closing a window. So you tap your one-shot layer mod, then tap that magic 'close window' key, and keep typing like a boss. Layer 1 would remain active as long as you hold that key down, too (so you can use it like a momentary toggle-layer key with extra powers).
-
-`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
-
-`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
-
-
-### Fun with modifier keys
-
-* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
-* `RSFT(kc)` - applies right Shift to *kc*
-* `LCTL(kc)` - applies left Control to *kc*
-* `RCTL(kc)` - applies right Control to *kc*
-* `LALT(kc)` - applies left Alt to *kc*
-* `RALT(kc)` - applies right Alt to *kc*
-* `LGUI(kc)` - applies left GUI (command/win) to *kc*
-* `RGUI(kc)` - applies right GUI (command/win) to *kc*
-* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
-* `MEH(kc)`  - applies Meh (all modifiers except Win/Cmd) to *kc*
-* `LCAG(kc)` - applies CtrlAltGui to *kc*
-
-You can also chain these, like this:
-
-    LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
-
-The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
-
-    KC_TILD  ~
-    KC_EXLM  !
-    KC_AT    @
-    KC_HASH  #
-    KC_DLR   $
-    KC_PERC  %
-    KC_CIRC  ^
-    KC_AMPR  &
-    KC_ASTR  *
-    KC_LPRN  (
-    KC_RPRN  )
-    KC_UNDS  _
-    KC_PLUS  +
-    KC_DQUO  "
-    KC_LCBR  {
-    KC_RCBR  }
-    KC_LABK  <
-    KC_RABK  >
-    KC_PIPE  |
-    KC_COLN  :
-
-`OSM(mod)` - this is a "one shot" modifier. So let's say you have your left Shift key defined as `OSM(MOD_LSFT)`. Tap it, let go, and Shift is "on" -- but only for the next character you'll type. So to write "The", you don't need to hold down Shift -- you tap it, tap t, and move on with life. And if you hold down the left Shift key, it just works as a left Shift key, as you would expect (so you could type THE). There's also a magical, secret way to "lock" a modifier by tapping it multiple times. If you want to learn more about that, open an issue. :)
-
-`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
-
-These are the values you can use for the `mod` in `MT()` and `OSM()` (right-hand modifiers are not available for `MT()`):
-
-  * MOD_LCTL
-  * MOD_LSFT
-  * MOD_LALT
-  * MOD_LGUI
-  * MOD_HYPR
-  * MOD_MEH
-
-These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
-
-We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
-
-  * `CTL_T(kc)` - is LCTL when held and *kc* when tapped
-  * `SFT_T(kc)` - is LSFT when held and *kc* when tapped
-  * `ALT_T(kc)` - is LALT when held and *kc* when tapped
-  * `GUI_T(kc)` - is LGUI when held and *kc* when tapped
-  * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
-  * `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
-  * `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
-
-### Space Cadet Shift: The future, built in
-
-Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds.
-
-To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift. 
-
-It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your `config.h` like this:
-
-    #define LSPO_KEY KC_9
-    #define RSPC_KEY KC_0
-
-You can also choose between different rollover behaviors of the shift keys by defining:
-
-    #define DISABLE_SPACE_CADET_ROLLOVER
-
-in your `config.h`. Disabling rollover allows you to use the opposite shift key to cancel the space cadet state in the event of an erroneous press instead of emitting a pair of parentheses when the keys are released.
-
-The only other thing you're going to want to do is create a `Makefile` in your keymap directory and set the following:
-
-```
-COMMAND_ENABLE   = no  # Commands for debug and configuration
-```
-
-This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
-
-### The Leader key: A new kind of modifier
-
-If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen.
-
-That's what `KC_LEAD` does. Here's an example:
-
-1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else.
-2. Include the line `#define LEADER_TIMEOUT 300` somewhere in your keymap.c file, probably near the top. The 300 there is 300ms -- that's how long you have for the sequence of keys following the leader. You can tweak this value for comfort, of course.
-3. Within your `matrix_scan_user` function, do something like this:
-
-```
-void matrix_scan_user(void) {
-  LEADER_DICTIONARY() {
-    leading = false;
-    leader_end();
-
-    SEQ_ONE_KEY(KC_F) {
-      register_code(KC_S);
-      unregister_code(KC_S);
-    }
-    SEQ_TWO_KEYS(KC_A, KC_S) {
-      register_code(KC_H);
-      unregister_code(KC_H);
-    }
-    SEQ_THREE_KEYS(KC_A, KC_S, KC_D) {
-      register_code(KC_LGUI);
-      register_code(KC_S);
-      unregister_code(KC_S);
-      unregister_code(KC_LGUI);
-    }
-  }
-}
-```
-
-As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_KEYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously.
-
-### Tap Dance: A single key can do 3, 5, or 100 different things
-
-Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how Algernon describes the feature:
-
-With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter.
-
-To make it clear how this is different from `ACTION_FUNCTION_TAP`, lets explore a certain setup! We want one key to send `Space` on single tap, but `Enter` on double-tap.
-
-With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be send first. Thus, `SPC a` will result in `a SPC` being sent, if they are typed within `TAPPING_TERM`. With the tap dance feature, that'll come out as `SPC a`, correctly.
-
-The implementation hooks into two parts of the system, to achieve this: into `process_record_quantum()`, and the matrix scan. We need the latter to be able to time out a tap sequence even when a key is not being pressed, so `SPC` alone will time out and register after `TAPPING_TERM` time.
-
-But lets start with how to use it, first!
-
-First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array.
-
-This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options:
-
-* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise.
-* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action.
-
-The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
-
-And that's the bulk of it!
-
-Do note, however, that this implementation does have some consequences: keys do not register until either they reach the tapping ceiling, or they time out. This means that if you hold the key, nothing happens, no repeat, no nothing. It is possible to detect held state, and register an action then too, but that's not implemented yet. Keys also unregister immediately after being registered, so you can't even hold the second tap. This is intentional, to be consistent.
-
-And now, on to the explanation of how it works!
-
-The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer.
-
-This means that you have `TAPPING_TERM` time to tap the key again, you do not have to input all the taps within that timeframe. This allows for longer tap counts, with minimal impact on responsiveness.
-
-Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-dance keys.
-
-For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros.
-
-In the end, let's see a full example!
-
-```c
-enum {
- CT_SE = 0,
- CT_CLN,
- CT_EGG
-};
-
-/* Have the above three on the keymap, TD(CT_SE), etc... */
-
-void dance_cln (qk_tap_dance_state_t *state) {
-  if (state->count == 1) {
-    register_code (KC_RSFT);
-    register_code (KC_SCLN);
-    unregister_code (KC_SCLN);
-    unregister_code (KC_RSFT);
-  } else {
-    register_code (KC_SCLN);
-    unregister_code (KC_SCLN);
-    reset_tap_dance (state);
-  }
-}
-
-void dance_egg (qk_tap_dance_state_t *state) {
-  if (state->count >= 100) {
-    SEND_STRING ("Safety dance!");
-    reset_tap_dance (state);
-  }
-}
-
-const qk_tap_dance_action_t tap_dance_actions[] = {
-  [CT_SE]  = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT)
- ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln)
- ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg)
-};
-```
-
-### Temporarily setting the default layer
-
-`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
-
-### Prevent stuck modifiers
-
-Consider the following scenario:
-
-1. Layer 0 has a key defined as Shift.
-2. The same key is defined on layer 1 as the letter A.
-3. User presses Shift.
-4. User switches to layer 1 for whatever reason.
-5. User releases Shift, or rather the letter A.
-6. User switches back to layer 0.
-
-Shift was actually never released and is still considered pressed.
-
-If such situation bothers you add this to your `config.h`:
-
-    #define PREVENT_STUCK_MODIFIERS
-
-This option uses 5 bytes of memory per every 8 keys on the keyboard
-rounded up (5 bits per key). For example on Planck (48 keys) it uses
-(48/8)\*5 = 30 bytes.
-
-### Remember: These are just aliases
-
-These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/doc/keymap.md#2-action).
-
-Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
-
-## Macro shortcuts: Send a whole string when pressing just one key
-
-Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
-
-```c
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
-{
-  switch(id) {
-    case 0: // this would trigger when you hit a key mapped as M(0)
-      if (record->event.pressed) {
-        return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END  ); // this sends the string 'hello' when the macro executes
-      }
-      break;
-  }
-  return MACRO_NONE;
-};
-```
-A macro can include the following commands:
-
-* I() change interval of stroke in milliseconds.
-* D() press key.
-* U() release key.
-* T() type key(press and release).
-* W() wait (milliseconds).
-* END end mark.
-
-So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
-
-Note: Using macros to have your keyboard send passwords for you is possible, but a bad idea.
-
-### Advanced macro functions
-
-To get more control over the keys/actions your keyboard takes, the following functions are available to you in the `action_get_macro` function block:
-
-* `record->event.pressed`
-
-This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
-
-```c
-if (record->event.pressed) {
-  // on keydown
-} else {
-  // on keyup
-}
-```
-
-* `register_code(<kc>);`
-
-This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
-
-* `unregister_code(<kc>);`
-
-Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
-
-* `layer_on(<n>);`
-
-This will turn on the layer `<n>` - the higher layer number will always take priority. Make sure you have `KC_TRNS` for the key you're pressing on the layer you're switching to, or you'll get stick there unless you have another plan.
-
-* `layer_off(<n>);`
-
-This will turn off the layer `<n>`.
-
-* `clear_keyboard();`
-
-This will clear all mods and keys currently pressed.
-
-* `clear_mods();`
-
-This will clear all mods currently pressed.
-
-* `clear_keyboard_but_mods();`
-
-This will clear all keys besides the mods currently pressed.
-
-* `update_tri_layer(layer_1, layer_2, layer_3);`
-
-If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0).
-
-#### Naming your macros
-
-If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so:
-
-```
-#define AUD_OFF M(6)
-#define AUD_ON M(7)
-#define MUS_OFF M(8)
-#define MUS_ON M(9)
-#define VC_IN M(10)
-#define VC_DE M(11)
-#define PLOVER M(12)
-#define EXT_PLV M(13)
-```
-
-As was done on the [Planck default keymap](/keyboards/planck/keymaps/default/keymap.c#L33-L40)
-
-#### Timer functionality
-
-It's possible to start timers and read values for time-specific events - here's an example:
-
-```c
-static uint16_t key_timer;
-key_timer = timer_read();
-if (timer_elapsed(key_timer) < 100) {
-  // do something if less than 100ms have passed
-} else {
-  // do something if 100ms or more have passed
-}
-```
-
-It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc).
-
-#### Example: Single-key copy/paste (hold to copy, tap to paste)
-
-With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held?
-
-Here's what you do:
-
-
-```
-static uint16_t key_timer;
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-      switch(id) {
-        case 0: {
-            if (record->event.pressed) {
-                key_timer = timer_read(); // if the key is being pressed, we start the timer.
-            }
-            else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
-                if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
-                    return MACRO( D(LCTL), T(C), U(LCTL), END  );
-                }
-                else {
-                    return MACRO( D(LCTL), T(V), U(LCTL), END  );
-                }
-            }
-            break;
-        }
-      }
-    return MACRO_NONE;
-};
-```
-
-And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste.
-
-## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
-
-Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
-
-   #include <keymap_colemak.h>
-
-If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to:
-
- * `CM_*` for all of the Colemak-equivalent characters
- * `DV_*` for all of the Dvorak-equivalent characters
-
-These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
-
-To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
-
-## Additional language support
-
-In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
-
-## Unicode support
-
-You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
-
-## Other firmware shortcut keycodes
-
-* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
-* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
-* `BL_ON` - turns the backlight on
-* `BL_OFF` - turns the backlight off
-* `BL_<n>` - sets the backlight to level *n*
-* `BL_INC` - increments the backlight level by one
-* `BL_DEC` - decrements the backlight level by one
-* `BL_TOGG` - toggles the backlight
-* `BL_STEP` - steps through the backlight levels
-
-Enable the backlight from the Makefile.
-
-# Custom Quantum functions
-
-All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `<keyboard>/<keyboard>.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly.
-
-## `void martix_init_*(void)`
-
-This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap.
-
-## `void matrix_scan_*(void)`
-
-This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
-
-## `bool process_record_*(uint16_t keycode, keyrecord_t *record)`
-
-This function gets called on every keypress/release, and is where you can define custom functionality. The return value is whether or not QMK should continue processing the keycode - returning `false` stops the execution.
-
-The `keycode` variable is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. and can be switch-cased to execute code whenever a particular code is pressed.
-
-The `record` variable contains infomation about the actual press:
-
-```
-keyrecord_t record {
-  keyevent_t event {
-    keypos_t key {
-      uint8_t col
-      uint8_t row
-    }
-    bool     pressed
-    uint16_t time
-  }
-}
-```
-
-The conditional `if (record->event.pressed)` can tell if the key is being pressed or released, and you can execute code based on that.
-
-## `void led_set_*(uint8_t usb_led)`
-
-This gets called whenever there is a state change on your host LEDs (eg caps lock, scroll lock, etc). The LEDs are defined as:
-
-```
-#define USB_LED_NUM_LOCK                0
-#define USB_LED_CAPS_LOCK               1
-#define USB_LED_SCROLL_LOCK             2
-#define USB_LED_COMPOSE                 3
-#define USB_LED_KANA                    4
-```
-
-and can be tested against the `usb_led` with a conditional like `if (usb_led & (1<<USB_LED_CAPS_LOCK))` - if this is true, you can turn your LED one, otherwise turn it off.
-
-# Modding your keyboard
-
-## Audio output from a speaker
-
-Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any keyboard that allows access to the C6 port, you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
-
-The audio code lives in [quantum/audio/audio.h](/quantum/audio/audio.h) and in the other files in the audio directory. It's enabled by default on the Planck [stock keymap](/keyboards/planck/keymaps/default/keymap.c). Here are the important bits:
-
-```
-#include "audio.h"
-```
-
-Then, lower down the file:
-
-```
-float tone_startup[][2] = {
-    ED_NOTE(_E7 ),
-    E__NOTE(_CS7),
-    E__NOTE(_E6 ),
-    E__NOTE(_A6 ),
-    M__NOTE(_CS7, 20)
-};
-```
-
-This is how you write a song. Each of these lines is a note, so we have a little ditty composed of five notes here.
-
-Then, we have this chunk:
-
-```
-float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
-float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
-float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
-float tone_plover[][2]     = SONG(PLOVER_SOUND);
-float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
-
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-float goodbye[][2] = SONG(GOODBYE_SOUND);
-```
-
-Wherein we bind predefined songs (from [audio/song_list.h](/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives.
-
-So now you have something called `tone_plover` for example. How do you make it play the Plover tune, then? If you look further down the keymap, you'll see this:
-
-```
-PLAY_NOTE_ARRAY(tone_plover, false, 0); // Signature is: Song name, repeat, rest style
-```
-
-This is inside one of the macros. So when that macro executes, your keyboard plays that particular chime.
-
-"Rest style" in the method signature above (the last parameter) specifies if there's a rest (a moment of silence) between the notes.
-
-## MIDI functionalty
-
-This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
-
-## Bluetooth functionality
-
-This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
-
-## International Characters on Windows
-
-[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys among others.
-
-The method does not require Unicode support in the keyboard itself but depends instead of AutoHotkey running in the background.
-
-First you need to select a modifier combination that is not in use by any of your programs.
-CtrlAltWin is not used very widely and should therefore be perfect for this.
-There is a macro defined for a mod-tab combo `LCAG_T`.
-Add this mod-tab combo to a key on your keyboard, e.g.: `LCAG_T(KC_TAB)`.
-This makes the key behave like a tab key if pressed and released immediately but changes it to the modifier if used with another key.
-
-In the default script of AutoHotkey you can define custom hotkeys.
-
-    <^<!<#a::Send, ä
-    <^<!<#<+a::Send, Ä
-
-The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a.
-AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
-
-## RGB Under Glow Mod
-
-![Planck with RGB Underglow](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
-
-Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
-
-For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring the VCC, GND, and DI, you can enable the underglow in your Makefile.
-
-    RGBLIGHT_ENABLE = yes
-
-In order to use the underglow timer functions, you need to have `#define RGBLIGHT_TIMER` in your `config.h`, and have audio disabled (`AUDIO_ENABLE = no` in your Makefile).
-
-Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
-    
-    #define RGB_DI_PIN F4     // The pin your RGB strip is wired to
-    #define RGBLIGHT_TIMER    // Require for fancier stuff (not compatible with audio)
-    #define RGBLED_NUM 14     // Number of LEDs
-    #define RGBLIGHT_HUE_STEP 10
-    #define RGBLIGHT_SAT_STEP 17
-    #define RGBLIGHT_VAL_STEP 17
-
-You'll need to edit `RGB_DI_PIN` to the pin you have your `DI` on your RGB strip wired to.
-
-The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. For details, please check this keymap. `keyboards/planck/keymaps/yang/keymap.c`
-
-### WS2812 Wiring
-
-![WS2812 Wiring](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/WS2812-wiring.jpg)
-
-Please note the USB port can only supply a limited amount of power to the keyboard (500mA by standard, however, modern computer and most usb hubs can provide 700+mA.). According to the data of NeoPixel from Adafruit, 30 WS2812 LEDs require a 5V 1A power supply, LEDs used in this mod should not more than 20.
-
-## Safety Considerations
-
-You probably don't want to "brick" your keyboard, making it impossible
-to rewrite firmware onto it.  Here are some of the parameters to show
-what things are (and likely aren't) too risky.
-
-- If a keyboard map does not include RESET, then, to get into DFU
-  mode, you will need to press the reset button on the PCB, which
-  requires unscrewing some bits.
-- Messing with tmk_core / common files might make the keyboard
-  inoperable
-- Too large a .hex file is trouble; `make dfu` will erase the block,
-  test the size (oops, wrong order!), which errors out, failing to
-  flash the keyboard
-- DFU tools do /not/ allow you to write into the bootloader (unless
-  you throw in extra fruitsalad of options), so there is little risk
-  there.
-- EEPROM has around a 100000 write cycle.  You shouldn't rewrite the
-  firmware repeatedly and continually; that'll burn the EEPROM
-  eventually.
-
-# Porting your keyboard to QMK
-
-If your keyboard is running an Atmega chip (atmega32u4 and others), it's pretty easy to get things setup for compiling your own firmware to flash onto your board. There is a `/util/new_project.sh <keyboard>` script to help get you started - you can simply pass your keyboard's name into the script, and all of the necessary files will be created. The components of each are described below.
-
-## `/keyboards/<keyboard>/config.h`
-
-The `USB Device descriptor parameter` block contains parameters are used to uniquely identify your keyboard, but they don't really matter to the machine.
-
-Your `MATRIX_ROWS` and `MATRIX_COLS` are the numbers of rows and cols in your keyboard matrix - this may be different than the number of actual rows and columns on your keyboard. There are some tricks you can pull to increase the number of keys in a given matrix, but most keyboards are pretty straight-forward. 
-
-The `MATRIX_ROW_PINS` and `MATRIX_COL_PINS` are the pins your MCU uses on each row/column. Your schematic (if you have one) will have this information on it, and the values will vary depending on your setup. This is one of the most important things to double-check in getting your keyboard setup correctly.
-
-For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the diodes in the `COL2ROW` position, but it's possible that they are in the other - people coming from EasyAVR often use `ROW2COL`. Nothing will function if this is incorrect.
-
-`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported. 
-
-`BACKLIGHT_BREATHING` is a fancier backlight feature, and uses one of the timers.
-
-`BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number.
-
-## `/keyboards/<keyboard>/Makefile`
-
-The values at the top likely won't need to be changed, since most boards use the `atmega32u4` chip. The `BOOTLOADER_SIZE` will need to be adjusted based on your MCU type. It's defaulted to the Teensy, since that's the most common controller. Below is quoted from the `Makefile`.
-
-```
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-```
-
-At the bottom of the file, you'll find lots of features to turn on and off - all of these options should be set with `?=` to allow for the keymap overrides. `?=` only assigns if the variable was previously undefined. For the full documenation of these features, see the [Makefile options](#makefile-options).
-
-## `/keyboards/<keyboard>/readme.md`
-
-This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well. This file will be rendered into a webpage at qmk.fm/keyboards/<keyboard>/.
-
-## `/keyboards/<keyboard>/<keyboard>.c`
-
-This is where all of the custom logic for your keyboard goes - you may not need to put anything in this file, since a lot of things are configured automatically. All of the `*_kb()` functions are defined here. If you modify them, remember to keep the calls to `*_user()`, or things in the keymaps might not work. You can read more about the functions [here](#custom-quantum-functions-for-keyboards-and-keymaps)
-
-## `/keyboards/<keyboard>/<keyboard>.h`
-
-Here is where you can (optionally) define your `KEYMAP` function to remap your matrix into a more readable format. With ortholinear boards, this isn't always necessary, but it can help to accomodate the dead spots on your matrix, where there are keys that take up more than one space (2u, staggering, 6.25u, etc). The example shows the difference between the physical keys, and the matrix design:
-
-```
-#define KEYMAP( \
-    k00, k01, k02, \
-      k10,  k11   \
-) \
-{ \
-    { k00, k01,   k02 }, \
-    { k10, KC_NO, k11 }, \
-}
-```
-
-Each of the `kxx` variables needs to be unique, and usually follows the format `k<row><col>`. You can place `KC_NO` where your dead keys are in your matrix.
+* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally.
diff --git a/testlist.mk b/testlist.mk
new file mode 100644 (file)
index 0000000..1884d6d
--- /dev/null
@@ -0,0 +1,13 @@
+include $(ROOT_DIR)/quantum/serial_link/tests/testlist.mk
+
+define VALIDATE_TEST_LIST
+    ifneq ($1,)
+        ifeq ($$(findstring -,$1),-)
+            $$(error Test names can't contain '-', but '$1' does)
+        else
+            $$(eval $$(call VALIDATE_TEST_LIST,$$(firstword $2),$$(wordlist 2,9999,$2)))
+        endif
+    endif
+endef
+
+$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST))))
\ No newline at end of file
index 3bf2b34f88f8a00c840244ce925812e79c596740..5df539def518ecdabb68dec01539eaf50e0c8820 100644 (file)
@@ -26,7 +26,7 @@ CFLAGS += -fno-inline-small-functions
 CFLAGS += -fno-strict-aliasing
 
 CPPFLAGS += $(COMPILEFLAGS)
-CPPFLAGS += -fno-exceptions
+CPPFLAGS += -fno-exceptions -std=c++11
 
 LDFLAGS +=-Wl,--gc-sections
 
@@ -107,6 +107,10 @@ flip: $(BUILD_DIR)/$(TARGET).hex
        batchisp -hardware usb -device $(MCU) -operation start reset 0
 
 dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter
+       until dfu-programmer $(MCU) get bootloader-version; do\
+               echo "Error: Bootloader not found. Trying again in 5s." ;\
+               sleep 5 ;\
+       done
 ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1)))
        dfu-programmer $(MCU) erase --force
 else
@@ -134,6 +138,11 @@ else
 endif
        dfu-programmer $(MCU) reset
 
+# Convert hex to bin.
+flashbin: $(BUILD_DIR)/$(TARGET).hex
+       $(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
+       $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
+       $(COPY) $(BUILD_DIR)/$(TARGET).bin FLASH.bin; 
 
 # Generate avr-gdb config/init file which does the following:
 #     define the reset signal, load the target file, connect to target, and set
index cb67ac6f25ba311815b8c005c9388c6903d583d8..062a712bd106d5c5b3d4e601a59c938a3aee6e79 100644 (file)
@@ -89,9 +89,9 @@ CHIBISRC = $(STARTUPSRC) \
           $(STARTUPASM) \
           $(PORTASM) \
           $(OSALASM)         
-          
-SRC += $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
 
+CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
+          
 EXTRAINCDIRS += $(CHIBIOS)/os/license \
          $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
          $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
@@ -143,14 +143,6 @@ MCUFLAGS = -mcpu=$(MCU)
 
 DEBUG = gdb
 
-# Define ASM defines here
-# bootloader definitions may be used in the startup .s file
-ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
-    OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
-else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
-    OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
-endif
-
 # List any extra directories to look for libraries here.
 EXTRALIBDIRS = $(RULESPATH)/ld
 
index aa05b9491d5d523cbc25b39290b09cb04fb5e2da..3c1373c081f5381fa3853330a9fb63284d365f1d 100644 (file)
@@ -5,7 +5,7 @@ else ifeq ($(PLATFORM),CHIBIOS)
        PLATFORM_COMMON_DIR = $(COMMON_DIR)/chibios
 endif
 
-SRC += $(COMMON_DIR)/host.c \
+TMK_COMMON_SRC +=      $(COMMON_DIR)/host.c \
        $(COMMON_DIR)/keyboard.c \
        $(COMMON_DIR)/action.c \
        $(COMMON_DIR)/action_tapping.c \
@@ -21,101 +21,101 @@ SRC +=    $(COMMON_DIR)/host.c \
        $(PLATFORM_COMMON_DIR)/bootloader.c \
 
 ifeq ($(PLATFORM),AVR)
-       SRC += $(PLATFORM_COMMON_DIR)/xprintf.S
+       TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/xprintf.S
 endif 
 
 ifeq ($(PLATFORM),CHIBIOS)
-       SRC += $(PLATFORM_COMMON_DIR)/printf.c
-       SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
+       TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/printf.c
+       TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
 endif
 
 
 
 # Option modules
 ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
-    OPT_DEFS += -DBOOTMAGIC_ENABLE
-    SRC += $(COMMON_DIR)/bootmagic.c
+    TMK_COMMON_DEFS += -DBOOTMAGIC_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/bootmagic.c
 else
-    OPT_DEFS += -DMAGIC_ENABLE
-    SRC += $(COMMON_DIR)/magic.c
+    TMK_COMMON_DEFS += -DMAGIC_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/magic.c
 endif
 
 ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
-    SRC += $(COMMON_DIR)/mousekey.c
-    OPT_DEFS += -DMOUSEKEY_ENABLE
-    OPT_DEFS += -DMOUSE_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/mousekey.c
+    TMK_COMMON_DEFS += -DMOUSEKEY_ENABLE
+    TMK_COMMON_DEFS += -DMOUSE_ENABLE
 endif
 
 ifeq ($(strip $(EXTRAKEY_ENABLE)), yes)
-    OPT_DEFS += -DEXTRAKEY_ENABLE
+    TMK_COMMON_DEFS += -DEXTRAKEY_ENABLE
+endif
+
+ifeq ($(strip $(RAW_ENABLE)), yes)
+    TMK_COMMON_DEFS += -DRAW_ENABLE
 endif
 
 ifeq ($(strip $(CONSOLE_ENABLE)), yes)
-    OPT_DEFS += -DCONSOLE_ENABLE
+    TMK_COMMON_DEFS += -DCONSOLE_ENABLE
 else
-    OPT_DEFS += -DNO_PRINT
-    OPT_DEFS += -DNO_DEBUG
+    TMK_COMMON_DEFS += -DNO_PRINT
+    TMK_COMMON_DEFS += -DNO_DEBUG
 endif
 
 ifeq ($(strip $(COMMAND_ENABLE)), yes)
-    SRC += $(COMMON_DIR)/command.c
-    OPT_DEFS += -DCOMMAND_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/command.c
+    TMK_COMMON_DEFS += -DCOMMAND_ENABLE
 endif
 
 ifeq ($(strip $(NKRO_ENABLE)), yes)
-    OPT_DEFS += -DNKRO_ENABLE
+    TMK_COMMON_DEFS += -DNKRO_ENABLE
 endif
 
 ifeq ($(strip $(USB_6KRO_ENABLE)), yes)
-    OPT_DEFS += -DUSB_6KRO_ENABLE
+    TMK_COMMON_DEFS += -DUSB_6KRO_ENABLE
 endif
 
 ifeq ($(strip $(SLEEP_LED_ENABLE)), yes)
-    SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
-    OPT_DEFS += -DSLEEP_LED_ENABLE
-    OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+    TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
+    TMK_COMMON_DEFS += -DSLEEP_LED_ENABLE
+    TMK_COMMON_DEFS += -DNO_SUSPEND_POWER_DOWN
 endif
 
 ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
-    SRC += $(COMMON_DIR)/backlight.c
-    OPT_DEFS += -DBACKLIGHT_ENABLE
+    TMK_COMMON_SRC += $(COMMON_DIR)/backlight.c
+    TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE
+endif
+
+ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes)
+    TMK_COMMON_DEFS += -DADAFRUIT_BLE_ENABLE
 endif
 
 ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
-    OPT_DEFS += -DBLUETOOTH_ENABLE
+    TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
+endif
+
+ifeq ($(strip $(ONEHAND_ENABLE)), yes)
+    TMK_COMMON_DEFS += -DONEHAND_ENABLE
 endif
 
 ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
-    OPT_DEFS += -DKEYMAP_SECTION_ENABLE
+    TMK_COMMON_DEFS += -DKEYMAP_SECTION_ENABLE
 
     ifeq ($(strip $(MCU)),atmega32u2)
-       EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
+       TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
     else ifeq ($(strip $(MCU)),atmega32u4)
-       EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
+       TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
     else
-       EXTRALDFLAGS = $(error no ldscript for keymap section)
+       TMK_COMMON_LDFLAGS = $(error no ldscript for keymap section)
     endif
 endif
 
-ifeq ($(MASTER),right) 
-       OPT_DEFS += -DMASTER_IS_ON_RIGHT
-else 
-       ifneq ($(MASTER),left)
-$(error MASTER does not have a valid value(left/right))
-       endif
-endif
-
-
-# Version string
-OPT_DEFS += -DVERSION=$(GIT_VERSION)
-
 # Bootloader address
 ifdef STM32_BOOTLOADER_ADDRESS
-    OPT_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS)
+    TMK_COMMON_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS)
 endif
 
 # Search Path
 VPATH += $(TMK_PATH)/$(COMMON_DIR)
 ifeq ($(PLATFORM),CHIBIOS)
 VPATH += $(TMK_PATH)/$(COMMON_DIR)/chibios
-endif
\ No newline at end of file
+endif
index be6dea2b799d6a8223984b52c86095b2caf46fae..d485b46c77cf83f81967d9af2060cd0f42fd3a66 100644 (file)
@@ -41,6 +41,12 @@ void action_exec(keyevent_t event)
         dprint("EVENT: "); debug_event(event); dprintln();
     }
 
+#ifdef ONEHAND_ENABLE
+    if (!IS_NOEVENT(event)) {
+        process_hand_swap(&event);
+    }
+#endif
+
     keyrecord_t record = { .event = event };
 
 #ifndef NO_ACTION_TAPPING
@@ -53,6 +59,26 @@ void action_exec(keyevent_t event)
 #endif
 }
 
+#ifdef ONEHAND_ENABLE
+bool swap_hands = false;
+
+void process_hand_swap(keyevent_t *event) {
+    static swap_state_row_t swap_state[MATRIX_ROWS];
+
+    keypos_t pos = event->key;
+    swap_state_row_t col_bit = (swap_state_row_t)1<<pos.col;
+    bool do_swap = event->pressed ? swap_hands :
+                                    swap_state[pos.row] & (col_bit);
+
+    if (do_swap) {
+        event->key = hand_swap_config[pos.row][pos.col];
+        swap_state[pos.row] |= col_bit;
+    } else {
+        swap_state[pos.row] &= ~(col_bit);
+    }
+}
+#endif
+
 #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
 bool disable_action_cache = false;
 
@@ -129,9 +155,10 @@ void process_action(keyrecord_t *record, action_t action)
                                                                 action.key.mods<<4;
                 if (event.pressed) {
                     if (mods) {
-                        if (IS_MOD(action.key.code)) {
+                        if (IS_MOD(action.key.code) || action.key.code == KC_NO) {
                             // e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless.
-                            // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT)
+                            // This also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT).
+                            // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO).
                             add_mods(mods);
                         } else {
                             add_weak_mods(mods);
@@ -142,7 +169,7 @@ void process_action(keyrecord_t *record, action_t action)
                 } else {
                     unregister_code(action.key.code);
                     if (mods) {
-                        if (IS_MOD(action.key.code)) {
+                        if (IS_MOD(action.key.code) || action.key.code == KC_NO) {
                             del_mods(mods);
                         } else {
                             del_weak_mods(mods);
@@ -440,6 +467,54 @@ void process_action(keyrecord_t *record, action_t action)
 #endif
         case ACT_COMMAND:
             break;
+#ifdef ONEHAND_ENABLE
+        case ACT_SWAP_HANDS:
+            switch (action.swap.code) {
+                case OP_SH_TOGGLE:
+                    if (event.pressed) {
+                        swap_hands = !swap_hands;
+                    }
+                    break;
+                case OP_SH_ON_OFF:
+                    swap_hands = event.pressed;
+                    break;
+                case OP_SH_OFF_ON:
+                    swap_hands = !event.pressed;
+                    break;
+                case OP_SH_ON:
+                    if (!event.pressed) {
+                        swap_hands = true;
+                    }
+                    break;
+                case OP_SH_OFF:
+                    if (!event.pressed) {
+                        swap_hands = false;
+                    }
+                    break;
+    #ifndef NO_ACTION_TAPPING
+                case OP_SH_TAP_TOGGLE:
+                    /* tap toggle */
+                    if (tap_count > 0) {
+                        if (!event.pressed) {
+                            swap_hands = !swap_hands;
+                        }
+                    } else {
+                        swap_hands = event.pressed;
+                    }
+                    break;
+                default:
+                    if (tap_count > 0) {
+                        if (event.pressed) {
+                            register_code(action.swap.code);
+                        } else {
+                            unregister_code(action.swap.code);
+                        }
+                    } else {
+                        swap_hands = event.pressed;
+                    }
+    #endif
+            }
+#endif
 #ifndef NO_ACTION_FUNCTION
         case ACT_FUNCTION:
             action_function(record, action.func.id, action.func.opt);
@@ -652,6 +727,13 @@ bool is_tap_key(keypos_t key)
                     return true;
             }
             return false;
+        case ACT_SWAP_HANDS:
+            switch (action.swap.code) {
+                case 0x00 ... 0xdf:
+                case OP_SH_TAP_TOGGLE:
+                    return true;
+            }
+            return false;
         case ACT_MACRO:
         case ACT_FUNCTION:
             if (action.func.opt & FUNC_TAP) { return true; }
@@ -692,6 +774,7 @@ void debug_action(action_t action)
         case ACT_MACRO:             dprint("ACT_MACRO");             break;
         case ACT_COMMAND:           dprint("ACT_COMMAND");           break;
         case ACT_FUNCTION:          dprint("ACT_FUNCTION");          break;
+        case ACT_SWAP_HANDS:        dprint("ACT_SWAP_HANDS");        break;
         default:                    dprint("UNKNOWN");               break;
     }
     dprintf("[%X:%02X]", action.kind.param>>8, action.kind.param&0xff);
index e8aa12a7cbda9fefde923411b46a7d4ea166b419..b9bdfe642c5a006b030b28e1c18876089f1e3a60 100644 (file)
@@ -65,6 +65,24 @@ bool process_record_quantum(keyrecord_t *record);
 #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
 extern bool disable_action_cache;
 #endif
+
+/* Code for handling one-handed key modifiers. */
+#ifdef ONEHAND_ENABLE
+extern bool swap_hands;
+extern const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS];
+#if (MATRIX_COLS <= 8)
+typedef  uint8_t    swap_state_row_t;
+#elif (MATRIX_COLS <= 16)
+typedef  uint16_t   swap_state_row_t;
+#elif (MATRIX_COLS <= 32)
+typedef  uint32_t   swap_state_row_t;
+#else
+#error "MATRIX_COLS: invalid value"
+#endif
+
+void process_hand_swap(keyevent_t *record);
+#endif
+
 void process_record_nocache(keyrecord_t *record);
 void process_record(keyrecord_t *record);
 void process_action(keyrecord_t *record, action_t action);
index ca729aaece26a8e3b7ea0ffd72f40989867c0782..33da35f35f85d59f6ef5e0d605ca950eb0776fc6 100644 (file)
@@ -108,6 +108,8 @@ enum action_kind_id {
     /* Other Keys */
     ACT_USAGE           = 0b0100,
     ACT_MOUSEKEY        = 0b0101,
+    /* One-hand Support */
+    ACT_SWAP_HANDS      = 0b0110,
     /* Layer Actions */
     ACT_LAYER           = 0b1000,
     ACT_LAYER_TAP       = 0b1010, /* Layer  0-15 */
@@ -178,6 +180,11 @@ typedef union {
         uint8_t  opt    :4;
         uint8_t  kind   :4;
     } func;
+    struct action_swap {
+        uint8_t  code   :8;
+        uint8_t  opt   :4;
+        uint8_t  kind   :4;
+    } swap;
 } action_t;
 
 
@@ -295,6 +302,7 @@ enum backlight_opt {
     BACKLIGHT_STEP     = 3,
     BACKLIGHT_LEVEL    = 4,
 };
+
 /* Macro */
 #define ACTION_MACRO(id)                ACTION(ACT_MACRO, (id))
 #define ACTION_MACRO_TAP(id)            ACTION(ACT_MACRO, FUNC_TAP<<8 | (id))
@@ -306,7 +314,7 @@ enum backlight_opt {
 #define ACTION_BACKLIGHT_STEP()         ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8)
 #define ACTION_BACKLIGHT_LEVEL(level)   ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level))
 /* Command */
-#define ACTION_COMMAND(id, opt)         ACTION(ACT_COMMAND,  (opt)<<8 | (addr))
+#define ACTION_COMMAND(id, opt)         ACTION(ACT_COMMAND,  (opt)<<8 | (id))
 /* Function */
 enum function_opts {
     FUNC_TAP = 0x8,     /* indciates function is tappable */
@@ -314,5 +322,23 @@ enum function_opts {
 #define ACTION_FUNCTION(id)             ACTION(ACT_FUNCTION, (id))
 #define ACTION_FUNCTION_TAP(id)         ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id))
 #define ACTION_FUNCTION_OPT(id, opt)    ACTION(ACT_FUNCTION, (opt)<<8 | (id))
+/* OneHand Support */
+enum swap_hands_pram_tap_op {
+    OP_SH_TOGGLE = 0xF0,
+    OP_SH_TAP_TOGGLE,
+    OP_SH_ON_OFF,
+    OP_SH_OFF_ON,
+    OP_SH_OFF,
+    OP_SH_ON,
+};
+
+#define ACTION_SWAP_HANDS()             ACTION_SWAP_HANDS_ON_OFF()
+#define ACTION_SWAP_HANDS_TOGGLE()      ACTION(ACT_SWAP_HANDS, OP_SH_TOGGLE)
+#define ACTION_SWAP_HANDS_TAP_TOGGLE()  ACTION(ACT_SWAP_HANDS, OP_SH_TAP_TOGGLE)
+#define ACTION_SWAP_HANDS_TAP_KEY(key)  ACTION(ACT_SWAP_HANDS, key)
+#define ACTION_SWAP_HANDS_ON_OFF()      ACTION(ACT_SWAP_HANDS, OP_SH_ON_OFF)
+#define ACTION_SWAP_HANDS_OFF_ON()      ACTION(ACT_SWAP_HANDS, OP_SH_OFF_ON)
+#define ACTION_SWAP_HANDS_ON()          ACTION(ACT_SWAP_HANDS, OP_SH_ON)
+#define ACTION_SWAP_HANDS_OFF()         ACTION(ACT_SWAP_HANDS, OP_SH_OFF)
 
 #endif /* ACTION_CODE_H */
index 63fa2b5ae4707755400534749a8771018909cadf..a3c7579642770620542924557072f3ffbf5acd50 100644 (file)
@@ -111,7 +111,7 @@ void layer_debug(void)
 #endif
 
 #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
-uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {0};
+uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}};
 
 void update_source_layers_cache(keypos_t key, uint8_t layer)
 {
index 61ff202befa510b9d08f3604f7fad50c607c11b7..cb4b2526484e59fc31191ca10286176533e30585 100644 (file)
@@ -20,6 +20,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action_util.h"
 #include "action_layer.h"
 #include "timer.h"
+#include "keycode_config.h"
+
+extern keymap_config_t keymap_config;
+
 
 static inline void add_key_byte(uint8_t code);
 static inline void del_key_byte(uint8_t code);
@@ -139,7 +143,7 @@ void send_keyboard_report(void) {
 void add_key(uint8_t key)
 {
 #ifdef NKRO_ENABLE
-    if (keyboard_protocol && keyboard_nkro) {
+    if (keyboard_protocol && keymap_config.nkro) {
         add_key_bit(key);
         return;
     }
@@ -150,7 +154,7 @@ void add_key(uint8_t key)
 void del_key(uint8_t key)
 {
 #ifdef NKRO_ENABLE
-    if (keyboard_protocol && keyboard_nkro) {
+    if (keyboard_protocol && keymap_config.nkro) {
         del_key_bit(key);
         return;
     }
@@ -231,7 +235,7 @@ uint8_t has_anymod(void)
 uint8_t get_first_key(void)
 {
 #ifdef NKRO_ENABLE
-    if (keyboard_protocol && keyboard_nkro) {
+    if (keyboard_protocol && keymap_config.nkro) {
         uint8_t i = 0;
         for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
             ;
index fb9bf2d1c3328a2a441820bef7b377a58f168bed..ad547b9853c9cbed234c225d49214c831782761b 100644 (file)
@@ -38,7 +38,7 @@
  *          |               |                        |               |
  *          =               =                        =               =
  *          |               | 32KB-4KB               |               | 128KB-8KB
- * 0x6000   +---------------+               0x1FC00  +---------------+
+ * 0x7000   +---------------+               0x1E000  +---------------+
  *          |  Bootloader   | 4KB                    |  Bootloader   | 8KB
  * 0x7FFF   +---------------+               0x1FFFF  +---------------+
  *
@@ -64,8 +64,8 @@
 #define BOOTLOADER_START    (FLASH_SIZE - BOOTLOADER_SIZE)
 
 
-/* 
- * Entering the Bootloader via Software 
+/*
+ * Entering the Bootloader via Software
  * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
  */
 #define BOOTLOADER_RESET_KEY 0xB007B007
@@ -137,7 +137,7 @@ void bootloader_jump_after_watchdog_reset(void)
 #if 0
 /* Jumping To The Bootloader
  * http://www.pjrc.com/teensy/jump_to_bootloader.html
- * 
+ *
  * This method doen't work when using LUFA. idk why.
  * - needs to initialize more regisers or interrupt setting?
  */
index 8a7272bbc5298612bc935f51116d5e44973cddf2..0c81e8361213af2221c93883801e649ea364a5a7 100644 (file)
@@ -47,6 +47,7 @@ void suspend_idle(uint8_t time)
     sleep_disable();
 }
 
+#ifndef NO_SUSPEND_POWER_DOWN
 /* Power down MCU with watchdog timer
  * wdto: watchdog timer timeout defined in <avr/wdt.h>
  *          WDTO_15MS
@@ -61,6 +62,7 @@ void suspend_idle(uint8_t time)
  *          WDTO_8S
  */
 static uint8_t wdt_timeout = 0;
+
 static void power_down(uint8_t wdto)
 {
 #ifdef PROTOCOL_LUFA
@@ -98,19 +100,19 @@ static void power_down(uint8_t wdto)
     // Disable watchdog after sleep
     wdt_disable();
 }
+#endif
 
 void suspend_power_down(void)
 {
+#ifndef NO_SUSPEND_POWER_DOWN
     power_down(WDTO_15MS);
+#endif
 }
 
 __attribute__ ((weak)) void matrix_power_up(void) {}
 __attribute__ ((weak)) void matrix_power_down(void) {}
 bool suspend_wakeup_condition(void)
 {
-#ifdef BACKLIGHT_ENABLE
-    backlight_set(0);
-#endif
     matrix_power_up();
     matrix_scan();
     matrix_power_down();
@@ -126,10 +128,9 @@ void suspend_wakeup_init(void)
     // clear keyboard state
     clear_keyboard();
 #ifdef BACKLIGHT_ENABLE
-    backlight_set(0);
     backlight_init();
 #endif
-led_set(host_keyboard_leds());
+       led_set(host_keyboard_leds());
 }
 
 #ifndef NO_SUSPEND_POWER_DOWN
index 292b41c3a6c29fca9e4319114a0759473ea3e7e3..84af44488539e13867bd3dc9fa5fd2e567ca1025 100644 (file)
@@ -17,6 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <avr/io.h>
 #include <avr/interrupt.h>
+#include <util/atomic.h>
 #include <stdint.h>
 #include "timer_avr.h"
 #include "timer.h"
@@ -24,7 +25,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 // counter resolution 1ms
 // NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }}
-volatile uint32_t timer_count = 0;
+volatile uint32_t timer_count;
 
 void timer_init(void)
 {
@@ -52,10 +53,9 @@ void timer_init(void)
 inline
 void timer_clear(void)
 {
-    uint8_t sreg = SREG;
-    cli();
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
     timer_count = 0;
-    SREG = sreg;
+  }
 }
 
 inline
@@ -63,10 +63,9 @@ uint16_t timer_read(void)
 {
     uint32_t t;
 
-    uint8_t sreg = SREG;
-    cli();
-    t = timer_count;
-    SREG = sreg;
+    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+      t = timer_count;
+    }
 
     return (t & 0xFFFF);
 }
@@ -76,10 +75,9 @@ uint32_t timer_read32(void)
 {
     uint32_t t;
 
-    uint8_t sreg = SREG;
-    cli();
-    t = timer_count;
-    SREG = sreg;
+    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+      t = timer_count;
+    }
 
     return t;
 }
@@ -89,10 +87,9 @@ uint16_t timer_elapsed(uint16_t last)
 {
     uint32_t t;
 
-    uint8_t sreg = SREG;
-    cli();
-    t = timer_count;
-    SREG = sreg;
+    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+      t = timer_count;
+    }
 
     return TIMER_DIFF_16((t & 0xFFFF), last);
 }
@@ -102,10 +99,9 @@ uint32_t timer_elapsed32(uint32_t last)
 {
     uint32_t t;
 
-    uint8_t sreg = SREG;
-    cli();
-    t = timer_count;
-    SREG = sreg;
+    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+      t = timer_count;
+    }
 
     return TIMER_DIFF_32(t, last);
 }
index 0cec70ce224f4317af446d1cacaeb6d13de2ad9c..06434b98d9378949fc271b7bc86bfb570a76218e 100644 (file)
-;---------------------------------------------------------------------------;\r
-; Extended itoa, puts, printf and atoi                     (C)ChaN, 2011\r
-;---------------------------------------------------------------------------;\r
-\r
-                               // Base size is 152 bytes\r
-#define        CR_CRLF         0       // Convert \n to \r\n (+10 bytes)\r
-#define USE_XPRINTF    1       // Enable xprintf function (+194 bytes)\r
-#define USE_XSPRINTF   0       // Add xsprintf function (+78 bytes)\r
-#define USE_XFPRINTF   0       // Add xfprintf function (+54 bytes)\r
-#define USE_XATOI      0       // Enable xatoi function (+182 bytes)\r
-\r
-\r
-#if FLASHEND > 0x1FFFF\r
-#error xitoa module does not support 256K devices\r
-#endif\r
-\r
-.nolist\r
-#include <avr/io.h>    // Include device specific definitions.\r
-.list\r
-\r
-#ifdef SPM_PAGESIZE    // Recent devices have "lpm Rd,Z+" and "movw".\r
-.macro _LPMI   reg\r
-       lpm     \reg, Z+\r
-.endm\r
-.macro _MOVW   dh,dl, sh,sl\r
-       movw    \dl, \sl\r
-.endm\r
-#else                  // Earlier devices do not have "lpm Rd,Z+" nor "movw".\r
-.macro _LPMI   reg\r
-       lpm\r
-       mov     \reg, r0\r
-       adiw    ZL, 1\r
-.endm\r
-.macro _MOVW   dh,dl, sh,sl\r
-       mov     \dl, \sl\r
-       mov     \dh, \sh\r
-.endm\r
-#endif\r
-\r
-\r
-\r
-;---------------------------------------------------------------------------\r
-; Stub function to forward to user output function\r
-;\r
-;Prototype: void xputc (char chr       // a character to be output\r
-;                      );\r
-;Size: 12/12 words\r
-\r
-.section .bss\r
-.global xfunc_out      ; xfunc_out must be initialized before using this module.\r
-xfunc_out:     .ds.w   1\r
-.section .text\r
-\r
-\r
-.func xputc\r
-.global xputc\r
-xputc:\r
-#if CR_CRLF\r
-       cpi     r24, 10         ;LF --> CRLF\r
-       brne    1f              ;\r
-       ldi     r24, 13         ;\r
-       rcall   1f              ;\r
-       ldi     r24, 10         ;/\r
-1:\r
-#endif\r
-       push    ZH\r
-       push    ZL\r
-       lds     ZL, xfunc_out+0 ;Pointer to the registered output function.\r
-       lds     ZH, xfunc_out+1 ;/\r
-       sbiw    ZL, 0           ;Skip if null\r
-       breq    2f              ;/\r
-       icall\r
-2:     pop     ZL\r
-       pop     ZH\r
-       ret\r
-.endfunc\r
-\r
-\r
-\r
-;---------------------------------------------------------------------------\r
-; Direct ROM string output\r
-;\r
-;Prototype: void xputs (const char *str_p // rom string to be output\r
-;                      );\r
-\r
-.func xputs\r
-.global xputs\r
-xputs:\r
-       _MOVW   ZH,ZL, r25,r24  ; Z = pointer to rom string\r
-1:     _LPMI   r24\r
-       cpi     r24, 0\r
-       breq    2f\r
-       rcall   xputc\r
-       rjmp    1b\r
-2:     ret\r
-.endfunc\r
-\r
-\r
-;---------------------------------------------------------------------------\r
-; Extended direct numeral string output (32bit version)\r
-;\r
-;Prototype: void xitoa (long value,    // value to be output\r
-;                       char radix,    // radix\r
-;                       char width);   // minimum width\r
-;\r
-\r
-.func xitoa\r
-.global xitoa\r
-xitoa:\r
-                               ;r25:r22 = value, r20 = base, r18 = digits\r
-       clr     r31             ;r31 = stack level\r
-       ldi     r30, ' '        ;r30 = sign\r
-       ldi     r19, ' '        ;r19 = filler\r
-       sbrs    r20, 7          ;When base indicates signd format and the value\r
-       rjmp    0f              ;is minus, add a '-'.\r
-       neg     r20             ;\r
-       sbrs    r25, 7          ;\r
-       rjmp    0f              ;\r
-       ldi     r30, '-'        ;\r
-       com     r22             ;\r
-       com     r23             ;\r
-       com     r24             ;\r
-       com     r25             ;\r
-       adc     r22, r1         ;\r
-       adc     r23, r1         ;\r
-       adc     r24, r1         ;\r
-       adc     r25, r1         ;/\r
-0:     sbrs    r18, 7          ;When digits indicates zero filled,\r
-       rjmp    1f              ;filler is '0'.\r
-       neg     r18             ;\r
-       ldi     r19, '0'        ;/\r
-                               ;----- string conversion loop\r
-1:     ldi     r21, 32         ;r26 = r25:r22 % r20\r
-       clr     r26             ;r25:r22 /= r20\r
-2:     lsl     r22             ;\r
-       rol     r23             ;\r
-       rol     r24             ;\r
-       rol     r25             ;\r
-       rol     r26             ;\r
-       cp      r26, r20        ;\r
-       brcs    3f              ;\r
-       sub     r26, r20        ;\r
-       inc     r22             ;\r
-3:     dec     r21             ;\r
-       brne    2b              ;/\r
-       cpi     r26, 10         ;r26 is a numeral digit '0'-'F'\r
-       brcs    4f              ;\r
-       subi    r26, -7         ;\r
-4:     subi    r26, -'0'       ;/\r
-       push    r26             ;Stack it\r
-       inc     r31             ;/\r
-       cp      r22, r1         ;Repeat until r25:r22 gets zero\r
-       cpc     r23, r1         ;\r
-       cpc     r24, r1         ;\r
-       cpc     r25, r1         ;\r
-       brne    1b              ;/\r
-\r
-       cpi     r30, '-'        ;Minus sign if needed\r
-       brne    5f              ;\r
-       push    r30             ;\r
-       inc     r31             ;/\r
-5:     cp      r31, r18        ;Filler\r
-       brcc    6f              ;\r
-       push    r19             ;\r
-       inc     r31             ;\r
-       rjmp    5b              ;/\r
-\r
-6:     pop     r24             ;Flush stacked digits and exit\r
-       rcall   xputc           ;\r
-       dec     r31             ;\r
-       brne    6b              ;/\r
-\r
-       ret\r
-.endfunc\r
-\r
-\r
-\r
-;---------------------------------------------------------------------------;\r
-; Formatted string output (16/32bit version)\r
-;\r
-;Prototype:\r
-; void __xprintf (const char *format_p, ...);\r
-; void __xsprintf(char*, const char *format_p, ...);\r
-; void __xfprintf(void(*func)(char), const char *format_p, ...);\r
-;\r
-\r
-#if USE_XPRINTF\r
-\r
-.func xvprintf\r
-xvprintf:\r
-       ld      ZL, Y+          ;Z = pointer to format string\r
-       ld      ZH, Y+          ;/\r
-\r
-0:     _LPMI   r24             ;Get a format char\r
-       cpi     r24, 0          ;End of format string?\r
-       breq    90f             ;/\r
-       cpi     r24, '%'        ;Is format?\r
-       breq    20f             ;/\r
-1:     rcall   xputc           ;Put a normal character\r
-       rjmp    0b              ;/\r
-90:    ret\r
-\r
-20:    ldi     r18, 0          ;r18: digits\r
-       clt                     ;T: filler\r
-       _LPMI   r21             ;Get flags\r
-       cpi     r21, '%'        ;Is a %?\r
-       breq    1b              ;/\r
-       cpi     r21, '0'        ;Zero filled?\r
-       brne    23f             ;\r
-       set                     ;/\r
-22:    _LPMI   r21             ;Get width\r
-23:    cpi     r21, '9'+1      ;\r
-       brcc    24f             ;\r
-       subi    r21, '0'        ;\r
-       brcs    90b             ;\r
-       lsl     r18             ;\r
-       mov     r0, r18         ;\r
-       lsl     r18             ;\r
-       lsl     r18             ;\r
-       add     r18, r0         ;\r
-       add     r18, r21        ;\r
-       rjmp    22b             ;/\r
-\r
-24:    brtc    25f             ;get value (low word)\r
-       neg     r18             ;\r
-25:    ld      r24, Y+         ;\r
-       ld      r25, Y+         ;/\r
-       cpi     r21, 'c'        ;Is type character?\r
-       breq    1b              ;/\r
-       cpi     r21, 's'        ;Is type RAM string?\r
-       breq    50f             ;/\r
-       cpi     r21, 'S'        ;Is type ROM string?\r
-       breq    60f             ;/\r
-       _MOVW   r23,r22,r25,r24 ;r25:r22 = value\r
-       clr     r24             ;\r
-       clr     r25             ;\r
-       clt                     ;/\r
-       cpi     r21, 'l'        ;Is long int?\r
-       brne    26f             ;\r
-       ld      r24, Y+         ;get value (high word)\r
-       ld      r25, Y+         ;\r
-       set                     ;\r
-       _LPMI   r21             ;/\r
-26:    cpi     r21, 'd'        ;Is type signed decimal?\r
-       brne    27f             ;/\r
-       ldi     r20, -10        ;\r
-       brts    40f             ;\r
-       sbrs    r23, 7          ;\r
-       rjmp    40f             ;\r
-       ldi     r24, -1         ;\r
-       ldi     r25, -1         ;\r
-       rjmp    40f             ;/\r
-27:    cpi     r21, 'u'        ;Is type unsigned decimal?\r
-       ldi     r20, 10         ;\r
-       breq    40f             ;/\r
-       cpi     r21, 'X'        ;Is type hexdecimal?\r
-       ldi     r20, 16         ;\r
-       breq    40f             ;/\r
-       cpi     r21, 'b'        ;Is type binary?\r
-       ldi     r20, 2          ;\r
-       breq    40f             ;/\r
-       ret                     ;abort\r
-40:    push    ZH              ;Output the value\r
-       push    ZL              ;\r
-       rcall   xitoa           ;\r
-42:    pop     ZL              ;\r
-       pop     ZH              ;\r
-       rjmp    0b              ;/\r
-\r
-50:    push    ZH              ;Put a string on the RAM\r
-       push    ZL\r
-       _MOVW   ZH,ZL, r25,r24\r
-51:    ld      r24, Z+\r
-       cpi     r24, 0\r
-       breq    42b\r
-       rcall   xputc\r
-       rjmp    51b\r
-\r
-60:    push    ZH              ;Put a string on the ROM\r
-       push    ZL\r
-       rcall   xputs\r
-       rjmp    42b\r
-.endfunc\r
-\r
-\r
-.func __xprintf\r
-.global __xprintf\r
-__xprintf:\r
-       push    YH\r
-       push    YL\r
-       in      YL, _SFR_IO_ADDR(SPL)\r
-#ifdef SPH\r
-       in      YH, _SFR_IO_ADDR(SPH)\r
-#else\r
-       clr     YH\r
-#endif\r
-       adiw    YL, 5           ;Y = pointer to arguments\r
-       rcall   xvprintf\r
-       pop     YL\r
-       pop     YH\r
-       ret\r
-.endfunc\r
-\r
-\r
-#if USE_XSPRINTF\r
-\r
-.func __xsprintf\r
-putram:\r
-       _MOVW   ZH,ZL, r15,r14\r
-       st      Z+, r24\r
-       _MOVW   r15,r14, ZH,ZL\r
-       ret\r
-.global __xsprintf\r
-__xsprintf:\r
-       push    YH\r
-       push    YL\r
-       in      YL, _SFR_IO_ADDR(SPL)\r
-#ifdef SPH\r
-       in      YH, _SFR_IO_ADDR(SPH)\r
-#else\r
-       clr     YH\r
-#endif\r
-       adiw    YL, 5           ;Y = pointer to arguments\r
-       lds     ZL, xfunc_out+0 ;Save registered output function\r
-       lds     ZH, xfunc_out+1 ;\r
-       push    ZL              ;\r
-       push    ZH              ;/\r
-       ldi     ZL, lo8(pm(putram));Set local output function\r
-       ldi     ZH, hi8(pm(putram));\r
-       sts     xfunc_out+0, ZL ;\r
-       sts     xfunc_out+1, ZH ;/\r
-       push    r15             ;Initialize pointer to string buffer\r
-       push    r14             ;\r
-       ld      r14, Y+         ;\r
-       ld      r15, Y+         ;/\r
-       rcall   xvprintf\r
-       _MOVW   ZH,ZL, r15,r14  ;Terminate string\r
-       st      Z, r1           ;\r
-       pop     r14             ;\r
-       pop     r15             ;/\r
-       pop     ZH              ;Restore registered output function\r
-       pop     ZL              ;\r
-       sts     xfunc_out+0, ZL ;\r
-       sts     xfunc_out+1, ZH ;/\r
-       pop     YL\r
-       pop     YH\r
-       ret\r
-.endfunc\r
-#endif\r
-\r
-\r
-#if USE_XFPRINTF\r
-.func __xfprintf\r
-.global __xfprintf\r
-__xfprintf:\r
-       push    YH\r
-       push    YL\r
-       in      YL, _SFR_IO_ADDR(SPL)\r
-#ifdef SPH\r
-       in      YH, _SFR_IO_ADDR(SPH)\r
-#else\r
-       clr     YH\r
-#endif\r
-       adiw    YL, 5           ;Y = pointer to arguments\r
-       lds     ZL, xfunc_out+0 ;Save registered output function\r
-       lds     ZH, xfunc_out+1 ;\r
-       push    ZL              ;\r
-       push    ZH              ;/\r
-       ld      ZL, Y+          ;Set output function\r
-       ld      ZH, Y+          ;\r
-       sts     xfunc_out+0, ZL ;\r
-       sts     xfunc_out+1, ZH ;/\r
-       rcall   xvprintf\r
-       pop     ZH              ;Restore registered output function\r
-       pop     ZL              ;\r
-       sts     xfunc_out+0, ZL ;\r
-       sts     xfunc_out+1, ZH ;/\r
-       pop     YL\r
-       pop     YH\r
-       ret\r
-.endfunc\r
-#endif\r
-\r
-#endif\r
-\r
-\r
-\r
-;---------------------------------------------------------------------------\r
-; Extended numeral string input\r
-;\r
-;Prototype:\r
-; char xatoi (           /* 1: Successful, 0: Failed */\r
-;      const char **str, /* pointer to pointer to source string */\r
-;      long *res         /* result */\r
-; );\r
-;\r
-\r
-\r
-#if USE_XATOI\r
-.func xatoi\r
-.global xatoi\r
-xatoi:\r
-       _MOVW   r1, r0, r23, r22\r
-       _MOVW   XH, XL, r25, r24\r
-       ld      ZL, X+\r
-       ld      ZH, X+\r
-       clr     r18             ;r21:r18 = 0;\r
-       clr     r19             ;\r
-       clr     r20             ;\r
-       clr     r21             ;/\r
-       clt                     ;T = 0;\r
-\r
-       ldi     r25, 10         ;r25 = 10;\r
-       rjmp    41f             ;/\r
-40:    adiw    ZL, 1           ;Z++;\r
-41:    ld      r22, Z          ;r22 = *Z;\r
-       cpi     r22, ' '        ;if(r22 == ' ') continue\r
-       breq    40b             ;/\r
-       brcs    70f             ;if(r22 < ' ') error;\r
-       cpi     r22, '-'        ;if(r22 == '-') {\r
-       brne    42f             ; T = 1;\r
-       set                     ; continue;\r
-       rjmp    40b             ;}\r
-42:    cpi     r22, '9'+1      ;if(r22 > '9') error;\r
-       brcc    70f             ;/\r
-       cpi     r22, '0'        ;if(r22 < '0') error;\r
-       brcs    70f             ;/\r
-       brne    51f             ;if(r22 > '0') cv_start;\r
-       ldi     r25, 8          ;r25 = 8;\r
-       adiw    ZL, 1           ;r22 = *(++Z);\r
-       ld      r22, Z          ;/\r
-       cpi     r22, ' '+1      ;if(r22 <= ' ') exit;\r
-       brcs    80f             ;/\r
-       cpi     r22, 'b'        ;if(r22 == 'b') {\r
-       brne    43f             ; r25 = 2;\r
-       ldi     r25, 2          ; cv_start;\r
-       rjmp    50f             ;}\r
-43:    cpi     r22, 'x'        ;if(r22 != 'x') error;\r
-       brne    51f             ;/\r
-       ldi     r25, 16         ;r25 = 16;\r
-\r
-50:    adiw    ZL, 1           ;Z++;\r
-       ld      r22, Z          ;r22 = *Z;\r
-51:    cpi     r22, ' '+1      ;if(r22 <= ' ') break;\r
-       brcs    80f             ;/\r
-       cpi     r22, 'a'        ;if(r22 >= 'a') r22 =- 0x20;\r
-       brcs    52f             ;\r
-       subi    r22, 0x20       ;/\r
-52:    subi    r22, '0'        ;if((r22 -= '0') < 0) error;\r
-       brcs    70f             ;/\r
-       cpi     r22, 10         ;if(r22 >= 10) {\r
-       brcs    53f             ; r22 -= 7;\r
-       subi    r22, 7          ; if(r22 < 10) \r
-       cpi     r22, 10         ;\r
-       brcs    70f             ;}\r
-53:    cp      r22, r25        ;if(r22 >= r25) error;\r
-       brcc    70f             ;/\r
-60:    ldi     r24, 33         ;r21:r18 *= r25;\r
-       sub     r23, r23        ;\r
-61:    brcc    62f             ;\r
-       add     r23, r25        ;\r
-62:    lsr     r23             ;\r
-       ror     r21             ;\r
-       ror     r20             ;\r
-       ror     r19             ;\r
-       ror     r18             ;\r
-       dec     r24             ;\r
-       brne    61b             ;/\r
-       add     r18, r22        ;r21:r18 += r22;\r
-       adc     r19, r24        ;\r
-       adc     r20, r24        ;\r
-       adc     r21, r24        ;/\r
-       rjmp    50b             ;repeat\r
-\r
-70:    ldi     r24, 0\r
-       rjmp    81f\r
-80:    ldi     r24, 1\r
-81:    brtc    82f\r
-       clr     r22\r
-       com     r18\r
-       com     r19\r
-       com     r20\r
-       com     r21\r
-       adc     r18, r22\r
-       adc     r19, r22\r
-       adc     r20, r22\r
-       adc     r21, r22\r
-82:    st      -X, ZH\r
-       st      -X, ZL\r
-       _MOVW   XH, XL, r1, r0\r
-       st      X+, r18\r
-       st      X+, r19\r
-       st      X+, r20\r
-       st      X+, r21\r
-       clr     r1\r
-       ret\r
-.endfunc\r
-#endif\r
-\r
-\r
+;---------------------------------------------------------------------------;
+; Extended itoa, puts, printf and atoi                     (C)ChaN, 2011
+;---------------------------------------------------------------------------;
+
+                               // Base size is 152 bytes
+#define        CR_CRLF         0       // Convert \n to \r\n (+10 bytes)
+#define USE_XPRINTF    1       // Enable xprintf function (+194 bytes)
+#define USE_XSPRINTF   0       // Add xsprintf function (+78 bytes)
+#define USE_XFPRINTF   0       // Add xfprintf function (+54 bytes)
+#define USE_XATOI      0       // Enable xatoi function (+182 bytes)
+
+
+#if FLASHEND > 0x1FFFF
+#error xitoa module does not support 256K devices
+#endif
+
+.nolist
+#include <avr/io.h>    // Include device specific definitions.
+.list
+
+#ifdef SPM_PAGESIZE    // Recent devices have "lpm Rd,Z+" and "movw".
+.macro _LPMI   reg
+       lpm     \reg, Z+
+.endm
+.macro _MOVW   dh,dl, sh,sl
+       movw    \dl, \sl
+.endm
+#else                  // Earlier devices do not have "lpm Rd,Z+" nor "movw".
+.macro _LPMI   reg
+       lpm
+       mov     \reg, r0
+       adiw    ZL, 1
+.endm
+.macro _MOVW   dh,dl, sh,sl
+       mov     \dl, \sl
+       mov     \dh, \sh
+.endm
+#endif
+
+
+
+;---------------------------------------------------------------------------
+; Stub function to forward to user output function
+;
+;Prototype: void xputc (char chr       // a character to be output
+;                      );
+;Size: 12/12 words
+
+.section .bss
+.global xfunc_out      ; xfunc_out must be initialized before using this module.
+xfunc_out:     .ds.w   1
+.section .text
+
+
+.func xputc
+.global xputc
+xputc:
+#if CR_CRLF
+       cpi     r24, 10         ;LF --> CRLF
+       brne    1f              ;
+       ldi     r24, 13         ;
+       rcall   1f              ;
+       ldi     r24, 10         ;/
+1:
+#endif
+       push    ZH
+       push    ZL
+       lds     ZL, xfunc_out+0 ;Pointer to the registered output function.
+       lds     ZH, xfunc_out+1 ;/
+       sbiw    ZL, 0           ;Skip if null
+       breq    2f              ;/
+       icall
+2:     pop     ZL
+       pop     ZH
+       ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------
+; Direct ROM string output
+;
+;Prototype: void xputs (const char *str_p // rom string to be output
+;                      );
+
+.func xputs
+.global xputs
+xputs:
+       _MOVW   ZH,ZL, r25,r24  ; Z = pointer to rom string
+1:     _LPMI   r24
+       cpi     r24, 0
+       breq    2f
+       rcall   xputc
+       rjmp    1b
+2:     ret
+.endfunc
+
+
+;---------------------------------------------------------------------------
+; Extended direct numeral string output (32bit version)
+;
+;Prototype: void xitoa (long value,    // value to be output
+;                       char radix,    // radix
+;                       char width);   // minimum width
+;
+
+.func xitoa
+.global xitoa
+xitoa:
+                               ;r25:r22 = value, r20 = base, r18 = digits
+       clr     r31             ;r31 = stack level
+       ldi     r30, ' '        ;r30 = sign
+       ldi     r19, ' '        ;r19 = filler
+       sbrs    r20, 7          ;When base indicates signd format and the value
+       rjmp    0f              ;is minus, add a '-'.
+       neg     r20             ;
+       sbrs    r25, 7          ;
+       rjmp    0f              ;
+       ldi     r30, '-'        ;
+       com     r22             ;
+       com     r23             ;
+       com     r24             ;
+       com     r25             ;
+       adc     r22, r1         ;
+       adc     r23, r1         ;
+       adc     r24, r1         ;
+       adc     r25, r1         ;/
+0:     sbrs    r18, 7          ;When digits indicates zero filled,
+       rjmp    1f              ;filler is '0'.
+       neg     r18             ;
+       ldi     r19, '0'        ;/
+                               ;----- string conversion loop
+1:     ldi     r21, 32         ;r26 = r25:r22 % r20
+       clr     r26             ;r25:r22 /= r20
+2:     lsl     r22             ;
+       rol     r23             ;
+       rol     r24             ;
+       rol     r25             ;
+       rol     r26             ;
+       cp      r26, r20        ;
+       brcs    3f              ;
+       sub     r26, r20        ;
+       inc     r22             ;
+3:     dec     r21             ;
+       brne    2b              ;/
+       cpi     r26, 10         ;r26 is a numeral digit '0'-'F'
+       brcs    4f              ;
+       subi    r26, -7         ;
+4:     subi    r26, -'0'       ;/
+       push    r26             ;Stack it
+       inc     r31             ;/
+       cp      r22, r1         ;Repeat until r25:r22 gets zero
+       cpc     r23, r1         ;
+       cpc     r24, r1         ;
+       cpc     r25, r1         ;
+       brne    1b              ;/
+
+       cpi     r30, '-'        ;Minus sign if needed
+       brne    5f              ;
+       push    r30             ;
+       inc     r31             ;/
+5:     cp      r31, r18        ;Filler
+       brcc    6f              ;
+       push    r19             ;
+       inc     r31             ;
+       rjmp    5b              ;/
+
+6:     pop     r24             ;Flush stacked digits and exit
+       rcall   xputc           ;
+       dec     r31             ;
+       brne    6b              ;/
+
+       ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------;
+; Formatted string output (16/32bit version)
+;
+;Prototype:
+; void __xprintf (const char *format_p, ...);
+; void __xsprintf(char*, const char *format_p, ...);
+; void __xfprintf(void(*func)(char), const char *format_p, ...);
+;
+
+#if USE_XPRINTF
+
+.func xvprintf
+xvprintf:
+       ld      ZL, Y+          ;Z = pointer to format string
+       ld      ZH, Y+          ;/
+
+0:     _LPMI   r24             ;Get a format char
+       cpi     r24, 0          ;End of format string?
+       breq    90f             ;/
+       cpi     r24, '%'        ;Is format?
+       breq    20f             ;/
+1:     rcall   xputc           ;Put a normal character
+       rjmp    0b              ;/
+90:    ret
+
+20:    ldi     r18, 0          ;r18: digits
+       clt                     ;T: filler
+       _LPMI   r21             ;Get flags
+       cpi     r21, '%'        ;Is a %?
+       breq    1b              ;/
+       cpi     r21, '0'        ;Zero filled?
+       brne    23f             ;
+       set                     ;/
+22:    _LPMI   r21             ;Get width
+23:    cpi     r21, '9'+1      ;
+       brcc    24f             ;
+       subi    r21, '0'        ;
+       brcs    90b             ;
+       lsl     r18             ;
+       mov     r0, r18         ;
+       lsl     r18             ;
+       lsl     r18             ;
+       add     r18, r0         ;
+       add     r18, r21        ;
+       rjmp    22b             ;/
+
+24:    brtc    25f             ;get value (low word)
+       neg     r18             ;
+25:    ld      r24, Y+         ;
+       ld      r25, Y+         ;/
+       cpi     r21, 'c'        ;Is type character?
+       breq    1b              ;/
+       cpi     r21, 's'        ;Is type RAM string?
+       breq    50f             ;/
+       cpi     r21, 'S'        ;Is type ROM string?
+       breq    60f             ;/
+       _MOVW   r23,r22,r25,r24 ;r25:r22 = value
+       clr     r24             ;
+       clr     r25             ;
+       clt                     ;/
+       cpi     r21, 'l'        ;Is long int?
+       brne    26f             ;
+       ld      r24, Y+         ;get value (high word)
+       ld      r25, Y+         ;
+       set                     ;
+       _LPMI   r21             ;/
+26:    cpi     r21, 'd'        ;Is type signed decimal?
+       brne    27f             ;/
+       ldi     r20, -10        ;
+       brts    40f             ;
+       sbrs    r23, 7          ;
+       rjmp    40f             ;
+       ldi     r24, -1         ;
+       ldi     r25, -1         ;
+       rjmp    40f             ;/
+27:    cpi     r21, 'u'        ;Is type unsigned decimal?
+       ldi     r20, 10         ;
+       breq    40f             ;/
+       cpi     r21, 'X'        ;Is type hexdecimal?
+       ldi     r20, 16         ;
+       breq    40f             ;/
+       cpi     r21, 'b'        ;Is type binary?
+       ldi     r20, 2          ;
+       breq    40f             ;/
+       ret                     ;abort
+40:    push    ZH              ;Output the value
+       push    ZL              ;
+       rcall   xitoa           ;
+42:    pop     ZL              ;
+       pop     ZH              ;
+       rjmp    0b              ;/
+
+50:    push    ZH              ;Put a string on the RAM
+       push    ZL
+       _MOVW   ZH,ZL, r25,r24
+51:    ld      r24, Z+
+       cpi     r24, 0
+       breq    42b
+       rcall   xputc
+       rjmp    51b
+
+60:    push    ZH              ;Put a string on the ROM
+       push    ZL
+       rcall   xputs
+       rjmp    42b
+.endfunc
+
+
+.func __xprintf
+.global __xprintf
+__xprintf:
+       push    YH
+       push    YL
+       in      YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+       in      YH, _SFR_IO_ADDR(SPH)
+#else
+       clr     YH
+#endif
+       adiw    YL, 5           ;Y = pointer to arguments
+       rcall   xvprintf
+       pop     YL
+       pop     YH
+       ret
+.endfunc
+
+
+#if USE_XSPRINTF
+
+.func __xsprintf
+putram:
+       _MOVW   ZH,ZL, r15,r14
+       st      Z+, r24
+       _MOVW   r15,r14, ZH,ZL
+       ret
+.global __xsprintf
+__xsprintf:
+       push    YH
+       push    YL
+       in      YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+       in      YH, _SFR_IO_ADDR(SPH)
+#else
+       clr     YH
+#endif
+       adiw    YL, 5           ;Y = pointer to arguments
+       lds     ZL, xfunc_out+0 ;Save registered output function
+       lds     ZH, xfunc_out+1 ;
+       push    ZL              ;
+       push    ZH              ;/
+       ldi     ZL, lo8(pm(putram));Set local output function
+       ldi     ZH, hi8(pm(putram));
+       sts     xfunc_out+0, ZL ;
+       sts     xfunc_out+1, ZH ;/
+       push    r15             ;Initialize pointer to string buffer
+       push    r14             ;
+       ld      r14, Y+         ;
+       ld      r15, Y+         ;/
+       rcall   xvprintf
+       _MOVW   ZH,ZL, r15,r14  ;Terminate string
+       st      Z, r1           ;
+       pop     r14             ;
+       pop     r15             ;/
+       pop     ZH              ;Restore registered output function
+       pop     ZL              ;
+       sts     xfunc_out+0, ZL ;
+       sts     xfunc_out+1, ZH ;/
+       pop     YL
+       pop     YH
+       ret
+.endfunc
+#endif
+
+
+#if USE_XFPRINTF
+.func __xfprintf
+.global __xfprintf
+__xfprintf:
+       push    YH
+       push    YL
+       in      YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+       in      YH, _SFR_IO_ADDR(SPH)
+#else
+       clr     YH
+#endif
+       adiw    YL, 5           ;Y = pointer to arguments
+       lds     ZL, xfunc_out+0 ;Save registered output function
+       lds     ZH, xfunc_out+1 ;
+       push    ZL              ;
+       push    ZH              ;/
+       ld      ZL, Y+          ;Set output function
+       ld      ZH, Y+          ;
+       sts     xfunc_out+0, ZL ;
+       sts     xfunc_out+1, ZH ;/
+       rcall   xvprintf
+       pop     ZH              ;Restore registered output function
+       pop     ZL              ;
+       sts     xfunc_out+0, ZL ;
+       sts     xfunc_out+1, ZH ;/
+       pop     YL
+       pop     YH
+       ret
+.endfunc
+#endif
+
+#endif
+
+
+
+;---------------------------------------------------------------------------
+; Extended numeral string input
+;
+;Prototype:
+; char xatoi (           /* 1: Successful, 0: Failed */
+;      const char **str, /* pointer to pointer to source string */
+;      long *res         /* result */
+; );
+;
+
+
+#if USE_XATOI
+.func xatoi
+.global xatoi
+xatoi:
+       _MOVW   r1, r0, r23, r22
+       _MOVW   XH, XL, r25, r24
+       ld      ZL, X+
+       ld      ZH, X+
+       clr     r18             ;r21:r18 = 0;
+       clr     r19             ;
+       clr     r20             ;
+       clr     r21             ;/
+       clt                     ;T = 0;
+
+       ldi     r25, 10         ;r25 = 10;
+       rjmp    41f             ;/
+40:    adiw    ZL, 1           ;Z++;
+41:    ld      r22, Z          ;r22 = *Z;
+       cpi     r22, ' '        ;if(r22 == ' ') continue
+       breq    40b             ;/
+       brcs    70f             ;if(r22 < ' ') error;
+       cpi     r22, '-'        ;if(r22 == '-') {
+       brne    42f             ; T = 1;
+       set                     ; continue;
+       rjmp    40b             ;}
+42:    cpi     r22, '9'+1      ;if(r22 > '9') error;
+       brcc    70f             ;/
+       cpi     r22, '0'        ;if(r22 < '0') error;
+       brcs    70f             ;/
+       brne    51f             ;if(r22 > '0') cv_start;
+       ldi     r25, 8          ;r25 = 8;
+       adiw    ZL, 1           ;r22 = *(++Z);
+       ld      r22, Z          ;/
+       cpi     r22, ' '+1      ;if(r22 <= ' ') exit;
+       brcs    80f             ;/
+       cpi     r22, 'b'        ;if(r22 == 'b') {
+       brne    43f             ; r25 = 2;
+       ldi     r25, 2          ; cv_start;
+       rjmp    50f             ;}
+43:    cpi     r22, 'x'        ;if(r22 != 'x') error;
+       brne    51f             ;/
+       ldi     r25, 16         ;r25 = 16;
+
+50:    adiw    ZL, 1           ;Z++;
+       ld      r22, Z          ;r22 = *Z;
+51:    cpi     r22, ' '+1      ;if(r22 <= ' ') break;
+       brcs    80f             ;/
+       cpi     r22, 'a'        ;if(r22 >= 'a') r22 =- 0x20;
+       brcs    52f             ;
+       subi    r22, 0x20       ;/
+52:    subi    r22, '0'        ;if((r22 -= '0') < 0) error;
+       brcs    70f             ;/
+       cpi     r22, 10         ;if(r22 >= 10) {
+       brcs    53f             ; r22 -= 7;
+       subi    r22, 7          ; if(r22 < 10) 
+       cpi     r22, 10         ;
+       brcs    70f             ;}
+53:    cp      r22, r25        ;if(r22 >= r25) error;
+       brcc    70f             ;/
+60:    ldi     r24, 33         ;r21:r18 *= r25;
+       sub     r23, r23        ;
+61:    brcc    62f             ;
+       add     r23, r25        ;
+62:    lsr     r23             ;
+       ror     r21             ;
+       ror     r20             ;
+       ror     r19             ;
+       ror     r18             ;
+       dec     r24             ;
+       brne    61b             ;/
+       add     r18, r22        ;r21:r18 += r22;
+       adc     r19, r24        ;
+       adc     r20, r24        ;
+       adc     r21, r24        ;/
+       rjmp    50b             ;repeat
+
+70:    ldi     r24, 0
+       rjmp    81f
+80:    ldi     r24, 1
+81:    brtc    82f
+       clr     r22
+       com     r18
+       com     r19
+       com     r20
+       com     r21
+       adc     r18, r22
+       adc     r19, r22
+       adc     r20, r22
+       adc     r21, r22
+82:    st      -X, ZH
+       st      -X, ZL
+       _MOVW   XH, XL, r1, r0
+       st      X+, r18
+       st      X+, r19
+       st      X+, r20
+       st      X+, r21
+       clr     r1
+       ret
+.endfunc
+#endif
+
+
index 59c6f253123957e4aa7527c0bdc5b47d392563ef..08d9f93a0c1cc9a1c671ea456d3e9dd7bf6b1ac1 100644 (file)
-/*---------------------------------------------------------------------------\r
-   Extended itoa, puts and printf                    (C)ChaN, 2011\r
------------------------------------------------------------------------------*/\r
-\r
-#ifndef XPRINTF_H\r
-#define XPRINTF_H\r
-\r
-#include <inttypes.h>\r
-#include <avr/pgmspace.h>\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-\r
-extern void (*xfunc_out)(uint8_t);\r
-#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)\r
-\r
-/* This is a pointer to user defined output function. It must be initialized\r
-   before using this modle.\r
-*/\r
-\r
-void xputc(char chr);\r
-\r
-/* This is a stub function to forward outputs to user defined output function.\r
-   All outputs from this module are output via this function.\r
-*/\r
-\r
-\r
-/*-----------------------------------------------------------------------------*/\r
-void xputs(const char *string_p);\r
-\r
-/*  The string placed in the ROM is forwarded to xputc() directly.\r
-*/\r
-\r
-\r
-/*-----------------------------------------------------------------------------*/\r
-void xitoa(long value, char radix, char width);\r
-\r
-/* Extended itoa().\r
-\r
-      value  radix  width   output\r
-        100     10      6   "   100"\r
-        100     10     -6   "000100"\r
-        100     10      0   "100"\r
- 4294967295     10      0   "4294967295"\r
- 4294967295    -10      0   "-1"\r
-     655360     16     -8   "000A0000"\r
-       1024     16      0   "400"\r
-       0x55      2     -8   "01010101"\r
-*/\r
-\r
-\r
-/*-----------------------------------------------------------------------------*/\r
-#define xprintf(format, ...)            __xprintf(PSTR(format), ##__VA_ARGS__)\r
-#define xsprintf(str, format, ...)      __xsprintf(str, PSTR(format), ##__VA_ARGS__)\r
-#define xfprintf(func, format, ...)     __xfprintf(func, PSTR(format), ##__VA_ARGS__)\r
-\r
-void __xprintf(const char *format_p, ...);     /* Send formatted string to the registered device */\r
-void __xsprintf(char*, const char *format_p, ...);     /* Put formatted string to the memory */\r
-void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */\r
-\r
-/* Format string is placed in the ROM. The format flags is similar to printf().\r
-\r
-   %[flag][width][size]type\r
-\r
-   flag\r
-     A '0' means filled with '0' when output is shorter than width.\r
-     ' ' is used in default. This is effective only numeral type.\r
-   width\r
-     Minimum width in decimal number. This is effective only numeral type.\r
-     Default width is zero.\r
-   size\r
-     A 'l' means the argument is long(32bit). Default is short(16bit).\r
-     This is effective only numeral type.\r
-   type\r
-     'c' : Character, argument is the value\r
-     's' : String placed on the RAM, argument is the pointer\r
-     'S' : String placed on the ROM, argument is the pointer\r
-     'd' : Signed decimal, argument is the value\r
-     'u' : Unsigned decimal, argument is the value\r
-     'X' : Hexdecimal, argument is the value\r
-     'b' : Binary, argument is the value\r
-     '%' : '%'\r
-\r
-*/\r
-\r
-\r
-/*-----------------------------------------------------------------------------*/\r
-char xatoi(char **str, long *ret);\r
-\r
-/* Get value of the numeral string. \r
-\r
-  str\r
-    Pointer to pointer to source string\r
-\r
-    "0b11001010" binary\r
-    "0377" octal\r
-    "0xff800" hexdecimal\r
-    "1250000" decimal\r
-    "-25000" decimal\r
-\r
-  ret\r
-    Pointer to return value\r
-*/\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r
-#endif\r
-\r
+/*---------------------------------------------------------------------------
+   Extended itoa, puts and printf                    (C)ChaN, 2011
+-----------------------------------------------------------------------------*/
+
+#ifndef XPRINTF_H
+#define XPRINTF_H
+
+#include <inttypes.h>
+#include <avr/pgmspace.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void (*xfunc_out)(uint8_t);
+#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)
+
+/* This is a pointer to user defined output function. It must be initialized
+   before using this modle.
+*/
+
+void xputc(char chr);
+
+/* This is a stub function to forward outputs to user defined output function.
+   All outputs from this module are output via this function.
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+void xputs(const char *string_p);
+
+/*  The string placed in the ROM is forwarded to xputc() directly.
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+void xitoa(long value, char radix, char width);
+
+/* Extended itoa().
+
+      value  radix  width   output
+        100     10      6   "   100"
+        100     10     -6   "000100"
+        100     10      0   "100"
+ 4294967295     10      0   "4294967295"
+ 4294967295    -10      0   "-1"
+     655360     16     -8   "000A0000"
+       1024     16      0   "400"
+       0x55      2     -8   "01010101"
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+#define xprintf(format, ...)            __xprintf(PSTR(format), ##__VA_ARGS__)
+#define xsprintf(str, format, ...)      __xsprintf(str, PSTR(format), ##__VA_ARGS__)
+#define xfprintf(func, format, ...)     __xfprintf(func, PSTR(format), ##__VA_ARGS__)
+
+void __xprintf(const char *format_p, ...);     /* Send formatted string to the registered device */
+// void __xsprintf(char*, const char *format_p, ...);  /* Put formatted string to the memory */
+// void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */
+
+/* Format string is placed in the ROM. The format flags is similar to printf().
+
+   %[flag][width][size]type
+
+   flag
+     A '0' means filled with '0' when output is shorter than width.
+     ' ' is used in default. This is effective only numeral type.
+   width
+     Minimum width in decimal number. This is effective only numeral type.
+     Default width is zero.
+   size
+     A 'l' means the argument is long(32bit). Default is short(16bit).
+     This is effective only numeral type.
+   type
+     'c' : Character, argument is the value
+     's' : String placed on the RAM, argument is the pointer
+     'S' : String placed on the ROM, argument is the pointer
+     'd' : Signed decimal, argument is the value
+     'u' : Unsigned decimal, argument is the value
+     'X' : Hexdecimal, argument is the value
+     'b' : Binary, argument is the value
+     '%' : '%'
+
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+char xatoi(char **str, long *ret);
+
+/* Get value of the numeral string.
+
+  str
+    Pointer to pointer to source string
+
+    "0b11001010" binary
+    "0377" octal
+    "0xff800" hexdecimal
+    "1250000" decimal
+    "-25000" decimal
+
+  ret
+    Pointer to return value
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
index c9e8fd3fd2ddbe3fce3afd0096f13f3cfab1f2c2..0e0ad2d1541d8e05dc7de68f64ce1eec4ec3b2a9 100644 (file)
@@ -36,9 +36,9 @@ void backlight_increase(void)
     if(backlight_config.level < BACKLIGHT_LEVELS)
     {
         backlight_config.level++;
-        backlight_config.enable = 1;
-        eeconfig_update_backlight(backlight_config.raw);
     }
+    backlight_config.enable = 1;
+    eeconfig_update_backlight(backlight_config.raw);
     dprintf("backlight increase: %u\n", backlight_config.level);
     backlight_set(backlight_config.level);
 }
index 6730a2a4aab44372c0357e3ff9e85c6846fb6cfa..2c6bcbae56fccafae40a627ce0e47ceb4fcce37c 100644 (file)
@@ -83,10 +83,6 @@ void bootmagic(void)
     }
     eeconfig_update_keymap(keymap_config.raw);
 
-#ifdef NKRO_ENABLE
-    keyboard_nkro = keymap_config.nkro;
-#endif
-
     /* default layer */
     uint8_t default_layer = 0;
     if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_0)) { default_layer |= (1<<0); }
index 084c9fe1555fac3b5d44d8a12c7f72da1d37865c..5f29bc0b4e84ec6ad0407cb63f3ba4b818749550 100644 (file)
@@ -34,6 +34,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "command.h"
 #include "backlight.h"
 #include "quantum.h"
+#include "version.h"
 
 #ifdef MOUSEKEY_ENABLE
 #include "mousekey.h"
@@ -180,7 +181,7 @@ static void print_version(void)
     print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
           "PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
           "VER: " STR(DEVICE_VER) "\n");
-    print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
+    print("BUILD: " STR(QMK_VERSION) " (" __TIME__ " " __DATE__ ")\n");
 
     /* build options */
     print("OPTIONS:"
@@ -237,7 +238,7 @@ static void print_status(void)
     print_val_hex8(keyboard_protocol);
     print_val_hex8(keyboard_idle);
 #ifdef NKRO_ENABLE
-    print_val_hex8(keyboard_nkro);
+    print_val_hex8(keymap_config.nkro);
 #endif
     print_val_hex32(timer_read32());
 
@@ -260,7 +261,10 @@ static void print_status(void)
 #ifdef BOOTMAGIC_ENABLE
 static void print_eeconfig(void)
 {
-#ifndef NO_PRINT
+
+// Print these variables if NO_PRINT or USER_PRINT are not defined.
+#if !defined(NO_PRINT) && !defined(USER_PRINT)
+
     print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");
 
     debug_config_t dc;
@@ -375,9 +379,6 @@ static bool command_common(uint8_t code)
             debug_enable = !debug_enable;
             if (debug_enable) {
                 print("\ndebug: on\n");
-                debug_matrix   = true;
-                debug_keyboard = true;
-                debug_mouse    = true;
             } else {
                 print("\ndebug: off\n");
                 debug_matrix   = false;
@@ -434,8 +435,8 @@ static bool command_common(uint8_t code)
                // NKRO toggle
         case MAGIC_KC(MAGIC_KEY_NKRO):
             clear_keyboard(); // clear to prevent stuck keys
-            keyboard_nkro = !keyboard_nkro;
-            if (keyboard_nkro) {
+            keymap_config.nkro = !keymap_config.nkro;
+            if (keymap_config.nkro) {
                 print("NKRO: on\n");
             } else {
                 print("NKRO: off\n");
@@ -570,7 +571,8 @@ static uint8_t mousekey_param = 0;
 
 static void mousekey_param_print(void)
 {
-#ifndef NO_PRINT
+// Print these variables if NO_PRINT or USER_PRINT are not defined.
+#if !defined(NO_PRINT) && !defined(USER_PRINT)
     print("\n\t- Values -\n");
     print("1: delay(*10ms): "); pdec(mk_delay); print("\n");
     print("2: interval(ms): "); pdec(mk_interval); print("\n");
index 11a05c2ddd74bba6f1af7db8e6550939f463a44b..e12b6221656f53173e13e3a4f2a14465b863470b 100644 (file)
@@ -22,11 +22,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "util.h"
 #include "debug.h"
 
-
-#ifdef NKRO_ENABLE
-bool keyboard_nkro = true;
-#endif
-
 static host_driver_t *driver;
 static uint16_t last_system_report = 0;
 static uint16_t last_consumer_report = 0;
index 9814b10d2d0855b9aeea6d6e4cdcd31794051bcf..aeabba7107133090dcc1699044e45d7d5335272d 100644 (file)
@@ -28,10 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 extern "C" {
 #endif
 
-#ifdef NKRO_ENABLE
-extern bool keyboard_nkro;
-#endif
-
 extern uint8_t keyboard_idle;
 extern uint8_t keyboard_protocol;
 
index edb9e5dd9c0f841b82e966608eda18d96b2ccd8e..588d1c0be8f304214b2a12e70f5870c6781039df 100644 (file)
@@ -20,7 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <stdint.h>
 #include "report.h"
-
+#ifdef MIDI_ENABLE
+       #include "midi.h"
+#endif
 
 typedef struct {
     uint8_t (*keyboard_leds)(void);
@@ -28,6 +30,11 @@ typedef struct {
     void (*send_mouse)(report_mouse_t *);
     void (*send_system)(uint16_t);
     void (*send_consumer)(uint16_t);
+#ifdef MIDI_ENABLE
+    void (*usb_send_func)(MidiDevice *, uint16_t, uint8_t, uint8_t, uint8_t);
+    void (*usb_get_midi)(MidiDevice *);
+    void (*midi_usb_init)(MidiDevice *);
+#endif
 } host_driver_t;
 
 #endif
index c46a701b3bfd1dae174b2915e4ce60b3b9eedca4..371d93f3e59b755130b5afdb7fc8428e879d8bf9 100644 (file)
@@ -57,6 +57,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #   include "visualizer/visualizer.h"
 #endif
 
+
+
 #ifdef MATRIX_HAS_GHOST
 static bool has_ghost_in_row(uint8_t row)
 {
@@ -106,7 +108,7 @@ void keyboard_init(void) {
     rgblight_init();
 #endif
 #if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
-       keyboard_nkro = true;
+    keymap_config.nkro = 1;
 #endif
 }
 
index 194e4cc0266cd67317a3a02367c1a392f5718570..49617a3d103f0d7f0dd30bd787445dd3ae3dab9f 100644 (file)
@@ -27,10 +27,6 @@ void magic(void)
     /* keymap config */
     keymap_config.raw = eeconfig_read_keymap();
 
-#ifdef NKRO_ENABLE
-    keyboard_nkro = keymap_config.nkro;
-#endif
-
     uint8_t default_layer = 0;
     default_layer = eeconfig_read_default_layer();
     default_layer_set((uint32_t)default_layer);
index 3647ece7513318feec06e7656db39734bfdc1181..b1aac2c99d1e2e1248c6b1f4285e9ffa39a9d14a 100644 (file)
@@ -7,7 +7,7 @@
 #define STRING_STACK_LIMIT    120
 
 //TODO
-int xprintf(const char* format, ...) { return 0; }
+int __xprintf(const char* format, ...) { return 0; }
 
 #if 0
 /* mbed Serial */
index 26bc529e5be547b7b0f09ddcca67ab1ffe252976..1e7a48c06dbe8c638dc4dd3456ef0bb3f40e601f 100644 (file)
@@ -7,7 +7,7 @@
 extern "C" {
 #endif
 
-int xprintf(const char *format, ...);
+int __xprintf(const char *format, ...);
 
 #ifdef __cplusplus
 }
index 0368bcd4a13546b1f57513bd2b5647191fc28b3f..8836c0fc7cb38652ec94d1ab3979bf6c0142815a 100644 (file)
 #include <stdbool.h>
 #include "util.h"
 
-
+#if defined(PROTOCOL_CHIBIOS)
+#define PSTR(x) x
+#endif
 
 
 #ifndef NO_PRINT
 
+#if defined(__AVR__) /* __AVR__ */
+
+#  include "avr/xprintf.h"
+
+#  ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+#    define print(s)
+#    define println(s)
+#    undef xprintf
+#    define xprintf(fmt, ...)
+
+// Create user print defines
+#    define uprint(s)          xputs(PSTR(s))
+#    define uprintln(s)        xputs(PSTR(s "\r\n"))
+#    define uprintf(fmt, ...)  __xprintf(PSTR(fmt), ##__VA_ARGS__)
+
+#  else /* NORMAL PRINT */
 
-#if defined(__AVR__)
+// Create user & normal print defines
+#    define print(s)           xputs(PSTR(s))
+#    define println(s)         xputs(PSTR(s "\r\n"))
+#    define uprint(s)          print(s)
+#    define uprintln(s)        println(s)
+#    define uprintf(fmt, ...)  xprintf(fmt, ...)
 
-#include "avr/xprintf.h"
-#define print(s)    xputs(PSTR(s))
-#define println(s)  xputs(PSTR(s "\r\n"))
+#  endif /* USER_PRINT / NORMAL PRINT */
 
-#ifdef __cplusplus
+#  ifdef __cplusplus
 extern "C"
-#endif
+#  endif
+
 /* function pointer of sendchar to be used by print utility */
 void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
 
-#elif defined(PROTOCOL_CHIBIOS) /* __AVR__ */
+#elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */
+
+#  include "chibios/printf.h"
+
+#  ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+#    define print(s)
+#    define println(s)
+#    define xprintf(fmt, ...)
+
+// Create user print defines
+#    define uprint(s)    printf(s)
+#    define uprintln(s)  printf(s "\r\n")
+#    define uprintf      printf
+
+#  else /* NORMAL PRINT */
 
-#include "chibios/printf.h"
+// Create user & normal print defines
+#    define print(s)     printf(s)
+#    define println(s)   printf(s "\r\n")
+#    define xprintf      printf
+#    define uprint(s)    printf(s)
+#    define uprintln(s)  printf(s "\r\n")
+#    define uprintf      printf
 
-#define print(s)    printf(s)
-#define println(s)  printf(s "\r\n")
-#define xprintf  printf
+#  endif /* USER_PRINT / NORMAL PRINT */
 
-#elif defined(__arm__) /* __AVR__ */
+#elif defined(__arm__) /* __arm__ */
 
-#include "mbed/xprintf.h"
+#  include "mbed/xprintf.h"
 
-#define print(s)    xprintf(s)
-#define println(s)  xprintf(s "\r\n")
+#  ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+#    define print(s)
+#    define println(s)
+#    define xprintf(fmt, ...)
+
+// Create user print defines
+#    define uprintf(fmt, ...)  __xprintf(fmt, ...)
+#    define uprint(s)          xprintf(s)
+#    define uprintln(s)        xprintf(s "\r\n")
+
+#  else /* NORMAL PRINT */
+
+// Create user & normal print defines
+#    define xprintf(fmt, ...)  __xprintf(fmt, ...)
+#    define print(s)           xprintf(s)
+#    define println(s)         xprintf(s "\r\n")
+#    define uprint(s)          print(s)
+#    define uprintln(s)        println(s)
+#    define uprintf(fmt, ...)  xprintf(fmt, ...)
+
+#  endif /* USER_PRINT / NORMAL PRINT */
 
 /* TODO: to select output destinations: UART/USBSerial */
-#define print_set_sendchar(func)
+#  define print_set_sendchar(func)
+
+#endif /* __AVR__ / PROTOCOL_CHIBIOS / __arm__ */
 
-#endif /* __AVR__ */
+// User print disables the normal print messages in the body of QMK/TMK code and
+// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do
+// a spot of debugging but lack flash resources for allowing all of the codebase to
+// print (and store their wasteful strings).
+//
+// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!!
+//
+#ifdef USER_PRINT
+
+// Disable normal print
+#define print_dec(data)
+#define print_decs(data)
+#define print_hex4(data)
+#define print_hex8(data)
+#define print_hex16(data)
+#define print_hex32(data)
+#define print_bin4(data)
+#define print_bin8(data)
+#define print_bin16(data)
+#define print_bin32(data)
+#define print_bin_reverse8(data)
+#define print_bin_reverse16(data)
+#define print_bin_reverse32(data)
+#define print_val_dec(v)
+#define print_val_decs(v)
+#define print_val_hex8(v)
+#define print_val_hex16(v)
+#define print_val_hex32(v)
+#define print_val_bin8(v)
+#define print_val_bin16(v)
+#define print_val_bin32(v)
+#define print_val_bin_reverse8(v)
+#define print_val_bin_reverse16(v)
+#define print_val_bin_reverse32(v)
 
+#else /* NORMAL_PRINT */
 
+//Enable normal print
 /* decimal */
 #define print_dec(i)                xprintf("%u", i)
 #define print_decs(i)               xprintf("%d", i)
@@ -97,6 +199,39 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
 #define print_val_bin_reverse16(v)  xprintf(#v ": %016b\n", bitrev16(v))
 #define print_val_bin_reverse32(v)  xprintf(#v ": %032lb\n", bitrev32(v))
 
+#endif /* USER_PRINT / NORMAL_PRINT */
+
+// User Print
+
+/* decimal */
+#define uprint_dec(i)               uprintf("%u", i)
+#define uprint_decs(i)              uprintf("%d", i)
+/* hex */
+#define uprint_hex4(i)              uprintf("%X", i)
+#define uprint_hex8(i)              uprintf("%02X", i)
+#define uprint_hex16(i)             uprintf("%04X", i)
+#define uprint_hex32(i)             uprintf("%08lX", i)
+/* binary */
+#define uprint_bin4(i)              uprintf("%04b", i)
+#define uprint_bin8(i)              uprintf("%08b", i)
+#define uprint_bin16(i)             uprintf("%016b", i)
+#define uprint_bin32(i)             uprintf("%032lb", i)
+#define uprint_bin_reverse8(i)      uprintf("%08b", bitrev(i))
+#define uprint_bin_reverse16(i)     uprintf("%016b", bitrev16(i))
+#define uprint_bin_reverse32(i)     uprintf("%032lb", bitrev32(i))
+/* print value utility */
+#define uprint_val_dec(v)           uprintf(#v ": %u\n", v)
+#define uprint_val_decs(v)          uprintf(#v ": %d\n", v)
+#define uprint_val_hex8(v)          uprintf(#v ": %X\n", v)
+#define uprint_val_hex16(v)         uprintf(#v ": %02X\n", v)
+#define uprint_val_hex32(v)         uprintf(#v ": %04lX\n", v)
+#define uprint_val_bin8(v)          uprintf(#v ": %08b\n", v)
+#define uprint_val_bin16(v)         uprintf(#v ": %016b\n", v)
+#define uprint_val_bin32(v)         uprintf(#v ": %032lb\n", v)
+#define uprint_val_bin_reverse8(v)  uprintf(#v ": %08b\n", bitrev(v))
+#define uprint_val_bin_reverse16(v) uprintf(#v ": %016b\n", bitrev16(v))
+#define uprint_val_bin_reverse32(v) uprintf(#v ": %032lb\n", bitrev32(v))
+
 #else   /* NO_PRINT */
 
 #define xprintf(fmt, ...)
@@ -141,5 +276,4 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
 #define pbin_reverse(data)      print_bin_reverse8(data)
 #define pbin_reverse16(data)    print_bin_reverse16(data)
 
-
 #endif
diff --git a/tmk_core/common/raw_hid.h b/tmk_core/common/raw_hid.h
new file mode 100644 (file)
index 0000000..86da02f
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef _RAW_HID_H_
+#define _RAW_HID_H_
+
+void raw_hid_receive( uint8_t *data, uint8_t length );
+
+void raw_hid_send( uint8_t *data, uint8_t length );
+
+#endif
diff --git a/tmk_core/common/virtser.h b/tmk_core/common/virtser.h
new file mode 100644 (file)
index 0000000..74891b6
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _VIRTSER_H_
+#define _VIRTSER_H_
+
+/* Define this function in your code to process incoming bytes */
+void virtser_recv(const uint8_t ch);
+
+/* Call this to send a character over the Virtual Serial Device */
+void virtser_send(const uint8_t byte);
+
+#endif
diff --git a/tmk_core/native.mk b/tmk_core/native.mk
new file mode 100644 (file)
index 0000000..50232ee
--- /dev/null
@@ -0,0 +1,24 @@
+CC = gcc
+OBJCOPY = 
+OBJDUMP = 
+SIZE = 
+AR = 
+NM = 
+HEX = 
+EEP = 
+BIN =
+
+
+COMPILEFLAGS += -funsigned-char
+COMPILEFLAGS += -funsigned-bitfields
+COMPILEFLAGS += -ffunction-sections
+COMPILEFLAGS += -fdata-sections
+COMPILEFLAGS += -fshort-enums
+
+CFLAGS += $(COMPILEFLAGS)
+CFLAGS += -fno-inline-small-functions
+CFLAGS += -fno-strict-aliasing
+
+CPPFLAGS += $(COMPILEFLAGS)
+CPPFLAGS += -fno-exceptions
+CPPFLAGS += -std=gnu++11
\ No newline at end of file
index e2c9d9bf1415ad0fe9d946fb1d5116744938aa2f..d0c72c46c7c6fc6f85f3827901e8361a8400e589 100644 (file)
 #include "led.h"
 #endif
 
+#ifdef NKRO_ENABLE
+  #include "keycode_config.h"
+
+  extern keymap_config_t keymap_config;
+#endif
+
 /* ---------------------------------------------------------
  *       Global interface variables and declarations
  * ---------------------------------------------------------
@@ -39,9 +45,6 @@ uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0;
 volatile uint16_t keyboard_idle_count = 0;
 static virtual_timer_t keyboard_idle_timer;
 static void keyboard_idle_timer_cb(void *arg);
-#ifdef NKRO_ENABLE
-extern bool keyboard_nkro;
-#endif /* NKRO_ENABLE */
 
 report_keyboard_t keyboard_report_sent = {{0}};
 #ifdef MOUSE_ENABLE
@@ -943,8 +946,8 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
         if((usbp->setup[4] == KBD_INTERFACE) && (usbp->setup[5] == 0)) {   /* wIndex */
           keyboard_protocol = ((usbp->setup[2]) != 0x00);   /* LSB(wValue) */
 #ifdef NKRO_ENABLE
-          keyboard_nkro = !!keyboard_protocol;
-          if(!keyboard_nkro && keyboard_idle) {
+          keymap_config.nkro = !!keyboard_protocol;
+          if(!keymap_config.nkro && keyboard_idle) {
 #else /* NKRO_ENABLE */
           if(keyboard_idle) {
 #endif /* NKRO_ENABLE */
@@ -962,7 +965,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
         keyboard_idle = usbp->setup[3];     /* MSB(wValue) */
         /* arm the timer */
 #ifdef NKRO_ENABLE
-        if(!keyboard_nkro && keyboard_idle) {
+        if(!keymap_config.nkro && keyboard_idle) {
 #else /* NKRO_ENABLE */
         if(keyboard_idle) {
 #endif /* NKRO_ENABLE */
@@ -1089,7 +1092,7 @@ static void keyboard_idle_timer_cb(void *arg) {
   }
 
 #ifdef NKRO_ENABLE
-  if(!keyboard_nkro && keyboard_idle) {
+  if(!keymap_config.nkro && keyboard_idle) {
 #else /* NKRO_ENABLE */
   if(keyboard_idle) {
 #endif /* NKRO_ENABLE */
@@ -1122,7 +1125,7 @@ void send_keyboard(report_keyboard_t *report) {
   osalSysUnlock();
 
 #ifdef NKRO_ENABLE
-  if(keyboard_nkro) {  /* NKRO protocol */
+  if(keymap_config.nkro) {  /* NKRO protocol */
     /* need to wait until the previous packet has made it through */
     /* can rewrite this using the synchronous API, then would wait
      * until *after* the packet has been transmitted. I think
index 1b029096384df159b37019b2eeb0e40b237f7eb0..a873515e1041a6130a1ea9717b0b2e8830bf98e1 100644 (file)
-;---------------------------------------------------------------------------;\r
-; Software implemented UART module                                          ;\r
-; (C)ChaN, 2005 (http://elm-chan.org/)                                      ;\r
-;---------------------------------------------------------------------------;\r
-; Bit rate settings:\r
-;\r
-;            1MHz  2MHz  4MHz  6MHz  8MHz  10MHz  12MHz  16MHz  20MHz\r
-;   2.4kbps   138     -     -     -     -      -      -      -      -\r
-;   4.8kbps    68   138     -     -     -      -      -      -      -\r
-;   9.6kbps    33    68   138   208     -      -      -      -      -\r
-;  19.2kbps     -    33    68   102   138    173    208      -      -\r
-;  38.4kbps     -     -    33    50    68     85    102    138    172\r
-;  57.6kbps     -     -    21    33    44     56     68     91    114\r
-; 115.2kbps     -     -     -     -    21     27     33     44     56\r
-\r
-.nolist\r
-#include <avr/io.h>\r
-.list\r
-\r
-#define        BPS     102     /* Bit delay. (see above table) */\r
-#define        BIDIR   0       /* 0:Separated Tx/Rx, 1:Shared Tx/Rx */\r
-\r
-#define        OUT_1           sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 1 */\r
-#define        OUT_0           cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 0 */\r
-#define        SKIP_IN_1       sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT   /* Skip if 1 */\r
-#define        SKIP_IN_0       sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT   /* Skip if 0 */\r
-\r
-\r
-\r
-#ifdef SPM_PAGESIZE\r
-.macro _LPMI   reg\r
-       lpm     \reg, Z+\r
-.endm\r
-.macro _MOVW   dh,dl, sh,sl\r
-       movw    \dl, \sl\r
-.endm\r
-#else\r
-.macro _LPMI   reg\r
-       lpm\r
-       mov     \reg, r0\r
-       adiw    ZL, 1\r
-.endm\r
-.macro _MOVW   dh,dl, sh,sl\r
-       mov     \dl, \sl\r
-       mov     \dh, \sh\r
-.endm\r
-#endif\r
-\r
-\r
-\r
-;---------------------------------------------------------------------------;\r
-; Transmit a byte in serial format of N81\r
-;\r
-;Prototype: void xmit (uint8_t data);\r
-;Size: 16 words\r
-\r
-.global xmit\r
-.func xmit\r
-xmit:\r
-#if BIDIR\r
-       ldi     r23, BPS-1      ;Pre-idle time for bidirectional data line\r
-5:     dec     r23             ;\r
-       brne    5b              ;/\r
-#endif\r
-       in      r0, _SFR_IO_ADDR(SREG)  ;Save flags\r
-\r
-       com     r24             ;C = start bit\r
-       ldi     r25, 10         ;Bit counter\r
-       cli                     ;Start critical section\r
-\r
-1:     ldi     r23, BPS-1      ;----- Bit transferring loop \r
-2:     dec     r23             ;Wait for a bit time\r
-       brne    2b              ;/\r
-       brcs    3f              ;MISO = bit to be sent\r
-       OUT_1                   ;\r
-3:     brcc    4f              ;\r
-       OUT_0                   ;/\r
-4:     lsr     r24             ;Get next bit into C\r
-       dec     r25             ;All bits sent?\r
-       brne    1b              ;  no, coutinue\r
-\r
-       out     _SFR_IO_ADDR(SREG), r0  ;End of critical section\r
-       ret\r
-.endfunc\r
-\r
-\r
-\r
-;---------------------------------------------------------------------------;\r
-; Receive a byte\r
-;\r
-;Prototype: uint8_t rcvr (void);\r
-;Size: 19 words\r
-\r
-.global rcvr\r
-.func rcvr\r
-rcvr:\r
-       in      r0, _SFR_IO_ADDR(SREG)  ;Save flags\r
-\r
-       ldi     r24, 0x80       ;Receiving shift reg\r
-       cli                     ;Start critical section\r
-\r
-1:     SKIP_IN_1               ;Wait for idle\r
-       rjmp    1b\r
-2:     SKIP_IN_0               ;Wait for start bit\r
-       rjmp    2b\r
-       ldi     r25, BPS/2      ;Wait for half bit time\r
-3:     dec     r25\r
-       brne    3b\r
-\r
-4:     ldi     r25, BPS        ;----- Bit receiving loop\r
-5:     dec     r25             ;Wait for a bit time\r
-       brne    5b              ;/\r
-       lsr     r24             ;Next bit\r
-       SKIP_IN_0               ;Get a data bit into r24.7\r
-       ori     r24, 0x80\r
-       brcc    4b              ;All bits received?  no, continue\r
-\r
-       out     _SFR_IO_ADDR(SREG), r0  ;End of critical section\r
-       ret\r
-.endfunc\r
-\r
-\r
-; Not wait for start bit. This should be called after detecting start bit.\r
-.global recv\r
-.func recv\r
-recv:\r
-       in      r0, _SFR_IO_ADDR(SREG)  ;Save flags\r
-\r
-       ldi     r24, 0x80       ;Receiving shift reg\r
-       cli                     ;Start critical section\r
-\r
-;1:    SKIP_IN_1               ;Wait for idle\r
-;      rjmp    1b\r
-;2:    SKIP_IN_0               ;Wait for start bit\r
-;      rjmp    2b\r
-       ldi     r25, BPS/2      ;Wait for half bit time\r
-3:     dec     r25\r
-       brne    3b\r
-\r
-4:     ldi     r25, BPS        ;----- Bit receiving loop\r
-5:     dec     r25             ;Wait for a bit time\r
-       brne    5b              ;/\r
-       lsr     r24             ;Next bit\r
-       SKIP_IN_0               ;Get a data bit into r24.7\r
-       ori     r24, 0x80\r
-       brcc    4b              ;All bits received?  no, continue\r
-\r
-       ldi     r25, BPS/2      ;Wait for half bit time\r
-6:     dec     r25\r
-       brne    6b\r
-7:     SKIP_IN_1               ;Wait for stop bit\r
-       rjmp    7b\r
-\r
-       out     _SFR_IO_ADDR(SREG), r0  ;End of critical section\r
-       ret\r
-.endfunc\r
+;---------------------------------------------------------------------------;
+; Software implemented UART module                                          ;
+; (C)ChaN, 2005 (http://elm-chan.org/)                                      ;
+;---------------------------------------------------------------------------;
+; Bit rate settings:
+;
+;            1MHz  2MHz  4MHz  6MHz  8MHz  10MHz  12MHz  16MHz  20MHz
+;   2.4kbps   138     -     -     -     -      -      -      -      -
+;   4.8kbps    68   138     -     -     -      -      -      -      -
+;   9.6kbps    33    68   138   208     -      -      -      -      -
+;  19.2kbps     -    33    68   102   138    173    208      -      -
+;  38.4kbps     -     -    33    50    68     85    102    138    172
+;  57.6kbps     -     -    21    33    44     56     68     91    114
+; 115.2kbps     -     -     -     -    21     27     33     44     56
+
+.nolist
+#include <avr/io.h>
+.list
+
+#define        BPS     102     /* Bit delay. (see above table) */
+#define        BIDIR   0       /* 0:Separated Tx/Rx, 1:Shared Tx/Rx */
+
+#define        OUT_1           sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 1 */
+#define        OUT_0           cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 0 */
+#define        SKIP_IN_1       sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT   /* Skip if 1 */
+#define        SKIP_IN_0       sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT   /* Skip if 0 */
+
+
+
+#ifdef SPM_PAGESIZE
+.macro _LPMI   reg
+       lpm     \reg, Z+
+.endm
+.macro _MOVW   dh,dl, sh,sl
+       movw    \dl, \sl
+.endm
+#else
+.macro _LPMI   reg
+       lpm
+       mov     \reg, r0
+       adiw    ZL, 1
+.endm
+.macro _MOVW   dh,dl, sh,sl
+       mov     \dl, \sl
+       mov     \dh, \sh
+.endm
+#endif
+
+
+
+;---------------------------------------------------------------------------;
+; Transmit a byte in serial format of N81
+;
+;Prototype: void xmit (uint8_t data);
+;Size: 16 words
+
+.global xmit
+.func xmit
+xmit:
+#if BIDIR
+       ldi     r23, BPS-1      ;Pre-idle time for bidirectional data line
+5:     dec     r23             ;
+       brne    5b              ;/
+#endif
+       in      r0, _SFR_IO_ADDR(SREG)  ;Save flags
+
+       com     r24             ;C = start bit
+       ldi     r25, 10         ;Bit counter
+       cli                     ;Start critical section
+
+1:     ldi     r23, BPS-1      ;----- Bit transferring loop 
+2:     dec     r23             ;Wait for a bit time
+       brne    2b              ;/
+       brcs    3f              ;MISO = bit to be sent
+       OUT_1                   ;
+3:     brcc    4f              ;
+       OUT_0                   ;/
+4:     lsr     r24             ;Get next bit into C
+       dec     r25             ;All bits sent?
+       brne    1b              ;  no, coutinue
+
+       out     _SFR_IO_ADDR(SREG), r0  ;End of critical section
+       ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------;
+; Receive a byte
+;
+;Prototype: uint8_t rcvr (void);
+;Size: 19 words
+
+.global rcvr
+.func rcvr
+rcvr:
+       in      r0, _SFR_IO_ADDR(SREG)  ;Save flags
+
+       ldi     r24, 0x80       ;Receiving shift reg
+       cli                     ;Start critical section
+
+1:     SKIP_IN_1               ;Wait for idle
+       rjmp    1b
+2:     SKIP_IN_0               ;Wait for start bit
+       rjmp    2b
+       ldi     r25, BPS/2      ;Wait for half bit time
+3:     dec     r25
+       brne    3b
+
+4:     ldi     r25, BPS        ;----- Bit receiving loop
+5:     dec     r25             ;Wait for a bit time
+       brne    5b              ;/
+       lsr     r24             ;Next bit
+       SKIP_IN_0               ;Get a data bit into r24.7
+       ori     r24, 0x80
+       brcc    4b              ;All bits received?  no, continue
+
+       out     _SFR_IO_ADDR(SREG), r0  ;End of critical section
+       ret
+.endfunc
+
+
+; Not wait for start bit. This should be called after detecting start bit.
+.global recv
+.func recv
+recv:
+       in      r0, _SFR_IO_ADDR(SREG)  ;Save flags
+
+       ldi     r24, 0x80       ;Receiving shift reg
+       cli                     ;Start critical section
+
+;1:    SKIP_IN_1               ;Wait for idle
+;      rjmp    1b
+;2:    SKIP_IN_0               ;Wait for start bit
+;      rjmp    2b
+       ldi     r25, BPS/2      ;Wait for half bit time
+3:     dec     r25
+       brne    3b
+
+4:     ldi     r25, BPS        ;----- Bit receiving loop
+5:     dec     r25             ;Wait for a bit time
+       brne    5b              ;/
+       lsr     r24             ;Next bit
+       SKIP_IN_0               ;Get a data bit into r24.7
+       ori     r24, 0x80
+       brcc    4b              ;All bits received?  no, continue
+
+       ldi     r25, BPS/2      ;Wait for half bit time
+6:     dec     r25
+       brne    6b
+7:     SKIP_IN_1               ;Wait for stop bit
+       rjmp    7b
+
+       out     _SFR_IO_ADDR(SREG), r0  ;End of critical section
+       ret
+.endfunc
index 72725b998f0a27a7e90163a72f257e19e724b75a..7d92be069299159b563959b0c9b676a71febd8bf 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef SUART\r
-#define SUART\r
-\r
-void xmit(uint8_t);\r
-uint8_t rcvr(void);\r
-uint8_t recv(void);\r
-\r
-#endif /* SUART */\r
+#ifndef SUART
+#define SUART
+
+void xmit(uint8_t);
+uint8_t rcvr(void);
+uint8_t recv(void);
+
+#endif /* SUART */
index 99058f0331d260b7f7409294b90bbbc735f3ef7a..12395bf69649606da53e5202877fd306a6aeb896 100644 (file)
-/* This is from http://www.mtcnet.net/~henryvm/wdt/ */\r
-#ifndef _AVR_WD_H_\r
-#define _AVR_WD_H_\r
-\r
-#include <avr/io.h>\r
-\r
-/*\r
-Copyright (c) 2009, Curt Van Maanen\r
-\r
-Permission to use, copy, modify, and/or distribute this software for any\r
-purpose with or without fee is hereby granted, provided that the above\r
-copyright notice and this permission notice appear in all copies.\r
-\r
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r
-\r
-\r
-include usage-\r
-    #include "wd.h"             //if in same directory as project\r
-    #include <avr/wd.h>         //if wd.h is in avr directory\r
-\r
-set watchdog modes and prescale\r
-\r
-usage-\r
-    WD_SET(mode,[timeout]);     //prescale always set\r
-\r
-modes-\r
-    WD_OFF                      disabled\r
-    WD_RST                      normal reset mode\r
-    WD_IRQ                      interrupt only mode (if supported)\r
-    WD_RST_IRQ                  interrupt+reset mode (if supported)\r
-\r
-timeout-\r
-    WDTO_15MS                   default if no timeout provided\r
-    WDTO_30MS\r
-    WDTO_60MS\r
-    WDTO_120MS\r
-    WDTO_250MS\r
-    WDTO_500MS\r
-    WDTO_1S\r
-    WDTO_2S\r
-    WDTO_4S                     (if supported)\r
-    WDTO_8S                     (if supported)\r
-\r
-examples-\r
-    WD_SET(WD_RST,WDTO_1S);     //reset mode, 1s timeout\r
-    WD_SET(WD_OFF);             //watchdog disabled (if not fused on)\r
-    WD_SET(WD_RST);             //reset mode, 15ms (default timeout)\r
-    WD_SET(WD_IRQ,WDTO_120MS);  //interrupt only mode, 120ms timeout\r
-    WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout\r
-\r
-\r
-for enhanced watchdogs, if the watchdog is not being used WDRF should be\r
-cleared on every power up or reset, along with disabling the watchdog-\r
-    WD_DISABLE();               //clear WDRF, then turn off watchdog\r
-\r
-*/\r
-\r
-//reset registers to the same name (MCUCSR)\r
-#if !defined(MCUCSR)\r
-#define MCUCSR                  MCUSR\r
-#endif\r
-\r
-//watchdog registers to the same name (WDTCSR)\r
-#if !defined(WDTCSR)\r
-#define WDTCSR                  WDTCR\r
-#endif\r
-\r
-//if enhanced watchdog, define irq values, create disable macro\r
-#if defined(WDIF)\r
-#define WD_IRQ                  0xC0\r
-#define WD_RST_IRQ              0xC8\r
-#define WD_DISABLE()            do{                       \\r
-                                    MCUCSR &= ~(1<<WDRF); \\r
-                                    WD_SET(WD_OFF);       \\r
-                                }while(0)\r
-#endif\r
-\r
-//all watchdogs\r
-#define WD_RST                  8\r
-#define WD_OFF                  0\r
-\r
-//prescale values\r
-#define WDTO_15MS               0\r
-#define WDTO_30MS               1\r
-#define WDTO_60MS               2\r
-#define WDTO_120MS              3\r
-#define WDTO_250MS              4\r
-#define WDTO_500MS              5\r
-#define WDTO_1S                 6\r
-#define WDTO_2S                 7\r
-\r
-//prescale values for avrs with WDP3\r
-#if defined(WDP3)\r
-#define WDTO_4S                 0x20\r
-#define WDTO_8S                 0x21\r
-#endif\r
-\r
-//watchdog reset\r
-#define WDR()                   __asm__ __volatile__("wdr")\r
-\r
-//avr reset using watchdog\r
-#define WD_AVR_RESET()          do{                              \\r
-                                    __asm__ __volatile__("cli"); \\r
-                                    WD_SET_UNSAFE(WD_RST);       \\r
-                                    while(1);                    \\r
-                                }while(0)\r
-\r
-/*set the watchdog-\r
-1. save SREG\r
-2. turn off irq's\r
-3. reset watchdog timer\r
-4. enable watchdog change\r
-5. write watchdog value\r
-6. restore SREG (restoring irq status)\r
-*/\r
-#define WD_SET(val,...)                                 \\r
-    __asm__ __volatile__(                               \\r
-        "in __tmp_reg__,__SREG__"           "\n\t"      \\r
-        "cli"                               "\n\t"      \\r
-        "wdr"                               "\n\t"      \\r
-        "sts %[wdreg],%[wden]"              "\n\t"      \\r
-        "sts %[wdreg],%[wdval]"             "\n\t"      \\r
-        "out __SREG__,__tmp_reg__"          "\n\t"      \\r
-        :                                               \\r
-        : [wdreg] "M" (&WDTCSR),                        \\r
-          [wden]  "r" ((uint8_t)(0x18)),                \\r
-          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \\r
-        : "r0"                                          \\r
-)\r
-\r
-/*set the watchdog when I bit in SREG known to be clear-\r
-1. reset watchdog timer\r
-2. enable watchdog change\r
-5. write watchdog value\r
-*/\r
-#define WD_SET_UNSAFE(val,...)                          \\r
-    __asm__ __volatile__(                               \\r
-        "wdr"                               "\n\t"      \\r
-        "sts %[wdreg],%[wden]"              "\n\t"      \\r
-        "sts %[wdreg],%[wdval]"             "\n\t"      \\r
-        :                                               \\r
-        : [wdreg] "M" (&WDTCSR),                        \\r
-          [wden]  "r" ((uint8_t)(0x18)),                \\r
-          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \\r
-)\r
-\r
-\r
-//for compatibility with avr/wdt.h\r
-#define wdt_enable(val) WD_SET(WD_RST,val)\r
-#define wdt_disable()   WD_SET(WD_OFF)\r
-\r
-\r
-#endif /* _AVR_WD_H_ */\r
+/* This is from http://www.mtcnet.net/~henryvm/wdt/ */
+#ifndef _AVR_WD_H_
+#define _AVR_WD_H_
+
+#include <avr/io.h>
+
+/*
+Copyright (c) 2009, Curt Van Maanen
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+include usage-
+    #include "wd.h"             //if in same directory as project
+    #include <avr/wd.h>         //if wd.h is in avr directory
+
+set watchdog modes and prescale
+
+usage-
+    WD_SET(mode,[timeout]);     //prescale always set
+
+modes-
+    WD_OFF                      disabled
+    WD_RST                      normal reset mode
+    WD_IRQ                      interrupt only mode (if supported)
+    WD_RST_IRQ                  interrupt+reset mode (if supported)
+
+timeout-
+    WDTO_15MS                   default if no timeout provided
+    WDTO_30MS
+    WDTO_60MS
+    WDTO_120MS
+    WDTO_250MS
+    WDTO_500MS
+    WDTO_1S
+    WDTO_2S
+    WDTO_4S                     (if supported)
+    WDTO_8S                     (if supported)
+
+examples-
+    WD_SET(WD_RST,WDTO_1S);     //reset mode, 1s timeout
+    WD_SET(WD_OFF);             //watchdog disabled (if not fused on)
+    WD_SET(WD_RST);             //reset mode, 15ms (default timeout)
+    WD_SET(WD_IRQ,WDTO_120MS);  //interrupt only mode, 120ms timeout
+    WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout
+
+
+for enhanced watchdogs, if the watchdog is not being used WDRF should be
+cleared on every power up or reset, along with disabling the watchdog-
+    WD_DISABLE();               //clear WDRF, then turn off watchdog
+
+*/
+
+//reset registers to the same name (MCUCSR)
+#if !defined(MCUCSR)
+#define MCUCSR                  MCUSR
+#endif
+
+//watchdog registers to the same name (WDTCSR)
+#if !defined(WDTCSR)
+#define WDTCSR                  WDTCR
+#endif
+
+//if enhanced watchdog, define irq values, create disable macro
+#if defined(WDIF)
+#define WD_IRQ                  0xC0
+#define WD_RST_IRQ              0xC8
+#define WD_DISABLE()            do{                       \
+                                    MCUCSR &= ~(1<<WDRF); \
+                                    WD_SET(WD_OFF);       \
+                                }while(0)
+#endif
+
+//all watchdogs
+#define WD_RST                  8
+#define WD_OFF                  0
+
+//prescale values
+#define WDTO_15MS               0
+#define WDTO_30MS               1
+#define WDTO_60MS               2
+#define WDTO_120MS              3
+#define WDTO_250MS              4
+#define WDTO_500MS              5
+#define WDTO_1S                 6
+#define WDTO_2S                 7
+
+//prescale values for avrs with WDP3
+#if defined(WDP3)
+#define WDTO_4S                 0x20
+#define WDTO_8S                 0x21
+#endif
+
+//watchdog reset
+#define WDR()                   __asm__ __volatile__("wdr")
+
+//avr reset using watchdog
+#define WD_AVR_RESET()          do{                              \
+                                    __asm__ __volatile__("cli"); \
+                                    WD_SET_UNSAFE(WD_RST);       \
+                                    while(1);                    \
+                                }while(0)
+
+/*set the watchdog-
+1. save SREG
+2. turn off irq's
+3. reset watchdog timer
+4. enable watchdog change
+5. write watchdog value
+6. restore SREG (restoring irq status)
+*/
+#define WD_SET(val,...)                                 \
+    __asm__ __volatile__(                               \
+        "in __tmp_reg__,__SREG__"           "\n\t"      \
+        "cli"                               "\n\t"      \
+        "wdr"                               "\n\t"      \
+        "sts %[wdreg],%[wden]"              "\n\t"      \
+        "sts %[wdreg],%[wdval]"             "\n\t"      \
+        "out __SREG__,__tmp_reg__"          "\n\t"      \
+        :                                               \
+        : [wdreg] "M" (&WDTCSR),                        \
+          [wden]  "r" ((uint8_t)(0x18)),                \
+          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \
+        : "r0"                                          \
+)
+
+/*set the watchdog when I bit in SREG known to be clear-
+1. reset watchdog timer
+2. enable watchdog change
+5. write watchdog value
+*/
+#define WD_SET_UNSAFE(val,...)                          \
+    __asm__ __volatile__(                               \
+        "wdr"                               "\n\t"      \
+        "sts %[wdreg],%[wden]"              "\n\t"      \
+        "sts %[wdreg],%[wdval]"             "\n\t"      \
+        :                                               \
+        : [wdreg] "M" (&WDTCSR),                        \
+          [wden]  "r" ((uint8_t)(0x18)),                \
+          [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0)))  \
+)
+
+
+//for compatibility with avr/wdt.h
+#define wdt_enable(val) WD_SET(WD_RST,val)
+#define wdt_disable()   WD_SET(WD_OFF)
+
+
+#endif /* _AVR_WD_H_ */
index 0eeace44ec3a2125076d0d3e36b6420bebca3ef2..151d26cbc80a16fe78f5ddb6e5406704b633f0b7 100644 (file)
@@ -21,11 +21,19 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
        include $(TMK_PATH)/protocol/midi.mk
 endif
 
+ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes)
+       LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp
+endif
+
 ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
        LUFA_SRC += $(LUFA_DIR)/bluetooth.c \
        $(TMK_DIR)/protocol/serial_uart.c
 endif
 
+ifeq ($(strip $(VIRTSER_ENABLE)), yes)
+       LUFA_SRC += $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c
+endif
+
 SRC += $(LUFA_SRC)
 
 # Search Path
index 72f3ff04c7448e57def3eeedf88ead79f1f02376..02e7063c66cf4c1e91a99d71efe30dbd9064fae1 100644 (file)
-<asf xmlversion="1.0">\r
-       <project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">\r
-               <require idref="lufa.bootloaders.cdc"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">\r
-               <require idref="lufa.bootloaders.cdc"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb647"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">\r
-               <require idref="lufa.bootloaders.cdc"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega32u4"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">\r
-               <require idref="lufa.bootloaders.cdc"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega16u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">\r
-               <require idref="lufa.bootloaders.cdc"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega8u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">\r
-               <info type="description" value="summary">\r
-               CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="Bootloaders"/>\r
-                       <keyword value="USB Device"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="include-path" value="."/>\r
-               <build type="c-source" value="BootloaderCDC.c"/>\r
-               <build type="header-file" value="BootloaderCDC.h"/>\r
-               <build type="c-source" value="Descriptors.c"/>\r
-               <build type="header-file" value="Descriptors.h"/>\r
-               <build type="c-source" value="BootloaderAPI.c"/>\r
-               <build type="header-file" value="BootloaderAPI.h"/>\r
-               <build type="asm-source" value="BootloaderAPITable.S"/>\r
-\r
-               <build type="module-config" subtype="path" value="Config"/>\r
-               <build type="header-file" value="Config/LUFAConfig.h"/>\r
-               <build type="header-file" value="Config/AppConfig.h"/>\r
-\r
-               <build type="distribute" subtype="user-file" value="doxyfile"/>\r
-               <build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>\r
-               <build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-               <require idref="lufa.drivers.board.leds"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">
+               <require idref="lufa.bootloaders.cdc"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">
+               <require idref="lufa.bootloaders.cdc"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb647"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">
+               <require idref="lufa.bootloaders.cdc"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega32u4"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">
+               <require idref="lufa.bootloaders.cdc"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega16u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">
+               <require idref="lufa.bootloaders.cdc"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega8u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">
+               <info type="description" value="summary">
+               CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="Bootloaders"/>
+                       <keyword value="USB Device"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="include-path" value="."/>
+               <build type="c-source" value="BootloaderCDC.c"/>
+               <build type="header-file" value="BootloaderCDC.h"/>
+               <build type="c-source" value="Descriptors.c"/>
+               <build type="header-file" value="Descriptors.h"/>
+               <build type="c-source" value="BootloaderAPI.c"/>
+               <build type="header-file" value="BootloaderAPI.h"/>
+               <build type="asm-source" value="BootloaderAPITable.S"/>
+
+               <build type="module-config" subtype="path" value="Config"/>
+               <build type="header-file" value="Config/LUFAConfig.h"/>
+               <build type="header-file" value="Config/AppConfig.h"/>
+
+               <build type="distribute" subtype="user-file" value="doxyfile"/>
+               <build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>
+               <build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+               <require idref="lufa.drivers.board.leds"/>
+       </module>
+</asf>
index 6f3312b764dc3ec2dca5c375828ab29be52a2a9d..f56aba69f5bae8bb3f0a918997bcb99387a5f245 100644 (file)
-<asf xmlversion="1.0">\r
-       <project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">\r
-               <require idref="lufa.bootloaders.dfu"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">\r
-               <require idref="lufa.bootloaders.dfu"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb647"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">\r
-               <require idref="lufa.bootloaders.dfu"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega32u4"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">\r
-               <require idref="lufa.bootloaders.dfu"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega16u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">\r
-               <require idref="lufa.bootloaders.dfu"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega8u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">\r
-               <info type="description" value="summary">\r
-               DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="Bootloaders"/>\r
-                       <keyword value="USB Device"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="include-path" value="."/>\r
-               <build type="c-source" value="BootloaderDFU.c"/>\r
-               <build type="header-file" value="BootloaderDFU.h"/>\r
-               <build type="c-source" value="Descriptors.c"/>\r
-               <build type="header-file" value="Descriptors.h"/>\r
-               <build type="c-source" value="BootloaderAPI.c"/>\r
-               <build type="header-file" value="BootloaderAPI.h"/>\r
-               <build type="asm-source" value="BootloaderAPITable.S"/>\r
-\r
-               <build type="module-config" subtype="path" value="Config"/>\r
-               <build type="header-file" value="Config/LUFAConfig.h"/>\r
-               <build type="header-file" value="Config/AppConfig.h"/>\r
-\r
-               <build type="distribute" subtype="user-file" value="doxyfile"/>\r
-               <build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-               <require idref="lufa.drivers.board.leds"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">
+               <require idref="lufa.bootloaders.dfu"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">
+               <require idref="lufa.bootloaders.dfu"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb647"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">
+               <require idref="lufa.bootloaders.dfu"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega32u4"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">
+               <require idref="lufa.bootloaders.dfu"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega16u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">
+               <require idref="lufa.bootloaders.dfu"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega8u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">
+               <info type="description" value="summary">
+               DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="Bootloaders"/>
+                       <keyword value="USB Device"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="include-path" value="."/>
+               <build type="c-source" value="BootloaderDFU.c"/>
+               <build type="header-file" value="BootloaderDFU.h"/>
+               <build type="c-source" value="Descriptors.c"/>
+               <build type="header-file" value="Descriptors.h"/>
+               <build type="c-source" value="BootloaderAPI.c"/>
+               <build type="header-file" value="BootloaderAPI.h"/>
+               <build type="asm-source" value="BootloaderAPITable.S"/>
+
+               <build type="module-config" subtype="path" value="Config"/>
+               <build type="header-file" value="Config/LUFAConfig.h"/>
+               <build type="header-file" value="Config/AppConfig.h"/>
+
+               <build type="distribute" subtype="user-file" value="doxyfile"/>
+               <build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+               <require idref="lufa.drivers.board.leds"/>
+       </module>
+</asf>
index 9394b13530b1a95d233890973a1aaee1df816318..c67b9419edf8719169952510c24ce13bbb789475 100644 (file)
-<asf xmlversion="1.0">\r
-       <project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">\r
-               <require idref="lufa.bootloaders.hid"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>\r
-       </project>\r
-\r
-       <project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">\r
-               <require idref="lufa.bootloaders.hid"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb647"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>\r
-       </project>\r
-\r
-       <project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">\r
-               <require idref="lufa.bootloaders.hid"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega32u4"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>\r
-       </project>\r
-\r
-       <project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">\r
-               <require idref="lufa.bootloaders.hid"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega16u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x3800"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>\r
-       </project>\r
-\r
-       <project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">\r
-               <require idref="lufa.bootloaders.hid"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega8u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1800"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">\r
-               <info type="description" value="summary">\r
-               HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="Bootloaders"/>\r
-                       <keyword value="USB Device"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="include-path" value="."/>\r
-               <build type="c-source" value="BootloaderHID.c"/>\r
-               <build type="header-file" value="BootloaderHID.h"/>\r
-               <build type="c-source" value="Descriptors.c"/>\r
-               <build type="header-file" value="Descriptors.h"/>\r
-\r
-               <build type="module-config" subtype="path" value="Config"/>\r
-               <build type="header-file" value="Config/LUFAConfig.h"/>\r
-\r
-               <build type="distribute" subtype="user-file" value="doxyfile"/>\r
-               <build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>\r
-               <build type="distribute" subtype="directory" value="HostLoaderApp"/>\r
-               <build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-               <require idref="lufa.drivers.board.leds"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">
+               <require idref="lufa.bootloaders.hid"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+       </project>
+
+       <project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">
+               <require idref="lufa.bootloaders.hid"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb647"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+       </project>
+
+       <project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">
+               <require idref="lufa.bootloaders.hid"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega32u4"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+       </project>
+
+       <project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">
+               <require idref="lufa.bootloaders.hid"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega16u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x3800"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>
+       </project>
+
+       <project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">
+               <require idref="lufa.bootloaders.hid"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega8u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1800"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>
+       </project>
+
+       <module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">
+               <info type="description" value="summary">
+               HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="Bootloaders"/>
+                       <keyword value="USB Device"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="include-path" value="."/>
+               <build type="c-source" value="BootloaderHID.c"/>
+               <build type="header-file" value="BootloaderHID.h"/>
+               <build type="c-source" value="Descriptors.c"/>
+               <build type="header-file" value="Descriptors.h"/>
+
+               <build type="module-config" subtype="path" value="Config"/>
+               <build type="header-file" value="Config/LUFAConfig.h"/>
+
+               <build type="distribute" subtype="user-file" value="doxyfile"/>
+               <build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>
+               <build type="distribute" subtype="directory" value="HostLoaderApp"/>
+               <build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+               <require idref="lufa.drivers.board.leds"/>
+       </module>
+</asf>
index 6844d4b01c808537d3be8215fcc08c5b7e13cca7..91fc949666a63881b403e9f67028b2602765a3f3 100644 (file)
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2014.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-*/\r
-\r
-/*\r
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, distribute, and sell this\r
-  software and its documentation for any purpose is hereby granted\r
-  without fee, provided that the above copyright notice appear in\r
-  all copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaims all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-#if AUX_BOOT_SECTION_SIZE > 0\r
-#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).\r
-\r
-; Trampoline to jump over the AUX bootloader section to the start of the bootloader,\r
-; on devices where an AUX bootloader section is used.\r
-.section .boot_aux_trampoline, "ax"\r
-.global Boot_AUX_Trampoline\r
-Boot_AUX_Trampoline:\r
-       jmp BOOT_START_ADDR\r
-#endif\r
-\r
-; Trampolines to actual API implementations if the target address is outside the\r
-; range of a rjmp instruction (can happen with large bootloader sections)\r
-.section .apitable_trampolines, "ax"\r
-.global BootloaderAPI_Trampolines\r
-BootloaderAPI_Trampolines:\r
-\r
-       BootloaderAPI_ErasePage_Trampoline:\r
-               jmp BootloaderAPI_ErasePage\r
-       BootloaderAPI_WritePage_Trampoline:\r
-               jmp BootloaderAPI_WritePage\r
-       BootloaderAPI_FillWord_Trampoline:\r
-               jmp BootloaderAPI_FillWord\r
-       BootloaderAPI_ReadSignature_Trampoline:\r
-               jmp BootloaderAPI_ReadSignature\r
-       BootloaderAPI_ReadFuse_Trampoline:\r
-               jmp BootloaderAPI_ReadFuse\r
-       BootloaderAPI_ReadLock_Trampoline:\r
-               jmp BootloaderAPI_ReadLock\r
-       BootloaderAPI_WriteLock_Trampoline:\r
-               jmp BootloaderAPI_WriteLock\r
-       BootloaderAPI_UNUSED1:\r
-               ret\r
-       BootloaderAPI_UNUSED2:\r
-               ret\r
-       BootloaderAPI_UNUSED3:\r
-               ret\r
-       BootloaderAPI_UNUSED4:\r
-               ret\r
-       BootloaderAPI_UNUSED5:\r
-               ret\r
-\r
-\r
-\r
-; API function jump table\r
-.section .apitable_jumptable, "ax"\r
-.global BootloaderAPI_JumpTable\r
-BootloaderAPI_JumpTable:\r
-\r
-       rjmp BootloaderAPI_ErasePage_Trampoline\r
-       rjmp BootloaderAPI_WritePage_Trampoline\r
-       rjmp BootloaderAPI_FillWord_Trampoline\r
-       rjmp BootloaderAPI_ReadSignature_Trampoline\r
-       rjmp BootloaderAPI_ReadFuse_Trampoline\r
-       rjmp BootloaderAPI_ReadLock_Trampoline\r
-       rjmp BootloaderAPI_WriteLock_Trampoline\r
-       rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1\r
-       rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2\r
-       rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3\r
-       rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4\r
-       rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5\r
-\r
-\r
-\r
-; Bootloader table signatures and information\r
-.section .apitable_signatures, "ax"\r
-.global BootloaderAPI_Signatures\r
-BootloaderAPI_Signatures:\r
-\r
-       .long BOOT_START_ADDR ; Start address of the bootloader\r
-       .word 0xDF30 ; Signature for the MS class bootloader, V1\r
-       .word 0xDCFB ; Signature for a LUFA class bootloader\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2014.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+#if AUX_BOOT_SECTION_SIZE > 0
+#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
+
+; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
+; on devices where an AUX bootloader section is used.
+.section .boot_aux_trampoline, "ax"
+.global Boot_AUX_Trampoline
+Boot_AUX_Trampoline:
+       jmp BOOT_START_ADDR
+#endif
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+       BootloaderAPI_ErasePage_Trampoline:
+               jmp BootloaderAPI_ErasePage
+       BootloaderAPI_WritePage_Trampoline:
+               jmp BootloaderAPI_WritePage
+       BootloaderAPI_FillWord_Trampoline:
+               jmp BootloaderAPI_FillWord
+       BootloaderAPI_ReadSignature_Trampoline:
+               jmp BootloaderAPI_ReadSignature
+       BootloaderAPI_ReadFuse_Trampoline:
+               jmp BootloaderAPI_ReadFuse
+       BootloaderAPI_ReadLock_Trampoline:
+               jmp BootloaderAPI_ReadLock
+       BootloaderAPI_WriteLock_Trampoline:
+               jmp BootloaderAPI_WriteLock
+       BootloaderAPI_UNUSED1:
+               ret
+       BootloaderAPI_UNUSED2:
+               ret
+       BootloaderAPI_UNUSED3:
+               ret
+       BootloaderAPI_UNUSED4:
+               ret
+       BootloaderAPI_UNUSED5:
+               ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+       rjmp BootloaderAPI_ErasePage_Trampoline
+       rjmp BootloaderAPI_WritePage_Trampoline
+       rjmp BootloaderAPI_FillWord_Trampoline
+       rjmp BootloaderAPI_ReadSignature_Trampoline
+       rjmp BootloaderAPI_ReadFuse_Trampoline
+       rjmp BootloaderAPI_ReadLock_Trampoline
+       rjmp BootloaderAPI_WriteLock_Trampoline
+       rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+       rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+       rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+       rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+       rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+       .long BOOT_START_ADDR ; Start address of the bootloader
+       .word 0xDF30 ; Signature for the MS class bootloader, V1
+       .word 0xDCFB ; Signature for a LUFA class bootloader
index f1d550d1eba5432c3f096d8457451d0d09e1a8ef..700ffa26ffb707968e62b0ea5dd25028649f347d 100644 (file)
-<asf xmlversion="1.0">\r
-       <project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">\r
-               <require idref="lufa.bootloaders.mass_storage"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1E000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>\r
-\r
-               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">\r
-               <require idref="lufa.bootloaders.mass_storage"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb647"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0xE000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>\r
-\r
-               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">\r
-               <require idref="lufa.bootloaders.mass_storage"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega32u4"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>\r
-\r
-               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">\r
-               <require idref="lufa.bootloaders.mass_storage"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega16u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>\r
-\r
-               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">\r
-               <info type="description" value="summary">\r
-               Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="Bootloaders"/>\r
-                       <keyword value="USB Device"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="include-path" value="."/>\r
-               <build type="c-source" value="BootloaderMassStorage.c"/>\r
-               <build type="header-file" value="BootloaderMassStorage.h"/>\r
-               <build type="c-source" value="Descriptors.c"/>\r
-               <build type="header-file" value="Descriptors.h"/>\r
-               <build type="c-source" value="BootloaderAPI.c"/>\r
-               <build type="header-file" value="BootloaderAPI.h"/>\r
-               <build type="asm-source" value="BootloaderAPITable.S"/>\r
-\r
-               <build type="module-config" subtype="path" value="Config"/>\r
-               <build type="header-file" value="Config/LUFAConfig.h"/>\r
-               <build type="header-file" value="Config/AppConfig.h"/>\r
-\r
-               <build type="include-path" value="Lib"/>\r
-               <build type="header-file" value="Lib/VirtualFAT.h"/>\r
-               <build type="c-source" value="Lib/VirtualFAT.c"/>\r
-               <build type="header-file" value="Lib/SCSI.h"/>\r
-               <build type="c-source" value="Lib/SCSI.c"/>\r
-\r
-               <build type="distribute" subtype="user-file" value="doxyfile"/>\r
-               <build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-               <require idref="lufa.drivers.board.leds"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">
+               <require idref="lufa.bootloaders.mass_storage"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1E000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>
+
+               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">
+               <require idref="lufa.bootloaders.mass_storage"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb647"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0xE000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>
+
+               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">
+               <require idref="lufa.bootloaders.mass_storage"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega32u4"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>
+               <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">
+               <require idref="lufa.bootloaders.mass_storage"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega16u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+               <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>
+               <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">
+               <info type="description" value="summary">
+               Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="Bootloaders"/>
+                       <keyword value="USB Device"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="include-path" value="."/>
+               <build type="c-source" value="BootloaderMassStorage.c"/>
+               <build type="header-file" value="BootloaderMassStorage.h"/>
+               <build type="c-source" value="Descriptors.c"/>
+               <build type="header-file" value="Descriptors.h"/>
+               <build type="c-source" value="BootloaderAPI.c"/>
+               <build type="header-file" value="BootloaderAPI.h"/>
+               <build type="asm-source" value="BootloaderAPITable.S"/>
+
+               <build type="module-config" subtype="path" value="Config"/>
+               <build type="header-file" value="Config/LUFAConfig.h"/>
+               <build type="header-file" value="Config/AppConfig.h"/>
+
+               <build type="include-path" value="Lib"/>
+               <build type="header-file" value="Lib/VirtualFAT.h"/>
+               <build type="c-source" value="Lib/VirtualFAT.c"/>
+               <build type="header-file" value="Lib/SCSI.h"/>
+               <build type="c-source" value="Lib/SCSI.c"/>
+
+               <build type="distribute" subtype="user-file" value="doxyfile"/>
+               <build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+               <require idref="lufa.drivers.board.leds"/>
+       </module>
+</asf>
index 91bb4038e8ee67c85013af866e5c13d2b945f9ab..a0edb2c4f5032c293c35defd4665588624a9123e 100644 (file)
@@ -1,68 +1,68 @@
-#\r
-#             LUFA Library\r
-#     Copyright (C) Dean Camera, 2014.\r
-#\r
-#  dean [at] fourwalledcubicle [dot] com\r
-#           www.lufa-lib.org\r
-#\r
-# --------------------------------------\r
-#         LUFA Project Makefile.\r
-# --------------------------------------\r
-\r
-# Run "make help" for target help.\r
-\r
-MCU          = at90usb1287\r
-ARCH         = AVR8\r
-BOARD        = USBKEY\r
-F_CPU        = 8000000\r
-F_USB        = $(F_CPU)\r
-OPTIMIZATION = s\r
-TARGET       = BootloaderMassStorage\r
-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)\r
-LUFA_PATH    = ../../LUFA\r
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)\r
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)\r
-\r
-# Flash size and bootloader section sizes of the target, in KB. These must\r
-# match the target's total FLASH size and the bootloader size set in the\r
-# device's fuses.\r
-FLASH_SIZE_KB         = 128\r
-BOOT_SECTION_SIZE_KB  = 8\r
-\r
-# Bootloader address calculation formulas\r
-# Do not modify these macros, but rather modify the dependent values above.\r
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )\r
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )\r
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )\r
-\r
-# Bootloader linker section flags for relocating the API table sections to\r
-# known FLASH addresses - these should not normally be user-edited.\r
-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))\r
-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)\r
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)\r
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)\r
-\r
-# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the\r
-# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum\r
-# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.\r
-ifeq ($(BOOT_SECTION_SIZE_KB),8)\r
-  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE=0\r
-else\r
-  AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))\r
-\r
-  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'\r
-  LD_FLAGS           += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))\r
-  LD_FLAGS           += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)\r
-endif\r
-\r
-# Default target\r
-all:\r
-\r
-# Include LUFA build script makefiles\r
-include $(LUFA_PATH)/Build/lufa_core.mk\r
-include $(LUFA_PATH)/Build/lufa_sources.mk\r
-include $(LUFA_PATH)/Build/lufa_build.mk\r
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk\r
-include $(LUFA_PATH)/Build/lufa_doxygen.mk\r
-include $(LUFA_PATH)/Build/lufa_avrdude.mk\r
-include $(LUFA_PATH)/Build/lufa_atprogram.mk\r
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2014.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          = at90usb1287
+ARCH         = AVR8
+BOARD        = USBKEY
+F_CPU        = 8000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = BootloaderMassStorage
+SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH    = ../../LUFA
+CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB         = 128
+BOOT_SECTION_SIZE_KB  = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
+
+# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the
+# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum
+# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.
+ifeq ($(BOOT_SECTION_SIZE_KB),8)
+  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE=0
+else
+  AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))
+
+  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'
+  LD_FLAGS           += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))
+  LD_FLAGS           += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)
+endif
+
+# Default target
+all:
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_sources.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_avrdude.mk
+include $(LUFA_PATH)/Build/lufa_atprogram.mk
index ec499b74e5a8c39932aecfffda535bf0a1f43b7c..88c51da8257c93f2313014145f1f69a1ac9235ce 100644 (file)
@@ -1,91 +1,91 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2014.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-*/\r
-\r
-/*\r
-  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, distribute, and sell this\r
-  software and its documentation for any purpose is hereby granted\r
-  without fee, provided that the above copyright notice appear in\r
-  all copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaims all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-; Trampolines to actual API implementations if the target address is outside the\r
-; range of a rjmp instruction (can happen with large bootloader sections)\r
-.section .apitable_trampolines, "ax"\r
-.global BootloaderAPI_Trampolines\r
-BootloaderAPI_Trampolines:\r
-\r
-       BootloaderAPI_ErasePage_Trampoline:\r
-               jmp BootloaderAPI_ErasePage\r
-       BootloaderAPI_WritePage_Trampoline:\r
-               jmp BootloaderAPI_WritePage\r
-       BootloaderAPI_FillWord_Trampoline:\r
-               jmp BootloaderAPI_FillWord\r
-       BootloaderAPI_ReadSignature_Trampoline:\r
-               jmp BootloaderAPI_ReadSignature\r
-       BootloaderAPI_ReadFuse_Trampoline:\r
-               jmp BootloaderAPI_ReadFuse\r
-       BootloaderAPI_ReadLock_Trampoline:\r
-               jmp BootloaderAPI_ReadLock\r
-       BootloaderAPI_WriteLock_Trampoline:\r
-               jmp BootloaderAPI_WriteLock\r
-       BootloaderAPI_UNUSED1:\r
-               ret\r
-       BootloaderAPI_UNUSED2:\r
-               ret\r
-       BootloaderAPI_UNUSED3:\r
-               ret\r
-       BootloaderAPI_UNUSED4:\r
-               ret\r
-       BootloaderAPI_UNUSED5:\r
-               ret\r
-\r
-\r
-\r
-; API function jump table\r
-.section .apitable_jumptable, "ax"\r
-.global BootloaderAPI_JumpTable\r
-BootloaderAPI_JumpTable:\r
-\r
-       rjmp BootloaderAPI_ErasePage_Trampoline\r
-       rjmp BootloaderAPI_WritePage_Trampoline\r
-       rjmp BootloaderAPI_FillWord_Trampoline\r
-       rjmp BootloaderAPI_ReadSignature_Trampoline\r
-       rjmp BootloaderAPI_ReadFuse_Trampoline\r
-       rjmp BootloaderAPI_ReadLock_Trampoline\r
-       rjmp BootloaderAPI_WriteLock_Trampoline\r
-       rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1\r
-       rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2\r
-       rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3\r
-       rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4\r
-       rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5\r
-\r
-\r
-\r
-; Bootloader table signatures and information\r
-.section .apitable_signatures, "ax"\r
-.global BootloaderAPI_Signatures\r
-BootloaderAPI_Signatures:\r
-\r
-       .long BOOT_START_ADDR ; Start address of the bootloader\r
-       .word 0xDF20 ; Signature for the Printer class bootloader\r
-       .word 0xDCFB ; Signature for a LUFA class bootloader\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2014.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaims all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+       BootloaderAPI_ErasePage_Trampoline:
+               jmp BootloaderAPI_ErasePage
+       BootloaderAPI_WritePage_Trampoline:
+               jmp BootloaderAPI_WritePage
+       BootloaderAPI_FillWord_Trampoline:
+               jmp BootloaderAPI_FillWord
+       BootloaderAPI_ReadSignature_Trampoline:
+               jmp BootloaderAPI_ReadSignature
+       BootloaderAPI_ReadFuse_Trampoline:
+               jmp BootloaderAPI_ReadFuse
+       BootloaderAPI_ReadLock_Trampoline:
+               jmp BootloaderAPI_ReadLock
+       BootloaderAPI_WriteLock_Trampoline:
+               jmp BootloaderAPI_WriteLock
+       BootloaderAPI_UNUSED1:
+               ret
+       BootloaderAPI_UNUSED2:
+               ret
+       BootloaderAPI_UNUSED3:
+               ret
+       BootloaderAPI_UNUSED4:
+               ret
+       BootloaderAPI_UNUSED5:
+               ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+       rjmp BootloaderAPI_ErasePage_Trampoline
+       rjmp BootloaderAPI_WritePage_Trampoline
+       rjmp BootloaderAPI_FillWord_Trampoline
+       rjmp BootloaderAPI_ReadSignature_Trampoline
+       rjmp BootloaderAPI_ReadFuse_Trampoline
+       rjmp BootloaderAPI_ReadLock_Trampoline
+       rjmp BootloaderAPI_WriteLock_Trampoline
+       rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+       rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+       rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+       rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+       rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+       .long BOOT_START_ADDR ; Start address of the bootloader
+       .word 0xDF20 ; Signature for the Printer class bootloader
+       .word 0xDCFB ; Signature for a LUFA class bootloader
index 86a56911ede5f058aeadf47ffd6cffd46949bc1e..b5c0c6b3a5d86acefabb383143a568d1d594771f 100644 (file)
-<asf xmlversion="1.0">\r
-       <project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">\r
-               <require idref="lufa.bootloaders.printer"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">\r
-               <require idref="lufa.bootloaders.printer"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="at90usb647"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">\r
-               <require idref="lufa.bootloaders.printer"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega32u4"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">\r
-               <require idref="lufa.bootloaders.printer"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega16u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">\r
-               <require idref="lufa.bootloaders.printer"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8"/>\r
-\r
-               <device-support value="atmega8u2"/>\r
-               <config name="lufa.drivers.board.name" value="none"/>\r
-\r
-               <config name="config.compiler.optimization.level" value="size"/>\r
-\r
-               <build type="define" name="F_CPU" value="16000000UL"/>\r
-               <build type="define" name="F_USB" value="16000000UL"/>\r
-\r
-               <build type="define" name="BOOT_START_ADDR" value="0x1000"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>\r
-\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>\r
-               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>\r
-               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">\r
-               <info type="description" value="summary">\r
-               Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="Bootloaders"/>\r
-                       <keyword value="USB Device"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="include-path" value="."/>\r
-               <build type="c-source" value="BootloaderPrinter.c"/>\r
-               <build type="header-file" value="BootloaderPrinter.h"/>\r
-               <build type="c-source" value="Descriptors.c"/>\r
-               <build type="header-file" value="Descriptors.h"/>\r
-               <build type="c-source" value="BootloaderAPI.c"/>\r
-               <build type="header-file" value="BootloaderAPI.h"/>\r
-               <build type="asm-source" value="BootloaderAPITable.S"/>\r
-\r
-               <build type="module-config" subtype="path" value="Config"/>\r
-               <build type="header-file" value="Config/LUFAConfig.h"/>\r
-\r
-               <build type="distribute" subtype="user-file" value="doxyfile"/>\r
-               <build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-               <require idref="lufa.drivers.board.leds"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">
+               <require idref="lufa.bootloaders.printer"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">
+               <require idref="lufa.bootloaders.printer"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="at90usb647"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">
+               <require idref="lufa.bootloaders.printer"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega32u4"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">
+               <require idref="lufa.bootloaders.printer"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega16u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">
+               <require idref="lufa.bootloaders.printer"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8"/>
+
+               <device-support value="atmega8u2"/>
+               <config name="lufa.drivers.board.name" value="none"/>
+
+               <config name="config.compiler.optimization.level" value="size"/>
+
+               <build type="define" name="F_CPU" value="16000000UL"/>
+               <build type="define" name="F_USB" value="16000000UL"/>
+
+               <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+               <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+               <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+       </project>
+
+       <module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">
+               <info type="description" value="summary">
+               Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="Bootloaders"/>
+                       <keyword value="USB Device"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="include-path" value="."/>
+               <build type="c-source" value="BootloaderPrinter.c"/>
+               <build type="header-file" value="BootloaderPrinter.h"/>
+               <build type="c-source" value="Descriptors.c"/>
+               <build type="header-file" value="Descriptors.h"/>
+               <build type="c-source" value="BootloaderAPI.c"/>
+               <build type="header-file" value="BootloaderAPI.h"/>
+               <build type="asm-source" value="BootloaderAPITable.S"/>
+
+               <build type="module-config" subtype="path" value="Config"/>
+               <build type="header-file" value="Config/LUFAConfig.h"/>
+
+               <build type="distribute" subtype="user-file" value="doxyfile"/>
+               <build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+               <require idref="lufa.drivers.board.leds"/>
+       </module>
+</asf>
index 0716c3bbe8804b56336604b7bcdabf0dca949dbf..0db035de3b84db98c243eecd4287f28ed2e02331 100644 (file)
@@ -1,55 +1,55 @@
-#\r
-#             LUFA Library\r
-#     Copyright (C) Dean Camera, 2014.\r
-#\r
-#  dean [at] fourwalledcubicle [dot] com\r
-#           www.lufa-lib.org\r
-#\r
-# --------------------------------------\r
-#         LUFA Project Makefile.\r
-# --------------------------------------\r
-\r
-# Run "make help" for target help.\r
-\r
-MCU          = at90usb1287\r
-ARCH         = AVR8\r
-BOARD        = USBKEY\r
-F_CPU        = 8000000\r
-F_USB        = $(F_CPU)\r
-OPTIMIZATION = s\r
-TARGET       = BootloaderPrinter\r
-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)\r
-LUFA_PATH    = ../../LUFA\r
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)\r
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)\r
-\r
-# Flash size and bootloader section sizes of the target, in KB. These must\r
-# match the target's total FLASH size and the bootloader size set in the\r
-# device's fuses.\r
-FLASH_SIZE_KB         = 128\r
-BOOT_SECTION_SIZE_KB  = 8\r
-\r
-# Bootloader address calculation formulas\r
-# Do not modify these macros, but rather modify the dependent values above.\r
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )\r
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )\r
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )\r
-\r
-# Bootloader linker section flags for relocating the API table sections to\r
-# known FLASH addresses - these should not normally be user-edited.\r
-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))\r
-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)\r
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)\r
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)\r
-\r
-# Default target\r
-all:\r
-\r
-# Include LUFA build script makefiles\r
-include $(LUFA_PATH)/Build/lufa_core.mk\r
-include $(LUFA_PATH)/Build/lufa_sources.mk\r
-include $(LUFA_PATH)/Build/lufa_build.mk\r
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk\r
-include $(LUFA_PATH)/Build/lufa_doxygen.mk\r
-include $(LUFA_PATH)/Build/lufa_avrdude.mk\r
-include $(LUFA_PATH)/Build/lufa_atprogram.mk\r
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2014.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          = at90usb1287
+ARCH         = AVR8
+BOARD        = USBKEY
+F_CPU        = 8000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = BootloaderPrinter
+SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH    = ../../LUFA
+CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB         = 128
+BOOT_SECTION_SIZE_KB  = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
+BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
+
+# Default target
+all:
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_sources.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_avrdude.mk
+include $(LUFA_PATH)/Build/lufa_atprogram.mk
index 9fd188c936fc1b343758c44181fff9252a920d01..e839ba6b1d985775d5dd1e3cafec5bd41d7a7568 100644 (file)
@@ -1,42 +1,42 @@
-#\r
-#             LUFA Library\r
-#     Copyright (C) Dean Camera, 2014.\r
-#\r
-#  dean [at] fourwalledcubicle [dot] com\r
-#           www.lufa-lib.org\r
-#\r
-# --------------------------------------\r
-#         LUFA Project Makefile.\r
-# --------------------------------------\r
-\r
-# Run "make help" for target help.\r
-\r
-MCU          = at90usb1287\r
-ARCH         = AVR8\r
-F_CPU        = 1000000\r
-F_USB        = $(F_CPU)\r
-OPTIMIZATION = s\r
-TARGET       = HID_EEPROM_Loader\r
-SRC          = $(TARGET).c\r
-LUFA_PATH    = ../../../LUFA\r
-CC_FLAGS     =\r
-LD_FLAGS     =\r
-OBJECT_FILES = InputEEData.o\r
-\r
-# Default target\r
-all:\r
-\r
-# Determine the AVR sub-architecture of the build main application object file\r
-FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1)\r
-\r
-# Create a linkable object file with the input binary EEPROM data stored in the FLASH section\r
-InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST)\r
-       @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\"\r
-       avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@\r
-\r
-# Include LUFA build script makefiles\r
-include $(LUFA_PATH)/Build/lufa_core.mk\r
-include $(LUFA_PATH)/Build/lufa_build.mk\r
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk\r
-include $(LUFA_PATH)/Build/lufa_doxygen.mk\r
-include $(LUFA_PATH)/Build/lufa_hid.mk\r
+#
+#             LUFA Library
+#     Copyright (C) Dean Camera, 2014.
+#
+#  dean [at] fourwalledcubicle [dot] com
+#           www.lufa-lib.org
+#
+# --------------------------------------
+#         LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU          = at90usb1287
+ARCH         = AVR8
+F_CPU        = 1000000
+F_USB        = $(F_CPU)
+OPTIMIZATION = s
+TARGET       = HID_EEPROM_Loader
+SRC          = $(TARGET).c
+LUFA_PATH    = ../../../LUFA
+CC_FLAGS     =
+LD_FLAGS     =
+OBJECT_FILES = InputEEData.o
+
+# Default target
+all:
+
+# Determine the AVR sub-architecture of the build main application object file
+FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1)
+
+# Create a linkable object file with the input binary EEPROM data stored in the FLASH section
+InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST)
+       @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\"
+       avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_hid.mk
index fd65db283facc5ec6899ccf5e5bf84e3e2c84627..e952714e16b39088ae6137587dba7d882172e815 100644 (file)
@@ -1,55 +1,55 @@
-<asf xmlversion="1.0">\r
-       <project caption="USB Device Template" id="lufa.templates.device.project.avr8">\r
-               <require idref="lufa.templates.device"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8_template"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="usbkey"/>\r
-\r
-               <build type="define" name="F_CPU" value="8000000UL"/>\r
-               <build type="define" name="F_USB" value="8000000UL"/>\r
-       </project>\r
-\r
-       <project caption="USB Device Template" id="lufa.templates.device.project.xmega">\r
-               <require idref="lufa.templates.device"/>\r
-               <require idref="lufa.boards.dummy.xmega"/>\r
-               <generator value="as5_8_template"/>\r
-\r
-               <device-support value="atxmega256a3bu"/>\r
-               <config name="lufa.drivers.board.name" value="a3bu_xplained"/>\r
-\r
-               <build type="define" name="F_CPU" value="32000000UL"/>\r
-               <build type="define" name="F_USB" value="48000000UL"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.templates.device" caption="USB Device Template">\r
-               <info type="description" value="summary">\r
-               Template for a LUFA USB device mode application.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="USB Device"/>\r
-                       <keyword value="Template Projects"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="c-source" value="DeviceApplication.c"/>\r
-               <build type="c-source" value="Descriptors.c"/>\r
-               <build type="header-file" value="DeviceApplication.h"/>\r
-               <build type="header-file" value="Descriptors.h"/>\r
-\r
-               <build type="module-config" subtype="path" value=".."/>\r
-               <build type="header-file" value="../LUFAConfig.h"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="USB Device Template" id="lufa.templates.device.project.avr8">
+               <require idref="lufa.templates.device"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8_template"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="usbkey"/>
+
+               <build type="define" name="F_CPU" value="8000000UL"/>
+               <build type="define" name="F_USB" value="8000000UL"/>
+       </project>
+
+       <project caption="USB Device Template" id="lufa.templates.device.project.xmega">
+               <require idref="lufa.templates.device"/>
+               <require idref="lufa.boards.dummy.xmega"/>
+               <generator value="as5_8_template"/>
+
+               <device-support value="atxmega256a3bu"/>
+               <config name="lufa.drivers.board.name" value="a3bu_xplained"/>
+
+               <build type="define" name="F_CPU" value="32000000UL"/>
+               <build type="define" name="F_USB" value="48000000UL"/>
+       </project>
+
+       <module type="application" id="lufa.templates.device" caption="USB Device Template">
+               <info type="description" value="summary">
+               Template for a LUFA USB device mode application.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="USB Device"/>
+                       <keyword value="Template Projects"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="c-source" value="DeviceApplication.c"/>
+               <build type="c-source" value="Descriptors.c"/>
+               <build type="header-file" value="DeviceApplication.h"/>
+               <build type="header-file" value="Descriptors.h"/>
+
+               <build type="module-config" subtype="path" value=".."/>
+               <build type="header-file" value="../LUFAConfig.h"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+       </module>
+</asf>
index c1996ec7114aed39ec3e1627966d2044fb2c9569..c3860c056d3e4450bbf04901b222bd4f5905f168 100644 (file)
@@ -1,41 +1,41 @@
-<asf xmlversion="1.0">\r
-       <project caption="USB Host Template" id="lufa.templates.host.project">\r
-               <require idref="lufa.templates.host"/>\r
-               <require idref="lufa.boards.dummy.avr8"/>\r
-               <generator value="as5_8_template"/>\r
-\r
-               <device-support value="at90usb1287"/>\r
-               <config name="lufa.drivers.board.name" value="usbkey"/>\r
-\r
-               <build type="define" name="F_CPU" value="8000000UL"/>\r
-               <build type="define" name="F_USB" value="8000000UL"/>\r
-       </project>\r
-\r
-       <module type="application" id="lufa.templates.host" caption="USB Host Template">\r
-               <info type="description" value="summary">\r
-               Template for a LUFA USB host mode application.\r
-               </info>\r
-\r
-               <info type="gui-flag" value="move-to-root"/>\r
-\r
-               <info type="keyword" value="Technology">\r
-                       <keyword value="USB Host"/>\r
-                       <keyword value="Template Projects"/>\r
-               </info>\r
-\r
-               <device-support-alias value="lufa_avr8"/>\r
-               <device-support-alias value="lufa_xmega"/>\r
-               <device-support-alias value="lufa_uc3"/>\r
-\r
-               <build type="c-source" value="HostApplication.c"/>\r
-               <build type="header-file" value="HostApplication.h"/>\r
-\r
-               <build type="module-config" subtype="path" value=".."/>\r
-               <build type="header-file" value="../LUFAConfig.h"/>\r
-\r
-               <require idref="lufa.common"/>\r
-               <require idref="lufa.platform"/>\r
-               <require idref="lufa.drivers.usb"/>\r
-               <require idref="lufa.drivers.board"/>\r
-       </module>\r
-</asf>\r
+<asf xmlversion="1.0">
+       <project caption="USB Host Template" id="lufa.templates.host.project">
+               <require idref="lufa.templates.host"/>
+               <require idref="lufa.boards.dummy.avr8"/>
+               <generator value="as5_8_template"/>
+
+               <device-support value="at90usb1287"/>
+               <config name="lufa.drivers.board.name" value="usbkey"/>
+
+               <build type="define" name="F_CPU" value="8000000UL"/>
+               <build type="define" name="F_USB" value="8000000UL"/>
+       </project>
+
+       <module type="application" id="lufa.templates.host" caption="USB Host Template">
+               <info type="description" value="summary">
+               Template for a LUFA USB host mode application.
+               </info>
+
+               <info type="gui-flag" value="move-to-root"/>
+
+               <info type="keyword" value="Technology">
+                       <keyword value="USB Host"/>
+                       <keyword value="Template Projects"/>
+               </info>
+
+               <device-support-alias value="lufa_avr8"/>
+               <device-support-alias value="lufa_xmega"/>
+               <device-support-alias value="lufa_uc3"/>
+
+               <build type="c-source" value="HostApplication.c"/>
+               <build type="header-file" value="HostApplication.h"/>
+
+               <build type="module-config" subtype="path" value=".."/>
+               <build type="header-file" value="../LUFAConfig.h"/>
+
+               <require idref="lufa.common"/>
+               <require idref="lufa.platform"/>
+               <require idref="lufa.drivers.usb"/>
+               <require idref="lufa.drivers.board"/>
+       </module>
+</asf>
index 7ddfa1be3f8879c82af354b1d878072a81f7bc6f..0ae1dd678f3d5c852f7a6d635e70db70fc36213c 100644 (file)
-/** \file\r
- *\r
- *  This file contains special DoxyGen information for the generation of the main page and other special\r
- *  documentation pages. It is not a project source file.\r
- */\r
-\r
-/** \page Page_BuildSystem The LUFA Build System\r
- *\r
- *  \section Sec_BuildSystem_Overview Overview of the LUFA Build System\r
- *  The LUFA build system is an attempt at making a set of re-usable, modular build make files which\r
- *  can be referenced in a LUFA powered project, to minimize the amount of code required in an\r
- *  application makefile. The system is written in GNU Make, and each module is independent of\r
- *  one-another.\r
- *\r
- *  For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA\r
- *  build system, see \ref Sec_CompilingApps_Prerequisites.\r
- *\r
- *  To use a LUFA build system module, simply add an include to your project makefile. All user projects\r
- *  should at a minimum include \ref Page_BuildModule_CORE for base functionality:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_core.mk\r
- *  \endcode\r
- *\r
- *  Once included in your project makefile, the associated build module targets will be added to your\r
- *  project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>\r
- *  from the command line, substituting in the appropriate target name.\r
- *\r
- *  \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.\r
- *\r
- *  Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>\r
- *  be supplied in the project makefile for the module to work, and one or more optional parameters which\r
- *  may be defined and which will assume a sensible default if not.\r
- *\r
- *  \section SSec_BuildSystem_Modules Available Modules\r
- *\r
- *  The following modules are included in this LUFA release:\r
- *\r
- *  \li \subpage Page_BuildModule_ATPROGRAM - Device Programming\r
- *  \li \subpage Page_BuildModule_AVRDUDE - Device Programming\r
- *  \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking\r
- *  \li \subpage Page_BuildModule_CORE - Core Build System Functions\r
- *  \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis\r
- *  \li \subpage Page_BuildModule_DFU - Device Programming\r
- *  \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation\r
- *  \li \subpage Page_BuildModule_HID - Device Programming\r
- *  \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables\r
- *\r
- *  If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.\r
- */\r
-\r
- /** \page Page_BuildModule_BUILD The BUILD build module\r
- *\r
- *  The BUILD LUFA build system module, providing targets for the compilation,\r
- *  assembling and linking of an application from source code into binary files\r
- *  suitable for programming into a target device, using the GCC compiler.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_build.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_BUILD_Requirements Requirements\r
- *  This module requires the the architecture appropriate binaries of the GCC compiler are available in your\r
- *  system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio\r
- *  5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.\r
- *\r
- *  \section SSec_BuildModule_BUILD_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>size</tt></td>\r
- *    <td>Display size of the compiled application FLASH and SRAM segments.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>symbol-sizes</tt></td>\r
- *    <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>lib</tt></td>\r
- *    <td>Build and archive all source files into a library A binary file.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>all</tt></td>\r
- *    <td>Build and link the application into ELF debug and HEX binary files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>elf</tt></td>\r
- *    <td>Build and link the application into an ELF debug file.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>bin</tt></td>\r
- *    <td>Build and link the application and produce a BIN binary file.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>hex</tt></td>\r
- *    <td>Build and link the application and produce HEX and EEP binary files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>lss</tt></td>\r
- *    <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>clean</tt></td>\r
- *    <td>Remove all intermediary files and binary output files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>mostlyclean</tt></td>\r
- *    <td>Remove all intermediary files but preserve any binary output files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt><i>&lt;filename&gt;</i>.s</tt></td>\r
- *    <td>Create an assembly listing of a given input C/C++ source file.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>TARGET</tt></td>\r
- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>ARCH</tt></td>\r
- *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>MCU</tt></td>\r
- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>SRC</tt></td>\r
- *    <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>F_USB</tt></td>\r
- *    <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LUFA_PATH</tt></td>\r
- *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>BOARD</tt></td>\r
- *    <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>OPTIMIZATION</tt></td>\r
- *    <td>Optimization level to use when compiling source files (see GCC manual).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>C_STANDARD</tt></td>\r
- *    <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPP_STANDARD</tt></td>\r
- *    <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>DEBUG_FORMAT</tt></td>\r
- *    <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>DEBUG_LEVEL</tt></td>\r
- *    <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>F_CPU</tt></td>\r
- *    <td>Speed of the processor CPU clock, in Hz.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>C_FLAGS</tt></td>\r
- *    <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPP_FLAGS</tt></td>\r
- *    <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>ASM_FLAGS</tt></td>\r
- *    <td>Flags to pass to the assembler only, after the automatically generated flags.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CC_FLAGS</tt></td>\r
- *    <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>COMPILER_PATH</tt></td>\r
- *    <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LD_FLAGS</tt></td>\r
- *    <td>Flags to pass to the linker, after the automatically generated flags.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LINKER_RELAXATIONS</tt></td>\r
- *    <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size\r
- *        of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.\r
- *        \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you\r
- *              receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>OBJDIR</tt></td>\r
- *    <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.\r
- *        \note When this option is enabled, all source filenames <b>must</b> be unique.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>OBJECT_FILES</tt></td>\r
- *    <td>List of additional object files that should be linked into the resulting binary.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
-/** \page Page_BuildModule_CORE The CORE build module\r
- *\r
- *  The core LUFA build system module, providing common build system help and information targets.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_core.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_CORE_Requirements Requirements\r
- *  This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>\r
- *  shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).\r
- *\r
- *  \section SSec_BuildModule_CORE_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>help</tt></td>\r
- *    <td>Display build system help and configuration information.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>list_targets</tt></td>\r
- *    <td>List all available build targets from the build system.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>list_modules</tt></td>\r
- *    <td>List all available build modules from the build system.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>list_mandatory</tt></td>\r
- *    <td>List all mandatory parameters required by the included modules.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>list_optional</tt></td>\r
- *    <td>List all optional parameters required by the included modules.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>list_provided</tt></td>\r
- *    <td>List all variables provided by the included modules.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>list_macros</tt></td>\r
- *    <td>List all macros provided by the included modules.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CORE_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
-/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module\r
- *\r
- *  The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an\r
- *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_atprogram.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_ATPROGRAM_Requirements Requirements\r
- *  This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>\r
- *  variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x\r
- *  inside the application install folder's "\atbackend" subdirectory.\r
- *\r
- *  \section SSec_BuildModule_ATPROGRAM_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>atprogram</tt></td>\r
- *    <td>Program the device FLASH memory with the application's executable data.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>atprogram-ee</tt></td>\r
- *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>MCU</tt></td>\r
- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>TARGET</tt></td>\r
- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>ATPROGRAM_PROGRAMMER</tt></td>\r
- *    <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>ATPROGRAM_INTERFACE</tt></td>\r
- *    <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>ATPROGRAM_PORT</tt></td>\r
- *    <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
-/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module\r
- *\r
- *  The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an\r
- *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_avrdude.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_AVRDUDE_Requirements Requirements\r
- *  This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>\r
- *  variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for\r
- *  Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's\r
- *  source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.\r
- *\r
- *  \section SSec_BuildModule_AVRDUDE_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>avrdude</tt></td>\r
- *    <td>Program the device FLASH memory with the application's executable data.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>avrdude-ee</tt></td>\r
- *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>MCU</tt></td>\r
- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>TARGET</tt></td>\r
- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>AVRDUDE_PROGRAMMER</tt></td>\r
- *    <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>AVRDUDE_PORT</tt></td>\r
- *    <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>AVRDUDE_FLAGS</tt></td>\r
- *    <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
- /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module\r
- *\r
- *  The CPPCHECK programming utility LUFA build system module, providing targets to statically\r
- *  analyze C and C++ source code for errors and performance/style issues.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_cppcheck.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_CPPCHECK_Requirements Requirements\r
- *  This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>\r
- *  variable. The <tt>cppcheck</tt> utility is distributed through the project's home page\r
- *  (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via\r
- *  the project's source code or through the package manager.\r
- *\r
- *  \section SSec_BuildModule_CPPCHECK_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>cppcheck</tt></td>\r
- *    <td>Statically analyze the project source code for issues.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>cppcheck-config</tt></td>\r
- *    <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>SRC</tt></td>\r
- *    <td>List of source files to statically analyze.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_INCLUDES</tt></td>\r
- *    <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_EXCLUDES</tt></td>\r
- *    <td>Paths or path fragments to exclude when analyzing.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>\r
- *    <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_ENABLE</tt></td>\r
- *    <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_SUPPRESS</tt></td>\r
- *    <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>\r
- *    <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_QUIET</tt></td>\r
- *    <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>CPPCHECK_FLAGS</tt></td>\r
- *    <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
- /** \page Page_BuildModule_DFU The DFU build module\r
- *\r
- *  The DFU programming utility LUFA build system module, providing targets to reprogram an\r
- *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.\r
- *  This module requires a DFU class bootloader to be running in the target, compatible with\r
- *  the DFU bootloader protocol as published by Atmel.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_dfu.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_DFU_Requirements Requirements\r
- *  This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open\r
- *  source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be\r
- *  available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility\r
- *  can be installed via the project's source code or through the package manager.\r
- *\r
- *  \section SSec_BuildModule_DFU_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>dfu</tt></td>\r
- *    <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>dfu-ee</tt></td>\r
- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>flip</tt></td>\r
- *    <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>flip-ee</tt></td>\r
- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>MCU</tt></td>\r
- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>TARGET</tt></td>\r
- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DFU_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
- /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module\r
- *\r
- *  The DOXYGEN code documentation utility LUFA build system module, providing targets to generate\r
- *  project HTML and other format documentation from a set of source files that include special\r
- *  Doxygen comments.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_doxygen.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_DOXYGEN_Requirements Requirements\r
- *  This module requires the <tt>doxygen</tt> utility from the Doxygen website\r
- *  (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix\r
- *  systems the <tt>doxygen</tt> utility can be installed via the project's source code or through\r
- *  the package manager.\r
- *\r
- *  \section SSec_BuildModule_DOXYGEN_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>doxygen</tt></td>\r
- *    <td>Generate project documentation.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>doxygen_create</tt></td>\r
- *    <td>Create a new Doxygen configuration file using the latest template.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>doxygen_upgrade</tt></td>\r
- *    <td>Upgrade an existing Doxygen configuration file to the latest template</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>LUFA_PATH</tt></td>\r
- *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>DOXYGEN_CONF</tt></td>\r
- *    <td>Name and path of the base Doxygen configuration file for the project.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>\r
- *    <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>\r
- *    <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
- /** \page Page_BuildModule_HID The HID build module\r
- *\r
- *  The HID programming utility LUFA build system module, providing targets to reprogram an\r
- *  Atmel processor's FLASH memory with a project's compiled binary output file. This module\r
- *  requires a HID class bootloader to be running in the target, using a protocol compatible\r
- *  with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_hid.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_HID_Requirements Requirements\r
- *  This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID\r
- *  class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC\r
- *  (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>\r
- *  variable.\r
- *\r
- *  \section SSec_BuildModule_HID_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>hid</tt></td>\r
- *    <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>hid-ee</tt></td>\r
- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and\r
- *        a temporary AVR application programmed into the target's FLASH.\r
- *        \note This will erase the currently loaded application in the target.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>teensy</tt></td>\r
- *    <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>teensy-ee</tt></td>\r
- *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and\r
- *        a temporary AVR application programmed into the target's FLASH.\r
- *        \note This will erase the currently loaded application in the target.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>MCU</tt></td>\r
- *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>TARGET</tt></td>\r
- *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_HID_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
- /** \page Page_BuildModule_SOURCES The SOURCES build module\r
- *\r
- *  The SOURCES LUFA build system module, providing variables listing the various LUFA source files\r
- *  required to be build by a project for a given LUFA module. This module gives a way to reference\r
- *  LUFA source files symbolically, so that changes to the library structure do not break the library\r
- *  makefile.\r
- *\r
- *  To use this module in your application makefile, add the following code:\r
- *  \code\r
- *  include $(LUFA_PATH)/Build/lufa_sources.mk\r
- *  \endcode\r
- *\r
- *  \section SSec_BuildModule_SOURCES_Requirements Requirements\r
- *  None.\r
- *\r
- *  \section SSec_BuildModule_SOURCES_Targets Targets\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>LUFA_PATH</tt></td>\r
- *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>ARCH</tt></td>\r
- *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><tt>LUFA_SRC_USB</tt></td>\r
- *    <td>List of LUFA USB driver source files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LUFA_SRC_USBCLASS</tt></td>\r
- *    <td>List of LUFA USB Class driver source files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LUFA_SRC_TEMPERATURE</tt></td>\r
- *    <td>List of LUFA temperature sensor driver source files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LUFA_SRC_SERIAL</tt></td>\r
- *    <td>List of LUFA Serial U(S)ART driver source files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LUFA_SRC_TWI</tt></td>\r
- *    <td>List of LUFA TWI driver source files.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td><tt>LUFA_SRC_PLATFORM</tt></td>\r
- *    <td>List of LUFA architecture specific platform management source files.</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros\r
- *\r
- *  <table>\r
- *   <tr>\r
- *    <td><i>None</i></td>\r
- *   </tr>\r
- *  </table>\r
- */\r
-\r
-/** \page Page_BuildTroubleshooting Troubleshooting Information\r
- *\r
- *  LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these\r
- *  features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different\r
- *  errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.\r
- *\r
- *  <table>\r
- *    <tr>\r
- *    <th>Problem</th>\r
- *    <th>Resolution</th>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>\r
- *    <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>\r
- *        from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>\r
- *    <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>\r
- *    <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with\r
- *        GNU make or other variants of Make causing an infinitely recursive build.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>\r
- *    <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>\r
- *    <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA\r
- *        build system modules. Define the value in your project makefile and try again.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>\r
- *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration\r
- *        option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>\r
- *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").\r
- *        This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>\r
- *    <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not\r
- *        recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>\r
- *    <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.\r
- *        This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>\r
- *    <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or\r
- *        relative path given in the user project makefile is correct and try again.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>\r
- *    <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists\r
- *        and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration\r
- *        file.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>\r
- *    <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration\r
- *        options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or\r
- *        upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>\r
- *    <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or\r
- *        absolute path to the LUFA library core.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>\r
- *    <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be\r
- *        found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>\r
- *        parameter.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>\r
- *    <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This\r
- *        usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the\r
- *        compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>\r
- *    <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the\r
- *        version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>\r
- *   </tr>\r
- *   <tr>\r
- *    <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>\r
- *    <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA\r
- *        library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>\r
- *   </tr>\r
- *  </table>\r
- *\r
- *  For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.\r
- */\r
+/** \file
+ *
+ *  This file contains special DoxyGen information for the generation of the main page and other special
+ *  documentation pages. It is not a project source file.
+ */
+
+/** \page Page_BuildSystem The LUFA Build System
+ *
+ *  \section Sec_BuildSystem_Overview Overview of the LUFA Build System
+ *  The LUFA build system is an attempt at making a set of re-usable, modular build make files which
+ *  can be referenced in a LUFA powered project, to minimize the amount of code required in an
+ *  application makefile. The system is written in GNU Make, and each module is independent of
+ *  one-another.
+ *
+ *  For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA
+ *  build system, see \ref Sec_CompilingApps_Prerequisites.
+ *
+ *  To use a LUFA build system module, simply add an include to your project makefile. All user projects
+ *  should at a minimum include \ref Page_BuildModule_CORE for base functionality:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_core.mk
+ *  \endcode
+ *
+ *  Once included in your project makefile, the associated build module targets will be added to your
+ *  project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>
+ *  from the command line, substituting in the appropriate target name.
+ *
+ *  \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.
+ *
+ *  Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>
+ *  be supplied in the project makefile for the module to work, and one or more optional parameters which
+ *  may be defined and which will assume a sensible default if not.
+ *
+ *  \section SSec_BuildSystem_Modules Available Modules
+ *
+ *  The following modules are included in this LUFA release:
+ *
+ *  \li \subpage Page_BuildModule_ATPROGRAM - Device Programming
+ *  \li \subpage Page_BuildModule_AVRDUDE - Device Programming
+ *  \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking
+ *  \li \subpage Page_BuildModule_CORE - Core Build System Functions
+ *  \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis
+ *  \li \subpage Page_BuildModule_DFU - Device Programming
+ *  \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation
+ *  \li \subpage Page_BuildModule_HID - Device Programming
+ *  \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables
+ *
+ *  If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.
+ */
+
+ /** \page Page_BuildModule_BUILD The BUILD build module
+ *
+ *  The BUILD LUFA build system module, providing targets for the compilation,
+ *  assembling and linking of an application from source code into binary files
+ *  suitable for programming into a target device, using the GCC compiler.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_build.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_BUILD_Requirements Requirements
+ *  This module requires the the architecture appropriate binaries of the GCC compiler are available in your
+ *  system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio
+ *  5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.
+ *
+ *  \section SSec_BuildModule_BUILD_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>size</tt></td>
+ *    <td>Display size of the compiled application FLASH and SRAM segments.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>symbol-sizes</tt></td>
+ *    <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>lib</tt></td>
+ *    <td>Build and archive all source files into a library A binary file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>all</tt></td>
+ *    <td>Build and link the application into ELF debug and HEX binary files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>elf</tt></td>
+ *    <td>Build and link the application into an ELF debug file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>bin</tt></td>
+ *    <td>Build and link the application and produce a BIN binary file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>hex</tt></td>
+ *    <td>Build and link the application and produce HEX and EEP binary files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>lss</tt></td>
+ *    <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>clean</tt></td>
+ *    <td>Remove all intermediary files and binary output files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>mostlyclean</tt></td>
+ *    <td>Remove all intermediary files but preserve any binary output files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt><i>&lt;filename&gt;</i>.s</tt></td>
+ *    <td>Create an assembly listing of a given input C/C++ source file.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ARCH</tt></td>
+ *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>SRC</tt></td>
+ *    <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>F_USB</tt></td>
+ *    <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_PATH</tt></td>
+ *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>BOARD</tt></td>
+ *    <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>OPTIMIZATION</tt></td>
+ *    <td>Optimization level to use when compiling source files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>C_STANDARD</tt></td>
+ *    <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPP_STANDARD</tt></td>
+ *    <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DEBUG_FORMAT</tt></td>
+ *    <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DEBUG_LEVEL</tt></td>
+ *    <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>F_CPU</tt></td>
+ *    <td>Speed of the processor CPU clock, in Hz.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>C_FLAGS</tt></td>
+ *    <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPP_FLAGS</tt></td>
+ *    <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ASM_FLAGS</tt></td>
+ *    <td>Flags to pass to the assembler only, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CC_FLAGS</tt></td>
+ *    <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>COMPILER_PATH</tt></td>
+ *    <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LD_FLAGS</tt></td>
+ *    <td>Flags to pass to the linker, after the automatically generated flags.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LINKER_RELAXATIONS</tt></td>
+ *    <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size
+ *        of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.
+ *        \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you
+ *              receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>OBJDIR</tt></td>
+ *    <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.
+ *        \note When this option is enabled, all source filenames <b>must</b> be unique.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>OBJECT_FILES</tt></td>
+ *    <td>List of additional object files that should be linked into the resulting binary.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildModule_CORE The CORE build module
+ *
+ *  The core LUFA build system module, providing common build system help and information targets.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_core.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_CORE_Requirements Requirements
+ *  This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>
+ *  shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).
+ *
+ *  \section SSec_BuildModule_CORE_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>help</tt></td>
+ *    <td>Display build system help and configuration information.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_targets</tt></td>
+ *    <td>List all available build targets from the build system.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_modules</tt></td>
+ *    <td>List all available build modules from the build system.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_mandatory</tt></td>
+ *    <td>List all mandatory parameters required by the included modules.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_optional</tt></td>
+ *    <td>List all optional parameters required by the included modules.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_provided</tt></td>
+ *    <td>List all variables provided by the included modules.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>list_macros</tt></td>
+ *    <td>List all macros provided by the included modules.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module
+ *
+ *  The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_atprogram.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_Requirements Requirements
+ *  This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>
+ *  variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x
+ *  inside the application install folder's "\atbackend" subdirectory.
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>atprogram</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>atprogram-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>ATPROGRAM_PROGRAMMER</tt></td>
+ *    <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ATPROGRAM_INTERFACE</tt></td>
+ *    <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ATPROGRAM_PORT</tt></td>
+ *    <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module
+ *
+ *  The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_avrdude.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_AVRDUDE_Requirements Requirements
+ *  This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>
+ *  variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for
+ *  Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's
+ *  source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.
+ *
+ *  \section SSec_BuildModule_AVRDUDE_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>avrdude</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>avrdude-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>AVRDUDE_PROGRAMMER</tt></td>
+ *    <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>AVRDUDE_PORT</tt></td>
+ *    <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>AVRDUDE_FLAGS</tt></td>
+ *    <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module
+ *
+ *  The CPPCHECK programming utility LUFA build system module, providing targets to statically
+ *  analyze C and C++ source code for errors and performance/style issues.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_CPPCHECK_Requirements Requirements
+ *  This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>
+ *  variable. The <tt>cppcheck</tt> utility is distributed through the project's home page
+ *  (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via
+ *  the project's source code or through the package manager.
+ *
+ *  \section SSec_BuildModule_CPPCHECK_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>cppcheck</tt></td>
+ *    <td>Statically analyze the project source code for issues.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>cppcheck-config</tt></td>
+ *    <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>SRC</tt></td>
+ *    <td>List of source files to statically analyze.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>CPPCHECK_INCLUDES</tt></td>
+ *    <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_EXCLUDES</tt></td>
+ *    <td>Paths or path fragments to exclude when analyzing.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>
+ *    <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_ENABLE</tt></td>
+ *    <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_SUPPRESS</tt></td>
+ *    <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>
+ *    <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_QUIET</tt></td>
+ *    <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>CPPCHECK_FLAGS</tt></td>
+ *    <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_DFU The DFU build module
+ *
+ *  The DFU programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *  This module requires a DFU class bootloader to be running in the target, compatible with
+ *  the DFU bootloader protocol as published by Atmel.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_dfu.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_DFU_Requirements Requirements
+ *  This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open
+ *  source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be
+ *  available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility
+ *  can be installed via the project's source code or through the package manager.
+ *
+ *  \section SSec_BuildModule_DFU_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>dfu</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>dfu-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>flip</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>flip-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module
+ *
+ *  The DOXYGEN code documentation utility LUFA build system module, providing targets to generate
+ *  project HTML and other format documentation from a set of source files that include special
+ *  Doxygen comments.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_doxygen.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_DOXYGEN_Requirements Requirements
+ *  This module requires the <tt>doxygen</tt> utility from the Doxygen website
+ *  (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix
+ *  systems the <tt>doxygen</tt> utility can be installed via the project's source code or through
+ *  the package manager.
+ *
+ *  \section SSec_BuildModule_DOXYGEN_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>doxygen</tt></td>
+ *    <td>Generate project documentation.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>doxygen_create</tt></td>
+ *    <td>Create a new Doxygen configuration file using the latest template.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>doxygen_upgrade</tt></td>
+ *    <td>Upgrade an existing Doxygen configuration file to the latest template</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>LUFA_PATH</tt></td>
+ *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>DOXYGEN_CONF</tt></td>
+ *    <td>Name and path of the base Doxygen configuration file for the project.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>
+ *    <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>
+ *    <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_HID The HID build module
+ *
+ *  The HID programming utility LUFA build system module, providing targets to reprogram an
+ *  Atmel processor's FLASH memory with a project's compiled binary output file. This module
+ *  requires a HID class bootloader to be running in the target, using a protocol compatible
+ *  with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_hid.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_HID_Requirements Requirements
+ *  This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID
+ *  class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC
+ *  (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>
+ *  variable.
+ *
+ *  \section SSec_BuildModule_HID_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>hid</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>hid-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and
+ *        a temporary AVR application programmed into the target's FLASH.
+ *        \note This will erase the currently loaded application in the target.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>teensy</tt></td>
+ *    <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>teensy-ee</tt></td>
+ *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and
+ *        a temporary AVR application programmed into the target's FLASH.
+ *        \note This will erase the currently loaded application in the target.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>MCU</tt></td>
+ *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>TARGET</tt></td>
+ *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+ /** \page Page_BuildModule_SOURCES The SOURCES build module
+ *
+ *  The SOURCES LUFA build system module, providing variables listing the various LUFA source files
+ *  required to be build by a project for a given LUFA module. This module gives a way to reference
+ *  LUFA source files symbolically, so that changes to the library structure do not break the library
+ *  makefile.
+ *
+ *  To use this module in your application makefile, add the following code:
+ *  \code
+ *  include $(LUFA_PATH)/Build/lufa_sources.mk
+ *  \endcode
+ *
+ *  \section SSec_BuildModule_SOURCES_Requirements Requirements
+ *  None.
+ *
+ *  \section SSec_BuildModule_SOURCES_Targets Targets
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>LUFA_PATH</tt></td>
+ *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>ARCH</tt></td>
+ *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables
+ *
+ *  <table>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_USB</tt></td>
+ *    <td>List of LUFA USB driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_USBCLASS</tt></td>
+ *    <td>List of LUFA USB Class driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_TEMPERATURE</tt></td>
+ *    <td>List of LUFA temperature sensor driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_SERIAL</tt></td>
+ *    <td>List of LUFA Serial U(S)ART driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_TWI</tt></td>
+ *    <td>List of LUFA TWI driver source files.</td>
+ *   </tr>
+ *   <tr>
+ *    <td><tt>LUFA_SRC_PLATFORM</tt></td>
+ *    <td>List of LUFA architecture specific platform management source files.</td>
+ *   </tr>
+ *  </table>
+ *
+ *  \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros
+ *
+ *  <table>
+ *   <tr>
+ *    <td><i>None</i></td>
+ *   </tr>
+ *  </table>
+ */
+
+/** \page Page_BuildTroubleshooting Troubleshooting Information
+ *
+ *  LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these
+ *  features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different
+ *  errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.
+ *
+ *  <table>
+ *    <tr>
+ *    <th>Problem</th>
+ *    <th>Resolution</th>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ *    <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>
+ *        from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>
+ *    <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>
+ *    <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with
+ *        GNU make or other variants of Make causing an infinitely recursive build.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>
+ *    <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA
+ *        build system modules. Define the value in your project makefile and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration
+ *        option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").
+ *        This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ *    <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not
+ *        recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>
+ *    <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.
+ *        This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ *    <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or
+ *        relative path given in the user project makefile is correct and try again.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>
+ *    <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists
+ *        and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration
+ *        file.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
+ *    <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration
+ *        options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or
+ *        upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>
+ *    <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or
+ *        absolute path to the LUFA library core.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>
+ *    <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be
+ *        found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>
+ *        parameter.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>
+ *    <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This
+ *        usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the
+ *        compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>
+ *    <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the
+ *        version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>
+ *   </tr>
+ *   <tr>
+ *    <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
+ *    <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA
+ *        library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>
+ *   </tr>
+ *  </table>
+ *
+ *  For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.
+ */
index 486e9a4270cad610e2df9ff22d257671d8093874..a34fd58dfae704e9c95bbc18d698bc27c87edde3 100644 (file)
@@ -1 +1 @@
-Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 .\r
+Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 .
index c017acfd758a03f3cb5766aeee09354e602fee9b..dd69b7e0bdc782123915249ccfbc817bbf459b14 100644 (file)
@@ -1 +1 @@
-Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ .\r
+Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ .
index ee8a38340df648cac1264186790df5f34f336124..8aa4a9413e854f415e862910c3c826fa2bf7a182 100644 (file)
@@ -1,45 +1,45 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file -->\r
-\r
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">\r
-\r
-       <xsl:import href="../Docbook/mshelp/docbook.xsl"/>\r
-\r
-       <xsl:output method="xml" indent="no"/>\r
-\r
-       <xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']">\r
-               <span class="hl-keyword" style="color: #0079C1">\r
-                       <xsl:apply-templates/>\r
-               </span>\r
-       </xsl:template>\r
-\r
-       <xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']">\r
-               <span class="hl-string" style="color: #800000">\r
-                       <xsl:apply-templates/>\r
-               </span>\r
-       </xsl:template>\r
-\r
-       <xsl:template match="emphasis[@role = 'comment']">\r
-               <em class="hl-comment" style="color: #008000">\r
-                       <xsl:apply-templates/>\r
-               </em>\r
-       </xsl:template>\r
-\r
-       <xsl:template match="emphasis[@role = 'preprocessor']">\r
-               <span class="hl-preprocessor" style="color: #A000A0">\r
-                       <xsl:apply-templates/>\r
-               </span>\r
-       </xsl:template>\r
-\r
-       <xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]">\r
-               <xsl:apply-templates />\r
-       </xsl:template>\r
-\r
-</xsl:stylesheet>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file -->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+       <xsl:import href="../Docbook/mshelp/docbook.xsl"/>
+
+       <xsl:output method="xml" indent="no"/>
+
+       <xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']">
+               <span class="hl-keyword" style="color: #0079C1">
+                       <xsl:apply-templates/>
+               </span>
+       </xsl:template>
+
+       <xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']">
+               <span class="hl-string" style="color: #800000">
+                       <xsl:apply-templates/>
+               </span>
+       </xsl:template>
+
+       <xsl:template match="emphasis[@role = 'comment']">
+               <em class="hl-comment" style="color: #008000">
+                       <xsl:apply-templates/>
+               </em>
+       </xsl:template>
+
+       <xsl:template match="emphasis[@role = 'preprocessor']">
+               <span class="hl-preprocessor" style="color: #A000A0">
+                       <xsl:apply-templates/>
+               </span>
+       </xsl:template>
+
+       <xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]">
+               <xsl:apply-templates />
+       </xsl:template>
+
+</xsl:stylesheet>
index 49eb7e9706993f4470dabfa56c1cf49efa6de7fe..0b6ccbd8c1c52a836151526d35169b98b7460181 100644 (file)
@@ -1,53 +1,53 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-*/\r
-\r
-.programlisting {\r
-       display: block;\r
-       margin-left: 15px;\r
-       padding: 10px;\r
-       background-color: #f4f4f4;\r
-       border: 1px solid #aaaaaa;\r
-       font-family: "Consolas", "Courier New", sans-serif;\r
- }\r
-\r
- code {\r
-       background-color: #f4f4f4;\r
-       font-family: "Consolas", "Courier New", sans-serif;\r
- }\r
-\r
-.note, .warning, .tip {\r
-       display: block;\r
-       margin-left: 15px;\r
-       padding-left: 10px;\r
-       padding-bottom: 5px;\r
-       background-color: #f4f4f4;\r
-       border: 1px solid #aaaaaa;\r
-}\r
-\r
-table {\r
-       border: 1px solid #aaaaaa;\r
-       border-collapse: collapse;\r
-       margin-left: 15px;\r
-       font-size: 10pt;\r
-}\r
-\r
-table thead {\r
-       background-color: #f4f4f4;\r
-}\r
-\r
-table thead th {\r
-       padding: 5px;\r
-}\r
-\r
-table tbody td {\r
-       padding: 5px;\r
-}\r
-\r
-ul {\r
-       padding-left: 20px;\r
-}\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+.programlisting {
+       display: block;
+       margin-left: 15px;
+       padding: 10px;
+       background-color: #f4f4f4;
+       border: 1px solid #aaaaaa;
+       font-family: "Consolas", "Courier New", sans-serif;
+ }
+
+ code {
+       background-color: #f4f4f4;
+       font-family: "Consolas", "Courier New", sans-serif;
+ }
+
+.note, .warning, .tip {
+       display: block;
+       margin-left: 15px;
+       padding-left: 10px;
+       padding-bottom: 5px;
+       background-color: #f4f4f4;
+       border: 1px solid #aaaaaa;
+}
+
+table {
+       border: 1px solid #aaaaaa;
+       border-collapse: collapse;
+       margin-left: 15px;
+       font-size: 10pt;
+}
+
+table thead {
+       background-color: #f4f4f4;
+}
+
+table thead th {
+       padding: 5px;
+}
+
+table tbody td {
+       padding: 5px;
+}
+
+ul {
+       padding-left: 20px;
+}
index 05ef8b6ba4e7dafb9e7bd09b9df389381a5456c3..112d169942f1ad20de5a3c1162f78b66ad202137 100644 (file)
@@ -1,13 +1,13 @@
-<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">\r
-       <Default Extension="vsixmanifest" ContentType="text/xml"/>\r
-       <Default Extension="cache" ContentType="text/xml"/>\r
-       <Default Extension="png" ContentType="application/octet-stream"/>\r
-       <Default Extension="txt" ContentType="text/plain"/>\r
-       <Default Extension="xml" ContentType="text/xml"/>\r
-       <Default Extension="zip" ContentType="application/octet-stream"/>\r
-       <Default Extension="dll" ContentType="application/octet-stream" />\r
-       <Default Extension="pkgdef" ContentType="text/plain" />\r
-       <Default Extension="htm" ContentType="text/html" />\r
-       <Default Extension="msha" ContentType="text/html" />\r
-       <Default Extension="mshc" ContentType="application/octet-stream"/>\r
-</Types>\r
+<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
+       <Default Extension="vsixmanifest" ContentType="text/xml"/>
+       <Default Extension="cache" ContentType="text/xml"/>
+       <Default Extension="png" ContentType="application/octet-stream"/>
+       <Default Extension="txt" ContentType="text/plain"/>
+       <Default Extension="xml" ContentType="text/xml"/>
+       <Default Extension="zip" ContentType="application/octet-stream"/>
+       <Default Extension="dll" ContentType="application/octet-stream" />
+       <Default Extension="pkgdef" ContentType="text/plain" />
+       <Default Extension="htm" ContentType="text/html" />
+       <Default Extension="msha" ContentType="text/html" />
+       <Default Extension="mshc" ContentType="application/octet-stream"/>
+</Types>
index 794fd689e1cbd6ca8bb0f315adbab295c9b50e40..bd969518a113c5e66edf16a038324e793104e749 100644 (file)
@@ -1,18 +1,18 @@
-<AsfContentProvider Version="1.0.0">\r
-       <Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b">\r
-               <Org>FourWalledCubicle</Org>\r
-               <ShortName>LUFA</ShortName>\r
-               <Author>Dean Camera</Author>\r
-               <Description/>\r
-               <FollowFolderStructure>True</FollowFolderStructure>\r
-       </Identifier>\r
-       <AsfContent Type="zip" Path="contents.zip">\r
-               <Content>\r
-                       <Version>0</Version>\r
-                       <HelpURL/>\r
-                       <Locator/>\r
-                       <DbXMLPath>content.xml.cache</DbXMLPath>\r
-                       <Description/>\r
-               </Content>\r
-       </AsfContent>\r
-</AsfContentProvider>\r
+<AsfContentProvider Version="1.0.0">
+       <Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b">
+               <Org>FourWalledCubicle</Org>
+               <ShortName>LUFA</ShortName>
+               <Author>Dean Camera</Author>
+               <Description/>
+               <FollowFolderStructure>True</FollowFolderStructure>
+       </Identifier>
+       <AsfContent Type="zip" Path="contents.zip">
+               <Content>
+                       <Version>0</Version>
+                       <HelpURL/>
+                       <Locator/>
+                       <DbXMLPath>content.xml.cache</DbXMLPath>
+                       <Description/>
+               </Content>
+       </AsfContent>
+</AsfContentProvider>
index ea6edeb2585f66312c05c4cbcb32eae520cbfcd5..8475017443ca4dd9b2ff2b9124ba8d03a41b1acd 100644 (file)
@@ -1,33 +1,33 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-\r
-<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">\r
-       <Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b">\r
-               <Name>LUFA Library</Name>\r
-               <Author>Dean Camera</Author>\r
-               <Version>0</Version>\r
-               <MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl>\r
-               <Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description>\r
-\r
-               <License>License.txt</License>\r
-               <Icon>LUFA_thumb.png</Icon>\r
-               <PreviewImage>LUFA.png</PreviewImage>\r
-\r
-               <SupportedProducts>\r
-                       <IsolatedShell Version="6.1">AtmelStudio</IsolatedShell>\r
-                       <IsolatedShell Version="6.2">AtmelStudio</IsolatedShell>\r
-               </SupportedProducts>\r
-\r
-               <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/>\r
-               <Locale>1033</Locale>\r
-\r
-           <AllUsers>false</AllUsers>\r
-       </Identifier>\r
-\r
-       <References/>\r
-\r
-       <Content>\r
-               <VsPackage>LUFA.pkgdef</VsPackage>\r
-           <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension>\r
-               <CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension>\r
-       </Content>\r
-</Vsix>\r
+<?xml version="1.0" encoding="utf-8"?>
+
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+       <Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b">
+               <Name>LUFA Library</Name>
+               <Author>Dean Camera</Author>
+               <Version>0</Version>
+               <MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl>
+               <Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description>
+
+               <License>License.txt</License>
+               <Icon>LUFA_thumb.png</Icon>
+               <PreviewImage>LUFA.png</PreviewImage>
+
+               <SupportedProducts>
+                       <IsolatedShell Version="6.1">AtmelStudio</IsolatedShell>
+                       <IsolatedShell Version="6.2">AtmelStudio</IsolatedShell>
+               </SupportedProducts>
+
+               <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/>
+               <Locale>1033</Locale>
+
+           <AllUsers>false</AllUsers>
+       </Identifier>
+
+       <References/>
+
+       <Content>
+               <VsPackage>LUFA.pkgdef</VsPackage>
+           <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension>
+               <CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension>
+       </Content>
+</Vsix>
index c51cff400d1790ba667d3ee2194b44bcef31309f..eb4b71efdfb73fb4e256764f07fdeeac363f9ba5 100644 (file)
@@ -1,38 +1,38 @@
-"""\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-"""\r
-\r
-import sys\r
-sys.path.append("ProjectGenerator")\r
-\r
-\r
-def show_message(message):\r
-    print("[Project Generator] %s" % message)\r
-    sys.stdout.flush()\r
-\r
-\r
-def main(lufa_root_path):\r
-    try:\r
-        from asf_avrstudio5_interface import PythonFacade\r
-    except ImportError:\r
-        print("Fatal Error: The ASF project generator is missing.")\r
-        return 1\r
-\r
-    p = PythonFacade(lufa_root_path)\r
-\r
-    show_message("Checking database sanity...")\r
-    p.check_extension_database_sanity(lufa_root_path)\r
-\r
-    show_message("Building cache files...")\r
-    p.generate_extension_cache_files(lufa_root_path)\r
-\r
-    show_message("Cache files created.")\r
-    return 0\r
-\r
-\r
-if __name__ == "__main__":\r
-    sys.exit(main(sys.argv[1]))\r
+"""
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+"""
+
+import sys
+sys.path.append("ProjectGenerator")
+
+
+def show_message(message):
+    print("[Project Generator] %s" % message)
+    sys.stdout.flush()
+
+
+def main(lufa_root_path):
+    try:
+        from asf_avrstudio5_interface import PythonFacade
+    except ImportError:
+        print("Fatal Error: The ASF project generator is missing.")
+        return 1
+
+    p = PythonFacade(lufa_root_path)
+
+    show_message("Checking database sanity...")
+    p.check_extension_database_sanity(lufa_root_path)
+
+    show_message("Building cache files...")
+    p.generate_extension_cache_files(lufa_root_path)
+
+    show_message("Cache files created.")
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv[1]))
index 28afdda587d087eff7c160e94193a8504a4e1de0..86cfc0409de487ea9679263a2f844e8423bf245e 100644 (file)
@@ -1,96 +1,96 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <extension-container>\r
-               <extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)">\r
-                       <author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/>\r
-                       <description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description>\r
-                       <icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/>\r
-                       <preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/>\r
-                       <license caption="LUFA License" path="LUFA/License.txt"/>\r
-                       <release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/>\r
-                       <online-help>\r
-                               <index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/>\r
-                               <module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>\r
-                               <module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>\r
-                       </online-help>\r
-                       <dependencies/>\r
-               </extension>\r
-       </extension-container>\r
-\r
-       <asf>\r
-               <device-alias-map name="lufa_avr8">\r
-                       <device-support value="at90usb82"/>\r
-                       <device-support value="atmega8u2"/>\r
-                       <device-support value="at90usb162"/>\r
-                       <device-support value="atmega16u2"/>\r
-                       <device-support value="atmega16u4"/>\r
-                       <device-support value="atmega32u2"/>\r
-                       <device-support value="atmega32u4"/>\r
-                       <device-support value="at90usb646"/>\r
-                       <device-support value="at90usb647"/>\r
-                       <device-support value="at90usb1286"/>\r
-                       <device-support value="at90usb1287"/>\r
-               </device-alias-map>\r
-\r
-               <device-alias-map name="lufa_xmega">\r
-                       <device-support value="atxmega16a4u"/>\r
-                       <device-support value="atxmega32a4u"/>\r
-                       <device-support value="atxmega64a4u"/>\r
-                       <device-support value="atxmega128a4u"/>\r
-                       <device-support value="atxmega64a3u"/>\r
-                       <device-support value="atxmega128a3u"/>\r
-                       <device-support value="atxmega192a3u"/>\r
-                       <device-support value="atxmega256a3u"/>\r
-                       <device-support value="atxmega256a3bu"/>\r
-                       <device-support value="atxmega128a1u"/>\r
-                       <device-support value="atxmega64b3"/>\r
-                       <device-support value="atxmega128b3"/>\r
-                       <device-support value="atxmega64b1"/>\r
-                       <device-support value="atxmega128b1"/>\r
-                       <device-support value="atxmega64c3"/>\r
-                       <device-support value="atxmega128c3"/>\r
-                       <!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling -->\r
-                       <device-support value="atxmega256c3"/>\r
-                       <device-support value="atxmega384c3"/>\r
-                       <device-support value="atxmega16c4"/>\r
-               </device-alias-map>\r
-\r
-               <device-alias-map name="lufa_uc3">\r
-                       <device-support value="at32uc3a364"/>\r
-                       <device-support value="at32uc3a364s"/>\r
-                       <device-support value="at32uc3a464"/>\r
-                       <device-support value="at32uc3a464s"/>\r
-                       <device-support value="at32uc3b064"/>\r
-                       <device-support value="at32uc3b164"/>\r
-                       <device-support value="at32uc3a0128"/>\r
-                       <device-support value="at32uc3a1128"/>\r
-                       <device-support value="at32uc3a3128"/>\r
-                       <device-support value="at32uc3a3128s"/>\r
-                       <device-support value="at32uc3a4128"/>\r
-                       <device-support value="at32uc3a4128s"/>\r
-                       <device-support value="at32uc3b0128"/>\r
-                       <device-support value="at32uc3b1128"/>\r
-                       <device-support value="at32uc3a0256"/>\r
-                       <device-support value="at32uc3a1256"/>\r
-                       <device-support value="at32uc3a3256"/>\r
-                       <device-support value="at32uc3a3256s"/>\r
-                       <device-support value="at32uc3a4256"/>\r
-                       <device-support value="at32uc3a4256s"/>\r
-                       <device-support value="at32uc3b0256"/>\r
-                       <device-support value="at32uc3b1256"/>\r
-                       <device-support value="at32uc3a0512"/>\r
-                       <device-support value="at32uc3a1512"/>\r
-                       <device-support value="at32uc3b0512"/>\r
-                       <device-support value="at32uc3b1512"/>\r
-               </device-alias-map>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <extension-container>
+               <extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)">
+                       <author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/>
+                       <description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description>
+                       <icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/>
+                       <preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/>
+                       <license caption="LUFA License" path="LUFA/License.txt"/>
+                       <release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/>
+                       <online-help>
+                               <index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/>
+                               <module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
+                               <module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
+                       </online-help>
+                       <dependencies/>
+               </extension>
+       </extension-container>
+
+       <asf>
+               <device-alias-map name="lufa_avr8">
+                       <device-support value="at90usb82"/>
+                       <device-support value="atmega8u2"/>
+                       <device-support value="at90usb162"/>
+                       <device-support value="atmega16u2"/>
+                       <device-support value="atmega16u4"/>
+                       <device-support value="atmega32u2"/>
+                       <device-support value="atmega32u4"/>
+                       <device-support value="at90usb646"/>
+                       <device-support value="at90usb647"/>
+                       <device-support value="at90usb1286"/>
+                       <device-support value="at90usb1287"/>
+               </device-alias-map>
+
+               <device-alias-map name="lufa_xmega">
+                       <device-support value="atxmega16a4u"/>
+                       <device-support value="atxmega32a4u"/>
+                       <device-support value="atxmega64a4u"/>
+                       <device-support value="atxmega128a4u"/>
+                       <device-support value="atxmega64a3u"/>
+                       <device-support value="atxmega128a3u"/>
+                       <device-support value="atxmega192a3u"/>
+                       <device-support value="atxmega256a3u"/>
+                       <device-support value="atxmega256a3bu"/>
+                       <device-support value="atxmega128a1u"/>
+                       <device-support value="atxmega64b3"/>
+                       <device-support value="atxmega128b3"/>
+                       <device-support value="atxmega64b1"/>
+                       <device-support value="atxmega128b1"/>
+                       <device-support value="atxmega64c3"/>
+                       <device-support value="atxmega128c3"/>
+                       <!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling -->
+                       <device-support value="atxmega256c3"/>
+                       <device-support value="atxmega384c3"/>
+                       <device-support value="atxmega16c4"/>
+               </device-alias-map>
+
+               <device-alias-map name="lufa_uc3">
+                       <device-support value="at32uc3a364"/>
+                       <device-support value="at32uc3a364s"/>
+                       <device-support value="at32uc3a464"/>
+                       <device-support value="at32uc3a464s"/>
+                       <device-support value="at32uc3b064"/>
+                       <device-support value="at32uc3b164"/>
+                       <device-support value="at32uc3a0128"/>
+                       <device-support value="at32uc3a1128"/>
+                       <device-support value="at32uc3a3128"/>
+                       <device-support value="at32uc3a3128s"/>
+                       <device-support value="at32uc3a4128"/>
+                       <device-support value="at32uc3a4128s"/>
+                       <device-support value="at32uc3b0128"/>
+                       <device-support value="at32uc3b1128"/>
+                       <device-support value="at32uc3a0256"/>
+                       <device-support value="at32uc3a1256"/>
+                       <device-support value="at32uc3a3256"/>
+                       <device-support value="at32uc3a3256s"/>
+                       <device-support value="at32uc3a4256"/>
+                       <device-support value="at32uc3a4256s"/>
+                       <device-support value="at32uc3b0256"/>
+                       <device-support value="at32uc3b1256"/>
+                       <device-support value="at32uc3a0512"/>
+                       <device-support value="at32uc3a1512"/>
+                       <device-support value="at32uc3b0512"/>
+                       <device-support value="at32uc3b1512"/>
+               </device-alias-map>
+       </asf>
+</lufa>
index 9e17b188be6994886c38aef1d78fdc4676038107..c2ef7af4c7066e9f4e18dc3e1d9e5bdf6611bf0e 100644 (file)
@@ -1,34 +1,34 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="service" id="lufa.common" caption="LUFA Common Infrastructure">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-                       <build type="doxygen-entry-point" value="Group_Common"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file" subtype="api" value="Version.h"/>\r
-                       <build type="distribute" subtype="license" value="License.txt"/>\r
-\r
-                       <build type="header-file" subtype="api" value="Common/Common.h"/>\r
-                       <build type="header-file" value="Common/Architectures.h"/>\r
-                       <build type="header-file" value="Common/ArchitectureSpecific.h"/>\r
-                       <build type="header-file" value="Common/Attributes.h"/>\r
-                       <build type="header-file" value="Common/BoardTypes.h"/>\r
-                       <build type="header-file" value="Common/CompilerSpecific.h"/>\r
-                       <build type="header-file" value="Common/Endianness.h"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="service" id="lufa.common" caption="LUFA Common Infrastructure">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <info type="gui-flag" value="hidden"/>
+                       <build type="doxygen-entry-point" value="Group_Common"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file" subtype="api" value="Version.h"/>
+                       <build type="distribute" subtype="license" value="License.txt"/>
+
+                       <build type="header-file" subtype="api" value="Common/Common.h"/>
+                       <build type="header-file" value="Common/Architectures.h"/>
+                       <build type="header-file" value="Common/ArchitectureSpecific.h"/>
+                       <build type="header-file" value="Common/Attributes.h"/>
+                       <build type="header-file" value="Common/BoardTypes.h"/>
+                       <build type="header-file" value="Common/CompilerSpecific.h"/>
+                       <build type="header-file" value="Common/Endianness.h"/>
+               </module>
+       </asf>
+</lufa>
index 3677d200366c03a09ab673d08e61e0e69fa2172f..e150aa645837f450287695c41c44cf956a16735b 100644 (file)
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture">\r
-                       <device-support value="mega"/>\r
-\r
-                       <require idref="lufa.drivers.board"/>\r
-                       <require idref="lufa.drivers.board.info"/>\r
-               </board>\r
-\r
-               <board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture">\r
-                       <device-support value="xmega"/>\r
-\r
-                       <require idref="lufa.drivers.board"/>\r
-                       <require idref="lufa.drivers.board.info"/>\r
-               </board>\r
-\r
-               <board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture">\r
-                       <device-support value="uc3"/>\r
-\r
-                       <require idref="lufa.drivers.board"/>\r
-                       <require idref="lufa.drivers.board.info"/>\r
-               </board>\r
-\r
-               <module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_BoardInfo"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file"  subtype="api" value="Drivers/Board/Board.h"/>\r
-               </module>\r
-\r
-               <module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_LEDs"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file"  subtype="api" value="Drivers/Board/LEDs.h"/>\r
-               </module>\r
-\r
-               <module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_Buttons"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file"  subtype="api" value="Drivers/Board/Buttons.h"/>\r
-               </module>\r
-\r
-               <module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_Dataflash"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file"  subtype="api" value="Drivers/Board/Dataflash.h"/>\r
-               </module>\r
-\r
-               <module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_Joystick"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file"  subtype="api" value="Drivers/Board/Joystick.h"/>\r
-               </module>\r
-\r
-               <module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_Temperature"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-                       <require idref="lufa.drivers.peripheral.adc"/>\r
-\r
-                       <build type="c-source"     value="Drivers/Board/Temperature.c"/>\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file"  subtype="api" value="Drivers/Board/Temperature.h"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture">
+                       <device-support value="mega"/>
+
+                       <require idref="lufa.drivers.board"/>
+                       <require idref="lufa.drivers.board.info"/>
+               </board>
+
+               <board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture">
+                       <device-support value="xmega"/>
+
+                       <require idref="lufa.drivers.board"/>
+                       <require idref="lufa.drivers.board.info"/>
+               </board>
+
+               <board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture">
+                       <device-support value="uc3"/>
+
+                       <require idref="lufa.drivers.board"/>
+                       <require idref="lufa.drivers.board.info"/>
+               </board>
+
+               <module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_BoardInfo"/>
+
+                       <require idref="lufa.common"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file"  subtype="api" value="Drivers/Board/Board.h"/>
+               </module>
+
+               <module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_LEDs"/>
+
+                       <require idref="lufa.common"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file"  subtype="api" value="Drivers/Board/LEDs.h"/>
+               </module>
+
+               <module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_Buttons"/>
+
+                       <require idref="lufa.common"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file"  subtype="api" value="Drivers/Board/Buttons.h"/>
+               </module>
+
+               <module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_Dataflash"/>
+
+                       <require idref="lufa.common"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file"  subtype="api" value="Drivers/Board/Dataflash.h"/>
+               </module>
+
+               <module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_Joystick"/>
+
+                       <require idref="lufa.common"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file"  subtype="api" value="Drivers/Board/Joystick.h"/>
+               </module>
+
+               <module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_Temperature"/>
+
+                       <require idref="lufa.common"/>
+                       <require idref="lufa.drivers.peripheral.adc"/>
+
+                       <build type="c-source"     value="Drivers/Board/Temperature.c"/>
+                       <build type="include-path" value=".."/>
+                       <build type="header-file"  subtype="api" value="Drivers/Board/Temperature.h"/>
+               </module>
+       </asf>
+</lufa>
index 4b099920b7f9c8cc107e8daac2036864bf5c0de9..ab7e03e4e9a02f502b970995c31125e76e879d74 100644 (file)
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support">\r
-                       <info type="description" value="summary">\r
-                               Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards\r
-                               compatible with the currently selected device will be shown.\r
-\r
-                               To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual).\r
-                       </info>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#none" caption="Board Support - None">\r
-                               <device-support value="avr"/>\r
-                               <build type="define" name="BOARD" value="BOARD_NONE"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied">\r
-                               <device-support value="avr"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USER"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_BENITO"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_BIGMULTIO"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_BLACKCAT"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/>\r
-\r
-                               <device-support value="at90usb646"/>\r
-                               <build type="define" name="BOARD" value="BOARD_BUI"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_BUMBLEB"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_CULV3"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_DUCE"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_EVK527"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db321c"/>\r
-                               <require idref="lufa.drivers.peripheral.spi"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_JMDBU2"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_LEONARDO"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MAXIMUS"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/>\r
-\r
-                               <device-support value="atmega162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MICROSIN162"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MINIMUS"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_MULTIO"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_OLIMEX162"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/>\r
-\r
-                               <device-support value="atmega8u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <device-support value="at90usb1286"/>\r
-                               <device-support value="at90usb647"/>\r
-                               <device-support value="at90usb646"/>\r
-                               <build type="define" name="BOARD" value="BOARD_STK525"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db321c"/>\r
-                               <require idref="lufa.drivers.peripheral.spi"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <device-support value="at90usb82"/>\r
-                               <device-support value="atmega32u2"/>\r
-                               <device-support value="atmega16u2"/>\r
-                               <device-support value="atmega8u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_STK526"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db642d"/>\r
-                               <require idref="lufa.drivers.peripheral.spi"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_TEENSY"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/>\r
-\r
-                               <device-support value="at90usb646"/>\r
-                               <build type="define" name="BOARD" value="BOARD_TEENSY2"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-                               <build type="define" name="BOARD" value="BOARD_TUL"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_UDIP"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/>\r
-\r
-                               <device-support value="atmega8u2"/>\r
-                               <device-support value="atmega16u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_UNO"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USB2AX"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USB2AX_V3"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USB2AX_V31"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/>\r
-\r
-                               <device-support value="atmega162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USBFOO"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USBKEY"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db642d"/>\r
-                               <require idref="lufa.drivers.peripheral.spi"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-                               <build type="define" name="BOARD" value="BOARD_USBTINYMKII"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db642d"/>\r
-                               <require idref="lufa.drivers.peripheral.spi"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/>\r
-\r
-                               <device-support value="at90usb1287"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db642d"/>\r
-                               <require idref="lufa.drivers.peripheral.spi"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_XPLAIN"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/>\r
-\r
-                               <device-support value="atxmega256a3bu"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db642d"/>\r
-                               <require idref="lufa.drivers.peripheral.usart_spi"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/>\r
-\r
-                               <device-support value="atxmega128b1"/>\r
-\r
-                               <require idref="lufa.drivers.misc.at45db642d"/>\r
-                               <require idref="lufa.drivers.peripheral.usart_spi"/>\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.dataflash"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/>\r
-\r
-                               <device-support value="at32uc3a0512"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_EVK1100"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/>\r
-\r
-                               <device-support value="at32uc3b0256"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.joystick"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_EVK1101"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/>\r
-\r
-                               <device-support value="at32uc3a3256"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_EVK1104"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/>\r
-\r
-                               <device-support value="at32uc3a3256"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/>\r
-\r
-                               <device-support value="at90usb162"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_STANGE_ISP"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/>\r
-\r
-                               <device-support value="atxmega384c3"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/>\r
-\r
-                               <device-support value="atmega32u2"/>\r
-\r
-                               <require idref="lufa.drivers.board.buttons"/>\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_U2S"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_YUN"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO">\r
-                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/>\r
-\r
-                               <device-support value="atmega32u4"/>\r
-\r
-                               <require idref="lufa.drivers.board.leds"/>\r
-\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/>\r
-                               <build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/>\r
-\r
-                               <build type="define" name="BOARD" value="BOARD_MICRO"/>\r
-                       </module>\r
-               </select-by-config>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support">
+                       <info type="description" value="summary">
+                               Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards
+                               compatible with the currently selected device will be shown.
+
+                               To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual).
+                       </info>
+
+                       <module type="driver" id="lufa.drivers.board#none" caption="Board Support - None">
+                               <device-support value="avr"/>
+                               <build type="define" name="BOARD" value="BOARD_NONE"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied">
+                               <device-support value="avr"/>
+                               <build type="define" name="BOARD" value="BOARD_USER"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_BENITO"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_BIGMULTIO"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_BLACKCAT"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/>
+
+                               <device-support value="at90usb646"/>
+                               <build type="define" name="BOARD" value="BOARD_BUI"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_BUMBLEB"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_CULV3"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_DUCE"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_EVK527"/>
+
+                               <require idref="lufa.drivers.misc.at45db321c"/>
+                               <require idref="lufa.drivers.peripheral.spi"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_JMDBU2"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_LEONARDO"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_MAXIMUS"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/>
+
+                               <device-support value="atmega162"/>
+                               <build type="define" name="BOARD" value="BOARD_MICROSIN162"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_MINIMUS"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_MULTIO"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_OLIMEX162"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/>
+
+                               <device-support value="atmega8u2"/>
+                               <build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/>
+
+                               <device-support value="at90usb1287"/>
+                               <device-support value="at90usb1286"/>
+                               <device-support value="at90usb647"/>
+                               <device-support value="at90usb646"/>
+                               <build type="define" name="BOARD" value="BOARD_STK525"/>
+
+                               <require idref="lufa.drivers.misc.at45db321c"/>
+                               <require idref="lufa.drivers.peripheral.spi"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/>
+
+                               <device-support value="at90usb162"/>
+                               <device-support value="at90usb82"/>
+                               <device-support value="atmega32u2"/>
+                               <device-support value="atmega16u2"/>
+                               <device-support value="atmega8u2"/>
+                               <build type="define" name="BOARD" value="BOARD_STK526"/>
+
+                               <require idref="lufa.drivers.misc.at45db642d"/>
+                               <require idref="lufa.drivers.peripheral.spi"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_TEENSY"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/>
+
+                               <device-support value="at90usb646"/>
+                               <build type="define" name="BOARD" value="BOARD_TEENSY2"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/>
+
+                               <device-support value="atmega32u4"/>
+                               <build type="define" name="BOARD" value="BOARD_TUL"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_UDIP"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/>
+
+                               <device-support value="atmega8u2"/>
+                               <device-support value="atmega16u2"/>
+                               <build type="define" name="BOARD" value="BOARD_UNO"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_USB2AX"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_USB2AX_V3"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/>
+
+                               <device-support value="atmega32u2"/>
+                               <build type="define" name="BOARD" value="BOARD_USB2AX_V31"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/>
+
+                               <device-support value="atmega162"/>
+                               <build type="define" name="BOARD" value="BOARD_USBFOO"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/>
+
+                               <device-support value="at90usb1287"/>
+                               <build type="define" name="BOARD" value="BOARD_USBKEY"/>
+
+                               <require idref="lufa.drivers.misc.at45db642d"/>
+                               <require idref="lufa.drivers.peripheral.spi"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/>
+
+                               <device-support value="at90usb162"/>
+                               <build type="define" name="BOARD" value="BOARD_USBTINYMKII"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/>
+
+                               <device-support value="at90usb1287"/>
+
+                               <require idref="lufa.drivers.misc.at45db642d"/>
+                               <require idref="lufa.drivers.peripheral.spi"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/>
+
+                               <device-support value="at90usb1287"/>
+
+                               <require idref="lufa.drivers.misc.at45db642d"/>
+                               <require idref="lufa.drivers.peripheral.spi"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_XPLAIN"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/>
+
+                               <device-support value="atxmega256a3bu"/>
+
+                               <require idref="lufa.drivers.misc.at45db642d"/>
+                               <require idref="lufa.drivers.peripheral.usart_spi"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/>
+
+                               <device-support value="atxmega128b1"/>
+
+                               <require idref="lufa.drivers.misc.at45db642d"/>
+                               <require idref="lufa.drivers.peripheral.usart_spi"/>
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.dataflash"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/>
+
+                               <device-support value="at32uc3a0512"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_EVK1100"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/>
+
+                               <device-support value="at32uc3b0256"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.joystick"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_EVK1101"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/>
+
+                               <device-support value="at32uc3a3256"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_EVK1104"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/>
+
+                               <device-support value="at32uc3a3256"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/>
+
+                               <device-support value="at90usb162"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_STANGE_ISP"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/>
+
+                               <device-support value="atxmega384c3"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/>
+
+                               <device-support value="atmega32u2"/>
+
+                               <require idref="lufa.drivers.board.buttons"/>
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_U2S"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/>
+
+                               <device-support value="atmega32u4"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_YUN"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO">
+                               <build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/>
+
+                               <device-support value="atmega32u4"/>
+
+                               <require idref="lufa.drivers.board.leds"/>
+
+                               <build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/>
+                               <build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/>
+
+                               <build type="define" name="BOARD" value="BOARD_MICRO"/>
+                       </module>
+               </select-by-config>
+       </asf>
+</lufa>
index 8680ca2dff4d2abb8ebbc73f353cbf56f4b0dc26..4311ae87b763c569cf39854cafac7553d9cbef62 100644 (file)
@@ -1,57 +1,57 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_AT45DB321C"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/>\r
-               </module>\r
-\r
-               <module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_AT45DB321C"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/>\r
-               </module>\r
-\r
-               <module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_RingBuff"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/>\r
-               </module>\r
-\r
-               <module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_Terminal"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/>\r
-               </module>\r
-       </asf>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/>
+               </module>
+
+               <module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/>
+               </module>
+
+               <module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_RingBuff"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/>
+               </module>
+
+               <module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_Terminal"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/>
+               </module>
+       </asf>
 </lufa>
\ No newline at end of file
index 3a982e565fa820fe651e7741354b931a3af783a6..76ea516dbca66bd0a45081c5037e5486651d426e 100644 (file)
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver">\r
-                       <module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_Serial"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-                               <require idref="lufa.drivers.misc.ansi"/>\r
-\r
-                               <build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/>\r
-                               <build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_Serial"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-                               <require idref="lufa.drivers.misc.ansi"/>\r
-\r
-                               <build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/>\r
-                               <build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_Serial"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-                               <require idref="lufa.drivers.misc.ansi"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-                       </module>\r
-               </select-by-device>\r
-\r
-               <select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver">\r
-                       <module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_SPI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_SPI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_SPI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-                       </module>\r
-               </select-by-device>\r
-\r
-               <select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver">\r
-                       <module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_SerialSPI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api"  value="Drivers/Peripheral/SerialSPI.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_SerialSPI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_SerialSPI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-                       </module>\r
-               </select-by-device>\r
-\r
-               <select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver">\r
-                       <module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_TWI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/>\r
-                               <build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_TWI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/>\r
-                               <build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_TWI"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-                       </module>\r
-               </select-by-device>\r
-\r
-               <select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver">\r
-                       <module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_ADC"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/>\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_ADC"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_ADC"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-                       </module>\r
-               </select-by-device>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver">
+                       <module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <build type="doxygen-entry-point" value="Group_Serial"/>
+
+                               <require idref="lufa.common"/>
+                               <require idref="lufa.drivers.misc.ansi"/>
+
+                               <build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/>
+                               <build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <build type="doxygen-entry-point" value="Group_Serial"/>
+
+                               <require idref="lufa.common"/>
+                               <require idref="lufa.drivers.misc.ansi"/>
+
+                               <build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/>
+                               <build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <build type="doxygen-entry-point" value="Group_Serial"/>
+
+                               <require idref="lufa.common"/>
+                               <require idref="lufa.drivers.misc.ansi"/>
+
+                               <info type="gui-flag" value="hidden"/>
+                       </module>
+               </select-by-device>
+
+               <select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver">
+                       <module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <build type="doxygen-entry-point" value="Group_SPI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <build type="doxygen-entry-point" value="Group_SPI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <build type="doxygen-entry-point" value="Group_SPI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <info type="gui-flag" value="hidden"/>
+                       </module>
+               </select-by-device>
+
+               <select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver">
+                       <module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <build type="doxygen-entry-point" value="Group_SerialSPI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api"  value="Drivers/Peripheral/SerialSPI.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <build type="doxygen-entry-point" value="Group_SerialSPI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <build type="doxygen-entry-point" value="Group_SerialSPI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <info type="gui-flag" value="hidden"/>
+                       </module>
+               </select-by-device>
+
+               <select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver">
+                       <module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <build type="doxygen-entry-point" value="Group_TWI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/>
+                               <build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <build type="doxygen-entry-point" value="Group_TWI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/>
+                               <build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <build type="doxygen-entry-point" value="Group_TWI"/>
+
+                               <require idref="lufa.common"/>
+
+                               <info type="gui-flag" value="hidden"/>
+                       </module>
+               </select-by-device>
+
+               <select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver">
+                       <module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <build type="doxygen-entry-point" value="Group_ADC"/>
+
+                               <require idref="lufa.common"/>
+
+                               <build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/>
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <build type="doxygen-entry-point" value="Group_ADC"/>
+
+                               <require idref="lufa.common"/>
+
+                               <info type="gui-flag" value="hidden"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <build type="doxygen-entry-point" value="Group_ADC"/>
+
+                               <require idref="lufa.common"/>
+
+                               <info type="gui-flag" value="hidden"/>
+                       </module>
+               </select-by-device>
+       </asf>
+</lufa>
index 7ff4b39492500deebc31d5424e4e4b31af7b7ca8..263c411dff3e5a075a312eced8d7905136e0bf7e 100644 (file)
@@ -1,32 +1,32 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_USB"/>\r
-\r
-                       <build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/>\r
-                       <build type="module-config" subtype="path" value="CodeTemplates"/>\r
-                       <build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/>\r
-\r
-                       <build type="include-path" value=".."/>\r
-                       <build type="header-file" subtype="api" value="Drivers/USB/USB.h"/>\r
-\r
-                       <require idref="lufa.common"/>\r
-                       <require idref="lufa.drivers.usb.class"/>\r
-                       <require idref="lufa.drivers.usb.core"/>\r
-               </module>\r
-       </asf>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_USB"/>
+
+                       <build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/>
+                       <build type="module-config" subtype="path" value="CodeTemplates"/>
+                       <build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/>
+
+                       <build type="include-path" value=".."/>
+                       <build type="header-file" subtype="api" value="Drivers/USB/USB.h"/>
+
+                       <require idref="lufa.common"/>
+                       <require idref="lufa.drivers.usb.class"/>
+                       <require idref="lufa.drivers.usb.core"/>
+               </module>
+       </asf>
 </lufa>
\ No newline at end of file
index cd18bf10e7ba5402c0c559b961fed2ce56b3f8a2..67ab760d33d9bc968f521740edd499fdcad3e34f 100644 (file)
@@ -1,32 +1,32 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-                       <build type="doxygen-entry-point" value="Group_USBClassDrivers"/>\r
-\r
-                       <require idref="lufa.drivers.usb.class.android"/>\r
-                       <require idref="lufa.drivers.usb.class.audio"/>\r
-                       <require idref="lufa.drivers.usb.class.cdc"/>\r
-                       <require idref="lufa.drivers.usb.class.hid"/>\r
-                       <require idref="lufa.drivers.usb.class.ms"/>\r
-                       <require idref="lufa.drivers.usb.class.midi"/>\r
-                       <require idref="lufa.drivers.usb.class.printer"/>\r
-                       <require idref="lufa.drivers.usb.class.rndis"/>\r
-                       <require idref="lufa.drivers.usb.class.si"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <info type="gui-flag" value="hidden"/>
+                       <build type="doxygen-entry-point" value="Group_USBClassDrivers"/>
+
+                       <require idref="lufa.drivers.usb.class.android"/>
+                       <require idref="lufa.drivers.usb.class.audio"/>
+                       <require idref="lufa.drivers.usb.class.cdc"/>
+                       <require idref="lufa.drivers.usb.class.hid"/>
+                       <require idref="lufa.drivers.usb.class.ms"/>
+                       <require idref="lufa.drivers.usb.class.midi"/>
+                       <require idref="lufa.drivers.usb.class.printer"/>
+                       <require idref="lufa.drivers.usb.class.rndis"/>
+                       <require idref="lufa.drivers.usb.class.si"/>
+               </module>
+       </asf>
+</lufa>
index 58f8917ef47d91674d0d8cf8720a772ed08e438d..58a0b388f6d77196ab89244eaf91ee32e9dd8d6a 100644 (file)
@@ -1,85 +1,85 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-                       <device-support-alias value="lufa_xmega"/>\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_USBManagement"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-\r
-                       <build type="header-file" value="Drivers/USB/Core/Device.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/Endpoint.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/Host.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/Pipe.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/OTG.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/USBController.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/PipeStream.h"/>\r
-               <build type="c-source"    value="Drivers/USB/Core/ConfigDescriptors.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/>\r
-               <build type="c-source"    value="Drivers/USB/Core/DeviceStandardReq.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/>\r
-               <build type="c-source"    value="Drivers/USB/Core/Events.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/Events.h"/>\r
-               <build type="c-source"    value="Drivers/USB/Core/HostStandardReq.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/>\r
-               <build type="c-source"    value="Drivers/USB/Core/USBTask.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/USBTask.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/USBMode.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/>\r
-\r
-               <build type="c-source"    value="Drivers/USB/Class/Common/HIDParser.c"/>\r
-               <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/>\r
-               <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/>\r
-           </module>\r
-\r
-               <select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver">\r
-                       <module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>\r
-\r
-                               <require idref="lufa.drivers.usb.core.common"/>\r
-                               <require idref="lufa.drivers.usb.core.avr8"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>\r
-\r
-                               <require idref="lufa.drivers.usb.core.common"/>\r
-                               <require idref="lufa.drivers.usb.core.xmega"/>\r
-                       </module>\r
-\r
-                       <module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <info type="gui-flag" value="hidden"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>\r
-\r
-                               <require idref="lufa.drivers.usb.core.common"/>\r
-                               <require idref="lufa.drivers.usb.core.uc3"/>\r
-                       </module>\r
-               </select-by-device>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common">
+                       <device-support-alias value="lufa_avr8"/>
+                       <device-support-alias value="lufa_xmega"/>
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <build type="doxygen-entry-point" value="Group_USBManagement"/>
+
+                       <info type="gui-flag" value="hidden"/>
+
+                       <build type="header-file" value="Drivers/USB/Core/Device.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/Endpoint.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/Host.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/Pipe.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/OTG.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/USBController.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/PipeStream.h"/>
+               <build type="c-source"    value="Drivers/USB/Core/ConfigDescriptors.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/>
+               <build type="c-source"    value="Drivers/USB/Core/DeviceStandardReq.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/>
+               <build type="c-source"    value="Drivers/USB/Core/Events.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/Events.h"/>
+               <build type="c-source"    value="Drivers/USB/Core/HostStandardReq.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/>
+               <build type="c-source"    value="Drivers/USB/Core/USBTask.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/USBTask.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/USBMode.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/>
+
+               <build type="c-source"    value="Drivers/USB/Class/Common/HIDParser.c"/>
+               <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/>
+               <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/>
+           </module>
+
+               <select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver">
+                       <module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <info type="gui-flag" value="hidden"/>
+
+                               <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
+
+                               <require idref="lufa.drivers.usb.core.common"/>
+                               <require idref="lufa.drivers.usb.core.avr8"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <info type="gui-flag" value="hidden"/>
+
+                               <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
+
+                               <require idref="lufa.drivers.usb.core.common"/>
+                               <require idref="lufa.drivers.usb.core.xmega"/>
+                       </module>
+
+                       <module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <info type="gui-flag" value="hidden"/>
+
+                               <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
+
+                               <require idref="lufa.drivers.usb.core.common"/>
+                               <require idref="lufa.drivers.usb.core.uc3"/>
+                       </module>
+               </select-by-device>
+       </asf>
+</lufa>
index 166b9257aaf29f8d1a0408d8d3bc227a79e0319d..4688f05f9163f71363d4c66308f9443e91613b22 100644 (file)
@@ -1,43 +1,43 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8">\r
-                       <device-support-alias value="lufa_avr8"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>\r
-\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Device_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Host_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8">
+                       <device-support-alias value="lufa_avr8"/>
+
+                       <info type="gui-flag" value="hidden"/>
+
+                       <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
+
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Device_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Host_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/>
+               </module>
+       </asf>
+</lufa>
index 7e0540cda7a8f9a087c2f2c44a4e92e67125ea9c..2e7185f24a04d1ff1e5b1b12272c9297a2648e10 100644 (file)
@@ -1,42 +1,42 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3">\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>\r
-\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Device_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Host_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/Pipe_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/USBController_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3">
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <info type="gui-flag" value="hidden"/>
+
+                       <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
+
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Device_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Host_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/Pipe_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/USBController_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/>
+               </module>
+       </asf>
+</lufa>
index 9e9f4f6a1d45c0e630108d14816e159474173f88..c79a0f5b5254641403eec325ecd82e01e9169e19 100644 (file)
@@ -1,36 +1,36 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA">\r
-                       <device-support-alias value="lufa_xmega"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>\r
-\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/>\r
-                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/>\r
-                       <build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA">
+                       <device-support-alias value="lufa_xmega"/>
+
+                       <info type="gui-flag" value="hidden"/>
+
+                       <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
+
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/>
+                       <build type="c-source"    value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/>
+                       <build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/>
+               </module>
+       </asf>
+</lufa>
index 02c7463ee57ed252d8cba9221cb1101291b70a07..4ee51f6ee0fc4acdecad729e5e86cefe8ffdfb6d 100644 (file)
@@ -1,60 +1,60 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <select-by-device id="lufa.platform" caption="LUFA Platform Specific Support">\r
-                       <module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8">\r
-                               <device-support-alias value="lufa_avr8"/>\r
-\r
-                               <build type="define" name="ARCH" value="ARCH_AVR8"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>\r
-\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Platform/Platform.h"/>\r
-\r
-                               <require idref="lufa.common"/>\r
-                       </module>\r
-\r
-                       <module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA">\r
-                               <device-support-alias value="lufa_xmega"/>\r
-\r
-                               <build type="define" name="ARCH" value="ARCH_XMEGA"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>\r
-\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Platform/Platform.h"/>\r
-\r
-                               <build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/>\r
-\r
-                               <require idref="lufa.platform.xmega"/>\r
-                               <require idref="lufa.common"/>\r
-                       </module>\r
-\r
-                       <module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3">\r
-                               <device-support-alias value="lufa_uc3"/>\r
-\r
-                               <build type="define" name="ARCH" value="ARCH_UC3"/>\r
-\r
-                               <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>\r
-\r
-                               <build type="include-path" value=".."/>\r
-                               <build type="header-file" subtype="api" value="Platform/Platform.h"/>\r
-\r
-                               <build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/>\r
-\r
-                               <require idref="lufa.platform.uc3"/>\r
-                               <require idref="lufa.common"/>\r
-                       </module>\r
-               </select-by-device>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <select-by-device id="lufa.platform" caption="LUFA Platform Specific Support">
+                       <module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8">
+                               <device-support-alias value="lufa_avr8"/>
+
+                               <build type="define" name="ARCH" value="ARCH_AVR8"/>
+
+                               <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
+
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Platform/Platform.h"/>
+
+                               <require idref="lufa.common"/>
+                       </module>
+
+                       <module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA">
+                               <device-support-alias value="lufa_xmega"/>
+
+                               <build type="define" name="ARCH" value="ARCH_XMEGA"/>
+
+                               <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
+
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Platform/Platform.h"/>
+
+                               <build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/>
+
+                               <require idref="lufa.platform.xmega"/>
+                               <require idref="lufa.common"/>
+                       </module>
+
+                       <module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3">
+                               <device-support-alias value="lufa_uc3"/>
+
+                               <build type="define" name="ARCH" value="ARCH_UC3"/>
+
+                               <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
+
+                               <build type="include-path" value=".."/>
+                               <build type="header-file" subtype="api" value="Platform/Platform.h"/>
+
+                               <build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/>
+
+                               <require idref="lufa.platform.uc3"/>
+                               <require idref="lufa.common"/>
+                       </module>
+               </select-by-device>
+       </asf>
+</lufa>
index a488c4b83d115cfd01ed477c5c0b83abadd04b11..98017b08ad90c4b8dc084db73f9e91423b182041 100644 (file)
@@ -1,26 +1,26 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers">\r
-                       <device-support-alias value="lufa_uc3"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/>\r
-\r
-                       <build type="header-file" value="Platform/UC3/ClockManagement.h"/>\r
-                       <build type="header-file" value="Platform/UC3/InterruptManagement.h"/>\r
-                       <build type="c-source" value="Platform/UC3/InterruptManagement.c"/>\r
-                       <build type="asm-source" value="Platform/UC3/Exception.S"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers">
+                       <device-support-alias value="lufa_uc3"/>
+
+                       <info type="gui-flag" value="hidden"/>
+
+                       <build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/>
+
+                       <build type="header-file" value="Platform/UC3/ClockManagement.h"/>
+                       <build type="header-file" value="Platform/UC3/InterruptManagement.h"/>
+                       <build type="c-source" value="Platform/UC3/InterruptManagement.c"/>
+                       <build type="asm-source" value="Platform/UC3/Exception.S"/>
+               </module>
+       </asf>
+</lufa>
index 1674a77b02bc9782eb5e26760b0a290b58b2c59c..e613fe520625e12b6e0f7aecd848a2c3b398aefa 100644 (file)
@@ -1,23 +1,23 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf xmlversion="1.0">\r
-               <module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers">\r
-                       <device-support-alias value="lufa_xmega"/>\r
-\r
-                       <info type="gui-flag" value="hidden"/>\r
-\r
-                       <build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/>\r
-\r
-                       <build type="header-file" value="Platform/XMEGA/ClockManagement.h"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf xmlversion="1.0">
+               <module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers">
+                       <device-support-alias value="lufa_xmega"/>
+
+                       <info type="gui-flag" value="hidden"/>
+
+                       <build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/>
+
+                       <build type="header-file" value="Platform/XMEGA/ClockManagement.h"/>
+               </module>
+       </asf>
+</lufa>
index 031c8a2be6015e8830158d1dbb31ca0a696c944f..a76b6d0d3bf26bd506d3588096a5b0891b1a4af6 100644 (file)
@@ -1,43 +1,43 @@
-<!--\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2013.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
--->\r
-\r
-<!-- Atmel Studio framework integration file -->\r
-\r
-<lufa>\r
-       <asf>\r
-               <select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults">\r
-                       <module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR">\r
-                               <info type="gui-flag" value="hidden"/>\r
-                               <device-support value="avr"/>\r
-\r
-                               <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/>\r
-                               <toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/>\r
-                       </module>\r
-               </select-by-device>\r
-\r
-               <module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR">\r
-                       <info type="gui-flag" value="hidden"/>\r
-                       <device-support value="uc3"/>\r
-\r
-                       <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/>\r
-                       <toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/>\r
-               </module>\r
-       </asf>\r
-</lufa>\r
+<!--
+             LUFA Library
+     Copyright (C) Dean Camera, 2013.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+       <asf>
+               <select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults">
+                       <module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR">
+                               <info type="gui-flag" value="hidden"/>
+                               <device-support value="avr"/>
+
+                               <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/>
+                               <toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/>
+                       </module>
+               </select-by-device>
+
+               <module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR">
+                       <info type="gui-flag" value="hidden"/>
+                       <device-support value="uc3"/>
+
+                       <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/>
+                       <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/>
+                       <toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/>
+                       <toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/>
+                       <toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/>
+                       <toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/>
+                       <toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/>
+                       <toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/>
+               </module>
+       </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/adafruit_ble.cpp b/tmk_core/protocol/lufa/adafruit_ble.cpp
new file mode 100644 (file)
index 0000000..fd6edd4
--- /dev/null
@@ -0,0 +1,805 @@
+#include "adafruit_ble.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <alloca.h>
+#include <util/delay.h>
+#include <util/atomic.h>
+#include "debug.h"
+#include "pincontrol.h"
+#include "timer.h"
+#include "action_util.h"
+#include "ringbuffer.hpp"
+#include <string.h>
+
+// These are the pin assignments for the 32u4 boards.
+// You may define them to something else in your config.h
+// if yours is wired up differently.
+#ifndef AdafruitBleResetPin
+#define AdafruitBleResetPin D4
+#endif
+
+#ifndef AdafruitBleCSPin
+#define AdafruitBleCSPin    B4
+#endif
+
+#ifndef AdafruitBleIRQPin
+#define AdafruitBleIRQPin   E6
+#endif
+
+
+#define SAMPLE_BATTERY
+#define ConnectionUpdateInterval 1000 /* milliseconds */
+
+static struct {
+  bool is_connected;
+  bool initialized;
+  bool configured;
+
+#define ProbedEvents 1
+#define UsingEvents 2
+  bool event_flags;
+
+#ifdef SAMPLE_BATTERY
+  uint16_t last_battery_update;
+  uint32_t vbat;
+#endif
+  uint16_t last_connection_update;
+} state;
+
+// Commands are encoded using SDEP and sent via SPI
+// https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/master/SDEP.md
+
+#define SdepMaxPayload 16
+struct sdep_msg {
+  uint8_t type;
+  uint8_t cmd_low;
+  uint8_t cmd_high;
+  struct __attribute__((packed)) {
+    uint8_t len:7;
+    uint8_t more:1;
+  };
+  uint8_t payload[SdepMaxPayload];
+} __attribute__((packed));
+
+// The recv latency is relatively high, so when we're hammering keys quickly,
+// we want to avoid waiting for the responses in the matrix loop.  We maintain
+// a short queue for that.  Since there is quite a lot of space overhead for
+// the AT command representation wrapped up in SDEP, we queue the minimal
+// information here.
+
+enum queue_type {
+  QTKeyReport, // 1-byte modifier + 6-byte key report
+  QTConsumer,  // 16-bit key code
+#ifdef MOUSE_ENABLE
+  QTMouseMove, // 4-byte mouse report
+#endif
+};
+
+struct queue_item {
+  enum queue_type queue_type;
+  uint16_t added;
+  union __attribute__((packed)) {
+    struct __attribute__((packed)) {
+      uint8_t modifier;
+      uint8_t keys[6];
+    } key;
+
+    uint16_t consumer;
+    struct __attribute__((packed)) {
+      int8_t x, y, scroll, pan;
+    } mousemove;
+  };
+};
+
+// Items that we wish to send
+static RingBuffer<queue_item, 40> send_buf;
+// Pending response; while pending, we can't send any more requests.
+// This records the time at which we sent the command for which we
+// are expecting a response.
+static RingBuffer<uint16_t, 2> resp_buf;
+
+static bool process_queue_item(struct queue_item *item, uint16_t timeout);
+
+enum sdep_type {
+  SdepCommand = 0x10,
+  SdepResponse = 0x20,
+  SdepAlert = 0x40,
+  SdepError = 0x80,
+  SdepSlaveNotReady = 0xfe, // Try again later
+  SdepSlaveOverflow = 0xff, // You read more data than is available
+};
+
+enum ble_cmd {
+  BleInitialize = 0xbeef,
+  BleAtWrapper = 0x0a00,
+  BleUartTx = 0x0a01,
+  BleUartRx = 0x0a02,
+};
+
+enum ble_system_event_bits {
+  BleSystemConnected = 0,
+  BleSystemDisconnected = 1,
+  BleSystemUartRx = 8,
+  BleSystemMidiRx = 10,
+};
+
+// The SDEP.md file says 2MHz but the web page and the sample driver
+// both use 4MHz
+#define SpiBusSpeed 4000000
+
+#define SdepTimeout 150 /* milliseconds */
+#define SdepShortTimeout 10 /* milliseconds */
+#define SdepBackOff 25 /* microseconds */
+#define BatteryUpdateInterval 10000 /* milliseconds */
+
+static bool at_command(const char *cmd, char *resp, uint16_t resplen,
+                       bool verbose, uint16_t timeout = SdepTimeout);
+static bool at_command_P(const char *cmd, char *resp, uint16_t resplen,
+                         bool verbose = false);
+
+struct SPI_Settings {
+  uint8_t spcr, spsr;
+};
+
+static struct SPI_Settings spi;
+
+// Initialize 4Mhz MSBFIRST MODE0
+void SPI_init(struct SPI_Settings *spi) {
+  spi->spcr = _BV(SPE) | _BV(MSTR);
+  spi->spsr = _BV(SPI2X);
+
+  static_assert(SpiBusSpeed == F_CPU / 2, "hard coded at 4Mhz");
+
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+    // Ensure that SS is OUTPUT High
+    digitalWrite(B0, PinLevelHigh);
+    pinMode(B0, PinDirectionOutput);
+
+    SPCR |= _BV(MSTR);
+    SPCR |= _BV(SPE);
+    pinMode(B1 /* SCK */, PinDirectionOutput);
+    pinMode(B2 /* MOSI */, PinDirectionOutput);
+  }
+}
+
+static inline void SPI_begin(struct SPI_Settings*spi) {
+  SPCR = spi->spcr;
+  SPSR = spi->spsr;
+}
+
+static inline uint8_t SPI_TransferByte(uint8_t data) {
+  SPDR = data;
+  asm volatile("nop");
+  while (!(SPSR & _BV(SPIF))) {
+    ; // wait
+  }
+  return SPDR;
+}
+
+static inline void spi_send_bytes(const uint8_t *buf, uint8_t len) {
+  if (len == 0) return;
+  const uint8_t *end = buf + len;
+  while (buf < end) {
+    SPDR = *buf;
+    while (!(SPSR & _BV(SPIF))) {
+      ; // wait
+    }
+    ++buf;
+  }
+}
+
+static inline uint16_t spi_read_byte(void) {
+  return SPI_TransferByte(0x00 /* dummy */);
+}
+
+static inline void spi_recv_bytes(uint8_t *buf, uint8_t len) {
+  const uint8_t *end = buf + len;
+  if (len == 0) return;
+  while (buf < end) {
+    SPDR = 0; // write a dummy to initiate read
+    while (!(SPSR & _BV(SPIF))) {
+      ; // wait
+    }
+    *buf = SPDR;
+    ++buf;
+  }
+}
+
+#if 0
+static void dump_pkt(const struct sdep_msg *msg) {
+  print("pkt: type=");
+  print_hex8(msg->type);
+  print(" cmd=");
+  print_hex8(msg->cmd_high);
+  print_hex8(msg->cmd_low);
+  print(" len=");
+  print_hex8(msg->len);
+  print(" more=");
+  print_hex8(msg->more);
+  print("\n");
+}
+#endif
+
+// Send a single SDEP packet
+static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {
+  SPI_begin(&spi);
+
+  digitalWrite(AdafruitBleCSPin, PinLevelLow);
+  uint16_t timerStart = timer_read();
+  bool success = false;
+  bool ready = false;
+
+  do {
+    ready = SPI_TransferByte(msg->type) != SdepSlaveNotReady;
+    if (ready) {
+      break;
+    }
+
+    // Release it and let it initialize
+    digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+    _delay_us(SdepBackOff);
+    digitalWrite(AdafruitBleCSPin, PinLevelLow);
+  } while (timer_elapsed(timerStart) < timeout);
+
+  if (ready) {
+    // Slave is ready; send the rest of the packet
+    spi_send_bytes(&msg->cmd_low,
+                   sizeof(*msg) - (1 + sizeof(msg->payload)) + msg->len);
+    success = true;
+  }
+
+  digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+
+  return success;
+}
+
+static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command,
+                                  const uint8_t *payload, uint8_t len,
+                                  bool moredata) {
+  msg->type = SdepCommand;
+  msg->cmd_low = command & 0xff;
+  msg->cmd_high = command >> 8;
+  msg->len = len;
+  msg->more = (moredata && len == SdepMaxPayload) ? 1 : 0;
+
+  static_assert(sizeof(*msg) == 20, "msg is correctly packed");
+
+  memcpy(msg->payload, payload, len);
+}
+
+// Read a single SDEP packet
+static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
+  bool success = false;
+  uint16_t timerStart = timer_read();
+  bool ready = false;
+
+  do {
+    ready = digitalRead(AdafruitBleIRQPin);
+    if (ready) {
+      break;
+    }
+    _delay_us(1);
+  } while (timer_elapsed(timerStart) < timeout);
+
+  if (ready) {
+    SPI_begin(&spi);
+
+    digitalWrite(AdafruitBleCSPin, PinLevelLow);
+
+    do {
+      // Read the command type, waiting for the data to be ready
+      msg->type = spi_read_byte();
+      if (msg->type == SdepSlaveNotReady || msg->type == SdepSlaveOverflow) {
+        // Release it and let it initialize
+        digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+        _delay_us(SdepBackOff);
+        digitalWrite(AdafruitBleCSPin, PinLevelLow);
+        continue;
+      }
+
+      // Read the rest of the header
+      spi_recv_bytes(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload)));
+
+      // and get the payload if there is any
+      if (msg->len <= SdepMaxPayload) {
+        spi_recv_bytes(msg->payload, msg->len);
+      }
+      success = true;
+      break;
+    } while (timer_elapsed(timerStart) < timeout);
+
+    digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+  }
+  return success;
+}
+
+static void resp_buf_read_one(bool greedy) {
+  uint16_t last_send;
+  if (!resp_buf.peek(last_send)) {
+    return;
+  }
+
+  if (digitalRead(AdafruitBleIRQPin)) {
+    struct sdep_msg msg;
+
+again:
+    if (sdep_recv_pkt(&msg, SdepTimeout)) {
+      if (!msg.more) {
+        // We got it; consume this entry
+        resp_buf.get(last_send);
+        dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send));
+      }
+
+      if (greedy && resp_buf.peek(last_send) && digitalRead(AdafruitBleIRQPin)) {
+        goto again;
+      }
+    }
+
+  } else if (timer_elapsed(last_send) > SdepTimeout * 2) {
+    dprintf("waiting_for_result: timeout, resp_buf size %d\n",
+            (int)resp_buf.size());
+
+    // Timed out: consume this entry
+    resp_buf.get(last_send);
+  }
+}
+
+static void send_buf_send_one(uint16_t timeout = SdepTimeout) {
+  struct queue_item item;
+
+  // Don't send anything more until we get an ACK
+  if (!resp_buf.empty()) {
+    return;
+  }
+
+  if (!send_buf.peek(item)) {
+    return;
+  }
+  if (process_queue_item(&item, timeout)) {
+    // commit that peek
+    send_buf.get(item);
+    dprintf("send_buf_send_one: have %d remaining\n", (int)send_buf.size());
+  } else {
+    dprint("failed to send, will retry\n");
+    _delay_ms(SdepTimeout);
+    resp_buf_read_one(true);
+  }
+}
+
+static void resp_buf_wait(const char *cmd) {
+  bool didPrint = false;
+  while (!resp_buf.empty()) {
+    if (!didPrint) {
+      dprintf("wait on buf for %s\n", cmd);
+      didPrint = true;
+    }
+    resp_buf_read_one(true);
+  }
+}
+
+static bool ble_init(void) {
+  state.initialized = false;
+  state.configured = false;
+  state.is_connected = false;
+
+  pinMode(AdafruitBleIRQPin, PinDirectionInput);
+  pinMode(AdafruitBleCSPin, PinDirectionOutput);
+  digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+
+  SPI_init(&spi);
+
+  // Perform a hardware reset
+  pinMode(AdafruitBleResetPin, PinDirectionOutput);
+  digitalWrite(AdafruitBleResetPin, PinLevelHigh);
+  digitalWrite(AdafruitBleResetPin, PinLevelLow);
+  _delay_ms(10);
+  digitalWrite(AdafruitBleResetPin, PinLevelHigh);
+
+  _delay_ms(1000); // Give it a second to initialize
+
+  state.initialized = true;
+  return state.initialized;
+}
+
+static inline uint8_t min(uint8_t a, uint8_t b) {
+  return a < b ? a : b;
+}
+
+static bool read_response(char *resp, uint16_t resplen, bool verbose) {
+  char *dest = resp;
+  char *end = dest + resplen;
+
+  while (true) {
+    struct sdep_msg msg;
+
+    if (!sdep_recv_pkt(&msg, 2 * SdepTimeout)) {
+      dprint("sdep_recv_pkt failed\n");
+      return false;
+    }
+
+    if (msg.type != SdepResponse) {
+      *resp = 0;
+      return false;
+    }
+
+    uint8_t len = min(msg.len, end - dest);
+    if (len > 0) {
+      memcpy(dest, msg.payload, len);
+      dest += len;
+    }
+
+    if (!msg.more) {
+      // No more data is expected!
+      break;
+    }
+  }
+
+  // Ensure the response is NUL terminated
+  *dest = 0;
+
+  // "Parse" the result text; we want to snip off the trailing OK or ERROR line
+  // Rewind past the possible trailing CRLF so that we can strip it
+  --dest;
+  while (dest > resp && (dest[0] == '\n' || dest[0] == '\r')) {
+    *dest = 0;
+    --dest;
+  }
+
+  // Look back for start of preceeding line
+  char *last_line = strrchr(resp, '\n');
+  if (last_line) {
+    ++last_line;
+  } else {
+    last_line = resp;
+  }
+
+  bool success = false;
+  static const char kOK[] PROGMEM = "OK";
+
+  success = !strcmp_P(last_line, kOK );
+
+  if (verbose || !success) {
+    dprintf("result: %s\n", resp);
+  }
+  return success;
+}
+
+static bool at_command(const char *cmd, char *resp, uint16_t resplen,
+                       bool verbose, uint16_t timeout) {
+  const char *end = cmd + strlen(cmd);
+  struct sdep_msg msg;
+
+  if (verbose) {
+    dprintf("ble send: %s\n", cmd);
+  }
+
+  if (resp) {
+    // They want to decode the response, so we need to flush and wait
+    // for all pending I/O to finish before we start this one, so
+    // that we don't confuse the results
+    resp_buf_wait(cmd);
+    *resp = 0;
+  }
+
+  // Fragment the command into a series of SDEP packets
+  while (end - cmd > SdepMaxPayload) {
+    sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, SdepMaxPayload, true);
+    if (!sdep_send_pkt(&msg, timeout)) {
+      return false;
+    }
+    cmd += SdepMaxPayload;
+  }
+
+  sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, end - cmd, false);
+  if (!sdep_send_pkt(&msg, timeout)) {
+    return false;
+  }
+
+  if (resp == NULL) {
+    auto now = timer_read();
+    while (!resp_buf.enqueue(now)) {
+      resp_buf_read_one(false);
+    }
+    auto later = timer_read();
+    if (TIMER_DIFF_16(later, now) > 0) {
+      dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now));
+    }
+    return true;
+  }
+
+  return read_response(resp, resplen, verbose);
+}
+
+bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) {
+  auto cmdbuf = (char *)alloca(strlen_P(cmd) + 1);
+  strcpy_P(cmdbuf, cmd);
+  return at_command(cmdbuf, resp, resplen, verbose);
+}
+
+bool adafruit_ble_is_connected(void) {
+  return state.is_connected;
+}
+
+bool adafruit_ble_enable_keyboard(void) {
+  char resbuf[128];
+
+  if (!state.initialized && !ble_init()) {
+    return false;
+  }
+
+  state.configured = false;
+
+  // Disable command echo
+  static const char kEcho[] PROGMEM = "ATE=0";
+  // Make the advertised name match the keyboard
+  static const char kGapDevName[] PROGMEM =
+      "AT+GAPDEVNAME=" STR(PRODUCT) " " STR(DESCRIPTION);
+  // Turn on keyboard support
+  static const char kHidEnOn[] PROGMEM = "AT+BLEHIDEN=1";
+
+  // Adjust intervals to improve latency.  This causes the "central"
+  // system (computer/tablet) to poll us every 10-30 ms.  We can't
+  // set a smaller value than 10ms, and 30ms seems to be the natural
+  // processing time on my macbook.  Keeping it constrained to that
+  // feels reasonable to type to.
+  static const char kGapIntervals[] PROGMEM = "AT+GAPINTERVALS=10,30,,";
+
+  // Reset the device so that it picks up the above changes
+  static const char kATZ[] PROGMEM = "ATZ";
+
+  // Turn down the power level a bit
+  static const char kPower[] PROGMEM = "AT+BLEPOWERLEVEL=-12";
+  static PGM_P const configure_commands[] PROGMEM = {
+    kEcho,
+    kGapIntervals,
+    kGapDevName,
+    kHidEnOn,
+    kPower,
+    kATZ,
+  };
+
+  uint8_t i;
+  for (i = 0; i < sizeof(configure_commands) / sizeof(configure_commands[0]);
+       ++i) {
+    PGM_P cmd;
+    memcpy_P(&cmd, configure_commands + i, sizeof(cmd));
+
+    if (!at_command_P(cmd, resbuf, sizeof(resbuf))) {
+      dprintf("failed BLE command: %S: %s\n", cmd, resbuf);
+      goto fail;
+    }
+  }
+
+  state.configured = true;
+
+  // Check connection status in a little while; allow the ATZ time
+  // to kick in.
+  state.last_connection_update = timer_read();
+fail:
+  return state.configured;
+}
+
+static void set_connected(bool connected) {
+  if (connected != state.is_connected) {
+    if (connected) {
+      print("****** BLE CONNECT!!!!\n");
+    } else {
+      print("****** BLE DISCONNECT!!!!\n");
+    }
+    state.is_connected = connected;
+
+    // TODO: if modifiers are down on the USB interface and
+    // we cut over to BLE or vice versa, they will remain stuck.
+    // This feels like a good point to do something like clearing
+    // the keyboard and/or generating a fake all keys up message.
+    // However, I've noticed that it takes a couple of seconds
+    // for macOS to to start recognizing key presses after BLE
+    // is in the connected state, so I worry that doing that
+    // here may not be good enough.
+  }
+}
+
+void adafruit_ble_task(void) {
+  char resbuf[48];
+
+  if (!state.configured && !adafruit_ble_enable_keyboard()) {
+    return;
+  }
+  resp_buf_read_one(true);
+  send_buf_send_one(SdepShortTimeout);
+
+  if (resp_buf.empty() && (state.event_flags & UsingEvents) &&
+      digitalRead(AdafruitBleIRQPin)) {
+    // Must be an event update
+    if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) {
+      uint32_t mask = strtoul(resbuf, NULL, 16);
+
+      if (mask & BleSystemConnected) {
+        set_connected(true);
+      } else if (mask & BleSystemDisconnected) {
+        set_connected(false);
+      }
+    }
+  }
+
+  if (timer_elapsed(state.last_connection_update) > ConnectionUpdateInterval) {
+    bool shouldPoll = true;
+    if (!(state.event_flags & ProbedEvents)) {
+      // Request notifications about connection status changes.
+      // This only works in SPIFRIEND firmware > 0.6.7, which is why
+      // we check for this conditionally here.
+      // Note that at the time of writing, HID reports only work correctly
+      // with Apple products on firmware version 0.6.7!
+      // https://forums.adafruit.com/viewtopic.php?f=8&t=104052
+      if (at_command_P(PSTR("AT+EVENTENABLE=0x1"), resbuf, sizeof(resbuf))) {
+        at_command_P(PSTR("AT+EVENTENABLE=0x2"), resbuf, sizeof(resbuf));
+        state.event_flags |= UsingEvents;
+      }
+      state.event_flags |= ProbedEvents;
+
+      // leave shouldPoll == true so that we check at least once
+      // before relying solely on events
+    } else {
+      shouldPoll = false;
+    }
+
+    static const char kGetConn[] PROGMEM = "AT+GAPGETCONN";
+    state.last_connection_update = timer_read();
+
+    if (at_command_P(kGetConn, resbuf, sizeof(resbuf))) {
+      set_connected(atoi(resbuf));
+    }
+  }
+
+#ifdef SAMPLE_BATTERY
+  // I don't know if this really does anything useful yet; the reported
+  // voltage level always seems to be around 3200mV.  We may want to just rip
+  // this code out.
+  if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval &&
+      resp_buf.empty()) {
+    state.last_battery_update = timer_read();
+
+    if (at_command_P(PSTR("AT+HWVBAT"), resbuf, sizeof(resbuf))) {
+      state.vbat = atoi(resbuf);
+    }
+  }
+#endif
+}
+
+static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
+  char cmdbuf[48];
+  char fmtbuf[64];
+
+  // Arrange to re-check connection after keys have settled
+  state.last_connection_update = timer_read();
+
+#if 1
+  if (TIMER_DIFF_16(state.last_connection_update, item->added) > 0) {
+    dprintf("send latency %dms\n",
+            TIMER_DIFF_16(state.last_connection_update, item->added));
+  }
+#endif
+
+  switch (item->queue_type) {
+    case QTKeyReport:
+      strcpy_P(fmtbuf,
+          PSTR("AT+BLEKEYBOARDCODE=%02x-00-%02x-%02x-%02x-%02x-%02x-%02x"));
+      snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->key.modifier,
+               item->key.keys[0], item->key.keys[1], item->key.keys[2],
+               item->key.keys[3], item->key.keys[4], item->key.keys[5]);
+      return at_command(cmdbuf, NULL, 0, true, timeout);
+
+    case QTConsumer:
+      strcpy_P(fmtbuf, PSTR("AT+BLEHIDCONTROLKEY=0x%04x"));
+      snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->consumer);
+      return at_command(cmdbuf, NULL, 0, true, timeout);
+
+#ifdef MOUSE_ENABLE
+    case QTMouseMove:
+      strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d"));
+      snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x,
+          item->mousemove.y, item->mousemove.scroll, item->mousemove.pan);
+      return at_command(cmdbuf, NULL, 0, true, timeout);
+#endif
+    default:
+      return true;
+  }
+}
+
+bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys,
+                            uint8_t nkeys) {
+  struct queue_item item;
+  bool didWait = false;
+
+  item.queue_type = QTKeyReport;
+  item.key.modifier = hid_modifier_mask;
+  item.added = timer_read();
+
+  while (nkeys >= 0) {
+    item.key.keys[0] = keys[0];
+    item.key.keys[1] = nkeys >= 1 ? keys[1] : 0;
+    item.key.keys[2] = nkeys >= 2 ? keys[2] : 0;
+    item.key.keys[3] = nkeys >= 3 ? keys[3] : 0;
+    item.key.keys[4] = nkeys >= 4 ? keys[4] : 0;
+    item.key.keys[5] = nkeys >= 5 ? keys[5] : 0;
+
+    if (!send_buf.enqueue(item)) {
+      if (!didWait) {
+        dprint("wait for buf space\n");
+        didWait = true;
+      }
+      send_buf_send_one();
+      continue;
+    }
+
+    if (nkeys <= 6) {
+      return true;
+    }
+
+    nkeys -= 6;
+    keys += 6;
+  }
+
+  return true;
+}
+
+bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration) {
+  struct queue_item item;
+
+  item.queue_type = QTConsumer;
+  item.consumer = keycode;
+
+  while (!send_buf.enqueue(item)) {
+    send_buf_send_one();
+  }
+  return true;
+}
+
+#ifdef MOUSE_ENABLE
+bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
+                                  int8_t pan) {
+  struct queue_item item;
+
+  item.queue_type = QTMouseMove;
+  item.mousemove.x = x;
+  item.mousemove.y = y;
+  item.mousemove.scroll = scroll;
+  item.mousemove.pan = pan;
+
+  while (!send_buf.enqueue(item)) {
+    send_buf_send_one();
+  }
+  return true;
+}
+#endif
+
+uint32_t adafruit_ble_read_battery_voltage(void) {
+  return state.vbat;
+}
+
+bool adafruit_ble_set_mode_leds(bool on) {
+  if (!state.configured) {
+    return false;
+  }
+
+  // The "mode" led is the red blinky one
+  at_command_P(on ? PSTR("AT+HWMODELED=1") : PSTR("AT+HWMODELED=0"), NULL, 0);
+
+  // Pin 19 is the blue "connected" LED; turn that off too.
+  // When turning LEDs back on, don't turn that LED on if we're
+  // not connected, as that would be confusing.
+  at_command_P(on && state.is_connected ? PSTR("AT+HWGPIO=19,1")
+                                        : PSTR("AT+HWGPIO=19,0"),
+               NULL, 0);
+  return true;
+}
+
+// https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel
+bool adafruit_ble_set_power_level(int8_t level) {
+  char cmd[46];
+  if (!state.configured) {
+    return false;
+  }
+  snprintf(cmd, sizeof(cmd), "AT+BLEPOWERLEVEL=%d", level);
+  return at_command(cmd, NULL, 0, false);
+}
diff --git a/tmk_core/protocol/lufa/adafruit_ble.h b/tmk_core/protocol/lufa/adafruit_ble.h
new file mode 100644 (file)
index 0000000..351fd55
--- /dev/null
@@ -0,0 +1,60 @@
+/* Bluetooth Low Energy Protocol for QMK.
+ * Author: Wez Furlong, 2016
+ * Supports the Adafruit BLE board built around the nRF51822 chip.
+ */
+#pragma once
+#ifdef ADAFRUIT_BLE_ENABLE
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Instruct the module to enable HID keyboard support and reset */
+extern bool adafruit_ble_enable_keyboard(void);
+
+/* Query to see if the BLE module is connected */
+extern bool adafruit_ble_query_is_connected(void);
+
+/* Returns true if we believe that the BLE module is connected.
+ * This uses our cached understanding that is maintained by
+ * calling ble_task() periodically. */
+extern bool adafruit_ble_is_connected(void);
+
+/* Call this periodically to process BLE-originated things */
+extern void adafruit_ble_task(void);
+
+/* Generates keypress events for a set of keys.
+ * The hid modifier mask specifies the state of the modifier keys for
+ * this set of keys.
+ * Also sends a key release indicator, so that the keys do not remain
+ * held down. */
+extern bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys,
+                                   uint8_t nkeys);
+
+/* Send a consumer keycode, holding it down for the specified duration
+ * (milliseconds) */
+extern bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration);
+
+#ifdef MOUSE_ENABLE
+/* Send a mouse/wheel movement report.
+ * The parameters are signed and indicate positive of negative direction
+ * change. */
+extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
+                                         int8_t pan);
+#endif
+
+/* Compute battery voltage by reading an analog pin.
+ * Returns the integer number of millivolts */
+extern uint32_t adafruit_ble_read_battery_voltage(void);
+
+extern bool adafruit_ble_set_mode_leds(bool on);
+extern bool adafruit_ble_set_power_level(int8_t level);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ADAFRUIT_BLE_ENABLE
index 850a20fdb3058bdf6919ba5fb16eb33f2b48d8dd..bf47787d296b3bc6817dbcb3aa1da911068e36d5 100644 (file)
@@ -140,9 +140,9 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
     HID_RI_USAGE(8, 0x80), /* System Control */
     HID_RI_COLLECTION(8, 0x01), /* Application */
         HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
-        HID_RI_LOGICAL_MINIMUM(16, 0x0001),
+        HID_RI_LOGICAL_MINIMUM(16, 0x0081),
         HID_RI_LOGICAL_MAXIMUM(16, 0x00B7),
-        HID_RI_USAGE_MINIMUM(16, 0x0001), /* System Power Down */
+        HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */
         HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */
         HID_RI_REPORT_SIZE(8, 16),
         HID_RI_REPORT_COUNT(8, 1),
@@ -164,6 +164,28 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
 };
 #endif
 
+#ifdef RAW_ENABLE
+const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] =
+{
+    HID_RI_USAGE_PAGE(16, 0xFF60), /* Vendor Page 0xFF60 */
+    HID_RI_USAGE(8, 0x61), /* Vendor Usage 0x61 */
+    HID_RI_COLLECTION(8, 0x01), /* Application */
+        HID_RI_USAGE(8, 0x62), /* Vendor Usage 0x62 */
+        HID_RI_LOGICAL_MINIMUM(8, 0x00),
+        HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+        HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
+        HID_RI_REPORT_SIZE(8, 0x08),
+        HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+        HID_RI_USAGE(8, 0x63), /* Vendor Usage 0x63 */
+        HID_RI_LOGICAL_MINIMUM(8, 0x00),
+        HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+        HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
+        HID_RI_REPORT_SIZE(8, 0x08),
+        HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
+    HID_RI_END_COLLECTION(0),
+};
+#endif
+
 #ifdef CONSOLE_ENABLE
 const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] =
 {
@@ -231,9 +253,15 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
     .Header                 = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
 
     .USBSpecification       = VERSION_BCD(1,1,0),
+#if VIRTSER_ENABLE
+    .Class                  = USB_CSCP_IADDeviceClass,
+    .SubClass               = USB_CSCP_IADDeviceSubclass,
+    .Protocol               = USB_CSCP_IADDeviceProtocol,
+#else
     .Class                  = USB_CSCP_NoDeviceClass,
     .SubClass               = USB_CSCP_NoDeviceSubclass,
     .Protocol               = USB_CSCP_NoDeviceProtocol,
+#endif
 
     .Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
 
@@ -393,6 +421,58 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
         },
 #endif
 
+               /*
+            * Raw
+            */
+       #ifdef RAW_ENABLE
+           .Raw_Interface =
+               {
+                   .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+                   .InterfaceNumber        = RAW_INTERFACE,
+                   .AlternateSetting       = 0x00,
+
+                   .TotalEndpoints         = 2,
+
+                   .Class                  = HID_CSCP_HIDClass,
+                   .SubClass               = HID_CSCP_NonBootSubclass,
+                   .Protocol               = HID_CSCP_NonBootProtocol,
+
+                   .InterfaceStrIndex      = NO_DESCRIPTOR
+               },
+
+           .Raw_HID =
+               {
+                   .Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
+
+                   .HIDSpec                = VERSION_BCD(1,1,1),
+                   .CountryCode            = 0x00,
+                   .TotalReportDescriptors = 1,
+                   .HIDReportType          = HID_DTYPE_Report,
+                   .HIDReportLength        = sizeof(RawReport)
+               },
+
+           .Raw_INEndpoint =
+               {
+                   .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+                   .EndpointAddress        = (ENDPOINT_DIR_IN | RAW_IN_EPNUM),
+                   .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+                   .EndpointSize           = RAW_EPSIZE,
+                   .PollingIntervalMS      = 0x01
+               },
+
+           .Raw_OUTEndpoint =
+               {
+                   .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+                   .EndpointAddress        = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM),
+                   .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+                   .EndpointSize           = RAW_EPSIZE,
+                   .PollingIntervalMS      = 0x01
+               },
+       #endif
+
     /*
      * Console
      */
@@ -643,7 +723,110 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
 
             .TotalEmbeddedJacks       = 0x01,
             .AssociatedJackID         = {0x03}
-        }
+        },
+#endif
+
+#ifdef VIRTSER_ENABLE
+    .CDC_Interface_Association =
+            {
+                    .Header                 = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
+
+                    .FirstInterfaceIndex    = CCI_INTERFACE,
+                    .TotalInterfaces        = 2,
+
+                    .Class                  = CDC_CSCP_CDCClass,
+                    .SubClass               = CDC_CSCP_ACMSubclass,
+                    .Protocol               = CDC_CSCP_ATCommandProtocol,
+
+                    .IADStrIndex            = NO_DESCRIPTOR,
+            },
+
+    .CDC_CCI_Interface =
+            {
+                    .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+                    .InterfaceNumber        = CCI_INTERFACE,
+                    .AlternateSetting       = 0,
+
+                    .TotalEndpoints         = 1,
+
+                    .Class                  = CDC_CSCP_CDCClass,
+                    .SubClass               = CDC_CSCP_ACMSubclass,
+                    .Protocol               = CDC_CSCP_ATCommandProtocol,
+
+                    .InterfaceStrIndex      = NO_DESCRIPTOR
+            },
+
+    .CDC_Functional_Header =
+            {
+                    .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
+                    .Subtype                = 0x00,
+
+                    .CDCSpecification       = VERSION_BCD(1,1,0),
+            },
+
+    .CDC_Functional_ACM =
+            {
+                    .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
+                    .Subtype                = 0x02,
+
+                    .Capabilities           = 0x02,
+            },
+
+    .CDC_Functional_Union =
+            {
+                    .Header                 = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
+                    .Subtype                = 0x06,
+
+                    .MasterInterfaceNumber  = CCI_INTERFACE,
+                    .SlaveInterfaceNumber   = CDI_INTERFACE,
+            },
+
+    .CDC_NotificationEndpoint =
+            {
+                    .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+                    .EndpointAddress        = CDC_NOTIFICATION_EPADDR,
+                    .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+                    .EndpointSize           = CDC_NOTIFICATION_EPSIZE,
+                    .PollingIntervalMS      = 0xFF
+            },
+
+    .CDC_DCI_Interface =
+            {
+                    .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+                    .InterfaceNumber        = CDI_INTERFACE,
+                    .AlternateSetting       = 0,
+
+                    .TotalEndpoints         = 2,
+
+                    .Class                  = CDC_CSCP_CDCDataClass,
+                    .SubClass               = CDC_CSCP_NoDataSubclass,
+                    .Protocol               = CDC_CSCP_NoDataProtocol,
+
+                    .InterfaceStrIndex      = NO_DESCRIPTOR
+            },
+
+    .CDC_DataOutEndpoint =
+            {
+                    .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+                    .EndpointAddress        = CDC_OUT_EPADDR,
+                    .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+                    .EndpointSize           = CDC_EPSIZE,
+                    .PollingIntervalMS      = 0x05
+            },
+
+    .CDC_DataInEndpoint =
+            {
+                    .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+                    .EndpointAddress        = CDC_IN_EPADDR,
+                    .Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+                    .EndpointSize           = CDC_EPSIZE,
+                    .PollingIntervalMS      = 0x05
+            },
 #endif
 };
 
@@ -736,6 +919,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                 Size    = sizeof(USB_HID_Descriptor_HID_t);
                 break;
 #endif
+#ifdef RAW_ENABLE
+            case RAW_INTERFACE:
+                Address = &ConfigurationDescriptor.Raw_HID;
+                Size    = sizeof(USB_HID_Descriptor_HID_t);
+                break;
+#endif
 #ifdef CONSOLE_ENABLE
             case CONSOLE_INTERFACE:
                 Address = &ConfigurationDescriptor.Console_HID;
@@ -768,6 +957,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
                 Size    = sizeof(ExtrakeyReport);
                 break;
 #endif
+#ifdef RAW_ENABLE
+            case RAW_INTERFACE:
+                Address = &RawReport;
+                Size    = sizeof(RawReport);
+                break;
+#endif
 #ifdef CONSOLE_ENABLE
             case CONSOLE_INTERFACE:
                 Address = &ConsoleReport;
index 4fd81a0e873be7ac958b836b7d4d85da2111170b..24ce420e6ac477634dc931de7c09659f63220bf0 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  * Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
  * This file is based on:
  *     LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
@@ -71,6 +71,14 @@ typedef struct
     USB_Descriptor_Endpoint_t             Extrakey_INEndpoint;
 #endif
 
+#ifdef RAW_ENABLE
+    // Raw HID Interface
+    USB_Descriptor_Interface_t            Raw_Interface;
+    USB_HID_Descriptor_HID_t              Raw_HID;
+    USB_Descriptor_Endpoint_t             Raw_INEndpoint;
+    USB_Descriptor_Endpoint_t             Raw_OUTEndpoint;
+#endif
+
 #ifdef CONSOLE_ENABLE
     // Console HID Interface
     USB_Descriptor_Interface_t            Console_Interface;
@@ -104,6 +112,21 @@ typedef struct
       USB_MIDI_Descriptor_Jack_Endpoint_t       MIDI_Out_Jack_Endpoint_SPC;
 #endif
 
+#ifdef VIRTSER_ENABLE
+        USB_Descriptor_Interface_Association_t   CDC_Interface_Association;
+
+       // CDC Control Interface
+       USB_Descriptor_Interface_t               CDC_CCI_Interface;
+       USB_CDC_Descriptor_FunctionalHeader_t    CDC_Functional_Header;
+       USB_CDC_Descriptor_FunctionalACM_t       CDC_Functional_ACM;
+       USB_CDC_Descriptor_FunctionalUnion_t     CDC_Functional_Union;
+       USB_Descriptor_Endpoint_t                CDC_NotificationEndpoint;
+
+       // CDC Data Interface
+       USB_Descriptor_Interface_t               CDC_DCI_Interface;
+       USB_Descriptor_Endpoint_t                CDC_DataOutEndpoint;
+       USB_Descriptor_Endpoint_t                CDC_DataInEndpoint;
+#endif
 } USB_Descriptor_Configuration_t;
 
 
@@ -114,18 +137,24 @@ typedef struct
 #   define MOUSE_INTERFACE          (KEYBOARD_INTERFACE + 1)
 #else
 #   define MOUSE_INTERFACE          KEYBOARD_INTERFACE
-#endif 
+#endif
 
 #ifdef EXTRAKEY_ENABLE
 #   define EXTRAKEY_INTERFACE       (MOUSE_INTERFACE + 1)
 #else
 #   define EXTRAKEY_INTERFACE       MOUSE_INTERFACE
-#endif 
+#endif
+
+#ifdef RAW_ENABLE
+#   define RAW_INTERFACE               (EXTRAKEY_INTERFACE + 1)
+#else
+#   define RAW_INTERFACE               EXTRAKEY_INTERFACE
+#endif
 
 #ifdef CONSOLE_ENABLE
-#   define CONSOLE_INTERFACE        (EXTRAKEY_INTERFACE + 1)
+#   define CONSOLE_INTERFACE        (RAW_INTERFACE + 1)
 #else
-#   define CONSOLE_INTERFACE        EXTRAKEY_INTERFACE
+#   define CONSOLE_INTERFACE        RAW_INTERFACE
 #endif
 
 #ifdef NKRO_ENABLE
@@ -141,15 +170,22 @@ typedef struct
 #   define AS_INTERFACE           NKRO_INTERFACE
 #endif
 
+#ifdef VIRTSER_ENABLE
+#   define CCI_INTERFACE         (AS_INTERFACE + 1)
+#   define CDI_INTERFACE         (AS_INTERFACE + 2)
+#else
+#   define CDI_INTERFACE         AS_INTERFACE
+#endif
+
 /* nubmer of interfaces */
-#define TOTAL_INTERFACES            AS_INTERFACE + 1
+#define TOTAL_INTERFACES            (CDI_INTERFACE + 1)
 
 
 // Endopoint number and size
 #define KEYBOARD_IN_EPNUM           1
 
 #ifdef MOUSE_ENABLE
-#   define MOUSE_IN_EPNUM           (KEYBOARD_IN_EPNUM + 1) 
+#   define MOUSE_IN_EPNUM           (KEYBOARD_IN_EPNUM + 1)
 #else
 #   define MOUSE_IN_EPNUM           KEYBOARD_IN_EPNUM
 #endif
@@ -157,15 +193,22 @@ typedef struct
 #ifdef EXTRAKEY_ENABLE
 #   define EXTRAKEY_IN_EPNUM        (MOUSE_IN_EPNUM + 1)
 #else
-#   define EXTRAKEY_IN_EPNUM        MOUSE_IN_EPNUM 
+#   define EXTRAKEY_IN_EPNUM        MOUSE_IN_EPNUM
+#endif
+
+#ifdef RAW_ENABLE
+#   define RAW_IN_EPNUM         (EXTRAKEY_IN_EPNUM + 1)
+#   define RAW_OUT_EPNUM        (EXTRAKEY_IN_EPNUM + 2)
+#else
+#   define RAW_OUT_EPNUM        EXTRAKEY_IN_EPNUM
 #endif
 
 #ifdef CONSOLE_ENABLE
-#   define CONSOLE_IN_EPNUM         (EXTRAKEY_IN_EPNUM + 1)
-#   define CONSOLE_OUT_EPNUM        (EXTRAKEY_IN_EPNUM + 1)
-//#   define CONSOLE_OUT_EPNUM        (EXTRAKEY_IN_EPNUM + 2)
+#   define CONSOLE_IN_EPNUM         (RAW_OUT_EPNUM + 1)
+//#   define CONSOLE_OUT_EPNUM        (RAW_OUT_EPNUM + 2)
+#   define CONSOLE_OUT_EPNUM        (RAW_OUT_EPNUM + 1)
 #else
-#   define CONSOLE_OUT_EPNUM        EXTRAKEY_IN_EPNUM
+#   define CONSOLE_OUT_EPNUM        RAW_OUT_EPNUM
 #endif
 
 #ifdef NKRO_ENABLE
@@ -180,19 +223,34 @@ typedef struct
 #   define MIDI_STREAM_OUT_EPNUM    (NKRO_IN_EPNUM + 2)
 #   define MIDI_STREAM_IN_EPADDR    (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM)
 #   define MIDI_STREAM_OUT_EPADDR   (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM)
+#else
+#   define MIDI_STREAM_OUT_EPNUM     NKRO_IN_EPNUM
 #endif
 
+#ifdef VIRTSER_ENABLE
+#   define CDC_NOTIFICATION_EPNUM   (MIDI_STREAM_OUT_EPNUM + 1)
+#   define CDC_IN_EPNUM                    (MIDI_STREAM_OUT_EPNUM + 2)
+#   define CDC_OUT_EPNUM                   (MIDI_STREAM_OUT_EPNUM + 3)
+#   define CDC_NOTIFICATION_EPADDR        (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM)
+#   define CDC_IN_EPADDR                  (ENDPOINT_DIR_IN | CDC_IN_EPNUM)
+#   define CDC_OUT_EPADDR                  (ENDPOINT_DIR_OUT | CDC_OUT_EPNUM)
+#else
+#   define CDC_OUT_EPNUM       MIDI_STREAM_OUT_EPNUM
+#endif
 
-#if defined(__AVR_ATmega32U2__) && MIDI_STREAM_OUT_EPADDR > 4
-# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI)"
+#if defined(__AVR_ATmega32U2__) && CDC_OUT_EPNUM > 4
+# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL)"
 #endif
 
 #define KEYBOARD_EPSIZE             8
 #define MOUSE_EPSIZE                8
 #define EXTRAKEY_EPSIZE             8
+#define RAW_EPSIZE                     32
 #define CONSOLE_EPSIZE              32
-#define NKRO_EPSIZE                 16
+#define NKRO_EPSIZE                 32
 #define MIDI_STREAM_EPSIZE          64
+#define CDC_NOTIFICATION_EPSIZE     8
+#define CDC_EPSIZE                  16
 
 
 uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
index 9ca55dbc9dc21ed77c175994d9a848d48649f027..dd78fe6213bcec626c26cdf10122bd0fa2f247da 100644 (file)
 
 #include "descriptor.h"
 #include "lufa.h"
+#include "quantum.h"
+#include <util/atomic.h>
+
+#ifdef NKRO_ENABLE
+  #include "keycode_config.h"
+
+  extern keymap_config_t keymap_config;
+#endif
+
 
 #ifdef AUDIO_ENABLE
     #include <audio.h>
 #ifdef BLUETOOTH_ENABLE
     #include "bluetooth.h"
 #endif
+#ifdef ADAFRUIT_BLE_ENABLE
+    #include "adafruit_ble.h"
+#endif
+
+#ifdef VIRTSER_ENABLE
+    #include "virtser.h"
+#endif
+
+#if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE)
+    #include "rgblight.h"
+#endif
+
+#ifdef MIDI_ENABLE
+  #include "sysex_tools.h"
+#endif
+
+#ifdef RAW_ENABLE
+       #include "raw_hid.h"
+#endif
 
 uint8_t keyboard_idle = 0;
 /* 0: Boot Protocol, 1: Report Protocol(default) */
@@ -68,9 +96,9 @@ static uint8_t keyboard_led_stats = 0;
 static report_keyboard_t keyboard_report_sent;
 
 #ifdef MIDI_ENABLE
-void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2);
-void usb_get_midi(MidiDevice * device);
-void midi_usb_init(MidiDevice * device);
+static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2);
+static void usb_get_midi(MidiDevice * device);
+static void midi_usb_init(MidiDevice * device);
 #endif
 
 /* Host driver */
@@ -127,6 +155,108 @@ USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface =
 #define SYS_COMMON_3 0x30
 #endif
 
+#ifdef VIRTSER_ENABLE
+USB_ClassInfo_CDC_Device_t cdc_device =
+{
+  .Config =
+  {
+    .ControlInterfaceNumber = CCI_INTERFACE,
+    .DataINEndpoint         =
+    {
+      .Address         = CDC_IN_EPADDR,
+      .Size            = CDC_EPSIZE,
+      .Banks           = 1,
+    },
+    .DataOUTEndpoint       =
+    {
+      .Address         = CDC_OUT_EPADDR,
+      .Size            = CDC_EPSIZE,
+      .Banks           = 1,
+    },
+    .NotificationEndpoint   =
+    {
+      .Address         = CDC_NOTIFICATION_EPADDR,
+      .Size            = CDC_NOTIFICATION_EPSIZE,
+      .Banks           = 1,
+    },
+  },
+};
+#endif
+
+#ifdef RAW_ENABLE
+
+void raw_hid_send( uint8_t *data, uint8_t length )
+{
+       // TODO: implement variable size packet
+       if ( length != RAW_EPSIZE )
+       {
+               return;
+       }
+
+       if (USB_DeviceState != DEVICE_STATE_Configured)
+       {
+               return;
+       }
+
+       // TODO: decide if we allow calls to raw_hid_send() in the middle
+       // of other endpoint usage.
+       uint8_t ep = Endpoint_GetCurrentEndpoint();
+
+       Endpoint_SelectEndpoint(RAW_IN_EPNUM);
+
+       // Check to see if the host is ready to accept another packet
+       if (Endpoint_IsINReady())
+       {
+               // Write data
+               Endpoint_Write_Stream_LE(data, RAW_EPSIZE, NULL);
+               // Finalize the stream transfer to send the last packet
+               Endpoint_ClearIN();
+       }
+
+       Endpoint_SelectEndpoint(ep);
+}
+
+__attribute__ ((weak))
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+       // Users should #include "raw_hid.h" in their own code
+       // and implement this function there. Leave this as weak linkage
+       // so users can opt to not handle data coming in.
+}
+
+static void raw_hid_task(void)
+{
+       // Create a temporary buffer to hold the read in data from the host
+       uint8_t data[RAW_EPSIZE];
+       bool data_read = false;
+
+       // Device must be connected and configured for the task to run
+       if (USB_DeviceState != DEVICE_STATE_Configured)
+       return;
+
+       Endpoint_SelectEndpoint(RAW_OUT_EPNUM);
+
+       // Check to see if a packet has been sent from the host
+       if (Endpoint_IsOUTReceived())
+       {
+               // Check to see if the packet contains data
+               if (Endpoint_IsReadWriteAllowed())
+               {
+                       /* Read data */
+                       Endpoint_Read_Stream_LE(data, sizeof(data), NULL);
+                       data_read = true;
+               }
+
+               // Finalize the stream transfer to receive the last packet
+               Endpoint_ClearOUT();
+
+               if ( data_read )
+               {
+                       raw_hid_receive( data, sizeof(data) );
+               }
+       }
+}
+#endif
 
 /*******************************************************************************
  * Console
@@ -246,10 +376,14 @@ void EVENT_USB_Device_WakeUp()
 #endif
 }
 
+
+
 #ifdef CONSOLE_ENABLE
 static bool console_flush = false;
 #define CONSOLE_FLUSH_SET(b)   do { \
-    uint8_t sreg = SREG; cli(); console_flush = b; SREG = sreg; \
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {\
+    console_flush = b; \
+  } \
 } while (0)
 
 // called every 1ms
@@ -263,6 +397,7 @@ void EVENT_USB_Device_StartOfFrame(void)
     Console_Task();
     console_flush = false;
 }
+
 #endif
 
 /** Event handler for the USB_ConfigurationChanged event.
@@ -291,6 +426,14 @@ void EVENT_USB_Device_ConfigurationChanged(void)
                                      EXTRAKEY_EPSIZE, ENDPOINT_BANK_SINGLE);
 #endif
 
+#ifdef RAW_ENABLE
+    /* Setup Raw HID Report Endpoints */
+    ConfigSuccess &= ENDPOINT_CONFIG(RAW_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
+                                                                        RAW_EPSIZE, ENDPOINT_BANK_SINGLE);
+    ConfigSuccess &= ENDPOINT_CONFIG(RAW_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
+                                                                        RAW_EPSIZE, ENDPOINT_BANK_SINGLE);
+#endif
+
 #ifdef CONSOLE_ENABLE
     /* Setup Console HID Report Endpoints */
     ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
@@ -311,6 +454,12 @@ void EVENT_USB_Device_ConfigurationChanged(void)
     ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);
     ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);
 #endif
+
+#ifdef VIRTSER_ENABLE
+    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, ENDPOINT_BANK_SINGLE);
+    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_OUT_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE);
+    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_IN_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE);
+#endif
 }
 
 /*
@@ -432,19 +581,50 @@ void EVENT_USB_Device_ControlRequest(void)
 
             break;
     }
+
+#ifdef VIRTSER_ENABLE
+    CDC_Device_ProcessControlRequest(&cdc_device);
+#endif
 }
 
 /*******************************************************************************
  * Host driver
+p
  ******************************************************************************/
 static uint8_t keyboard_leds(void)
 {
     return keyboard_led_stats;
 }
 
+#define SendToUSB 1
+#define SendToBT  2
+#define SendToBLE 4
+
+static inline uint8_t where_to_send(void) {
+#ifdef ADAFRUIT_BLE_ENABLE
+#if 0
+  if (adafruit_ble_is_connected()) {
+    // For testing, send to BLE as a priority
+    return SendToBLE;
+  }
+#endif
+
+  // This is the real policy
+  if (USB_DeviceState != DEVICE_STATE_Configured) {
+    if (adafruit_ble_is_connected()) {
+      return SendToBLE;
+    }
+  }
+#endif
+  return ((USB_DeviceState == DEVICE_STATE_Configured) ? SendToUSB : 0)
+#ifdef BLUETOOTH_ENABLE
+    || SendToBT
+#endif
+    ;
+}
+
 static void send_keyboard(report_keyboard_t *report)
 {
-
 #ifdef BLUETOOTH_ENABLE
     bluefruit_serial_send(0xFD);
     for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
@@ -453,13 +633,21 @@ static void send_keyboard(report_keyboard_t *report)
 #endif
 
     uint8_t timeout = 255;
+    uint8_t where = where_to_send();
 
-    if (USB_DeviceState != DEVICE_STATE_Configured)
-        return;
+#ifdef ADAFRUIT_BLE_ENABLE
+    if (where & SendToBLE) {
+      adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
+    }
+#endif
+
+    if (!(where & SendToUSB)) {
+      return;
+    }
 
     /* Select the Keyboard Report Endpoint */
 #ifdef NKRO_ENABLE
-    if (keyboard_protocol && keyboard_nkro) {
+    if (keyboard_protocol && keymap_config.nkro) {
         /* Report protocol - NKRO */
         Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
 
@@ -508,8 +696,17 @@ static void send_mouse(report_mouse_t *report)
 
     uint8_t timeout = 255;
 
-    if (USB_DeviceState != DEVICE_STATE_Configured)
-        return;
+    uint8_t where = where_to_send();
+
+#ifdef ADAFRUIT_BLE_ENABLE
+    if (where & SendToBLE) {
+      // FIXME: mouse buttons
+      adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
+    }
+#endif
+    if (!(where & SendToUSB)) {
+      return;
+    }
 
     /* Select the Mouse Report Endpoint */
     Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
@@ -567,9 +764,16 @@ static void send_consumer(uint16_t data)
 #endif
 
     uint8_t timeout = 255;
+    uint8_t where = where_to_send();
 
-    if (USB_DeviceState != DEVICE_STATE_Configured)
-        return;
+#ifdef ADAFRUIT_BLE_ENABLE
+    if (where & SendToBLE) {
+      adafruit_ble_send_consumer_key(data, 0);
+    }
+#endif
+    if (!(where & SendToUSB)) {
+      return;
+    }
 
     report_extra_t r = {
         .report_id = REPORT_ID_CONSUMER,
@@ -659,7 +863,7 @@ int8_t sendchar(uint8_t c)
  ******************************************************************************/
 
 #ifdef MIDI_ENABLE
-void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) {
+static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) {
   MIDI_EventPacket_t event;
   event.Data1 = byte0;
   event.Data2 = byte1;
@@ -719,7 +923,7 @@ void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byt
   USB_USBTask();
 }
 
-void usb_get_midi(MidiDevice * device) {
+static void usb_get_midi(MidiDevice * device) {
   MIDI_EventPacket_t event;
   while (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, &event)) {
 
@@ -749,12 +953,12 @@ void usb_get_midi(MidiDevice * device) {
   USB_USBTask();
 }
 
-void midi_usb_init(MidiDevice * device){
+static void midi_usb_init(MidiDevice * device){
   midi_device_init(device);
   midi_device_set_send_func(device, usb_send_func);
   midi_device_set_pre_input_process_func(device, usb_get_midi);
 
-  SetupHardware();
+  // SetupHardware();
   sei();
 }
 
@@ -827,6 +1031,61 @@ void MIDI_Task(void)
 
 #endif
 
+/*******************************************************************************
+ * VIRTUAL SERIAL
+ ******************************************************************************/
+
+#ifdef VIRTSER_ENABLE
+void virtser_init(void)
+{
+  cdc_device.State.ControlLineStates.DeviceToHost = CDC_CONTROL_LINE_IN_DSR ;
+  CDC_Device_SendControlLineStateChange(&cdc_device);
+}
+
+void virtser_recv(uint8_t c) __attribute__ ((weak));
+void virtser_recv(uint8_t c)
+{
+  // Ignore by default
+}
+
+void virtser_task(void)
+{
+  uint16_t count = CDC_Device_BytesReceived(&cdc_device);
+  uint8_t ch;
+  if (count)
+  {
+    ch = CDC_Device_ReceiveByte(&cdc_device);
+    virtser_recv(ch);
+  }
+}
+void virtser_send(const uint8_t byte)
+{
+  uint8_t timeout = 255;
+  uint8_t ep = Endpoint_GetCurrentEndpoint();
+
+  if (cdc_device.State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR)
+  {
+    /* IN packet */
+    Endpoint_SelectEndpoint(cdc_device.Config.DataINEndpoint.Address);
+
+    if (!Endpoint_IsEnabled() || !Endpoint_IsConfigured()) {
+        Endpoint_SelectEndpoint(ep);
+        return;
+    }
+
+    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+
+    Endpoint_Write_8(byte);
+    CDC_Device_Flush(&cdc_device);
+
+    if (Endpoint_IsINReady()) {
+      Endpoint_ClearIN();
+    }
+
+    Endpoint_SelectEndpoint(ep);
+  }
+}
+#endif
 
 /*******************************************************************************
  * main
@@ -918,9 +1177,13 @@ int main(void)
     sleep_led_init();
 #endif
 
+#ifdef VIRTSER_ENABLE
+    virtser_init();
+#endif
+
     print("Keyboard start.\n");
     while (1) {
-        #ifndef BLUETOOTH_ENABLE
+        #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE)
         while (USB_DeviceState == DEVICE_STATE_Suspended) {
             print("[s]");
             suspend_power_down();
@@ -930,15 +1193,34 @@ int main(void)
         }
         #endif
 
+        keyboard_task();
+
 #ifdef MIDI_ENABLE
         midi_device_process(&midi_device);
         // MIDI_Task();
 #endif
-        keyboard_task();
+
+#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE)
+        rgblight_task();
+#endif
+
+#ifdef ADAFRUIT_BLE_ENABLE
+        adafruit_ble_task();
+#endif
+
+#ifdef VIRTSER_ENABLE
+        virtser_task();
+        CDC_Device_USBTask(&cdc_device);
+#endif
+
+#ifdef RAW_ENABLE
+        raw_hid_task();
+#endif
 
 #if !defined(INTERRUPT_CONTROL_ENDPOINT)
         USB_USBTask();
 #endif
+
     }
 }
 
@@ -963,15 +1245,38 @@ void fallthrough_callback(MidiDevice * device,
 #endif
 }
 
+
 void cc_callback(MidiDevice * device,
     uint8_t chan, uint8_t num, uint8_t val) {
   //sending it back on the next channel
-  midi_send_cc(device, (chan + 1) % 16, num, val);
+  // midi_send_cc(device, (chan + 1) % 16, num, val);
 }
 
-void sysex_callback(MidiDevice * device,
-    uint16_t start, uint8_t length, uint8_t * data) {
-  for (int i = 0; i < length; i++)
-    midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i));
+uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0};
+
+void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) {
+    #ifdef API_SYSEX_ENABLE
+        // SEND_STRING("\n");
+        // send_word(start);
+        // SEND_STRING(": ");
+        for (uint8_t place = 0; place < length; place++) {
+            // send_byte(*data);
+            midi_buffer[start + place] = *data;
+            if (*data == 0xF7) {
+                // SEND_STRING("\nRD: ");
+                // for (uint8_t i = 0; i < start + place + 1; i++){
+                //     send_byte(midi_buffer[i]);
+                // SEND_STRING(" ");
+                // }
+                uint8_t * decoded = malloc(sizeof(uint8_t) * (sysex_decoded_length(start + place - 4)));
+                uint16_t decode_length = sysex_decode(decoded, midi_buffer + 4, start + place - 4);
+                process_api(decode_length, decoded);
+            }
+            // SEND_STRING(" ");
+            data++;
+        }
+    #endif
 }
+
+
 #endif
index aad08d6407cfb3400835afee87f62aa393e79c37..b11854101d4e35dc95294106a02f182923724256 100644 (file)
@@ -68,8 +68,17 @@ typedef struct {
 } __attribute__ ((packed)) report_extra_t;
 
 #ifdef MIDI_ENABLE
-void MIDI_Task(void);
-MidiDevice midi_device;
+  void MIDI_Task(void);
+  MidiDevice midi_device;
+  #define MIDI_SYSEX_BUFFER 32 
+#endif
+
+#ifdef API_ENABLE
+  #include "api.h"
+#endif
+
+#ifdef API_SYSEX_ENABLE
+  #include "api_sysex.h"
 #endif
 
 // #if LUFA_VERSION_INTEGER < 0x120730
diff --git a/tmk_core/protocol/lufa/ringbuffer.hpp b/tmk_core/protocol/lufa/ringbuffer.hpp
new file mode 100644 (file)
index 0000000..70a3c48
--- /dev/null
@@ -0,0 +1,66 @@
+#pragma once
+// A simple ringbuffer holding Size elements of type T
+template <typename T, uint8_t Size>
+class RingBuffer {
+ protected:
+  T buf_[Size];
+  uint8_t head_{0}, tail_{0};
+ public:
+  inline uint8_t nextPosition(uint8_t position) {
+    return (position + 1) % Size;
+  }
+
+  inline uint8_t prevPosition(uint8_t position) {
+    if (position == 0) {
+      return Size - 1;
+    }
+    return position - 1;
+  }
+
+  inline bool enqueue(const T &item) {
+    static_assert(Size > 1, "RingBuffer size must be > 1");
+    uint8_t next = nextPosition(head_);
+    if (next == tail_) {
+      // Full
+      return false;
+    }
+
+    buf_[head_] = item;
+    head_ = next;
+    return true;
+  }
+
+  inline bool get(T &dest, bool commit = true) {
+    auto tail = tail_;
+    if (tail == head_) {
+      // No more data
+      return false;
+    }
+
+    dest = buf_[tail];
+    tail = nextPosition(tail);
+
+    if (commit) {
+      tail_ = tail;
+    }
+    return true;
+  }
+
+  inline bool empty() const { return head_ == tail_; }
+
+  inline uint8_t size() const {
+    int diff = head_ - tail_;
+    if (diff >= 0) {
+      return diff;
+    }
+    return Size + diff;
+  }
+
+  inline T& front() {
+    return buf_[tail_];
+  }
+
+  inline bool peek(T &item) {
+    return get(item, false);
+  }
+};
index c85ae42ff24b33e7968bfe0f5c261f27d4fa25ea..4855b23d3017a63670863864cc5bb81690aecff6 100644 (file)
@@ -4,6 +4,7 @@ SRC += midi.c \
           midi_device.c \
           bytequeue/bytequeue.c \
           bytequeue/interrupt_setting.c \
+          sysex_tools.c \
           $(LUFA_SRC_USBCLASS)
 
 VPATH += $(TMK_PATH)/$(MIDI_DIR)
\ No newline at end of file
index fa9404498fccec0a4592fa0f216129f125cce820..a1d74826724a062d1ed58c2ab2086c20f90416fc 100755 (executable)
@@ -1,93 +1,93 @@
-/*\r
-             LUFA Library\r
-     Copyright (C) Dean Camera, 2012.\r
-\r
-  dean [at] fourwalledcubicle [dot] com\r
-           www.lufa-lib.org\r
-*/\r
-\r
-/*\r
-  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
-\r
-  Permission to use, copy, modify, distribute, and sell this\r
-  software and its documentation for any purpose is hereby granted\r
-  without fee, provided that the above copyright notice appear in\r
-  all copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
-  software without specific, written prior permission.\r
-\r
-  The author disclaim all warranties with regard to this\r
-  software, including all implied warranties of merchantability\r
-  and fitness.  In no event shall the author be liable for any\r
-  special, indirect or consequential damages or any damages\r
-  whatsoever resulting from loss of use, data or profits, whether\r
-  in an action of contract, negligence or other tortious action,\r
-  arising out of or in connection with the use or performance of\r
-  this software.\r
-*/\r
-\r
-/** \file\r
- *  \brief LUFA Library Configuration Header File\r
- *\r
- *  This header file is used to configure LUFA's compile time options,\r
- *  as an alternative to the compile time constants supplied through\r
- *  a makefile.\r
- *\r
- *  For information on what each token does, refer to the LUFA\r
- *  manual section "Summary of Compile Tokens".\r
- */\r
-\r
-#ifndef _LUFA_CONFIG_H_\r
-#define _LUFA_CONFIG_H_\r
-\r
-       #if (ARCH == ARCH_AVR8)\r
-\r
-               /* Non-USB Related Configuration Tokens: */\r
-//             #define DISABLE_TERMINAL_CODES\r
-\r
-               /* USB Class Driver Related Tokens: */\r
-//             #define HID_HOST_BOOT_PROTOCOL_ONLY\r
-//             #define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}\r
-//             #define HID_USAGE_STACK_DEPTH            {Insert Value Here}\r
-//             #define HID_MAX_COLLECTIONS              {Insert Value Here}\r
-//             #define HID_MAX_REPORTITEMS              {Insert Value Here}\r
-//             #define HID_MAX_REPORT_IDS               {Insert Value Here}\r
-//             #define NO_CLASS_DRIVER_AUTOFLUSH\r
-\r
-               /* General USB Driver Related Tokens: */\r
-//             #define ORDERED_EP_CONFIG\r
-               #define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)\r
-               #define USB_DEVICE_ONLY\r
-//             #define USB_HOST_ONLY\r
-//             #define USB_STREAM_TIMEOUT_MS            {Insert Value Here}\r
-//             #define NO_LIMITED_CONTROLLER_CONNECT\r
-//             #define NO_SOF_EVENTS\r
-\r
-               /* USB Device Mode Driver Related Tokens: */\r
-//             #define USE_RAM_DESCRIPTORS\r
-               #define USE_FLASH_DESCRIPTORS\r
-//             #define USE_EEPROM_DESCRIPTORS\r
-//             #define NO_INTERNAL_SERIAL\r
-               #define FIXED_CONTROL_ENDPOINT_SIZE      8\r
-//             #define DEVICE_STATE_AS_GPIOR            {Insert Value Here}\r
-               #define FIXED_NUM_CONFIGURATIONS         1\r
-//             #define CONTROL_ONLY_DEVICE\r
-//             #define INTERRUPT_CONTROL_ENDPOINT\r
-//             #define NO_DEVICE_REMOTE_WAKEUP\r
-//             #define NO_DEVICE_SELF_POWER\r
-\r
-               /* USB Host Mode Driver Related Tokens: */\r
-//             #define HOST_STATE_AS_GPIOR              {Insert Value Here}\r
-//             #define USB_HOST_TIMEOUT_MS              {Insert Value Here}\r
-//             #define HOST_DEVICE_SETTLE_DELAY_MS          {Insert Value Here}\r
-//      #define NO_AUTO_VBUS_MANAGEMENT\r
-//      #define INVERTED_VBUS_ENABLE_LINE\r
-\r
-       #else\r
-\r
-               #error Unsupported architecture for this LUFA configuration file.\r
-\r
-       #endif\r
-#endif\r
+/*
+             LUFA Library
+     Copyright (C) Dean Camera, 2012.
+
+  dean [at] fourwalledcubicle [dot] com
+           www.lufa-lib.org
+*/
+
+/*
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+  Permission to use, copy, modify, distribute, and sell this
+  software and its documentation for any purpose is hereby granted
+  without fee, provided that the above copyright notice appear in
+  all copies and that both that the copyright notice and this
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
+  software without specific, written prior permission.
+
+  The author disclaim all warranties with regard to this
+  software, including all implied warranties of merchantability
+  and fitness.  In no event shall the author be liable for any
+  special, indirect or consequential damages or any damages
+  whatsoever resulting from loss of use, data or profits, whether
+  in an action of contract, negligence or other tortious action,
+  arising out of or in connection with the use or performance of
+  this software.
+*/
+
+/** \file
+ *  \brief LUFA Library Configuration Header File
+ *
+ *  This header file is used to configure LUFA's compile time options,
+ *  as an alternative to the compile time constants supplied through
+ *  a makefile.
+ *
+ *  For information on what each token does, refer to the LUFA
+ *  manual section "Summary of Compile Tokens".
+ */
+
+#ifndef _LUFA_CONFIG_H_
+#define _LUFA_CONFIG_H_
+
+       #if (ARCH == ARCH_AVR8)
+
+               /* Non-USB Related Configuration Tokens: */
+//             #define DISABLE_TERMINAL_CODES
+
+               /* USB Class Driver Related Tokens: */
+//             #define HID_HOST_BOOT_PROTOCOL_ONLY
+//             #define HID_STATETABLE_STACK_DEPTH       {Insert Value Here}
+//             #define HID_USAGE_STACK_DEPTH            {Insert Value Here}
+//             #define HID_MAX_COLLECTIONS              {Insert Value Here}
+//             #define HID_MAX_REPORTITEMS              {Insert Value Here}
+//             #define HID_MAX_REPORT_IDS               {Insert Value Here}
+//             #define NO_CLASS_DRIVER_AUTOFLUSH
+
+               /* General USB Driver Related Tokens: */
+//             #define ORDERED_EP_CONFIG
+               #define USE_STATIC_OPTIONS               (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
+               #define USB_DEVICE_ONLY
+//             #define USB_HOST_ONLY
+//             #define USB_STREAM_TIMEOUT_MS            {Insert Value Here}
+//             #define NO_LIMITED_CONTROLLER_CONNECT
+//             #define NO_SOF_EVENTS
+
+               /* USB Device Mode Driver Related Tokens: */
+//             #define USE_RAM_DESCRIPTORS
+               #define USE_FLASH_DESCRIPTORS
+//             #define USE_EEPROM_DESCRIPTORS
+//             #define NO_INTERNAL_SERIAL
+               #define FIXED_CONTROL_ENDPOINT_SIZE      8
+//             #define DEVICE_STATE_AS_GPIOR            {Insert Value Here}
+               #define FIXED_NUM_CONFIGURATIONS         1
+//             #define CONTROL_ONLY_DEVICE
+//             #define INTERRUPT_CONTROL_ENDPOINT
+//             #define NO_DEVICE_REMOTE_WAKEUP
+//             #define NO_DEVICE_SELF_POWER
+
+               /* USB Host Mode Driver Related Tokens: */
+//             #define HOST_STATE_AS_GPIOR              {Insert Value Here}
+//             #define USB_HOST_TIMEOUT_MS              {Insert Value Here}
+//             #define HOST_DEVICE_SETTLE_DELAY_MS          {Insert Value Here}
+//      #define NO_AUTO_VBUS_MANAGEMENT
+//      #define INVERTED_VBUS_ENABLE_LINE
+
+       #else
+
+               #error Unsupported architecture for this LUFA configuration file.
+
+       #endif
+#endif
index 1e6ba8719a2a124ef687e63916bc30dd037df120..09efbe076268beb5b09ca941292049dd348a98c2 100644 (file)
@@ -1,17 +1,17 @@
 /* USB Keyboard Plus Debug Channel Example for Teensy USB Development Board
  * http://www.pjrc.com/teensy/usb_keyboard.html
  * Copyright (c) 2009 PJRC.COM, LLC
- * 
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
  * in the Software without restriction, including without limitation the rights
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  * copies of the Software, and to permit persons to whom the Software is
  * furnished to do so, subject to the following conditions:
- * 
+ *
  * The above copyright notice and this permission notice shall be included in
  * all copies or substantial portions of the Software.
- * 
+ *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 #include "action.h"
 #include "action_util.h"
 
+#ifdef NKRO_ENABLE
+  #include "keycode_config.h"
+
+  extern keymap_config_t keymap_config;
+#endif
+
 
 /**************************************************************************
  *
@@ -694,7 +700,7 @@ ISR(USB_GEN_vect)
                }
                 /* TODO: should keep IDLE rate on each keyboard interface */
 #ifdef NKRO_ENABLE
-               if (!keyboard_nkro && keyboard_idle && (++div4 & 3) == 0) {
+               if (!keymap_config.nkro && keyboard_idle && (++div4 & 3) == 0) {
 #else
                if (keyboard_idle && (++div4 & 3) == 0) {
 #endif
@@ -881,7 +887,7 @@ ISR(USB_COM_vect)
 #endif
                     if (bmRequestType == 0x00 && wValue == DEVICE_REMOTE_WAKEUP) {
                         if (bRequest == SET_FEATURE) {
-                            remote_wakeup = true;   
+                            remote_wakeup = true;
                         } else {
                             remote_wakeup = false;
                         }
@@ -932,7 +938,7 @@ ISR(USB_COM_vect)
                                if (bRequest == HID_SET_PROTOCOL) {
                                        keyboard_protocol = wValue;
 #ifdef NKRO_ENABLE
-                                        keyboard_nkro = !!keyboard_protocol;
+                                        keymap_config.nkro = !!keyboard_protocol;
 #endif
                                         clear_keyboard();
                                        //usb_wait_in_ready();
index 4b87b5d7b5b1644e199d8e56512138f570cdc339..05f4797340df3a63d81bb51d4fafa1fa936aeab1 100644 (file)
 #include "util.h"
 #include "host.h"
 
+#ifdef NKRO_ENABLE
+  #include "keycode_config.h"
+
+  extern keymap_config_t keymap_config;
+#endif
+
 
 // protocol setting from the host.  We use exactly the same report
 // either way, so this variable only stores the setting since we
@@ -56,7 +62,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
     int8_t result = 0;
 
 #ifdef NKRO_ENABLE
-    if (keyboard_nkro)
+    if (keymap_config.nkro)
         result = send_report(report, KBD2_ENDPOINT, 0, KBD2_SIZE);
     else
 #endif
index c3e8b3c1c3354753cc3ce12d902c6978caf8af16..d9ccbecb43a3f7f1848daed5e1093628db51c326 100644 (file)
@@ -18,60 +18,59 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <stdbool.h>
 #include<avr/io.h>
 #include<util/delay.h>
-#include "ps2.h"
 #include "ps2_mouse.h"
-#include "report.h"
 #include "host.h"
 #include "timer.h"
 #include "print.h"
+#include "report.h"
 #include "debug.h"
+#include "ps2.h"
 
+/* ============================= MACROS ============================ */
 
 static report_mouse_t mouse_report = {};
 
+static inline void ps2_mouse_print_report(report_mouse_t *mouse_report);
+static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report);
+static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report);
+static inline void ps2_mouse_enable_scrolling(void);
+static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report);
 
-static void print_usb_data(void);
-
+/* ============================= IMPLEMENTATION ============================ */
 
 /* supports only 3 button mouse at this time */
-uint8_t ps2_mouse_init(void) {
-    uint8_t rcv;
-
+void ps2_mouse_init(void) {
     ps2_host_init();
 
-    _delay_ms(1000);    // wait for powering up
+    _delay_ms(PS2_MOUSE_INIT_DELAY);    // wait for powering up
 
-    // send Reset
-    rcv = ps2_host_send(0xFF);
-    print("ps2_mouse_init: send Reset: ");
-    phex(rcv); phex(ps2_error); print("\n");
+    PS2_MOUSE_SEND(PS2_MOUSE_RESET, "ps2_mouse_init: sending reset");
 
-    // read completion code of BAT
-    rcv = ps2_host_recv_response();
-    print("ps2_mouse_init: read BAT: ");
-    phex(rcv); phex(ps2_error); print("\n");
+    PS2_MOUSE_RECEIVE("ps2_mouse_init: read BAT");
+    PS2_MOUSE_RECEIVE("ps2_mouse_init: read DevID");
 
-    // read Device ID
-    rcv = ps2_host_recv_response();
-    print("ps2_mouse_init: read DevID: ");
-    phex(rcv); phex(ps2_error); print("\n");
+#ifdef PS2_MOUSE_USE_REMOTE_MODE
+    ps2_mouse_set_remote_mode();
+#else
+    ps2_mouse_enable_data_reporting();
+#endif
+
+#ifdef PS2_MOUSE_ENABLE_SCROLLING
+    ps2_mouse_enable_scrolling();
+#endif
 
-    // send Set Remote mode
-    rcv = ps2_host_send(0xF0);
-    print("ps2_mouse_init: send 0xF0: ");
-    phex(rcv); phex(ps2_error); print("\n");
+#ifdef PS2_MOUSE_USE_2_1_SCALING
+    ps2_mouse_set_scaling_2_1();
+#endif
 
-    return 0;
+    ps2_mouse_init_user();
 }
 
-#define X_IS_NEG  (mouse_report.buttons & (1<<PS2_MOUSE_X_SIGN))
-#define Y_IS_NEG  (mouse_report.buttons & (1<<PS2_MOUSE_Y_SIGN))
-#define X_IS_OVF  (mouse_report.buttons & (1<<PS2_MOUSE_X_OVFLW))
-#define Y_IS_OVF  (mouse_report.buttons & (1<<PS2_MOUSE_Y_OVFLW))
-void ps2_mouse_task(void)
-{
-    enum { SCROLL_NONE, SCROLL_BTN, SCROLL_SENT };
-    static uint8_t scroll_state = SCROLL_NONE;
+__attribute__((weak))
+void ps2_mouse_init_user(void) {
+}
+
+void ps2_mouse_task(void) {
     static uint8_t buttons_prev = 0;
 
     /* receives packet from mouse */
@@ -79,142 +78,169 @@ void ps2_mouse_task(void)
     rcv = ps2_host_send(PS2_MOUSE_READ_DATA);
     if (rcv == PS2_ACK) {
         mouse_report.buttons = ps2_host_recv_response();
-        mouse_report.x = ps2_host_recv_response();
-        mouse_report.y = ps2_host_recv_response();
+        mouse_report.x = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER;
+        mouse_report.y = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER;
+#ifdef PS2_MOUSE_ENABLE_SCROLLING
+        mouse_report.v = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER;
+#endif
     } else {
         if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
         return;
     }
-        xprintf("%ud ", timer_read());
-        print("ps2_mouse raw: [");
-        phex(mouse_report.buttons); print("|");
-        print_hex8((uint8_t)mouse_report.x); print(" ");
-        print_hex8((uint8_t)mouse_report.y); print("]\n");
 
     /* if mouse moves or buttons state changes */
-    if (mouse_report.x || mouse_report.y ||
+    if (mouse_report.x || mouse_report.y || mouse_report.v ||
             ((mouse_report.buttons ^ buttons_prev) & PS2_MOUSE_BTN_MASK)) {
-
-#ifdef PS2_MOUSE_DEBUG
-        print("ps2_mouse raw: [");
-        phex(mouse_report.buttons); print("|");
-        print_hex8((uint8_t)mouse_report.x); print(" ");
-        print_hex8((uint8_t)mouse_report.y); print("]\n");
+#ifdef PS2_MOUSE_DEBUG_RAW
+        // Used to debug raw ps2 bytes from mouse
+        ps2_mouse_print_report(&mouse_report);
 #endif
-
         buttons_prev = mouse_report.buttons;
+        ps2_mouse_convert_report_to_hid(&mouse_report);
+#if PS2_MOUSE_SCROLL_BTN_MASK
+        ps2_mouse_scroll_button_task(&mouse_report);
+#endif
+#ifdef PS2_MOUSE_DEBUG_HID
+        // Used to debug the bytes sent to the host
+        ps2_mouse_print_report(&mouse_report);
+#endif
+        host_mouse_send(&mouse_report);
+    }
+    
+    ps2_mouse_clear_report(&mouse_report);
+}
 
-        // PS/2 mouse data is '9-bit integer'(-256 to 255) which is comprised of sign-bit and 8-bit value.
-        // bit: 8    7 ... 0
-        //      sign \8-bit/
-        //
-        // Meanwhile USB HID mouse indicates 8bit data(-127 to 127), note that -128 is not used.
-        //
-        // This converts PS/2 data into HID value. Use only -127-127 out of PS/2 9-bit.
-        mouse_report.x = X_IS_NEG ?
-                          ((!X_IS_OVF && -127 <= mouse_report.x && mouse_report.x <= -1) ?  mouse_report.x : -127) :
-                          ((!X_IS_OVF && 0 <= mouse_report.x && mouse_report.x <= 127) ? mouse_report.x : 127);
-        mouse_report.y = Y_IS_NEG ?
-                          ((!Y_IS_OVF && -127 <= mouse_report.y && mouse_report.y <= -1) ?  mouse_report.y : -127) :
-                          ((!Y_IS_OVF && 0 <= mouse_report.y && mouse_report.y <= 127) ? mouse_report.y : 127);
+void ps2_mouse_disable_data_reporting(void) {
+    PS2_MOUSE_SEND(PS2_MOUSE_DISABLE_DATA_REPORTING, "ps2 mouse disable data reporting"); 
+}
 
-        // remove sign and overflow flags
-        mouse_report.buttons &= PS2_MOUSE_BTN_MASK;
+void ps2_mouse_enable_data_reporting(void) {
+    PS2_MOUSE_SEND(PS2_MOUSE_ENABLE_DATA_REPORTING, "ps2 mouse enable data reporting");
+}
 
-        // invert coordinate of y to conform to USB HID mouse
-        mouse_report.y = -mouse_report.y;
+void ps2_mouse_set_remote_mode(void) { 
+    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_REMOTE_MODE, "ps2 mouse set remote mode"); 
+    ps2_mouse_mode = PS2_MOUSE_REMOTE_MODE;
+}
 
+void ps2_mouse_set_stream_mode(void) { 
+    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_STREAM_MODE, "ps2 mouse set stream mode"); 
+    ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
+}
 
-#if PS2_MOUSE_SCROLL_BTN_MASK
-        static uint16_t scroll_button_time = 0;
-        if ((mouse_report.buttons & (PS2_MOUSE_SCROLL_BTN_MASK)) == (PS2_MOUSE_SCROLL_BTN_MASK)) {
-            if (scroll_state == SCROLL_NONE) {
-                scroll_button_time = timer_read();
-                scroll_state = SCROLL_BTN;
-            }
-
-            // doesn't send Scroll Button
-            //mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);
-
-            if (mouse_report.x || mouse_report.y) {
-                scroll_state = SCROLL_SENT;
-
-                mouse_report.v = -mouse_report.y/(PS2_MOUSE_SCROLL_DIVISOR_V);
-                mouse_report.h =  mouse_report.x/(PS2_MOUSE_SCROLL_DIVISOR_H);
-                mouse_report.x = 0;
-                mouse_report.y = 0;
-                //host_mouse_send(&mouse_report);
-            }
+void ps2_mouse_set_scaling_2_1(void) {
+    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_2_1, "ps2 mouse set scaling 2:1"); 
+}
+
+void ps2_mouse_set_scaling_1_1(void) {
+    PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_1_1, "ps2 mouse set scaling 1:1"); 
+}
+
+void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution) {
+    PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_RESOLUTION, resolution, "ps2 mouse set resolution");
+}
+
+void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate) {
+    PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_SAMPLE_RATE, sample_rate, "ps2 mouse set sample rate");
+}
+
+/* ============================= HELPERS ============================ */
+
+#define X_IS_NEG  (mouse_report->buttons & (1<<PS2_MOUSE_X_SIGN))
+#define Y_IS_NEG  (mouse_report->buttons & (1<<PS2_MOUSE_Y_SIGN))
+#define X_IS_OVF  (mouse_report->buttons & (1<<PS2_MOUSE_X_OVFLW))
+#define Y_IS_OVF  (mouse_report->buttons & (1<<PS2_MOUSE_Y_OVFLW))
+static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report) {
+    // PS/2 mouse data is '9-bit integer'(-256 to 255) which is comprised of sign-bit and 8-bit value.
+    // bit: 8    7 ... 0
+    //      sign \8-bit/
+    //
+    // Meanwhile USB HID mouse indicates 8bit data(-127 to 127), note that -128 is not used.
+    //
+    // This converts PS/2 data into HID value. Use only -127-127 out of PS/2 9-bit.
+    mouse_report->x = X_IS_NEG ?
+        ((!X_IS_OVF && -127 <= mouse_report->x && mouse_report->x <= -1) ?  mouse_report->x : -127) :
+        ((!X_IS_OVF && 0 <= mouse_report->x && mouse_report->x <= 127) ? mouse_report->x : 127);
+    mouse_report->y = Y_IS_NEG ?
+        ((!Y_IS_OVF && -127 <= mouse_report->y && mouse_report->y <= -1) ?  mouse_report->y : -127) :
+        ((!Y_IS_OVF && 0 <= mouse_report->y && mouse_report->y <= 127) ? mouse_report->y : 127);
+
+    // remove sign and overflow flags
+    mouse_report->buttons &= PS2_MOUSE_BTN_MASK;
+
+    // invert coordinate of y to conform to USB HID mouse
+    mouse_report->y = -mouse_report->y;
+}
+
+static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report) {
+    mouse_report->x = 0;
+    mouse_report->y = 0;
+    mouse_report->v = 0;
+    mouse_report->h = 0;
+    mouse_report->buttons = 0;
+}
+
+static inline void ps2_mouse_print_report(report_mouse_t *mouse_report) {
+    if (!debug_mouse) return;
+    print("ps2_mouse: [");
+    phex(mouse_report->buttons); print("|");
+    print_hex8((uint8_t)mouse_report->x); print(" ");
+    print_hex8((uint8_t)mouse_report->y); print(" ");
+    print_hex8((uint8_t)mouse_report->v); print(" ");
+    print_hex8((uint8_t)mouse_report->h); print("]\n");
+}
+
+static inline void ps2_mouse_enable_scrolling(void) {
+    PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Initiaing scroll wheel enable: Set sample rate");
+    PS2_MOUSE_SEND(200, "200");
+    PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate");
+    PS2_MOUSE_SEND(100, "100");
+    PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate");
+    PS2_MOUSE_SEND(80, "80");
+    PS2_MOUSE_SEND(PS2_MOUSE_GET_DEVICE_ID, "Finished enabling scroll wheel");
+    _delay_ms(20);
+}
+
+#define PRESS_SCROLL_BUTTONS    mouse_report->buttons |= (PS2_MOUSE_SCROLL_BTN_MASK)
+#define RELEASE_SCROLL_BUTTONS  mouse_report->buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK)
+static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) {
+    static enum { 
+        SCROLL_NONE, 
+        SCROLL_BTN, 
+        SCROLL_SENT,
+    } scroll_state = SCROLL_NONE;
+    static uint16_t scroll_button_time = 0;
+
+    if (PS2_MOUSE_SCROLL_BTN_MASK == (mouse_report->buttons & (PS2_MOUSE_SCROLL_BTN_MASK))) {
+        // All scroll buttons are pressed
+
+        if (scroll_state == SCROLL_NONE) {
+            scroll_button_time = timer_read();
+            scroll_state = SCROLL_BTN;
         }
-        else if ((mouse_report.buttons & (PS2_MOUSE_SCROLL_BTN_MASK)) == 0) {
+
+        // If the mouse has moved, update the report to scroll instead of move the mouse
+        if (mouse_report->x || mouse_report->y) {
+            scroll_state = SCROLL_SENT;
+            mouse_report->v = -mouse_report->y/(PS2_MOUSE_SCROLL_DIVISOR_V);
+            mouse_report->h =  mouse_report->x/(PS2_MOUSE_SCROLL_DIVISOR_H);
+            mouse_report->x = 0;
+            mouse_report->y = 0;
+        }
+    } else if (0 == (PS2_MOUSE_SCROLL_BTN_MASK & mouse_report->buttons)) {
+        // None of the scroll buttons are pressed 
+
 #if PS2_MOUSE_SCROLL_BTN_SEND
-            if (scroll_state == SCROLL_BTN &&
-                    TIMER_DIFF_16(timer_read(), scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) {
-                // send Scroll Button(down and up at once) when not scrolled
-                mouse_report.buttons |= (PS2_MOUSE_SCROLL_BTN_MASK);
-                host_mouse_send(&mouse_report);
-                _delay_ms(100);
-                mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);
-            }
-#endif
-            scroll_state = SCROLL_NONE;
+        if (scroll_state == SCROLL_BTN 
+                && timer_elapsed(scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) {
+            PRESS_SCROLL_BUTTONS;
+            host_mouse_send(mouse_report);
+            _delay_ms(100);
+            RELEASE_SCROLL_BUTTONS;
         }
-        // doesn't send Scroll Button
-        mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);
 #endif
-
-
-        host_mouse_send(&mouse_report);
-        print_usb_data();
+        scroll_state = SCROLL_NONE;
     }
-    // clear report
-    mouse_report.x = 0;
-    mouse_report.y = 0;
-    mouse_report.v = 0;
-    mouse_report.h = 0;
-    mouse_report.buttons = 0;
-}
 
-static void print_usb_data(void)
-{
-    if (!debug_mouse) return;
-    print("ps2_mouse usb: [");
-    phex(mouse_report.buttons); print("|");
-    print_hex8((uint8_t)mouse_report.x); print(" ");
-    print_hex8((uint8_t)mouse_report.y); print(" ");
-    print_hex8((uint8_t)mouse_report.v); print(" ");
-    print_hex8((uint8_t)mouse_report.h); print("]\n");
-}
-
-
-/* PS/2 Mouse Synopsis
- * http://www.computer-engineering.org/ps2mouse/
- *
- * Command:
- * 0xFF: Reset
- * 0xF6: Set Defaults Sampling; rate=100, resolution=4cnt/mm, scaling=1:1, reporting=disabled
- * 0xF5: Disable Data Reporting
- * 0xF4: Enable Data Reporting
- * 0xF3: Set Sample Rate
- * 0xF2: Get Device ID
- * 0xF0: Set Remote Mode
- * 0xEB: Read Data
- * 0xEA: Set Stream Mode
- * 0xE9: Status Request
- * 0xE8: Set Resolution
- * 0xE7: Set Scaling 2:1
- * 0xE6: Set Scaling 1:1
- *
- * Mode:
- * Stream Mode: devices sends the data when it changs its state
- * Remote Mode: host polls the data periodically
- *
- * This code uses Remote Mode and polls the data with Read Data(0xEB).
- *
- * Data format:
- * byte|7       6       5       4       3       2       1       0
- * ----+--------------------------------------------------------------
- *    0|Yovflw  Xovflw  Ysign   Xsign   1       Middle  Right   Left
- *    1|                    X movement
- *    2|                    Y movement
- */
+    RELEASE_SCROLL_BUTTONS;
+}
index 27d9790d43f551053c76a74f371a7faa916f74e2..3c93a46342918735b34f4cb2728790dd05e60c01 100644 (file)
@@ -19,16 +19,61 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define  PS2_MOUSE_H
 
 #include <stdbool.h>
+#include "debug.h"
 
-#define PS2_MOUSE_READ_DATA     0xEB
+#define PS2_MOUSE_SEND(command, message) \
+do { \
+   uint8_t rcv = ps2_host_send(command); \
+   if (debug_mouse) { \
+        print((message)); \
+        xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \
+    } \
+} while(0)
+
+#define PS2_MOUSE_SEND_SAFE(command, message) \
+do { \
+    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+        ps2_mouse_disable_data_reporting(); \
+    } \
+    PS2_MOUSE_SEND(command, message); \
+    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+        ps2_mouse_enable_data_reporting(); \
+    } \
+} while(0)
+
+#define PS2_MOUSE_SET_SAFE(command, value, message) \
+do { \
+    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+        ps2_mouse_disable_data_reporting(); \
+    } \
+    PS2_MOUSE_SEND(command, message); \
+    PS2_MOUSE_SEND(value, "Sending value"); \
+    if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+        ps2_mouse_enable_data_reporting(); \
+    } \
+} while(0)
+
+#define PS2_MOUSE_RECEIVE(message) \
+do { \
+   uint8_t rcv = ps2_host_recv_response(); \
+   if (debug_mouse) { \
+        print((message)); \
+        xprintf(" result: %X, error: %X \n", rcv, ps2_error); \
+    } \
+} while(0)
+
+static enum ps2_mouse_mode_e {
+    PS2_MOUSE_STREAM_MODE,
+    PS2_MOUSE_REMOTE_MODE,
+} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
 
 /*
  * Data format:
  * byte|7       6       5       4       3       2       1       0
- * ----+--------------------------------------------------------------
- *    0|Yovflw  Xovflw  Ysign   Xsign   1       Middle  Right   Left
- *    1|                    X movement(0-255)
- *    2|                    Y movement(0-255)
+ * ----+----------------------------------------------------------------
+ *    0|[Yovflw][Xovflw][Ysign ][Xsign ][ 1    ][Middle][Right ][Left  ]
+ *    1|[                    X movement(0-255)                         ]
+ *    2|[                    Y movement(0-255)                         ]
  */
 #define PS2_MOUSE_BTN_MASK      0x07
 #define PS2_MOUSE_BTN_LEFT      0
@@ -39,10 +84,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PS2_MOUSE_X_OVFLW       6
 #define PS2_MOUSE_Y_OVFLW       7
 
-
-/*
- * Scroll by mouse move with pressing button
- */
 /* mouse button to start scrolling; set 0 to disable scroll */
 #ifndef PS2_MOUSE_SCROLL_BTN_MASK
 #define PS2_MOUSE_SCROLL_BTN_MASK       (1<<PS2_MOUSE_BTN_MIDDLE)
@@ -58,9 +99,79 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #ifndef PS2_MOUSE_SCROLL_DIVISOR_H
 #define PS2_MOUSE_SCROLL_DIVISOR_H      2
 #endif
+/* multiply reported mouse values by these */
+#ifndef PS2_MOUSE_X_MULTIPLIER
+#define PS2_MOUSE_X_MULTIPLIER          1
+#endif
+#ifndef PS2_MOUSE_Y_MULTIPLIER
+#define PS2_MOUSE_Y_MULTIPLIER          1
+#endif
+#ifndef PS2_MOUSE_V_MULTIPLIER
+#define PS2_MOUSE_V_MULTIPLIER          1
+#endif
+/* For some mice this will need to be 0x0F */
+#ifndef PS2_MOUSE_SCROLL_MASK       
+#define PS2_MOUSE_SCROLL_MASK           0xFF 
+#endif
+#ifndef PS2_MOUSE_INIT_DELAY
+#define PS2_MOUSE_INIT_DELAY            1000
+#endif
 
+enum ps2_mouse_command_e {
+    PS2_MOUSE_RESET = 0xFF,
+    PS2_MOUSE_RESEND = 0xFE,
+    PS2_MOSUE_SET_DEFAULTS = 0xF6,
+    PS2_MOUSE_DISABLE_DATA_REPORTING = 0xF5,
+    PS2_MOUSE_ENABLE_DATA_REPORTING = 0xF4,
+    PS2_MOUSE_SET_SAMPLE_RATE = 0xF3,
+    PS2_MOUSE_GET_DEVICE_ID = 0xF2,
+    PS2_MOUSE_SET_REMOTE_MODE = 0xF0,
+    PS2_MOUSE_SET_WRAP_MODE = 0xEC,
+    PS2_MOUSE_READ_DATA = 0xEB,
+    PS2_MOUSE_SET_STREAM_MODE = 0xEA,
+    PS2_MOUSE_STATUS_REQUEST = 0xE9,
+    PS2_MOUSE_SET_RESOLUTION = 0xE8,
+    PS2_MOUSE_SET_SCALING_2_1 = 0xE7,
+    PS2_MOUSE_SET_SCALING_1_1 = 0xE6,
+};
+
+typedef enum ps2_mouse_resolution_e {
+    PS2_MOUSE_1_COUNT_MM,
+    PS2_MOUSE_2_COUNT_MM,
+    PS2_MOUSE_4_COUNT_MM,
+    PS2_MOUSE_8_COUNT_MM,   
+} ps2_mouse_resolution_t;
+
+typedef enum ps2_mouse_sample_rate_e {
+    PS2_MOUSE_10_SAMPLES_SEC = 10,
+    PS2_MOUSE_20_SAMPLES_SEC = 20,
+    PS2_MOUSE_40_SAMPLES_SEC = 40,
+    PS2_MOUSE_60_SAMPLES_SEC = 60,
+    PS2_MOUSE_80_SAMPLES_SEC = 80,
+    PS2_MOUSE_100_SAMPLES_SEC = 100,
+    PS2_MOUSE_200_SAMPLES_SEC = 200,
+} ps2_mouse_sample_rate_t;
+
+void ps2_mouse_init(void);
+
+void ps2_mouse_init_user(void);
 
-uint8_t ps2_mouse_init(void);
 void ps2_mouse_task(void);
 
+void ps2_mouse_disable_data_reporting(void);
+
+void ps2_mouse_enable_data_reporting(void);
+
+void ps2_mouse_set_remote_mode(void);
+
+void ps2_mouse_set_stream_mode(void);
+
+void ps2_mouse_set_scaling_2_1(void);
+
+void ps2_mouse_set_scaling_1_1(void);
+
+void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution);
+
+void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate);
+
 #endif
index f460d0ed44aaf7079b2ae47273fe9f36f09c8b43..5f135617c42fdee59d0e41ebeb61162570d004d9 100644 (file)
@@ -23,7 +23,7 @@ These features can be used in your keyboard.
 * Mouse key           - Mouse control with keyboard
 * System Control Key  - Power Down, Sleep, Wake Up and USB Remote Wake up
 * Media Control Key   - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc
-* USB NKRO            - 120 keys(+ 8 modifiers) simultaneously
+* USB NKRO            - 248 keys(+ 8 modifiers) simultaneously
 * PS/2 mouse support  - PS/2 mouse(TrackPoint) as composite device
 * Keyboard protocols  - PS/2, ADB, M0110, Sun and other old keyboard protocols
 * User Function       - Customizable function of key with writing code
index 7bdebbcf34f6bc0854a329e275d6f7e2cf58f3e0..005d1be61334496a405b087c2daffe332cc39b7f 100644 (file)
@@ -4,13 +4,13 @@
  * Ring buffer to store scan codes from keyboard
  *------------------------------------------------------------------*/
 #define RBUF_SIZE 32
+#include <util/atomic.h>
 static uint8_t rbuf[RBUF_SIZE];
 static uint8_t rbuf_head = 0;
 static uint8_t rbuf_tail = 0;
 static inline void rbuf_enqueue(uint8_t data)
 {
-    uint8_t sreg = SREG;
-    cli();
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
     uint8_t next = (rbuf_head + 1) % RBUF_SIZE;
     if (next != rbuf_tail) {
         rbuf[rbuf_head] = data;
@@ -18,36 +18,34 @@ static inline void rbuf_enqueue(uint8_t data)
     } else {
         print("rbuf: full\n");
     }
-    SREG = sreg;
+  }
 }
 static inline uint8_t rbuf_dequeue(void)
 {
     uint8_t val = 0;
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
 
-    uint8_t sreg = SREG;
-    cli();
     if (rbuf_head != rbuf_tail) {
         val = rbuf[rbuf_tail];
         rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE;
     }
-    SREG = sreg;
+  }
 
     return val;
 }
 static inline bool rbuf_has_data(void)
 {
-    uint8_t sreg = SREG;
-    cli();
-    bool has_data = (rbuf_head != rbuf_tail);
-    SREG = sreg;
-    return has_data;
+  bool has_data;
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+    has_data = (rbuf_head != rbuf_tail);
+  }
+  return has_data;
 }
 static inline void rbuf_clear(void)
 {
-    uint8_t sreg = SREG;
-    cli();
+  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
     rbuf_head = rbuf_tail = 0;
-    SREG = sreg;
+  }
 }
 
 #endif  /* RING_BUFFER_H */
index f13351ea19b042696220ebe64a6d3dd30afb3200..e4c8aecb2cfa5a89213c324d44d1476f6503c3fe 100644 (file)
 # Carlos Lamas
 #
 
+# Enable vpath seraching for source files only
+# Without this, output files, could be read from the wrong .build directories
+VPATH_SRC := $(VPATH)
+vpath %.c $(VPATH_SRC)
+vpath %.h $(VPATH_SRC)
+vpath %.cpp $(VPATH_SRC)
+vpath %.cc $(VPATH_SRC)
+vpath %.hpp $(VPATH_SRC)
+vpath %.S $(VPATH_SRC)
+VPATH :=
+
+# Convert all SRC to OBJ
+define OBJ_FROM_SRC
+$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))))
+endef
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
+
+# Define a list of all objects
+OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
+
+MASTER_OUTPUT := $(firstword $(OUTPUTS))
+
+
 
 # Output format. (can be srec, ihex, binary)
 FORMAT = ihex
@@ -24,55 +47,8 @@ FORMAT = ihex
 #     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
 OPT = s
 
-COLOR ?= true
-
-ifeq ($(COLOR),true)
-       NO_COLOR=\033[0m
-       OK_COLOR=\033[32;01m
-       ERROR_COLOR=\033[31;01m
-       WARN_COLOR=\033[33;01m
-       BLUE=\033[0;34m
-       BOLD=\033[1m
-endif
-
-ifdef quick
-       QUICK = $(quick)
-endif
-
-QUICK ?= false
 AUTOGEN ?= false
 
-ifneq ($(shell awk --version 2>/dev/null),)
-       AWK=awk
-else
-       AWK=cat && test
-endif
-
-OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
-ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
-WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
-
-ifndef $(SILENT)
-       SILENT = false
-endif
-
-TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
-TAB_LOG_PLAIN = printf "$$LOG\n"
-AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
-AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
-PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false
-PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG)
-PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false && break
-PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
-PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
-BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
-
-# List any extra directories to look for include files here.
-#     Each directory must be seperated by a space.
-#     Use forward slashes for directory separators.
-#     For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS += $(subst :, ,$(VPATH))
-
 
 # Compiler flag to set the C Standard level.
 #     c89   = "ANSI" C
@@ -83,17 +59,18 @@ CSTANDARD = -std=gnu99
 
 
 # Place -D or -U options here for C sources
-CDEFS += $(OPT_DEFS)
+#CDEFS +=
 
 
 # Place -D or -U options here for ASM sources
-ADEFS += $(OPT_DEFS)
+#ADEFS +=
 
 
 # Place -D or -U options here for C++ sources
 #CPPDEFS += -D__STDC_LIMIT_MACROS
 #CPPDEFS += -D__STDC_CONSTANT_MACROS
-CPPDEFS += $(OPT_DEFS)
+#CPPDEFS +=
+
 
 
 
@@ -121,11 +98,7 @@ CFLAGS += -Wstrict-prototypes
 #CFLAGS += -Wunreachable-code
 #CFLAGS += -Wsign-compare
 CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 CFLAGS += $(CSTANDARD)
-ifdef CONFIG_H
-    CFLAGS += -include $(CONFIG_H)
-endif
 
 
 #---------------- Compiler Options C++ ----------------
@@ -148,12 +121,7 @@ CPPFLAGS += -Wundef
 #CPPFLAGS += -Wunreachable-code
 #CPPFLAGS += -Wsign-compare
 CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
 #CPPFLAGS += $(CSTANDARD)
-ifdef CONFIG_H
-    CPPFLAGS += -include $(CONFIG_H)
-endif
-
 
 #---------------- Assembler Options ----------------
 #  -Wa,...:   tell GCC to pass this to the assembler.
@@ -164,11 +132,8 @@ endif
 #             files -- see avr-libc docs [FIXME: not yet described there]
 #  -listing-cont-lines: Sets the maximum number of continuation lines of hex
 #       dump that will be displayed for a given single line of source input.
-ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
-ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-ifdef CONFIG_H
-    ASFLAGS += -include $(CONFIG_H)
-endif
+ASFLAGS += $(ADEFS) 
+ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
 
 #---------------- Library Options ----------------
 # Minimalistic printf version
@@ -196,6 +161,7 @@ SCANF_LIB =
 
 
 MATH_LIB = -lm
+CREATE_MAP ?= yes
 
 
 #---------------- Linker Options ----------------
@@ -206,7 +172,10 @@ MATH_LIB = -lm
 # Comennt out "--relax" option to avoid a error such:
 #      (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
 #
-LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+
+ifeq ($(CREATE_MAP),yes)
+       LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+endif
 #LDFLAGS += -Wl,--relax
 LDFLAGS += $(EXTMEMOPTS)
 LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
@@ -223,63 +192,20 @@ COPY = cp
 WINSHELL = cmd
 SECHO = $(SILENT) || echo
 
-# Define Messages
-# English
-MSG_ERRORS_NONE = Errors: none
-MSG_BEGIN = -------- begin --------
-MSG_END = --------  end  --------
-MSG_SIZE_BEFORE = Size before:
-MSG_SIZE_AFTER = Size after:
-MSG_COFF = Converting to AVR COFF:
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
-MSG_FLASH = Creating load file for Flash:
-MSG_EEPROM = Creating load file for EEPROM:
-MSG_BIN = Creating binary load file for Flash:
-MSG_EXTENDED_LISTING = Creating Extended Listing:
-MSG_SYMBOL_TABLE = Creating Symbol Table:
-MSG_LINKING = Linking:
-MSG_COMPILING = Compiling:
-MSG_COMPILING_CPP = Compiling:
-MSG_ASSEMBLING = Assembling:
-MSG_CLEANING = Cleaning project:
-MSG_CREATING_LIBRARY = Creating library:
-MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
-       Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
-       git submodule sync --recursive\n\
-       git submodule update --init --recursive$(NO_COLOR)\n\n\
-       You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
-       or if you have modified the ChibiOS libraries yourself. \n\n
-
-
-# Define all object files.
-OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC))))
-
-# Define all listing files.
-LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC))))
-
 
 # Compiler flags to generate dependency files.
 #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
-GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d
+GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
 
 
 # Combine all necessary flags and optional flags.
 # Add target processor to flags.
 # You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
-ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
-ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
+ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS)
+ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS)
 ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
 
-# Default target.
-all: build sizeafter
-
-# Quick make that doesn't clean
-quick: build sizeafter
-
-# Change the build target to build a HEX file or a library.
-build: elf hex
-#build: elf hex eep lss sym
-#build: lib
+MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
 
 
 elf: $(BUILD_DIR)/$(TARGET).elf
@@ -290,15 +216,6 @@ sym: $(BUILD_DIR)/$(TARGET).sym
 LIBNAME=lib$(TARGET).a
 lib: $(LIBNAME)
 
-check_submodule:
-       git submodule status --recursive | \
-       while IFS= read -r x; do \
-               case "$$x" in \
-                       \ *) ;; \
-                       *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
-               esac \
-       done
-
 # Display size of file.
 HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
 #ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
@@ -352,150 +269,114 @@ gccversion :
        $(eval CMD=$(BIN) $< $@ || exit 0)
        @$(BUILD_CMD)
 
-# Create library from object files.
-.SECONDARY : $(BUILD_DIR)/$(TARGET).a
-.PRECIOUS : $(OBJ)
-%.a: $(OBJ)
-       @$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD)
-       $(eval CMD=$(AR) $@ $(OBJ) )
-       @$(BUILD_CMD)
-
-BEGIN = gccversion check_submodule sizebefore
+BEGIN = gccversion sizebefore
 
 # Link: create ELF output file from object files.
 .SECONDARY : $(BUILD_DIR)/$(TARGET).elf
 .PRECIOUS : $(OBJ)
-%.elf: $(OBJ) | $(BEGIN)
+# Note the obj.txt depeendency is there to force linking if a source file is deleted
+%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
        @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
-       $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS))
+       $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
        @$(BUILD_CMD)
+       
+
+define GEN_OBJRULE
+$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC))
+ifdef $1_CONFIG
+$1_CONFIG_FLAGS += -include $$($1_CONFIG)
+endif
+$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
 
 # Compile: create object files from C source files.
-$(OBJDIR)/%.o : %.c | $(BEGIN)
-       @mkdir -p $(@D)
-       @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD)
-       $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@)
-       @$(BUILD_CMD)
+$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
+       @mkdir -p $$(@D)
+       @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
+       $$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+       @$$(BUILD_CMD)
 
 # Compile: create object files from C++ source files.
-$(OBJDIR)/%.o : %.cpp | $(BEGIN)
-       @mkdir -p $(@D)
-       @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD)
-       $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@)
-       @$(BUILD_CMD)
+$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
+       @mkdir -p $$(@D)
+       @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
+       $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+       @$$(BUILD_CMD)
+
+$1/%.o : %.cc $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
+       @mkdir -p $$(@D)
+       @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
+       $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+       @$$(BUILD_CMD)
 
-# Compile: create assembler files from C source files.
-%.s : %.c | $(BEGIN)
-       @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
-       $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@)
-       @$(BUILD_CMD)
+# Assemble: create object files from assembler source files.
+$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
+       @mkdir -p $$(@D)
+       @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
+       $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
+       @$$(BUILD_CMD)
 
-# Compile: create assembler files from C++ source files.
-%.s : %.cpp | $(BEGIN)
-       @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
-       $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@)
-       @$(BUILD_CMD)
+$1/force:
 
-# Assemble: create object files from assembler source files.
-$(OBJDIR)/%.o : %.S | $(BEGIN)
-       @mkdir -p $(@D)
-       @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
-       $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@)
-       @$(BUILD_CMD)
+$1/cflags.txt: $1/force
+       echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
+
+$1/cppflags.txt: $1/force
+       echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@
+
+$1/asflags.txt: $1/force
+       echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
+
+$1/compiler.txt: $1/force
+       $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
+endef
+
+.PRECIOUS: $(MASTER_OUTPUT)/obj.txt
+$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
+       echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@
+
+.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt
+$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
+       echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@
+
+
+# We have to use static rules for the .d files for some reason
+DEPS = $(patsubst %.o,%.d,$(OBJ))
+# Keep the .d files
+.PRECIOUS: $(DEPS)
+# Empty rule to force recompilation if the .d file is missing
+$(DEPS):
+       
+
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
 
 # Create preprocessed source for use in sending a bug report.
 %.i : %.c | $(BEGIN)
        $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
 
 # Target: clean project.
-clean: 
+clean:
+       $(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null)
+       $(REMOVE) $(BUILD_DIR)/$(TARGET).*
 
 show_path:
        @echo VPATH=$(VPATH)
        @echo SRC=$(SRC)
-
-SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile)))
-SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))
-SUBDIRS := $(sort $(SUBDIRS))
-# $(error $(SUBDIRS))
-all-keyboards-defaults-%:
-       @for x in $(SUBDIRS) ; do \
-               printf "Compiling with default: $$x" | $(AWK_CMD); \
-               LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-       done
-
-all-keyboards-defaults: all-keyboards-defaults-all
-
-KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%)
-all-keyboards-all: $(addsuffix -all,$(KEYBOARDS))
-all-keyboards-quick: $(addsuffix -quick,$(KEYBOARDS))
-all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS))
-all-keyboards: all-keyboards-all
-
-define make_keyboard
-$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1))
-$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD))))
-$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD))))
-$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.))))
-$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.))))
-@for x in $(KEYMAPS) ; do \
-       printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \
-       LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-done
-endef
-
-define make_keyboard_helper
-# Just remove the -quick, -all and so on from the first argument and pass it forward
-$(call make_keyboard,$(subst -$2,,$1),$2)
-endef
-
-/keyboards/%-quick:
-       $(call make_keyboard_helper,$@,quick)
-/keyboards/%-all:
-       $(call make_keyboard_helper,$@,all)
-/keyboards/%-clean:
-       $(call make_keyboard_helper,$@,clean)
-/keyboards/%:
-       $(call make_keyboard_helper,$@,all)
-
-all-keymaps-%:
-       $(eval MAKECONFIG=$(call get_target,all-keymaps,$@))
-       $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.))))
-       @for x in $(KEYMAPS) ; do \
-               printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \
-               LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-       done
-
-all-keymaps: all-keymaps-all
-
-GOAL=$(MAKECMDGOALS)
-ifeq ($(MAKECMDGOALS),)
-GOAL = all
-endif
-CLEANING_GOALS=clean clean_list all
-ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),)
-$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null)
-$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR))
-$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR))
-$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi)
-$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR))
-endif
+       @echo OBJ=$(OBJ)
 
 # Create build directory
-$(shell mkdir $(BUILD_DIR) 2>/dev/null)
+$(shell mkdir -p $(BUILD_DIR) 2>/dev/null)
 
 # Create object files directory
-$(shell mkdir $(OBJDIR) 2>/dev/null)
-
+$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
 
 # Include the dependency files.
--include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*)
+-include $(patsubst %.o,%.d,$(OBJ))
 
 
 # Listing of phony targets.
-.PHONY : all quick finish sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff check_submodule \
+.PHONY : all finish sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
 clean clean_list debug gdb-config show_path \
-program teensy dfu flip dfu-ee flip-ee dfu-start \
-all-keyboards-defaults all-keyboards all-keymaps \
-all-keyboards-defaults-% all-keyboards-% all-keymaps-%
+program teensy dfu flip dfu-ee flip-ee dfu-start 
\ No newline at end of file
index d8865762143d2e8a1f369e6ed0e367025e946667..c6eb2405c982a07c200edefcbda68410b662481e 100644 (file)
@@ -3,114 +3,114 @@ index 51a79bb..42d07bd 100644
 --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
 +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
 @@ -105,6 +105,13 @@
- #define CRT0_CALL_DESTRUCTORS               TRUE\r
- #endif\r
\r
-+/**\r
-+ * @brief   Magic number for jumping to bootloader.\r
-+ */\r
-+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)\r
-+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF\r
-+#endif\r
-+\r
- /*===========================================================================*/\r
- /* Code section.                                                             */\r
- /*===========================================================================*/\r
+ #define CRT0_CALL_DESTRUCTORS               TRUE
+ #endif
++/**
++ * @brief   Magic number for jumping to bootloader.
++ */
++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
++#endif
++
+ /*===========================================================================*/
+ /* Code section.                                                             */
+ /*===========================================================================*/
 @@ -124,6 +131,17 @@
-                 .thumb_func\r
-                 .global Reset_Handler\r
- Reset_Handler:\r
-+\r
-+#ifdef STM32_BOOTLOADER_ADDRESS\r
-+                /* jump to bootloader code */\r
-+                ldr        r0, =__ram0_end__-4\r
-+                ldr        r1, =MAGIC_BOOTLOADER_NUMBER\r
-+                ldr        r2, [r0, #0]\r
-+                str        r0, [r0, #0] /* erase stored magic */\r
-+                cmp        r2, r1\r
-+                beq        Bootloader_Jump\r
-+#endif /* STM32_BOOTLOADER_ADDRESS */\r
-+\r
-                 /* Interrupts are globally masked initially.*/\r
-                 cpsid   i\r
\r
+                 .thumb_func
+                 .global Reset_Handler
+ Reset_Handler:
++
++#ifdef STM32_BOOTLOADER_ADDRESS
++                /* jump to bootloader code */
++                ldr        r0, =__ram0_end__-4
++                ldr        r1, =MAGIC_BOOTLOADER_NUMBER
++                ldr        r2, [r0, #0]
++                str        r0, [r0, #0] /* erase stored magic */
++                cmp        r2, r1
++                beq        Bootloader_Jump
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+                 /* Interrupts are globally masked initially.*/
+                 cpsid   i
 @@ -242,6 +260,21 @@ endfiniloop:
-                 ldr     r1, =__default_exit\r
-                 bx      r1\r
\r
-+#ifdef STM32_BOOTLOADER_ADDRESS\r
-+/*\r
-+ * Jump-to-bootloader function.\r
-+ */\r
-+\r
-+                .align  2\r
-+                .thumb_func\r
-+Bootloader_Jump:\r
-+                ldr     r0, =STM32_BOOTLOADER_ADDRESS\r
-+                ldr     r1, [r0, #0]\r
-+                mov     sp, r1\r
-+                ldr     r0, [r0, #4]\r
-+                bx      r0\r
-+#endif /* STM32_BOOTLOADER_ADDRESS */\r
-+\r
- #endif\r
\r
- /** @} */\r
+                 ldr     r1, =__default_exit
+                 bx      r1
++#ifdef STM32_BOOTLOADER_ADDRESS
++/*
++ * Jump-to-bootloader function.
++ */
++
++                .align  2
++                .thumb_func
++Bootloader_Jump:
++                ldr     r0, =STM32_BOOTLOADER_ADDRESS
++                ldr     r1, [r0, #0]
++                mov     sp, r1
++                ldr     r0, [r0, #4]
++                bx      r0
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+ #endif
+ /** @} */
 diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
 index 4812a29..dca9f88 100644
 --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
 +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
 @@ -140,6 +140,13 @@
- #define CRT0_CPACR_INIT                     0x00F00000\r
- #endif\r
\r
-+/**\r
-+ * @brief   Magic number for jumping to bootloader.\r
-+ */\r
-+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)\r
-+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF\r
-+#endif\r
-+\r
- /*===========================================================================*/\r
- /* Code section.                                                             */\r
- /*===========================================================================*/\r
+ #define CRT0_CPACR_INIT                     0x00F00000
+ #endif
++/**
++ * @brief   Magic number for jumping to bootloader.
++ */
++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
++#endif
++
+ /*===========================================================================*/
+ /* Code section.                                                             */
+ /*===========================================================================*/
 @@ -164,6 +171,17 @@
-                 .thumb_func\r
-                 .global Reset_Handler\r
- Reset_Handler:\r
-+\r
-+#ifdef STM32_BOOTLOADER_ADDRESS\r
-+                /* jump to bootloader code */\r
-+                ldr        r0, =__ram0_end__-4\r
-+                ldr        r1, =MAGIC_BOOTLOADER_NUMBER\r
-+                ldr        r2, [r0, #0]\r
-+                str        r0, [r0, #0] /* erase stored magic */\r
-+                cmp        r2, r1\r
-+                beq        Bootloader_Jump\r
-+#endif /* STM32_BOOTLOADER_ADDRESS */\r
-+\r
-                 /* Interrupts are globally masked initially.*/\r
-                 cpsid   i\r
\r
+                 .thumb_func
+                 .global Reset_Handler
+ Reset_Handler:
++
++#ifdef STM32_BOOTLOADER_ADDRESS
++                /* jump to bootloader code */
++                ldr        r0, =__ram0_end__-4
++                ldr        r1, =MAGIC_BOOTLOADER_NUMBER
++                ldr        r2, [r0, #0]
++                str        r0, [r0, #0] /* erase stored magic */
++                cmp        r2, r1
++                beq        Bootloader_Jump
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+                 /* Interrupts are globally masked initially.*/
+                 cpsid   i
 @@ -305,6 +323,21 @@ endfiniloop:
-                 /* Branching to the defined exit handler.*/\r
-                 b       __default_exit\r
\r
-+#ifdef STM32_BOOTLOADER_ADDRESS\r
-+/*\r
-+ * Jump-to-bootloader function.\r
-+ */\r
-+\r
-+                .align  2\r
-+                .thumb_func\r
-+Bootloader_Jump:\r
-+                ldr     r0, =STM32_BOOTLOADER_ADDRESS\r
-+                ldr     r1, [r0, #0]\r
-+                mov     sp, r1\r
-+                ldr     r0, [r0, #4]\r
-+                bx      r0\r
-+#endif /* STM32_BOOTLOADER_ADDRESS */\r
-+\r
- #endif /* !defined(__DOXYGEN__) */\r
\r
- /** @} */\r
+                 /* Branching to the defined exit handler.*/
+                 b       __default_exit
++#ifdef STM32_BOOTLOADER_ADDRESS
++/*
++ * Jump-to-bootloader function.
++ */
++
++                .align  2
++                .thumb_func
++Bootloader_Jump:
++                ldr     r0, =STM32_BOOTLOADER_ADDRESS
++                ldr     r1, [r0, #0]
++                mov     sp, r1
++                ldr     r0, [r0, #4]
++                bx      r0
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+ #endif /* !defined(__DOXYGEN__) */
+ /** @} */
diff --git a/util/Win_Check.bat b/util/Win_Check.bat
new file mode 100644 (file)
index 0000000..3fdb656
--- /dev/null
@@ -0,0 +1,208 @@
+@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
+@echo OFF
+set BAT_VERSION=v1.0
+set REPORT_NAME=Win_Check_Output.txt
+
+:: -----------------------------------------------------------------------------
+
+cls
+
+echo QMK Windows Check Output %BAT_VERSION%
+echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME%
+
+:: -----------------------------------------------------------------------------
+
+set MINGW_BASE_DIR=C:\MinGW
+
+set KEYMAP=atomic-pvc
+set KEYMAP_CLEAN=atomic-pvc-clean
+
+:: -----------------------------------------------------------------------------
+
+if /I "%1" EQU VERBOSE (goto :Verbose_Make) else (goto :Normal_Make)
+
+:Normal_Make
+set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE
+set MAKE_CMD_LEVEL_1=make -r -f ../Makefile COLOR=FALSE
+set MAKE_CMD_LEVEL_2=make -r -f ../../Makefile COLOR=FALSE
+goto :Start_Report
+
+:Verbose_Make
+echo Verbose Mode
+set MAKE_CMD_LEVEL_0=make -r -d -f Makefile COLOR=FALSE VERBOSE=TRUE
+set MAKE_CMD_LEVEL_1=make -r -d -f ../Makefile COLOR=FALSE VERBOSE=TRUE
+set MAKE_CMD_LEVEL_2=make -r -d -f ../../Makefile COLOR=FALSE VERBOSE=TRUE
+goto :Start_Report
+
+:Start_Report
+
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=CURRENT DIRECTORY & call :ReportHeader
+
+echo %CD%>>%REPORT_NAME% 2>&1
+
+echo.>>%REPORT_NAME% 2>&1
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=CURRENT PATHS & call :ReportHeader
+
+for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1)
+
+echo.>>%REPORT_NAME% 2>&1
+
+:: -----------------------------------------------------------------------------
+
+rem set HEADER=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader
+
+rem set>>%REPORT_NAME% 2>&1
+rem echo.>>%REPORT_NAME% 2>&1
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader
+
+set FILENAME=make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion
+set FILENAME=git.exe & set VERSION_CMD=--version & set VERSION_FIND="git" & call :ReportVersion
+set FILENAME=cmp.exe & set VERSION_CMD=--version & set VERSION_FIND="cmp" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader
+
+set FILENAME=avr-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="avr" & call :ReportVersion
+set FILENAME=avr-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion
+set FILENAME=avr-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion
+set FILENAME=avr-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion
+set FILENAME=avr-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion
+set FILENAME=avr-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader
+
+set FILENAME=arm-none-eabi-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="arm-none-eabi-gcc" & call :ReportVersion
+set FILENAME=arm-none-eabi-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion
+set FILENAME=arm-none-eabi-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion
+set FILENAME=arm-none-eabi-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion
+set FILENAME=arm-none-eabi-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion
+set FILENAME=arm-none-eabi-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader
+
+set FILENAME=gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="gcc" & call :ReportVersion
+set FILENAME=objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion
+set FILENAME=objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion
+set FILENAME=size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion
+set FILENAME=ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion
+set FILENAME=nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader
+
+set FILENAME=dfu-programmer.exe & set VERSION_CMD=--version & set VERSION_FIND="dfu" & call :ReportVersion
+set FILENAME=batchisp.exe & set VERSION_CMD=-version & set VERSION_FIND="batchisp" & call :ReportVersion
+set FILENAME=dfu-util.exe & call :Report
+set FILENAME=teensy_loader_cli.exe & call :Report
+set FILENAME=hid_bootloader_cli.exe & call :Report
+set FILENAME=avrdude.exe & call :Report
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader
+set FILENAME=cppcheck.exe & call :Report
+set FILENAME=doxygen.exe & call :Report
+set FILENAME=gdb-config.exe & call :Report
+set FILENAME=wget.exe & call :Report
+set FILENAME=unzip.exe & call :Report
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=MINGW CHECK - OPTIONAL & call :ReportHeader
+if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1)
+echo.>>%REPORT_NAME% 2>&1
+set FILENAME=mingw32-make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion
+if exist %MINGW_BASE_DIR%\bin\make.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1)
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=MAKE CHECK & call :ReportHeader
+if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound)
+if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound)
+if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound)
+
+echo No Makfile Found.>>%REPORT_NAME% 2>&1
+echo.>>%REPORT_NAME% 2>&1
+echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1
+
+goto :ContinueAfterMake
+
+:MakeFound
+call :RunMake
+
+:ContinueAfterMake
+goto :ExitBatch
+
+:ExitBatch
+       echo Done!
+       echo.
+       rem type %REPORT_NAME%
+       echo.
+       echo See %REPORT_NAME% for the report.
+       endlocal
+exit /b
+
+:: -----------------------------------------------------------------------------
+
+:RunMake
+
+       echo Makfile Found.>>%REPORT_NAME% 2>&1
+       echo.>>%REPORT_NAME% 2>&1
+       set HEADER=MAKE CLEAN & call :ReportHeader
+       echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1
+       echo.>>%REPORT_NAME% 2>&1
+       %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1
+       set HEADER=MAKE & call :ReportHeader
+       echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1
+       echo.>>%REPORT_NAME% 2>&1
+       %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1
+       echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1
+       echo.>>%REPORT_NAME% 2>&1
+exit /b
+
+:ReportHeader
+       echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1
+       echo.>>%REPORT_NAME% 2>&1
+       echo %HEADER%>>%REPORT_NAME% 2>&1
+       echo.>>%REPORT_NAME% 2>&1
+exit /b
+
+:Report
+       echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1
+       <nul set /p output="Location = " >>%REPORT_NAME% 2>&1
+       where %FILENAME%  >>%REPORT_NAME% 2> NUL
+       if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport)
+
+       :EndReport
+       echo.>>%REPORT_NAME% 2>&1
+       <nul set /p output="."
+exit /b
+
+:ReportVersion
+       echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1
+       <nul set /p output="Location = " >>%REPORT_NAME% 2>&1
+       where %FILENAME%  >>%REPORT_NAME% 2> NUL
+       if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion)
+       <nul set /p output ="Version  = " >>%REPORT_NAME% 2>&1
+
+       (%FILENAME% %VERSION_CMD% | find %VERSION_FIND%) >>%REPORT_NAME% 2>&1
+
+       :EndReportVersion
+       echo.>>%REPORT_NAME% 2>&1
+       <nul set /p output="."
+exit /b
\ No newline at end of file
diff --git a/util/ergodox_ez.html b/util/ergodox_ez.html
new file mode 100644 (file)
index 0000000..8e92866
--- /dev/null
@@ -0,0 +1 @@
+<html><head><meta http-equiv="refresh" content="0; url=http://qmk.fm/keyboards/ergodox/" /></head></html>
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 24564a2..936a865
@@ -20,7 +20,8 @@ if [[ -n "$(type -P pacman )" ]]; then
     arm-none-eabi-gcc \
     arm-none-eabi-binutils \
     arm-none-eabi-newlib \
-    git
+    git \
+    diffutils
 
 elif [[ -n "$(type -P apt-get)" ]]; then
   # Debian and derivatives
@@ -47,7 +48,8 @@ elif [[ -n "$(type -P apt-get)" ]]; then
     gcc-arm-none-eabi \
     binutils-arm-none-eabi \
     libnewlib-arm-none-eabi \
-    git
+    git \
+    diffutils
 
 elif [[ -n "$(type -P yum)" ]]; then
   # Fedora, CentOS or RHEL and derivatives
@@ -66,10 +68,10 @@ elif [[ -n "$(type -P yum)" ]]; then
     avr-libc \
     dfu-programmer \
     dfu-util \
-    gcc-arm-none-eabi \
-    binutils-arm-none-eabi \
-    libnewlib-arm-none-eabi \
-    git
+    arm-none-eabi-gcc-cs \
+    arm-none-eabi-newlib \
+    git \
+    diffutils
   # The listed eabi pacackes do unfortunately not exist for CentOS,
   # But at least in Fedora they do, so try to install them anyway
   # TODO: Build them from sources, if the installation fails
@@ -85,7 +87,8 @@ elif [[ -n "$(type -P zypper)" ]]; then
     patch \
     wget \
     dfu-programmer \
-    git
+    git \
+    diffutils
   # TODO: The avr and eabi tools are not available as default packages, so we need 
   # another way to install them
 
index b3535f449ef43dc769f1d500888c93e5165ab278..18d16e560c06379be5c9c9c21c5bec0f3cf9458a 100755 (executable)
@@ -20,6 +20,7 @@ sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/template.c > keyboards/$KEYBO
 sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/config.h > keyboards/$KEYBOARD/config.h
 sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/readme.md > keyboards/$KEYBOARD/readme.md
 sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/Makefile > keyboards/$KEYBOARD/Makefile
+sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/rules.mk > keyboards/$KEYBOARD/rules.mk
 sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/config.h > keyboards/$KEYBOARD/keymaps/default/config.h
 sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/keymap.c > keyboards/$KEYBOARD/keymaps/default/keymap.c
 sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/Makefile > keyboards/$KEYBOARD/keymaps/default/Makefile
index 01317f4be2d980a069afcec5911fb947b92f68f1..f432976d038cccf26d5679ed1abb903dbfccc27f 100644 (file)
@@ -7,6 +7,8 @@ rev=$(git rev-parse --short HEAD)
 git config --global user.name "Travis CI"
 git config --global user.email "jack.humb+travis.ci@gmail.com"
 
+make ergodox-ez AUTOGEN=true
+
 find . -name ".build" | xargs rm -rf
 cd ..
 git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git
@@ -15,9 +17,11 @@ git submodule update --init --recursive
 rm -rf keyboard
 rm -rf keyboards
 cp -r ../qmk_firmware/keyboards .
+mkdir keyboards/ergodox_ez/
+cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html
 cp ../qmk_firmware/readme.md qmk_readme.md
 ./generate.sh
 
 git add -A
 git commit -m "generated from qmk_firmware/$TRAVIS_BRANCH@${rev}" 
-git push
\ No newline at end of file
+git push