]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
DZ60 w/ 2.25u left shift and arrow cluster (#6215)
authorDrashna Jaelre <drashna@live.com>
Mon, 1 Jul 2019 07:57:20 +0000 (00:57 -0700)
committerGitHub <noreply@github.com>
Mon, 1 Jul 2019 07:57:20 +0000 (00:57 -0700)
* PoC weeheavy_2.25_lshift

* KB_B should read KC_B

* L1 work

* add play/pause and brightness to layer 1

* update README

343 files changed:
docs/config_options.md
docs/feature_backlight.md
docs/keycodes.md
keyboards/1upkeyboards/1up60hse/config.h
keyboards/40percentclub/gherkin/keymaps/midi/config.h [new file with mode: 0644]
keyboards/40percentclub/gherkin/keymaps/midi/keymap.c [new file with mode: 0644]
keyboards/40percentclub/gherkin/keymaps/midi/readme.md [new file with mode: 0644]
keyboards/40percentclub/gherkin/keymaps/midi/rules.mk [new file with mode: 0644]
keyboards/aeboards/aegis/config.h
keyboards/aeboards/ext65/config.h [new file with mode: 0644]
keyboards/aeboards/ext65/ext65.c [new file with mode: 0644]
keyboards/aeboards/ext65/ext65.h [new file with mode: 0644]
keyboards/aeboards/ext65/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/aeboards/ext65/keymaps/default/readme.md [new file with mode: 0644]
keyboards/aeboards/ext65/keymaps/via/keymap.c [new file with mode: 0644]
keyboards/aeboards/ext65/keymaps/via/readme.md [new file with mode: 0644]
keyboards/aeboards/ext65/keymaps/via/rules.mk [new file with mode: 0644]
keyboards/aeboards/ext65/readme.md [new file with mode: 0644]
keyboards/aeboards/ext65/rules.mk [new file with mode: 0644]
keyboards/ai03/quasar/config.h [new file with mode: 0644]
keyboards/ai03/quasar/info.json [new file with mode: 0644]
keyboards/ai03/quasar/keymaps/ai03/keymap.c [new file with mode: 0644]
keyboards/ai03/quasar/keymaps/ai03/readme.md [new file with mode: 0644]
keyboards/ai03/quasar/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ai03/quasar/keymaps/default/readme.md [new file with mode: 0644]
keyboards/ai03/quasar/quasar.c [new file with mode: 0644]
keyboards/ai03/quasar/quasar.h [new file with mode: 0644]
keyboards/ai03/quasar/readme.md [new file with mode: 0644]
keyboards/ai03/quasar/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/an_c/an_c.c [new file with mode: 0644]
keyboards/cannonkeys/an_c/an_c.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.c [new file with mode: 0644]
keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.mk [new file with mode: 0644]
keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/cfg/board.chcfg [new file with mode: 0644]
keyboards/cannonkeys/an_c/bootloader_defs.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/chconf.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/config.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/halconf.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/info.json [new file with mode: 0644]
keyboards/cannonkeys/an_c/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c [new file with mode: 0644]
keyboards/cannonkeys/an_c/keymaps/via/keymap.c [new file with mode: 0644]
keyboards/cannonkeys/an_c/keymaps/via/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/an_c/mcuconf.h [new file with mode: 0644]
keyboards/cannonkeys/an_c/readme.md [new file with mode: 0644]
keyboards/cannonkeys/an_c/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/instant60/info.json
keyboards/cannonkeys/instant60/instant60.h
keyboards/cannonkeys/instant60/keymaps/default/keymap.c
keyboards/cannonkeys/instant60/keymaps/tsangan/keymap.c
keyboards/cannonkeys/instant60/readme.md
keyboards/cannonkeys/instant60/rules.mk
keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.c [new file with mode: 0644]
keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.mk [new file with mode: 0644]
keyboards/cannonkeys/ortho75/bootloader_defs.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/chconf.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/config.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/halconf.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/info.json [new file with mode: 0644]
keyboards/cannonkeys/ortho75/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/cannonkeys/ortho75/ld/STM32F103x8_stm32duino_bootloader.ld [new file with mode: 0644]
keyboards/cannonkeys/ortho75/mcuconf.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/ortho75.c [new file with mode: 0644]
keyboards/cannonkeys/ortho75/ortho75.h [new file with mode: 0644]
keyboards/cannonkeys/ortho75/readme.md [new file with mode: 0644]
keyboards/cannonkeys/ortho75/rules.mk [new file with mode: 0644]
keyboards/contra/keymaps/maxr1998/keymap.c
keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c [new file with mode: 0644]
keyboards/crkbd/keymaps/thumb_ctrl/config.h [new file with mode: 0755]
keyboards/crkbd/keymaps/thumb_ctrl/keymap.c [new file with mode: 0755]
keyboards/crkbd/keymaps/thumb_ctrl/rules.mk [new file with mode: 0755]
keyboards/dz60/keymaps/kifinnsson/keymap.c [new file with mode: 0644]
keyboards/dz60/keymaps/kifinnsson/readme.md [new file with mode: 0644]
keyboards/dz60/keymaps/kifinnsson/rules.mk [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/matthewrobo/config.h
keyboards/ergodash/rev1/keymaps/333fred/config.h [new file with mode: 0644]
keyboards/ergodash/rev1/keymaps/333fred/keymap.c [new file with mode: 0644]
keyboards/ergodash/rev1/keymaps/333fred/rules.mk [new file with mode: 0644]
keyboards/ergodone/keymaps/vega/keymap.c [new file with mode: 0644]
keyboards/ergodone/keymaps/vega/rules.mk [new file with mode: 0644]
keyboards/ergodox_ez/ergodox_ez.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/dot_comm.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/h_mouse_gui.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/j_media_meh.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/k_numpad_hyper.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/m_chords_hyper.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/quot_dquot.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/scln_coln.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/u_arrows_gui.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/w_media_meh.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
keyboards/fc660c/keymaps/siroleo/README.md [new file with mode: 0644]
keyboards/fc660c/keymaps/siroleo/config.h [new file with mode: 0644]
keyboards/fc660c/keymaps/siroleo/keymap.c [new file with mode: 0644]
keyboards/handwired/hnah40/config.h [new file with mode: 0644]
keyboards/handwired/hnah40/hnah40.c [new file with mode: 0644]
keyboards/handwired/hnah40/hnah40.h [new file with mode: 0644]
keyboards/handwired/hnah40/info.json [new file with mode: 0644]
keyboards/handwired/hnah40/keymaps/default/config.h [new file with mode: 0644]
keyboards/handwired/hnah40/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/hnah40/keymaps/default/readme.md [new file with mode: 0644]
keyboards/handwired/hnah40/readme.md [new file with mode: 0644]
keyboards/handwired/hnah40/rules.mk [new file with mode: 0644]
keyboards/handwired/hnah40/usbconfig.h [new file with mode: 0644]
keyboards/handwired/jopr/config.h [new file with mode: 0644]
keyboards/handwired/jopr/info.json [new file with mode: 0644]
keyboards/handwired/jopr/jopr.c [new file with mode: 0644]
keyboards/handwired/jopr/jopr.h [new file with mode: 0644]
keyboards/handwired/jopr/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/jopr/keymaps/modded_white/keymap.c [new file with mode: 0644]
keyboards/handwired/jopr/readme.md [new file with mode: 0644]
keyboards/handwired/jopr/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.c [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.h [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.mk [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/bootloader_defs.h [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/chconf.h [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/config.h [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/halconf.h [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/mcuconf.h [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/bluepill/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/config.h
keyboards/handwired/onekey/elite_c/config.h [new file with mode: 0644]
keyboards/handwired/onekey/elite_c/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/elite_c/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/onekey.h
keyboards/handwired/onekey/promicro/config.h [new file with mode: 0644]
keyboards/handwired/onekey/promicro/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/promicro/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/proton_c/config.h [new file with mode: 0644]
keyboards/handwired/onekey/proton_c/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/proton_c/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/readme.md
keyboards/handwired/onekey/rules.mk
keyboards/handwired/onekey/teensy_2/config.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_2/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/teensy_2/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/teensy_2pp/config.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_2pp/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/teensy_2pp/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/chconf.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/config.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/halconf.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/ld/MK20DX256.ld [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/mcuconf.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/teensy_32/rules.mk [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/chconf.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/config.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/halconf.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/ld/MKL26Z64.ld [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/mcuconf.h [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/readme.md [new file with mode: 0644]
keyboards/handwired/onekey/teensy_lc/rules.mk [new file with mode: 0644]
keyboards/handwired/tritium_numpad/config.h [new file with mode: 0644]
keyboards/handwired/tritium_numpad/info.json [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/blu/keymap.c [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/blu/layers.json [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/blu/readme.md [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/max/keymap.c [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/ortho_left/keymap.c [new file with mode: 0644]
keyboards/handwired/tritium_numpad/keymaps/ortho_right/keymap.c [new file with mode: 0644]
keyboards/handwired/tritium_numpad/readme.md [new file with mode: 0644]
keyboards/handwired/tritium_numpad/rules.mk [new file with mode: 0644]
keyboards/handwired/tritium_numpad/tritium_numpad.c [new file with mode: 0644]
keyboards/handwired/tritium_numpad/tritium_numpad.h [new file with mode: 0644]
keyboards/katana60/keymaps/josefadamcik/config.h [new file with mode: 0644]
keyboards/katana60/keymaps/josefadamcik/keymap.c [new file with mode: 0644]
keyboards/katana60/keymaps/josefadamcik/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd67/rev2/config.h
keyboards/keebio/nyquist/keymaps/georgepetri/config.h [new file with mode: 0644]
keyboards/keebio/nyquist/keymaps/georgepetri/keymap.c [new file with mode: 0644]
keyboards/keebio/nyquist/keymaps/georgepetri/readme.md [new file with mode: 0644]
keyboards/keebio/nyquist/keymaps/georgepetri/rules.mk [new file with mode: 0644]
keyboards/kmac/config.h
keyboards/kmac/info.json
keyboards/kmac/keymaps/default/config.h
keyboards/kmac/keymaps/default/keymap.c
keyboards/kmac/keymaps/default/readme.md
keyboards/kmac/keymaps/default/rules.mk [deleted file]
keyboards/kmac/keymaps/default_tkl_ansi/config.h [new file with mode: 0644]
keyboards/kmac/keymaps/default_tkl_ansi/keymap.c [new file with mode: 0644]
keyboards/kmac/keymaps/default_tkl_ansi/readme.md [new file with mode: 0644]
keyboards/kmac/keymaps/default_tkl_ansi_wkl/config.h [new file with mode: 0644]
keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c [new file with mode: 0644]
keyboards/kmac/keymaps/default_tkl_ansi_wkl/readme.md [new file with mode: 0644]
keyboards/kmac/keymaps/winkeyless/config.h [deleted file]
keyboards/kmac/keymaps/winkeyless/keymap.c [deleted file]
keyboards/kmac/keymaps/winkeyless/readme.md [deleted file]
keyboards/kmac/keymaps/winkeyless/rules.mk [deleted file]
keyboards/kmac/kmac.c
keyboards/kmac/kmac.h
keyboards/kmac/matrix.c
keyboards/kmac/readme.md
keyboards/kmac/rules.mk
keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h
keyboards/massdrop/ctrl/keymaps/matthewrobo/keymap.c
keyboards/maxr1998/pulse4k/config.h [new file with mode: 0644]
keyboards/maxr1998/pulse4k/info.json [new file with mode: 0644]
keyboards/maxr1998/pulse4k/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/maxr1998/pulse4k/keymaps/default/rules.mk [new file with mode: 0644]
keyboards/maxr1998/pulse4k/pulse4k.c [new file with mode: 0644]
keyboards/maxr1998/pulse4k/pulse4k.h [new file with mode: 0644]
keyboards/maxr1998/pulse4k/readme.md [new file with mode: 0644]
keyboards/maxr1998/pulse4k/rules.mk [new file with mode: 0644]
keyboards/mechmini/v2/keymaps/spacebarracecar/keymap.c
keyboards/mitosis/keymaps/datagrok/config.h
keyboards/nk65/readme.md
keyboards/omnikeyish/config.h [new file with mode: 0644]
keyboards/omnikeyish/dynamic_macro.c [new file with mode: 0644]
keyboards/omnikeyish/dynamic_macro.h [new file with mode: 0644]
keyboards/omnikeyish/info.json [new file with mode: 0644]
keyboards/omnikeyish/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/omnikeyish/omnikeyish.c [new file with mode: 0644]
keyboards/omnikeyish/omnikeyish.h [new file with mode: 0644]
keyboards/omnikeyish/readme.md [new file with mode: 0644]
keyboards/omnikeyish/rules.mk [new file with mode: 0644]
keyboards/pdxkbc/config.h [new file with mode: 0644]
keyboards/pdxkbc/info.json [new file with mode: 0644]
keyboards/pdxkbc/keymaps/default/config.h [new file with mode: 0644]
keyboards/pdxkbc/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/pdxkbc/keymaps/default/readme.md [new file with mode: 0644]
keyboards/pdxkbc/pdxkbc.c [new file with mode: 0644]
keyboards/pdxkbc/pdxkbc.h [new file with mode: 0644]
keyboards/pdxkbc/readme.md [new file with mode: 0644]
keyboards/pdxkbc/rules.mk [new file with mode: 0644]
keyboards/planck/ez/ez.c
keyboards/planck/ez/ez.h
keyboards/planck/ez/info.json [new file with mode: 0644]
keyboards/planck/ez/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/callum/config.h
keyboards/planck/keymaps/callum/keymap.c
keyboards/planck/keymaps/callum/readme.md
keyboards/planck/keymaps/callum/rules.mk
keyboards/planck/keymaps/deft/config.h [new file with mode: 0644]
keyboards/planck/keymaps/deft/deft-plank.json [new file with mode: 0644]
keyboards/planck/keymaps/deft/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/deft/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/deft/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/dvorak2space/config.h [new file with mode: 0644]
keyboards/planck/keymaps/dvorak2space/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/dvorak2space/passwords.c [new file with mode: 0644]
keyboards/planck/keymaps/dvorak2space/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/dvorak2space/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/spacebarracecar/keymap.c
keyboards/planck/keymaps/tylerwince/config.h [new file with mode: 0644]
keyboards/planck/keymaps/tylerwince/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/tylerwince/rules.mk [new file with mode: 0644]
keyboards/planck/light/info.json
keyboards/planck/light/light.h
keyboards/planck/light/readme.md [new file with mode: 0644]
keyboards/planck/planck.h
keyboards/planck/readme.md
keyboards/planck/rev1/info.json [new file with mode: 0644]
keyboards/planck/rev1/readme.md [new file with mode: 0644]
keyboards/planck/rev1/rev1.h [new file with mode: 0644]
keyboards/planck/rev2/info.json [new file with mode: 0644]
keyboards/planck/rev2/readme.md [new file with mode: 0644]
keyboards/planck/rev2/rev2.h [new file with mode: 0644]
keyboards/planck/rev3/info.json [new file with mode: 0644]
keyboards/planck/rev3/readme.md [new file with mode: 0644]
keyboards/planck/rev3/rev3.h [new file with mode: 0644]
keyboards/planck/rev4/info.json [new file with mode: 0644]
keyboards/planck/rev4/readme.md [new file with mode: 0644]
keyboards/planck/rev4/rev4.h [new file with mode: 0644]
keyboards/planck/rev5/info.json [new file with mode: 0644]
keyboards/planck/rev5/readme.md [new file with mode: 0644]
keyboards/planck/rev5/rev5.h [new file with mode: 0644]
keyboards/planck/rev6/info.json
keyboards/planck/rev6/readme.md [new file with mode: 0644]
keyboards/planck/rev6/rev6.h
keyboards/preonic/keymaps/spacebarracecar/config.h [deleted file]
keyboards/preonic/keymaps/spacebarracecar/keymap.c [deleted file]
keyboards/preonic/keymaps/spacebarracecar/readme.md [deleted file]
keyboards/preonic/keymaps/spacebarracecar/rules.mk [deleted file]
keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c
keyboards/suihankey/config.h [new file with mode: 0644]
keyboards/suihankey/info.json [new file with mode: 0644]
keyboards/suihankey/keymaps/default/config.h [new file with mode: 0644]
keyboards/suihankey/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/suihankey/keymaps/default/readme.md [new file with mode: 0644]
keyboards/suihankey/readme.md [new file with mode: 0644]
keyboards/suihankey/rules.mk [new file with mode: 0644]
keyboards/suihankey/suihankey.c [new file with mode: 0644]
keyboards/suihankey/suihankey.h [new file with mode: 0644]
keyboards/ta65/config.h [new file with mode: 0644]
keyboards/ta65/info.json [new file with mode: 0644]
keyboards/ta65/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ta65/keymaps/default_ansi/keymap.c [new file with mode: 0644]
keyboards/ta65/keymaps/default_ansi_tsangan/keymap.c [new file with mode: 0644]
keyboards/ta65/keymaps/default_iso/keymap.c [new file with mode: 0644]
keyboards/ta65/keymaps/default_iso_tsangan/keymap.c [new file with mode: 0644]
keyboards/ta65/keymaps/maartenwut/config.h [new file with mode: 0644]
keyboards/ta65/keymaps/maartenwut/keymap.c [new file with mode: 0644]
keyboards/ta65/readme.md [new file with mode: 0644]
keyboards/ta65/rules.mk [new file with mode: 0644]
keyboards/ta65/ta65.c [new file with mode: 0644]
keyboards/ta65/ta65.h [new file with mode: 0644]
keyboards/tanuki/config.h
keyboards/tanuki/keymaps/default/keymap.c
keyboards/tanuki/tanuki.h
keyboards/westfoxtrot/aanzee/aanzee.c
keyboards/westfoxtrot/aanzee/readme.md
layouts/community/ergodox/manna-harbour_miryoku/keymap.c [new file with mode: 0644]
layouts/community/ortho_4x12/bredfield/config.h [new file with mode: 0644]
layouts/community/ortho_4x12/bredfield/keymap.c [new file with mode: 0644]
layouts/community/ortho_4x12/bredfield/readme.md [new file with mode: 0644]
layouts/community/ortho_4x12/jotix/config.h [deleted file]
layouts/community/ortho_4x12/jotix/keymap.c
layouts/community/ortho_4x12/jotix/readme.md
layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c [new file with mode: 0644]
quantum/audio/song_list.h
quantum/quantum.c
quantum/split_common/post_config.h
users/333fred/333fred.h
users/333fred/layout_macros.h [new file with mode: 0644]
users/333fred/rgb.c
users/manna-harbour_miryoku/README.org [new symlink]
users/manna-harbour_miryoku/config.h [new file with mode: 0644]
users/manna-harbour_miryoku/manna-harbour_miryoku.c [new file with mode: 0644]
users/manna-harbour_miryoku/miryoku.org [new file with mode: 0644]
users/manna-harbour_miryoku/rules.mk [new file with mode: 0644]
users/spacebarracecar/readme.md
users/spacebarracecar/spacebarracecar.c
users/spacebarracecar/spacebarracecar.h

index f4035809a7870e5e18a9c962e4679a6ff800709f..eb0a441cccc34e8a2decf57f3b1c35eb1070eabe 100644 (file)
@@ -76,11 +76,11 @@ This is a C header file that is one of the first things included, and will persi
 * `#define B7_AUDIO`
   * enables audio on pin B7 (duophony is enables if one of B[5-7]\_AUDIO is enabled along with one of C[4-6]\_AUDIO)
 * `#define BACKLIGHT_PIN B7`
-  * pin of the backlight - B5, B6, B7 use PWM, others use softPWM
+  * pin of the backlight - `B5`, `B6`, `B7` and `C6` (and `D4` on ATmega32A) use hardware PWM, others use software implementation
 * `#define BACKLIGHT_LEVELS 3`
   * number of levels your backlight will have (maximum 15 excluding off)
 * `#define BACKLIGHT_BREATHING`
-  * enables backlight breathing (only works with backlight pins B5, B6 and B7)
+  * enables backlight breathing
 * `#define BREATHING_PERIOD 6`
   * the length of one backlight "breath" in seconds
 * `#define DEBOUNCE 5`
@@ -93,8 +93,8 @@ This is a C header file that is one of the first things included, and will persi
   * key combination that allows the use of magic commands (useful for debugging)
 * `#define USB_MAX_POWER_CONSUMPTION`
   * sets the maximum power (in mA) over USB for the device (default: 500)
-* `#define SCL_CLOCK 100000L`
-  * sets the SCL_CLOCK speed for split keyboards. The default is `100000L` but some boards can be set to `400000L`.
+* `#define F_SCL 100000L`
+  * sets the I2C clock rate speed for keyboards using I2C. The default is `400000L`, except for keyboards using `split_common`, where the default is `100000L`.
 
 ## Features That Can Be Disabled
 
index 048d75390df6ff7b0992d7ee60bdde925feb42e6..b06db89e4df9fa6fcd19be0349b2abf1a5fda973 100644 (file)
@@ -34,13 +34,14 @@ Hardware PWM is only supported on certain pins of the MCU, so if the backlightin
 
 Hardware PWM is supported according to the following table:
 
-| Backlight Pin | Hardware timer |
-|---------------|----------------|
-|`B5`           | Timer 1        |
-|`B6`           | Timer 1        |
-|`B7`           | Timer 1        |
-|`C6`           | Timer 3        |
-| other         | Software PWM   |
+| Backlight Pin | Hardware timer          |
+|---------------|-------------------------|
+|`B5`           | Timer 1                 |
+|`B6`           | Timer 1                 |
+|`B7`           | Timer 1                 |
+|`C6`           | Timer 3                 |
+|`D4`           | Timer 1 (ATmega32A only)|
+| other         | Software PWM            |
 
 The [audio feature](feature_audio.md) also uses hardware timers. Please refer to the following table to know what hardware timer the software PWM will use depending on the audio configuration:
 
@@ -63,11 +64,17 @@ To change the behaviour of the backlighting, `#define` these in your `config.h`:
 |Define               |Default      |Description                                                                                                  |
 |---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
 |`BACKLIGHT_PIN`      |`B7`         |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
-|`BACKLIGHT_PINS`     |*Not defined*|experimental: see below for more information|
+|`BACKLIGHT_PINS`     |*Not defined*|experimental: see below for more information                                                                 |
 |`BACKLIGHT_LEVELS`   |`3`          |The number of brightness levels (maximum 15 excluding off)                                                   |
 |`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED)                             |
-|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported                                                          |
+|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported                                                                     |
 |`BREATHING_PERIOD`   |`6`          |The length of one backlight "breath" in seconds                                                              |
+|`BACKLIGHT_ON_STATE` |`0`          |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low                        |
+
+## Backlight On State
+
+Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *low*.
+Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case you must `#define BACKLIGHT_ON_STATE 1`, so that when the transistor is on, the pin is driven *high* instead.
 
 ## Multiple backlight pins
 
index 3ff87856e488d302d7ddb4a6a6de2cf1f5370d31..bd4dd61a5b437ab8f938ae0f41153457d23e7501 100644 (file)
@@ -298,7 +298,7 @@ This is a reference only. Each group of keys links to the page documenting their
 |`LM(layer, mod)`|Momentarily turn on `layer` (like MO) with `mod` active as well.  Where `mod` is a mods_bit.  Mods can be viewed [here](https://docs.qmk.fm/#/feature_advanced_keycodes?id=mod-tap).  Example Implementation: `LM(LAYER_1, MOD_LALT)`|
 |`LT(layer, kc)` |Turn on `layer` when held, `kc` when tapped                                       |
 |`TG(layer)`     |Toggle `layer` on or off                                                          |
-|`TO(layer)`     |Turn on `layer` when pressed                                                      |
+|`TO(layer)`     |Turns on `layer` and turns off all other layers, except the default layer |
 |`TT(layer)`     |Normally acts like MO unless it's tapped multiple times, which toggles `layer` on |
 
 ## [Mouse Keys](feature_mouse_keys.md)
index 3781d7bcf0cb50dc64c66196bd7864f0279bf4ed..9ab969797ea92478d4db4048cd4cd6f4e722010a 100644 (file)
@@ -59,6 +59,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
 #define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_SLEEP
 #endif
 
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/config.h b/keyboards/40percentclub/gherkin/keymaps/midi/config.h
new file mode 100644 (file)
index 0000000..4a9607e
--- /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/>.
+*/
+
+#pragma once
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 190
+
+#define MUSIC_MASK (keycode != KC_NO)
+#define MIDI_ADVANCED
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/keymap.c b/keyboards/40percentclub/gherkin/keymaps/midi/keymap.c
new file mode 100644 (file)
index 0000000..9656524
--- /dev/null
@@ -0,0 +1,115 @@
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+  _IONIAN = 0,
+  _DORIAN,
+  _PHRYGIAN,
+  _LYDIAN,
+  _MIXOLYDIAN,
+  _AEOLIAN,
+  _LOCRIAN,
+  _MENU
+};
+
+enum custom_keycodes {
+  IONIAN = SAFE_RANGE,
+  DORIAN,
+  PHRYGIAN,
+  LYDIAN,
+  MIXOLYDIAN,
+  AEOLIAN,
+  LOCRIAN,
+};
+
+#define MENU MO(_MENU)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_IONIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_F_1,  MI_B_1,  MI_E_2,  MI_A_2,  MI_D_3,  MI_G_3,  MI_C_4,  MI_OCTD,  MI_OCTU,
+    MI_D_1,  MI_G_1,  MI_C_2,  MI_F_2,  MI_B_2,  MI_E_3,  MI_A_3,  MI_D_4,  MI_TRNSD, MI_TRNSU,
+    MI_E_1,  MI_A_1,  MI_D_2,  MI_G_2,  MI_C_3,  MI_F_3,  MI_B_3,  MI_E_4,  MI_SUS, MENU
+  ),
+
+  [_DORIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_F_1,  MI_As_1, MI_Ds_2, MI_A_2,  MI_D_3,  MI_G_3,  MI_C_4,  _______, _______,
+    MI_D_1,  MI_G_1,  MI_C_2,  MI_F_2,  MI_As_2, MI_Ds_3, MI_A_3,  MI_D_4,  _______, _______,
+    MI_Ds_1, MI_A_1,  MI_D_2,  MI_G_2,  MI_C_3,  MI_F_3,  MI_As_3, MI_Ds_4, _______, _______
+  ),
+
+  [_PHRYGIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_F_1,  MI_As_1, MI_Ds_2, MI_Gs_2, MI_Cs_3, MI_G_3,  MI_C_4,  _______, _______,
+    MI_Cs_1, MI_G_1,  MI_C_2,  MI_F_2,  MI_As_2, MI_Ds_3, MI_Gs_3, MI_Cs_4, _______, _______,
+    MI_Ds_1, MI_Gs_1, MI_Cs_2, MI_G_2,  MI_C_3,  MI_F_3,  MI_As_3, MI_Ds_4, _______, _______
+  ),
+
+  [_LYDIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_Fs_1, MI_B_1,  MI_E_2,  MI_A_2,  MI_D_3,  MI_G_3,  MI_C_4,  _______, _______,
+    MI_D_1,  MI_G_1,  MI_C_2,  MI_Fs_2, MI_B_2,  MI_E_3,  MI_A_3,  MI_D_4,  _______, _______,
+    MI_E_1,  MI_A_1,  MI_D_2,  MI_G_2,  MI_C_3,  MI_Fs_3, MI_B_3,  MI_E_4,  _______, _______
+  ),
+
+  [_MIXOLYDIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_F_1,  MI_As_1, MI_E_2,  MI_A_2,  MI_D_3,  MI_G_3,  MI_C_4,  _______, _______,
+    MI_D_1,  MI_G_1,  MI_C_2,  MI_F_2,  MI_As_2, MI_E_3,  MI_A_3,  MI_D_4,  _______, _______,
+    MI_E_1,  MI_A_1,  MI_D_2,  MI_G_2,  MI_C_3,  MI_F_3,  MI_As_3, MI_E_4,  _______, _______
+  ),
+
+  [_AEOLIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_F_1,  MI_As_1, MI_Ds_2, MI_Gs_2, MI_D_3,  MI_G_3,  MI_C_4,  _______, _______,
+    MI_D_1,  MI_G_1,  MI_C_2,  MI_F_2,  MI_As_2, MI_Ds_3, MI_Gs_3, MI_D_4,  _______, _______,
+    MI_Ds_1, MI_Gs_1, MI_D_2,  MI_G_2,  MI_C_3,  MI_F_3,  MI_As_3, MI_Ds_4, _______, _______
+  ),
+
+  [_LOCRIAN] = LAYOUT_ortho_3x10(
+    MI_C_1,  MI_F_1,  MI_As_1, MI_Ds_2, MI_Gs_2, MI_Cs_3, MI_Fs_3, MI_C_4,  _______, _______,
+    MI_Cs_1, MI_Fs_1, MI_C_2,  MI_F_2,  MI_As_2, MI_Ds_3, MI_Gs_3, MI_Cs_4, _______, _______,
+    MI_Ds_1, MI_Gs_1, MI_Cs_2, MI_Fs_2, MI_C_3,  MI_F_3,  MI_As_3, MI_Ds_4, _______, _______
+  ),
+
+  [_MENU] = LAYOUT_ortho_3x10(
+    IONIAN,   LYDIAN,     LOCRIAN, _______, _______, _______, _______, _______, _______, _______,
+    DORIAN,   MIXOLYDIAN, _______, _______, _______, _______, _______, _______, _______, _______,
+    PHRYGIAN, AEOLIAN,    _______, _______, _______, _______, _______, _______, RESET,   _______
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case IONIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_IONIAN);
+      }
+      break;
+    case DORIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DORIAN);
+      }
+      break;
+    case PHRYGIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_PHRYGIAN);
+      }
+      break;
+    case LYDIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_LYDIAN);
+      }
+      break;
+    case MIXOLYDIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_MIXOLYDIAN);
+      }
+      break;
+    case AEOLIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_AEOLIAN);
+      }
+      break;
+    case LOCRIAN:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_LOCRIAN);
+      }
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/readme.md b/keyboards/40percentclub/gherkin/keymaps/midi/readme.md
new file mode 100644 (file)
index 0000000..f8fad08
--- /dev/null
@@ -0,0 +1,14 @@
+### Gherkin Midi
+A gherkin midi layout that should cover most midi note playing needs.
+
+A 3x8 grid of notes written bottom left to right upwards as notes for the selected mode, with octave and transpose note controls at the top. Menu accesses other mode layouts, persisted to keyboard settings, and a reset for firmware programming.
+
+Modes are set by pressing Menu and their corresponding note from the C Ionian layout. That is, for Aeolian, press Menu and A 1. For Phrygian, press Menu and E 1.
+
+#### Keyboard Default Layout
+![](https://i.imgur.com/VNc0GsI.jpg)
+
+Keyboard Editor Gist [link](https://gist.github.com/scottsheffield/c57859fe1a85d703f5387bf8ce41028c)
+
+#### Glamour Shot
+![](https://i.imgur.com/B3Q4JoU.jpg)
\ No newline at end of file
diff --git a/keyboards/40percentclub/gherkin/keymaps/midi/rules.mk b/keyboards/40percentclub/gherkin/keymaps/midi/rules.mk
new file mode 100644 (file)
index 0000000..bfc6dbb
--- /dev/null
@@ -0,0 +1,8 @@
+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
+BACKLIGHT_ENABLE = no  # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no
+MIDI_ENABLE = yes
index 8db31b254d314efa1cdbc73dc8b031a48cb4cee3..01e20454c3044397b2c6544cbe16966d3c94dee6 100644 (file)
@@ -23,8 +23,8 @@
 #define PRODUCT_ID      0x0807 // 1800 -> 0x0708 -> 0x0807 ;-)
 #define DEVICE_VER      0x0001
 #define MANUFACTURER    AEboards
-#define PRODUCT         Aegis
-#define DESCRIPTION     1800 Left Handed Keyboard
+#define PRODUCT         AEboards Aegis
+#define DESCRIPTION     AEboards Aegis
 
 /* key matrix size */
 #define MATRIX_ROWS 12
diff --git a/keyboards/aeboards/ext65/config.h b/keyboards/aeboards/ext65/config.h
new file mode 100644 (file)
index 0000000..2f66f3f
--- /dev/null
@@ -0,0 +1,71 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x4145 // "AE"
+#define PRODUCT_ID      0xAE65 // AEboards EXT65
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    AEboards
+#define PRODUCT         AEboards Ext65
+#define DESCRIPTION     AEboards Ext65
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 10
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { C6, C7, B5, B6, D7, B4, D4, D6, B7, E6 }
+#define MATRIX_COL_PINS { B2, B3, B1, B0, F7, F0, F1, F4, F5, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+//#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*10*2)) = (35+800)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 835
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 189
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+
diff --git a/keyboards/aeboards/ext65/ext65.c b/keyboards/aeboards/ext65/ext65.c
new file mode 100644 (file)
index 0000000..f52f8d4
--- /dev/null
@@ -0,0 +1,18 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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/>.
+ */
+
+// Nothing to see here, move along... ;-)
+
diff --git a/keyboards/aeboards/ext65/ext65.h b/keyboards/aeboards/ext65/ext65.h
new file mode 100644 (file)
index 0000000..de79b92
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+#define LAYOUT_ext65( \
+  K000, K100, K001, K101,  K002, K102, K003, K103, K004, K104, K005, K105, K006, K106, K007, K107, K008, K108, K508, K009, \
+  K200, K300, K201, K301,  K202, K302, K203, K303, K204, K304, K205, K305, K206, K306, K207, K307, K208, K308,       K209, \
+  K400, K500, K401, K501,  K402, K502, K403, K503, K404, K504, K405, K505, K406, K506, K407, K507, K408,             K409, \
+  K600, K700, K601, K701,  K602, K702, K603, K703, K604, K704, K605, K705, K606, K706, K607, K708,             K608, K709, \
+  K800, K900, K801, K901,  K802, K902, K803,                   K805,             K906, K807,             K908, K808, K909  \
+) { \
+  { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009 }, \
+  { K100, K101, K102, K103, K104, K105, K106, K107, K108, ____ }, \
+  { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209 }, \
+  { K300, K301, K302, K303, K304, K305, K306, K307, K308, ____ }, \
+  { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409 }, \
+  { K500, K501, K502, K503, K504, K505, K506, K507, K508, ____ }, \
+  { K600, K601, K602, K603, K604, K605, K606, K607, K608, ____ }, \
+  { K700, K701, K702, K703, K704, K705, K706, ____, K708, K709 }, \
+  { K800, K801, K802, K803, ____, K805, ____, K807, K808, ____ }, \
+  { K900, K901, K902, ____, ____, ____, K906, ____, K908, K909 } \
+}
diff --git a/keyboards/aeboards/ext65/keymaps/default/keymap.c b/keyboards/aeboards/ext65/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..79d5ecf
--- /dev/null
@@ -0,0 +1,104 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap BASE: (Base Layer) Default Layer
+   * ,-------------------.  ,-------------------------------------------------------------------.     
+   * |-   | *  | /  |NmLK|  |Esc| 1 |  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|pipe| ~  | Pscr|
+   * |-------------------|  |-------------------------------------------------------------------| 
+   * |    | 9  | 8  | 7  |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]| BSPC  | Del |
+   * |  + |--------------|  |-------------------------------------------------------------------| 
+   * |    | 6  | 5  | 4  |  |Caps   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return   | Pgup|
+   * |-------------------|  |-------------------------------------------------------------------|
+   * |    | 3  | 2  | 1  |  |Shift    |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up | Pgdn|
+   * | ENT|-------------------------------------------------------------------------------------|
+   * |    | .  | 0       |  | Ctrl | Win | Alt |    Space        | FN | Ctrl |  |Left| Dn | Rght|
+   * `------------------------------------------------------------------------------------------'
+   */
+  [0] = LAYOUT_ext65(
+    KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, 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_PSCR,
+    KC_PPLS, KC_P9  , KC_P8  , KC_P7  , 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_DEL ,
+    KC_PPLS, KC_P6  , KC_P5  , KC_P4  , 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_PENT, KC_P3  , KC_P2  , KC_P1  , 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_PENT, KC_PDOT, KC_P0  , KC_P0  , KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC ,                   MO(1)  , KC_RCTL,                   KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+  [1] = LAYOUT_ext65(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+    KC_TRNS, 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] = LAYOUT_ext65(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  [3] = LAYOUT_ext65(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS, KC_TRNS
+  )
+};
+
+
+void keyboard_pre_init_user(void) {
+  // Call the keyboard pre init code.
+
+  // Set our LED pins as output
+  setPinOutput(D5);
+  setPinOutput(D3);
+  setPinOutput(D2);
+  setPinOutput(D1);
+}
+
+void led_set_user(uint8_t usb_led) {
+    if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinLow(D5);
+    } else {
+        writePinHigh(D5);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinLow(D3);
+    } else {
+        writePinHigh(D3);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinLow(D2);
+    } else {
+        writePinHigh(D2);
+    }
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+    switch (biton32(state)) {
+      case 1:
+        writePinHigh(D1);
+        break;
+      default: //  for any other layers, or the default layer
+        writePinLow(D1);
+        break;
+      }
+    return state;
+}
\ No newline at end of file
diff --git a/keyboards/aeboards/ext65/keymaps/default/readme.md b/keyboards/aeboards/ext65/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..b4d9a0b
--- /dev/null
@@ -0,0 +1,2 @@
+# The Default Ext65 Layout
+
diff --git a/keyboards/aeboards/ext65/keymaps/via/keymap.c b/keyboards/aeboards/ext65/keymaps/via/keymap.c
new file mode 100644 (file)
index 0000000..3079c52
--- /dev/null
@@ -0,0 +1,103 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * 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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap BASE: (Base Layer) Default Layer
+   * ,-------------------.  ,-------------------------------------------------------------------.     
+   * |-   | *  | /  |NmLK|  |Esc| 1 |  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|pipe| ~  | Pscr|
+   * |-------------------|  |-------------------------------------------------------------------| 
+   * |    | 9  | 8  | 7  |  |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]| BSPC  | Del |
+   * |  + |--------------|  |-------------------------------------------------------------------| 
+   * |    | 6  | 5  | 4  |  |Caps   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return   | Pgup|
+   * |-------------------|  |-------------------------------------------------------------------|
+   * |    | 3  | 2  | 1  |  |Shift    |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up | Pgdn|
+   * | ENT|-------------------------------------------------------------------------------------|
+   * |    | .  | 0       |  | Ctrl | Win | Alt |    Space        | FN | Ctrl |  |Left| Dn | Rght|
+   * `------------------------------------------------------------------------------------------'
+   */
+  [0] = LAYOUT_ext65(
+    KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, 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_PSCR,
+    KC_PPLS, KC_P9  , KC_P8  , KC_P7  , 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_DEL ,
+    KC_PPLS, KC_P6  , KC_P5  , KC_P4  , 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_PGUP,
+    KC_PENT, KC_P3  , KC_P2  , KC_P1  , 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_PENT, KC_PDOT, KC_P0  , KC_P0  , KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC ,                   MO(1)  , KC_RCTL,                   KC_LEFT, KC_DOWN, KC_RGHT
+  ),
+
+  [1] = LAYOUT_ext65(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+    KC_TRNS, 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] = LAYOUT_ext65(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  [3] = LAYOUT_ext65(
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                            KC_TRNS,                   KC_TRNS, KC_TRNS,                   KC_TRNS, KC_TRNS, KC_TRNS
+  )
+};
+
+void keyboard_pre_init_user(void) {
+  // Call the keyboard pre init code.
+
+  // Set our LED pins as output
+  setPinOutput(D5);
+  setPinOutput(D3);
+  setPinOutput(D2);
+  setPinOutput(D1);
+}
+
+void led_set_user(uint8_t usb_led) {
+    if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinLow(D5);
+    } else {
+        writePinHigh(D5);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinLow(D3);
+    } else {
+        writePinHigh(D3);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinLow(D2);
+    } else {
+        writePinHigh(D2);
+    }
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+    switch (biton32(state)) {
+      case 1:
+        writePinHigh(D1);
+        break;
+      default: //  for any other layers, or the default layer
+        writePinLow(D1);
+        break;
+      }
+    return state;
+}
diff --git a/keyboards/aeboards/ext65/keymaps/via/readme.md b/keyboards/aeboards/ext65/keymaps/via/readme.md
new file mode 100644 (file)
index 0000000..c2c416d
--- /dev/null
@@ -0,0 +1,2 @@
+# The VIA Ext65 Layout
+
diff --git a/keyboards/aeboards/ext65/keymaps/via/rules.mk b/keyboards/aeboards/ext65/keymaps/via/rules.mk
new file mode 100644 (file)
index 0000000..f072c67
--- /dev/null
@@ -0,0 +1,68 @@
+# project specific files
+SRC =  keyboards/wilba_tech/wt_main.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
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   change yes to no to disable
+#
+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
+# 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 support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/aeboards/ext65/readme.md b/keyboards/aeboards/ext65/readme.md
new file mode 100644 (file)
index 0000000..5ee7fb4
--- /dev/null
@@ -0,0 +1,14 @@
+EXT65
+===
+
+A southpaw inspired keyboard by [aeboards](https://aeboards.com/)
+
+Keyboard Maintainer: [Xelus22](https://github.com/Xelus22)  
+Hardware Supported: EXT65 
+Hardware Availability: Custom keyboard group buys
+
+Make example for this keyboard (after setting up your build environment):
+
+    make aeboards/ext65:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
\ No newline at end of file
diff --git a/keyboards/aeboards/ext65/rules.mk b/keyboards/aeboards/ext65/rules.mk
new file mode 100644 (file)
index 0000000..f1c6322
--- /dev/null
@@ -0,0 +1,65 @@
+# project specific files
+SRC =  keyboards/wilba_tech/wt_main.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
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+#   change yes to no to disable
+#
+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
+# 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 support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
diff --git a/keyboards/ai03/quasar/config.h b/keyboards/ai03/quasar/config.h
new file mode 100644 (file)
index 0000000..7c02f91
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 Ryota Goto
+
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xA103
+#define PRODUCT_ID      0x0010
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Ryota Goto
+#define PRODUCT         Quasar
+#define DESCRIPTION     SSK Controller
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 16
+
+/*
+ * 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, D4, D6, D7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+//   #define RGBLED_NUM 16
+//   #define RGBLIGHT_HUE_STEP 8
+//   #define RGBLIGHT_SAT_STEP 8
+//   #define RGBLIGHT_VAL_STEP 8
+//   #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+//   #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+//   #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+//   #define RGBLIGHT_EFFECT_BREATHING
+//   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//   #define RGBLIGHT_EFFECT_SNAKE
+//   #define RGBLIGHT_EFFECT_KNIGHT
+//   #define RGBLIGHT_EFFECT_CHRISTMAS
+//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//   #define RGBLIGHT_EFFECT_RGB_TEST
+//   #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+//   /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+//   #define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
+//   /*==== use exp() and sin() ====*/
+//   #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
+//   #define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_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_HELP           H
+//#define MAGIC_KEY_HELP_ALT       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         0
+//#define MAGIC_KEY_LAYER0_ALT     GRAVE
+//#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     B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_EEPROM_CLEAR   BSPACE
+//#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
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES           2     //< number of visible lines of the display
+#define LCD_DISP_LENGTH    16     //< visibles characters per line of the display
+
+#define LCD_IO_MODE      1            //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT         PORTB        //< port for the LCD lines
+#define LCD_DATA0_PORT   LCD_PORT     //< port for 4bit data bit 0
+#define LCD_DATA1_PORT   LCD_PORT     //< port for 4bit data bit 1
+#define LCD_DATA2_PORT   LCD_PORT     //< port for 4bit data bit 2
+#define LCD_DATA3_PORT   LCD_PORT     //< port for 4bit data bit 3
+#define LCD_DATA0_PIN    4            //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN    5            //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN    6            //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN    7            //< pin for 4bit data bit 3
+#define LCD_RS_PORT      LCD_PORT     //< port for RS line
+#define LCD_RS_PIN       3            //< pin  for RS line
+#define LCD_RW_PORT      LCD_PORT     //< port for RW line
+#define LCD_RW_PIN       2            //< pin  for RW line
+#define LCD_E_PORT       LCD_PORT     //< port for Enable line
+#define LCD_E_PIN        1            //< pin  for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/ai03/quasar/info.json b/keyboards/ai03/quasar/info.json
new file mode 100644 (file)
index 0000000..20637af
--- /dev/null
@@ -0,0 +1,97 @@
+{
+    "keyboard_name": "quasar", 
+    "url": "https://github.com/ai03-2725/Quasar/", 
+    "maintainer": "ai03", 
+    "width": 18.5, 
+    "height": 6.75, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                               {"label":"Esc", "x":0, "y":0},
+                               {"label":"F1", "x":2, "y":0},
+                               {"label":"F2", "x":3, "y":0},
+                               {"label":"F3", "x":4, "y":0},
+                               {"label":"F4", "x":5, "y":0},
+                               {"label":"F5", "x":6.5, "y":0},
+                               {"label":"F6", "x":7.5, "y":0},
+                               {"label":"F7", "x":8.5, "y":0},
+                               {"label":"F8", "x":9.5, "y":0},
+                               {"label":"F9", "x":11, "y":0},
+                               {"label":"F10", "x":12, "y":0},
+                               {"label":"F11", "x":13, "y":0},
+                               {"label":"F12", "x":14, "y":0},
+                               {"label":"PrtSc", "x":15.5, "y":0},
+                               {"label":"Scroll Lock", "x":16.5, "y":0},
+                               {"label":"Pause", "x":17.5, "y":0},
+                               {"label":"~", "x":0, "y":1.75},
+                               {"label":"!", "x":1, "y":1.75},
+                               {"label":"@", "x":2, "y":1.75},
+                               {"label":"#", "x":3, "y":1.75},
+                               {"label":"$", "x":4, "y":1.75},
+                               {"label":"%", "x":5, "y":1.75},
+                               {"label":"^", "x":6, "y":1.75},
+                               {"label":"&", "x":7, "y":1.75},
+                               {"label":"*", "x":8, "y":1.75},
+                               {"label":"(", "x":9, "y":1.75},
+                               {"label":")", "x":10, "y":1.75},
+                               {"label":"_", "x":11, "y":1.75},
+                               {"label":"+", "x":12, "y":1.75},
+                               {"label":"Backspace", "x":13, "y":1.75, "w":2},
+                               {"label":"Insert", "x":15.5, "y":1.75},
+                               {"label":"Home", "x":16.5, "y":1.75},
+                               {"label":"PgUp", "x":17.5, "y":1.75},
+                               {"label":"Tab", "x":0, "y":2.75, "w":1.5},
+                               {"label":"Q", "x":1.5, "y":2.75},
+                               {"label":"W", "x":2.5, "y":2.75},
+                               {"label":"E", "x":3.5, "y":2.75},
+                               {"label":"R", "x":4.5, "y":2.75},
+                               {"label":"T", "x":5.5, "y":2.75},
+                               {"label":"Y", "x":6.5, "y":2.75},
+                               {"label":"U", "x":7.5, "y":2.75},
+                               {"label":"I", "x":8.5, "y":2.75},
+                               {"label":"O", "x":9.5, "y":2.75},
+                               {"label":"P", "x":10.5, "y":2.75},
+                               {"label":"{", "x":11.5, "y":2.75},
+                               {"label":"}", "x":12.5, "y":2.75},
+                               {"label":"|", "x":13.5, "y":2.75, "w":1.5},
+                               {"label":"Delete", "x":15.5, "y":2.75},
+                               {"label":"End", "x":16.5, "y":2.75},
+                               {"label":"PgDn", "x":17.5, "y":2.75},
+                               {"label":"Caps Lock", "x":0, "y":3.75, "w":1.25},
+                               {"label":"A", "x":1.75, "y":3.75},
+                               {"label":"S", "x":2.75, "y":3.75},
+                               {"label":"D", "x":3.75, "y":3.75},
+                               {"label":"F", "x":4.75, "y":3.75},
+                               {"label":"G", "x":5.75, "y":3.75},
+                               {"label":"H", "x":6.75, "y":3.75},
+                               {"label":"J", "x":7.75, "y":3.75},
+                               {"label":"K", "x":8.75, "y":3.75},
+                               {"label":"L", "x":9.75, "y":3.75},
+                               {"label":":", "x":10.75, "y":3.75},
+                               {"label":"\"", "x":11.75, "y":3.75},
+                               {"label":"Enter", "x":12.75, "y":3.75, "w":2.25},
+                               {"label":"Shift", "x":0, "y":4.75, "w":2.25},
+                               {"label":"Z", "x":2.25, "y":4.75},
+                               {"label":"X", "x":3.25, "y":4.75},
+                               {"label":"C", "x":4.25, "y":4.75},
+                               {"label":"V", "x":5.25, "y":4.75},
+                               {"label":"B", "x":6.25, "y":4.75},
+                               {"label":"N", "x":7.25, "y":4.75},
+                               {"label":"M", "x":8.25, "y":4.75},
+                               {"label":"<", "x":9.25, "y":4.75},
+                               {"label":">", "x":10.25, "y":4.75},
+                               {"label":"?", "x":11.25, "y":4.75},
+                               {"label":"Shift", "x":12.25, "y":4.75, "w":2.75},
+                               {"label":"\u2191", "x":16.5, "y":4.75},
+                               {"label":"Ctrl", "x":0, "y":5.75, "w":1.5},
+                               {"label":"Alt", "x":2.5, "y":5.75, "w":1.5},
+                               {"x":4, "y":5.75, "w":7},
+                               {"label":"Alt", "x":11, "y":5.75, "w":1.5},
+                               {"label":"Ctrl", "x":13.5, "y":5.75, "w":1.5},
+                               {"label":"\u2190", "x":15.5, "y":5.75},
+                               {"label":"\u2193", "x":16.5, "y":5.75},
+                               {"label":"\u2192", "x":17.5, "y":5.75}
+                       ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/ai03/quasar/keymaps/ai03/keymap.c b/keyboards/ai03/quasar/keymaps/ai03/keymap.c
new file mode 100644 (file)
index 0000000..e2dca55
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 QMK_KEYBOARD_H
+
+
+/*
+ *  K702,       K503, K504, K604, K704,    K706, K708, K609, K509,    K506, K406, K411, K412,    K415, K315, K114, \
+ *  K502, K402, K403, K404, K405, K505, K507, K407, K408, K409, K410, K510, K508,       K606,    K512, K514, K513, \
+ *  K602, K302, K303, K304, K305, K605, K607, K307, K308, K309, K310, K610, K608,       K206,    K511, K414, K413, \
+ *  K603, K202, K203, K204, K205, K705, K707, K207, K208, K209, K210, K710,             K106,                      \
+ *  K601,       K102, K103, K104, K105, K005, K007, K107, K108, K109, K010,             K101,          K714,       \
+ *  K500,       K715,                         K006,                         K015,       K100,    K014, K011, K012  \
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* Base */
+    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_LGUI, 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, 
+       MO(1),   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_UP,            
+       KC_LCTL,          KC_LALT,                                     KC_SPC,                                      KC_GRV,           KC_DEL,     KC_LEFT, KC_DOWN, KC_RGHT  
+  ),
+  [1] = LAYOUT( /* FN */
+    RESET,            _______, _______, _______, _______,     _______, _______, _______, _______,      _______, _______, _______, _______,    _______, _______, _______, 
+       _______, 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_CAPS, _______, KC_UP,   _______, _______, _______, _______, _______, KC_PGUP, _______, KC_MPRV, KC_MPLY, KC_MNXT,          _______,    _______, _______, _______, 
+       _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_VOLU, KC_VOLD, KC_HOME, KC_PGDN, KC_END,  _______, _______,                   _______,                               
+       _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   KC_PSCR,             KC_PGUP,          
+       _______,          _______,                                     _______,                                     _______,          KC_BSPC,    KC_HOME, KC_PGDN, KC_END   
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/ai03/quasar/keymaps/ai03/readme.md b/keyboards/ai03/quasar/keymaps/ai03/readme.md
new file mode 100644 (file)
index 0000000..6f6a0b4
--- /dev/null
@@ -0,0 +1,3 @@
+# The ai03 keymap for Quasar
+
+Focuses functionality mainly into the 60% cluster.
\ No newline at end of file
diff --git a/keyboards/ai03/quasar/keymaps/default/keymap.c b/keyboards/ai03/quasar/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..6de4595
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 QMK_KEYBOARD_H
+
+
+/*
+ *  K702,       K503, K504, K604, K704,    K706, K708, K609, K509,    K506, K406, K411, K412,    K415, K315, K114, \
+ *  K502, K402, K403, K404, K405, K505, K507, K407, K408, K409, K410, K510, K508,       K606,    K512, K514, K513, \
+ *  K602, K302, K303, K304, K305, K605, K607, K307, K308, K309, K310, K610, K608,       K206,    K511, K414, K413, \
+ *  K603, K202, K203, K204, K205, K705, K707, K207, K208, K209, K210, K710,             K106,                      \
+ *  K601,       K102, K103, K104, K105, K005, K007, K107, K108, K109, K010,             K101,          K714,       \
+ *  K500,       K715,                         K006,                         K015,       K100,    K014, K011, K012  \
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* Base */
+    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, 
+       MO(1),   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_UP,            
+       KC_LCTL,          KC_LALT,                                     KC_SPC,                                      KC_RALT,          KC_RCTL,    KC_LEFT, KC_DOWN, KC_RGHT  
+  ),
+  [1] = LAYOUT( /* FN */
+    RESET,            _______, _______, _______, _______,     _______, _______, _______, _______,      _______, _______, _______, _______,    _______, _______, _______, 
+       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,    _______, _______, _______, 
+       KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,    _______, _______, _______, 
+       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   _______,                               
+       _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   _______,             _______,          
+       _______,          _______,                                     _______,                                     _______,          _______,    _______, _______, _______  
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/ai03/quasar/keymaps/default/readme.md b/keyboards/ai03/quasar/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..bcfeda1
--- /dev/null
@@ -0,0 +1,4 @@
+# The default keymap for Quasar
+
+Caps lock behaves as Fn/Layer. Press caps+esc for reset, caps+tab for caps lock.  
+The rest is basic WKL TKL.
\ No newline at end of file
diff --git a/keyboards/ai03/quasar/quasar.c b/keyboards/ai03/quasar/quasar.c
new file mode 100644 (file)
index 0000000..ac8b751
--- /dev/null
@@ -0,0 +1,51 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 "quasar.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+
+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/ai03/quasar/quasar.h b/keyboards/ai03/quasar/quasar.h
new file mode 100644 (file)
index 0000000..4125f81
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+    K702,       K503, K504, K604, K704,    K706, K708, K609, K509,    K506, K406, K411, K412,    K415, K315, K114, \
+       K502, K402, K403, K404, K405, K505, K507, K407, K408, K409, K410, K510, K508,       K606,    K512, K514, K513, \
+       K602, K302, K303, K304, K305, K605, K607, K307, K308, K309, K310, K610, K608,       K206,    K511, K414, K413, \
+       K603, K202, K203, K204, K205, K705, K707, K207, K208, K209, K210, K710,             K106,                      \
+       K601,       K102, K103, K104, K105, K005, K007, K107, K108, K109, K010,             K101,          K714,       \
+       K500,       K715,                         K006,                         K015,       K100,    K014, K011, K012  \
+) \
+{ \
+    { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K005,  K006,  K007,  KC_NO, KC_NO, K010,  K011,  K012,  KC_NO, K014,  K015  }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  KC_NO, KC_NO, KC_NO, KC_NO, K114,  KC_NO }, \
+       { KC_NO, KC_NO, K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+       { KC_NO, KC_NO, K302,  K303,  K304,  K305,  KC_NO, K307,  K308,  K309,  K310,  KC_NO, KC_NO, KC_NO, KC_NO, K315  }, \
+       { KC_NO, KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  K414,  K415  }, \
+       { K500,  KC_NO, K502,  K503,  K504,  K505,  K506,  K507,  K508,  K509,  K510,  K511,  K512,  K513,  K514,  KC_NO }, \
+       { KC_NO, K601,  K602,  K603,  K604,  K605,  K606,  K607,  K608,  K609,  K610,  KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+       { KC_NO, KC_NO, K702,  KC_NO, K704,  K705,  K706,  K707,  K708,  KC_NO, K710,  KC_NO, KC_NO, KC_NO, K714,  K715  }  \
+}
diff --git a/keyboards/ai03/quasar/readme.md b/keyboards/ai03/quasar/readme.md
new file mode 100644 (file)
index 0000000..e0ea30a
--- /dev/null
@@ -0,0 +1,15 @@
+# Quasar
+
+![Quasar](https://i.imgur.com/XIbX2Pw.jpg)
+
+Replacement controller for the IBM Model M Space Saving keyboard
+
+Keyboard Maintainer: [ai03](https://github.com/ai03-2725)  
+Hardware Supported: The Quasar PCB  
+Hardware Availability: [Source available on GitHub](https://github.com/ai03-2725/Quasar/)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ai03/quasar:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ai03/quasar/rules.mk b/keyboards/ai03/quasar/rules.mk
new file mode 100644 (file)
index 0000000..afbd1de
--- /dev/null
@@ -0,0 +1,80 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   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 = 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
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/cannonkeys/an_c/an_c.c b/keyboards/cannonkeys/an_c/an_c.c
new file mode 100644 (file)
index 0000000..9dfb80e
--- /dev/null
@@ -0,0 +1 @@
+#include "an_c.h"
diff --git a/keyboards/cannonkeys/an_c/an_c.h b/keyboards/cannonkeys/an_c/an_c.h
new file mode 100644 (file)
index 0000000..6d20850
--- /dev/null
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "quantum.h"
+
+#define KNO KC_NO
+
+#define LAYOUT_60_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,      K1E, \
+  K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,           K2E, \
+  K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+  K40, K41,  K42,              K45,            K49, K4A, K4B,           K4E \
+) { \
+  {  K00,  K01,  K02,  K03,  K04,    K05,    K06,    K07,    K08,    K09,  K0A,  K0B,  K0C,  K0D,  KNO}, \
+  {  K10,  K11,  K12,  K13,  K14,    K15,    K16,    K17,    K18,    K19,  K1A,  K1B,  K1C,  KNO,  K1E   }, \
+  {  K20,  K21,  K22,  K23,  K24,    K25,    K26,    K27,    K28,    K29,  K2A,  K2B,  KNO,  KNO,  K2E  }, \
+  {  K30,  K31,  K32,  K33,  K34,    K35,    K36,    K37,    K38,    K39,  K3A,  K3B,  KNO,  KNO,  KNO  }, \
+  {  K40,  K41,  K42,  KNO,  KNO,    K45,    KNO,    KNO,    KNO,    K49,  K4A,  K4B,  KNO,  KNO,  K4E  }  \
+}
+
+#define LAYOUT_60_tsangan_hhkb( \
+  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,      K1E, \
+  K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,           K2E, \
+  K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,           K3E,\
+  K40, K41,  K42,              K45,            K49,      K4B,           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,  KNO,  K1E   }, \
+  {  K20,  K21,  K22,  K23,  K24,    K25,    K26,    K27,    K28,    K29,  K2A,  K2B,  KNO,  KNO,  K2E  }, \
+  {  K30,  K31,  K32,  K33,  K34,    K35,    K36,    K37,    K38,    K39,  K3A,  K3B,  KNO,  KNO,  K3E  }, \
+  {  K40,  K41,  K42,  KNO,  KNO,    K45,    KNO,    KNO,    KNO,    K49,  KNO,  K4B,  KNO,  KNO,  K4E  }  \
+}
+
+#define LAYOUT_all( \
+  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,      K1E, \
+  K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,          K2E, \
+  K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,          K3E,\
+  K40, K41,  K42,              K45,            K49, K4A, K4B,          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,  KNO,  K1E   }, \
+  {  K20,  K21,  K22,  K23,  K24,    K25,    K26,    K27,    K28,    K29,  K2A,  K2B,  KNO,  KNO,  K2E  }, \
+  {  K30,  K31,  K32,  K33,  K34,    K35,    K36,    K37,    K38,    K39,  K3A,  K3B,  KNO,  KNO,  K3E  }, \
+  {  K40,  K41,  K42,  KNO,  KNO,    K45,    KNO,    KNO,    KNO,    K49,  K4A,  K4B,  KNO,  KNO,  K4E  }  \
+}
diff --git a/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.c b/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.c
new file mode 100644 (file)
index 0000000..9d10fbd
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+    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.
+*/
+
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @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.
+ */
+const PALConfig pal_default_config = {
+#if STM32_HAS_GPIOA
+  {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+   VAL_GPIOA_ODR,   VAL_GPIOA_AFRL,   VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+  {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+   VAL_GPIOB_ODR,   VAL_GPIOB_AFRL,   VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+  {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+   VAL_GPIOC_ODR,   VAL_GPIOC_AFRL,   VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+  {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+   VAL_GPIOD_ODR,   VAL_GPIOD_AFRL,   VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+  {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+   VAL_GPIOE_ODR,   VAL_GPIOE_AFRL,   VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+  {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+   VAL_GPIOF_ODR,   VAL_GPIOF_AFRL,   VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+  {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+   VAL_GPIOG_ODR,   VAL_GPIOG_AFRL,   VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+  {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+   VAL_GPIOH_ODR,   VAL_GPIOH_AFRL,   VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+  {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+   VAL_GPIOI_ODR,   VAL_GPIOI_AFRL,   VAL_GPIOI_AFRH}
+#endif
+};
+#endif
+
+void enter_bootloader_mode_if_requested(void);
+
+/**
+ * @brief   Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ *          and before any other initialization.
+ */
+void __early_init(void) {
+  enter_bootloader_mode_if_requested();
+  stm32_clock_init();
+}
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief   MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+  (void)mmcp;
+  /* TODO: Fill the implementation.*/
+  return true;
+}
+
+/**
+ * @brief   MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+  (void)mmcp;
+  /* TODO: Fill the implementation.*/
+  return false;
+}
+#endif
+
+/**
+ * @brief   Board-specific initialization code.
+ * @todo    Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.h b/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.h
new file mode 100644 (file)
index 0000000..de3a93d
--- /dev/null
@@ -0,0 +1,922 @@
+/*
+    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.
+*/
+
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#ifndef BOARD_H
+#define BOARD_H
+
+/*
+ * Setup for ST STM32F072B-Discovery board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_ST_STM32F072B_DISCOVERY
+#define BOARD_NAME                  "ST STM32F072B-Discovery"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: HSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK                32768
+#endif
+
+#define STM32_LSEDRV                (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK                0U
+#endif
+
+#define STM32_HSE_BYPASS
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F072xB
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_BUTTON                0U
+#define GPIOA_PIN1                  1U
+#define GPIOA_PIN2                  2U
+#define GPIOA_PIN3                  3U
+#define GPIOA_PIN4                  4U
+#define GPIOA_PIN5                  5U
+#define GPIOA_PIN6                  6U
+#define GPIOA_PIN7                  7U
+#define GPIOA_PIN8                  8U
+#define GPIOA_PIN9                  9U
+#define GPIOA_PIN10                 10U
+#define GPIOA_USB_DM                11U
+#define GPIOA_USB_DP                12U
+#define GPIOA_SWDIO                 13U
+#define GPIOA_SWCLK                 14U
+#define GPIOA_PIN15                 15U
+
+#define GPIOB_PIN0                  0U
+#define GPIOB_PIN1                  1U
+#define GPIOB_PIN2                  2U
+#define GPIOB_PIN3                  3U
+#define GPIOB_PIN4                  4U
+#define GPIOB_PIN5                  5U
+#define GPIOB_PIN6                  6U
+#define GPIOB_PIN7                  7U
+#define GPIOB_PIN8                  8U
+#define GPIOB_PIN9                  9U
+#define GPIOB_PIN10                 10U
+#define GPIOB_PIN11                 11U
+#define GPIOB_PIN12                 12U
+#define GPIOB_SPI2_SCK              13U
+#define GPIOB_SPI2_MISO             14U
+#define GPIOB_SPI2_MOSI             15U
+
+#define GPIOC_MEMS_CS               0U
+#define GPIOC_PIN1                  1U
+#define GPIOC_PIN2                  2U
+#define GPIOC_PIN3                  3U
+#define GPIOC_PIN4                  4U
+#define GPIOC_PIN5                  5U
+#define GPIOC_LED_RED               6U
+#define GPIOC_LED_BLUE              7U
+#define GPIOC_LED_ORANGE            8U
+#define GPIOC_LED_GREEN             9U
+#define GPIOC_PIN10                 10U
+#define GPIOC_PIN11                 11U
+#define GPIOC_PIN12                 12U
+#define GPIOC_PIN13                 13U
+#define GPIOC_OSC32_IN              14U
+#define GPIOC_OSC32_OUT             15U
+
+#define GPIOD_PIN0                  0U
+#define GPIOD_PIN1                  1U
+#define GPIOD_PIN2                  2U
+#define GPIOD_PIN3                  3U
+#define GPIOD_PIN4                  4U
+#define GPIOD_PIN5                  5U
+#define GPIOD_PIN6                  6U
+#define GPIOD_PIN7                  7U
+#define GPIOD_PIN8                  8U
+#define GPIOD_PIN9                  9U
+#define GPIOD_PIN10                 10U
+#define GPIOD_PIN11                 11U
+#define GPIOD_PIN12                 12U
+#define GPIOD_PIN13                 13U
+#define GPIOD_PIN14                 14U
+#define GPIOD_PIN15                 15U
+
+#define GPIOE_PIN0                  0U
+#define GPIOE_PIN1                  1U
+#define GPIOE_PIN2                  2U
+#define GPIOE_PIN3                  3U
+#define GPIOE_PIN4                  4U
+#define GPIOE_PIN5                  5U
+#define GPIOE_PIN6                  6U
+#define GPIOE_PIN7                  7U
+#define GPIOE_PIN8                  8U
+#define GPIOE_PIN9                  9U
+#define GPIOE_PIN10                 10U
+#define GPIOE_PIN11                 11U
+#define GPIOE_PIN12                 12U
+#define GPIOE_PIN13                 13U
+#define GPIOE_PIN14                 14U
+#define GPIOE_PIN15                 15U
+
+#define GPIOF_OSC_IN                0U
+#define GPIOF_OSC_OUT               1U
+#define GPIOF_PIN2                  2U
+#define GPIOF_PIN3                  3U
+#define GPIOF_PIN4                  4U
+#define GPIOF_PIN5                  5U
+#define GPIOF_PIN6                  6U
+#define GPIOF_PIN7                  7U
+#define GPIOF_PIN8                  8U
+#define GPIOF_PIN9                  9U
+#define GPIOF_PIN10                 10U
+#define GPIOF_PIN11                 11U
+#define GPIOF_PIN12                 12U
+#define GPIOF_PIN13                 13U
+#define GPIOF_PIN14                 14U
+#define GPIOF_PIN15                 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_BUTTON                 PAL_LINE(GPIOA, 0U)
+#define LINE_USB_DM                 PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP                 PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO                  PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK                  PAL_LINE(GPIOA, 14U)
+
+#define LINE_SPI2_SCK               PAL_LINE(GPIOB, 13U)
+#define LINE_SPI2_MISO              PAL_LINE(GPIOB, 14U)
+#define LINE_SPI2_MOSI              PAL_LINE(GPIOB, 15U)
+
+#define LINE_MEMS_CS                PAL_LINE(GPIOC, 0U)
+#define LINE_LED_RED                PAL_LINE(GPIOC, 6U)
+#define LINE_LED_BLUE               PAL_LINE(GPIOC, 7U)
+#define LINE_LED_ORANGE             PAL_LINE(GPIOC, 8U)
+#define LINE_LED_GREEN              PAL_LINE(GPIOC, 9U)
+#define LINE_OSC32_IN               PAL_LINE(GPIOC, 14U)
+#define LINE_OSC32_OUT              PAL_LINE(GPIOC, 15U)
+
+
+
+#define LINE_OSC_IN                 PAL_LINE(GPIOF, 0U)
+#define LINE_OSC_OUT                PAL_LINE(GPIOF, 1U)
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n)           (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n)          (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n)       (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n)          (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n)              (0U << (n))
+#define PIN_ODR_HIGH(n)             (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n)       (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n)      (1U << (n))
+#define PIN_OSPEED_VERYLOW(n)       (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n)           (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n)        (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n)          (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n)       (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n)         (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n)       (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v)           ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0  - BUTTON                    (input floating).
+ * PA1  - PIN1                      (input pullup).
+ * PA2  - PIN2                      (input pullup).
+ * PA3  - PIN3                      (input pullup).
+ * PA4  - PIN4                      (input pullup).
+ * PA5  - PIN5                      (input pullup).
+ * PA6  - PIN6                      (input pullup).
+ * PA7  - PIN7                      (input pullup).
+ * PA8  - PIN8                      (input pullup).
+ * PA9  - PIN9                      (input pullup).
+ * PA10 - PIN10                     (input pullup).
+ * PA11 - USB_DM                    (input floating).
+ * PA12 - USB_DP                    (input floating).
+ * PA13 - SWDIO                     (alternate 0).
+ * PA14 - SWCLK                     (alternate 0).
+ * PA15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOA_MODER             (PIN_MODE_INPUT(GPIOA_BUTTON) |         \
+                                     PIN_MODE_INPUT(GPIOA_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOA_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOA_USB_DM) |         \
+                                     PIN_MODE_INPUT(GPIOA_USB_DP) |         \
+                                     PIN_MODE_ALTERNATE(GPIOA_SWDIO) |      \
+                                     PIN_MODE_ALTERNATE(GPIOA_SWCLK) |      \
+                                     PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOA_BUTTON) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOA_BUTTON) |     \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN1) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN2) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN3) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN4) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN5) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN6) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN7) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN8) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN9) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOA_PIN10) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOA_USB_DM) |     \
+                                     PIN_OSPEED_VERYLOW(GPIOA_USB_DP) |     \
+                                     PIN_OSPEED_HIGH(GPIOA_SWDIO) |         \
+                                     PIN_OSPEED_HIGH(GPIOA_SWCLK) |         \
+                                     PIN_OSPEED_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR             (PIN_PUPDR_FLOATING(GPIOA_BUTTON) |     \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN10) |        \
+                                     PIN_PUPDR_FLOATING(GPIOA_USB_DM) |     \
+                                     PIN_PUPDR_FLOATING(GPIOA_USB_DP) |     \
+                                     PIN_PUPDR_PULLUP(GPIOA_SWDIO) |        \
+                                     PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) |      \
+                                     PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR               (PIN_ODR_HIGH(GPIOA_BUTTON) |           \
+                                     PIN_ODR_HIGH(GPIOA_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOA_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOA_USB_DM) |           \
+                                     PIN_ODR_HIGH(GPIOA_USB_DP) |           \
+                                     PIN_ODR_HIGH(GPIOA_SWDIO) |            \
+                                     PIN_ODR_HIGH(GPIOA_SWCLK) |            \
+                                     PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL              (PIN_AFIO_AF(GPIOA_BUTTON, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN7, 0U))
+#define VAL_GPIOA_AFRH              (PIN_AFIO_AF(GPIOA_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOA_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOA_USB_DM, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_USB_DP, 0U) |        \
+                                     PIN_AFIO_AF(GPIOA_SWDIO, 0U) |         \
+                                     PIN_AFIO_AF(GPIOA_SWCLK, 0U) |         \
+                                     PIN_AFIO_AF(GPIOA_PIN15, 0U))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0  - PIN0                      (input pullup).
+ * PB1  - PIN1                      (input pullup).
+ * PB2  - PIN2                      (input pullup).
+ * PB3  - PIN3                      (input pullup).
+ * PB4  - PIN4                      (input pullup).
+ * PB5  - PIN5                      (input pullup).
+ * PB6  - PIN6                      (input pullup).
+ * PB7  - PIN7                      (input pullup).
+ * PB8  - PIN8                      (input pullup).
+ * PB9  - PIN9                      (input pullup).
+ * PB10 - PIN10                     (input pullup).
+ * PB11 - PIN11                     (input pullup).
+ * PB12 - PIN12                     (input pullup).
+ * PB13 - SPI2_SCK                  (alternate 0).
+ * PB14 - SPI2_MISO                 (alternate 0).
+ * PB15 - SPI2_MOSI                 (alternate 0).
+ */
+#define VAL_GPIOB_MODER             (PIN_MODE_INPUT(GPIOB_PIN0) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOB_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOB_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOB_PIN12) |          \
+                                     PIN_MODE_ALTERNATE(GPIOB_SPI2_SCK) |   \
+                                     PIN_MODE_ALTERNATE(GPIOB_SPI2_MISO) |  \
+                                     PIN_MODE_ALTERNATE(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_SPI2_SCK) |   \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MISO) |  \
+                                     PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOB_PIN0) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN1) |       \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN2) |          \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN3) |          \
+                                     PIN_OSPEED_HIGH(GPIOB_PIN4) |          \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN5) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN6) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN7) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN8) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN9) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN10) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN11) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOB_PIN12) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOB_SPI2_SCK) |   \
+                                     PIN_OSPEED_VERYLOW(GPIOB_SPI2_MISO) |  \
+                                     PIN_OSPEED_VERYLOW(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_PUPDR             (PIN_PUPDR_PULLUP(GPIOB_PIN0) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOB_PIN12) |        \
+                                     PIN_PUPDR_FLOATING(GPIOB_SPI2_SCK) |   \
+                                     PIN_PUPDR_FLOATING(GPIOB_SPI2_MISO) |  \
+                                     PIN_PUPDR_FLOATING(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_ODR               (PIN_ODR_HIGH(GPIOB_PIN0) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOB_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOB_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOB_SPI2_SCK) |         \
+                                     PIN_ODR_HIGH(GPIOB_SPI2_MISO) |        \
+                                     PIN_ODR_HIGH(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_AFRL              (PIN_AFIO_AF(GPIOB_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN7, 0U))
+#define VAL_GPIOB_AFRH              (PIN_AFIO_AF(GPIOB_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOB_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOB_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOB_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOB_SPI2_SCK, 0U) |      \
+                                     PIN_AFIO_AF(GPIOB_SPI2_MISO, 0U) |     \
+                                     PIN_AFIO_AF(GPIOB_SPI2_MOSI, 0U))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0  - MEMS_CS                   (output pushpull maximum).
+ * PC1  - PIN1                      (input pullup).
+ * PC2  - PIN2                      (input pullup).
+ * PC3  - PIN3                      (input pullup).
+ * PC4  - PIN4                      (input pullup).
+ * PC5  - PIN5                      (input pullup).
+ * PC6  - LED_RED                   (output pushpull maximum).
+ * PC7  - LED_BLUE                  (output pushpull maximum).
+ * PC8  - LED_ORANGE                (output pushpull maximum).
+ * PC9  - LED_GREEN                 (output pushpull maximum).
+ * PC10 - PIN10                     (input pullup).
+ * PC11 - PIN11                     (input pullup).
+ * PC12 - PIN12                     (input pullup).
+ * PC13 - PIN13                     (input pullup).
+ * PC14 - OSC32_IN                  (input floating).
+ * PC15 - OSC32_OUT                 (input floating).
+ */
+#define VAL_GPIOC_MODER             (PIN_MODE_OUTPUT(GPIOC_MEMS_CS) |       \
+                                     PIN_MODE_INPUT(GPIOC_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOC_PIN5) |           \
+                                     PIN_MODE_OUTPUT(GPIOC_LED_RED) |       \
+                                     PIN_MODE_OUTPUT(GPIOC_LED_BLUE) |      \
+                                     PIN_MODE_OUTPUT(GPIOC_LED_ORANGE) |    \
+                                     PIN_MODE_OUTPUT(GPIOC_LED_GREEN) |     \
+                                     PIN_MODE_INPUT(GPIOC_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOC_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOC_OSC32_IN) |       \
+                                     PIN_MODE_INPUT(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOC_MEMS_CS) |    \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_LED_RED) |    \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_LED_BLUE) |   \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_LED_ORANGE) | \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_LED_GREEN) |  \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_OSC32_IN) |   \
+                                     PIN_OTYPE_PUSHPULL(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_OSPEEDR           (PIN_OSPEED_HIGH(GPIOC_MEMS_CS) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN1) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN2) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN3) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN4) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN5) |       \
+                                     PIN_OSPEED_HIGH(GPIOC_LED_RED) |       \
+                                     PIN_OSPEED_HIGH(GPIOC_LED_BLUE) |      \
+                                     PIN_OSPEED_HIGH(GPIOC_LED_ORANGE) |    \
+                                     PIN_OSPEED_HIGH(GPIOC_LED_GREEN) |     \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN10) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN11) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN12) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOC_PIN13) |      \
+                                     PIN_OSPEED_HIGH(GPIOC_OSC32_IN) |      \
+                                     PIN_OSPEED_HIGH(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_PUPDR             (PIN_PUPDR_FLOATING(GPIOC_MEMS_CS) |    \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN5) |         \
+                                     PIN_PUPDR_FLOATING(GPIOC_LED_RED) |    \
+                                     PIN_PUPDR_FLOATING(GPIOC_LED_BLUE) |   \
+                                     PIN_PUPDR_FLOATING(GPIOC_LED_ORANGE) | \
+                                     PIN_PUPDR_FLOATING(GPIOC_LED_GREEN) |  \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOC_PIN13) |        \
+                                     PIN_PUPDR_FLOATING(GPIOC_OSC32_IN) |   \
+                                     PIN_PUPDR_FLOATING(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_ODR               (PIN_ODR_HIGH(GPIOC_MEMS_CS) |          \
+                                     PIN_ODR_HIGH(GPIOC_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOC_PIN5) |             \
+                                     PIN_ODR_LOW(GPIOC_LED_RED) |           \
+                                     PIN_ODR_LOW(GPIOC_LED_BLUE) |          \
+                                     PIN_ODR_LOW(GPIOC_LED_ORANGE) |        \
+                                     PIN_ODR_LOW(GPIOC_LED_GREEN) |         \
+                                     PIN_ODR_HIGH(GPIOC_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOC_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOC_OSC32_IN) |         \
+                                     PIN_ODR_HIGH(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_AFRL              (PIN_AFIO_AF(GPIOC_MEMS_CS, 0U) |       \
+                                     PIN_AFIO_AF(GPIOC_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOC_LED_RED, 0U) |       \
+                                     PIN_AFIO_AF(GPIOC_LED_BLUE, 0U))
+#define VAL_GPIOC_AFRH              (PIN_AFIO_AF(GPIOC_LED_ORANGE, 0U) |    \
+                                     PIN_AFIO_AF(GPIOC_LED_GREEN, 0U) |     \
+                                     PIN_AFIO_AF(GPIOC_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOC_OSC32_IN, 0U) |      \
+                                     PIN_AFIO_AF(GPIOC_OSC32_OUT, 0U))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0  - PIN0                      (input pullup).
+ * PD1  - PIN1                      (input pullup).
+ * PD2  - PIN2                      (input pullup).
+ * PD3  - PIN3                      (input pullup).
+ * PD4  - PIN4                      (input pullup).
+ * PD5  - PIN5                      (input pullup).
+ * PD6  - PIN6                      (input pullup).
+ * PD7  - PIN7                      (input pullup).
+ * PD8  - PIN8                      (input pullup).
+ * PD9  - PIN9                      (input pullup).
+ * PD10 - PIN10                     (input pullup).
+ * PD11 - PIN11                     (input pullup).
+ * PD12 - PIN12                     (input pullup).
+ * PD13 - PIN13                     (input pullup).
+ * PD14 - PIN14                     (input pullup).
+ * PD15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOD_MODER             (PIN_MODE_INPUT(GPIOD_PIN0) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOD_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOD_PIN0) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN1) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN2) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN3) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN4) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN5) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN6) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN7) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN8) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN9) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN10) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN11) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN12) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN13) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN14) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR             (PIN_PUPDR_PULLUP(GPIOD_PIN0) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR               (PIN_ODR_HIGH(GPIOD_PIN0) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOD_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL              (PIN_AFIO_AF(GPIOD_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN7, 0U))
+#define VAL_GPIOD_AFRH              (PIN_AFIO_AF(GPIOD_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOD_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOD_PIN15, 0U))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0  - PIN0                      (input pullup).
+ * PE1  - PIN1                      (input pullup).
+ * PE2  - PIN2                      (input pullup).
+ * PE3  - PIN3                      (input pullup).
+ * PE4  - PIN4                      (input pullup).
+ * PE5  - PIN5                      (input pullup).
+ * PE6  - PIN6                      (input pullup).
+ * PE7  - PIN7                      (input pullup).
+ * PE8  - PIN8                      (input pullup).
+ * PE9  - PIN9                      (input pullup).
+ * PE10 - PIN10                     (input pullup).
+ * PE11 - PIN11                     (input pullup).
+ * PE12 - PIN12                     (input pullup).
+ * PE13 - PIN13                     (input pullup).
+ * PE14 - PIN14                     (input pullup).
+ * PE15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOE_MODER             (PIN_MODE_INPUT(GPIOE_PIN0) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN1) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOE_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN1) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN2) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN3) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN4) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN5) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN6) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN7) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN8) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN9) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN10) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN11) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN12) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN13) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN14) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR             (PIN_PUPDR_PULLUP(GPIOE_PIN0) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN1) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOE_PIN15))
+#define VAL_GPIOE_ODR               (PIN_ODR_HIGH(GPIOE_PIN0) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN1) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOE_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL              (PIN_AFIO_AF(GPIOE_PIN0, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN1, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN7, 0U))
+#define VAL_GPIOE_AFRH              (PIN_AFIO_AF(GPIOE_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOE_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOE_PIN15, 0U))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0  - OSC_IN                    (input floating).
+ * PF1  - OSC_OUT                   (input floating).
+ * PF2  - PIN2                      (input pullup).
+ * PF3  - PIN3                      (input pullup).
+ * PF4  - PIN4                      (input pullup).
+ * PF5  - PIN5                      (input pullup).
+ * PF6  - PIN6                      (input pullup).
+ * PF7  - PIN7                      (input pullup).
+ * PF8  - PIN8                      (input pullup).
+ * PF9  - PIN9                      (input pullup).
+ * PF10 - PIN10                     (input pullup).
+ * PF11 - PIN11                     (input pullup).
+ * PF12 - PIN12                     (input pullup).
+ * PF13 - PIN13                     (input pullup).
+ * PF14 - PIN14                     (input pullup).
+ * PF15 - PIN15                     (input pullup).
+ */
+#define VAL_GPIOF_MODER             (PIN_MODE_INPUT(GPIOF_OSC_IN) |         \
+                                     PIN_MODE_INPUT(GPIOF_OSC_OUT) |        \
+                                     PIN_MODE_INPUT(GPIOF_PIN2) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN3) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN4) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN5) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN6) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN7) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN8) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN9) |           \
+                                     PIN_MODE_INPUT(GPIOF_PIN10) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN11) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN12) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN13) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN14) |          \
+                                     PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER            (PIN_OTYPE_PUSHPULL(GPIOF_OSC_IN) |     \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_OSC_OUT) |    \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN2) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN3) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN4) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN5) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN6) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN7) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN8) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN9) |       \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN10) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN11) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN12) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN13) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN14) |      \
+                                     PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR           (PIN_OSPEED_VERYLOW(GPIOF_OSC_IN) |     \
+                                     PIN_OSPEED_VERYLOW(GPIOF_OSC_OUT) |    \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN2) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN3) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN4) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN5) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN6) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN7) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN8) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN9) |       \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN10) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN11) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN12) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN13) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN14) |      \
+                                     PIN_OSPEED_VERYLOW(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR             (PIN_PUPDR_FLOATING(GPIOF_OSC_IN) |     \
+                                     PIN_PUPDR_FLOATING(GPIOF_OSC_OUT) |    \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN2) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN3) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN4) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN5) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN6) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN7) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN8) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN9) |         \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN10) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN11) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN12) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN13) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN14) |        \
+                                     PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR               (PIN_ODR_HIGH(GPIOF_OSC_IN) |           \
+                                     PIN_ODR_HIGH(GPIOF_OSC_OUT) |          \
+                                     PIN_ODR_HIGH(GPIOF_PIN2) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN3) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN4) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN5) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN6) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN7) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN8) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN9) |             \
+                                     PIN_ODR_HIGH(GPIOF_PIN10) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN11) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN12) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN13) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN14) |            \
+                                     PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL              (PIN_AFIO_AF(GPIOF_OSC_IN, 0U) |        \
+                                     PIN_AFIO_AF(GPIOF_OSC_OUT, 0U) |       \
+                                     PIN_AFIO_AF(GPIOF_PIN2, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN3, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN4, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN5, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN6, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN7, 0U))
+#define VAL_GPIOF_AFRH              (PIN_AFIO_AF(GPIOF_PIN8, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN9, 0U) |          \
+                                     PIN_AFIO_AF(GPIOF_PIN10, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN11, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN12, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN13, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN14, 0U) |         \
+                                     PIN_AFIO_AF(GPIOF_PIN15, 0U))
+
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+  void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* BOARD_H */
diff --git a/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.mk b/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/board.mk
new file mode 100644 (file)
index 0000000..b98dcdd
--- /dev/null
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY
diff --git a/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/cfg/board.chcfg b/keyboards/cannonkeys/an_c/boards/ST_STM32F072B_DISCOVERY/cfg/board.chcfg
new file mode 100644 (file)
index 0000000..9c7cf4f
--- /dev/null
@@ -0,0 +1,703 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- STM32F0xx board Template -->
+<board
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:noNamespaceSchemaLocation="http://www.chibios.org/xml/schema/boards/stm32f0xx_board.xsd">
+  <configuration_settings>
+    <templates_path>resources/gencfg/processors/boards/stm32f0xx/templates</templates_path>
+    <output_path>..</output_path>
+    <hal_version>3.0.x</hal_version>
+  </configuration_settings>
+  <board_name>ST STM32F072B-Discovery</board_name>
+  <board_id>ST_STM32F072B_DISCOVERY</board_id>
+  <board_functions></board_functions>
+  <subtype>STM32F072xB</subtype>
+  <clocks HSEFrequency="0" HSEBypass="true" LSEFrequency="0"
+       LSEBypass="false" LSEDrive="3 High Drive (default)" />
+  <ports>
+    <GPIOA>
+      <pin0
+        ID="BUTTON"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin1
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin2
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin3
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin4
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin5
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin6
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin7
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin8
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin9
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin10
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin11
+        ID="USB_DM"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin12
+        ID="USB_DP"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin13
+        ID="SWDIO"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Alternate"
+        Alternate="0" />
+      <pin14
+        ID="SWCLK"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="PullDown"
+        Level="High"
+        Mode="Alternate"
+        Alternate="0" />
+      <pin15
+        ID=""
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+    </GPIOA>
+    <GPIOB>
+      <pin0
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin1
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin2
+        ID=""
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin3
+        ID=""
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin4
+        ID=""
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin5
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin6
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin7
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin8
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin9
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin10
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin11
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin12
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin13
+        ID="SPI2_SCK"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Alternate"
+        Alternate="0" />
+      <pin14
+        ID="SPI2_MISO"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Alternate"
+        Alternate="0" />
+      <pin15
+        ID="SPI2_MOSI"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Alternate"
+        Alternate="0" />
+    </GPIOB>
+    <GPIOC>
+      <pin0
+        ID="MEMS_CS"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Output"
+        Alternate="0" />
+      <pin1
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin2
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin3
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin4
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin5
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin6
+        ID="LED_RED"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="Low"
+        Mode="Output"
+        Alternate="0" />
+      <pin7
+        ID="LED_BLUE"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="Low"
+        Mode="Output"
+        Alternate="0" />
+      <pin8
+        ID="LED_ORANGE"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="Low"
+        Mode="Output"
+        Alternate="0" ></pin8>
+      <pin9
+        ID="LED_GREEN"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="Low"
+        Mode="Output"
+        Alternate="0" />
+      <pin10
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin11
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin12
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin13
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin14
+        ID="OSC32_IN"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin15
+        ID="OSC32_OUT"
+        Type="PushPull"
+        Speed="Maximum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+    </GPIOC>
+    <GPIOD>
+      <pin0
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin1
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin2
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin3
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin4
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin5
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin6
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin7
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin8
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin9
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin10
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin11
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin12
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin13
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin14
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin15
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+    </GPIOD>
+    <GPIOE>
+       <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+       <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="PullUp"
+               Level="High" Mode="Input" Alternate="0" />
+    </GPIOE>
+    <GPIOF>
+      <pin0
+        ID="OSC_IN"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin1
+        ID="OSC_OUT"
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="Floating"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin2
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin3
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin4
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin5
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin6
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin7
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin8
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin9
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin10
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin11
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin12
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin13
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin14
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+      <pin15
+        ID=""
+        Type="PushPull"
+        Speed="Minimum"
+        Resistor="PullUp"
+        Level="High"
+        Mode="Input"
+        Alternate="0" />
+    </GPIOF>
+  </ports>
+</board>
diff --git a/keyboards/cannonkeys/an_c/bootloader_defs.h b/keyboards/cannonkeys/an_c/bootloader_defs.h
new file mode 100644 (file)
index 0000000..02c48c4
--- /dev/null
@@ -0,0 +1,7 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* 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
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/keyboards/cannonkeys/an_c/chconf.h b/keyboards/cannonkeys/an_c/chconf.h
new file mode 100644 (file)
index 0000000..99fa8ce
--- /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                 10000
+
+/**
+ * @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                 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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                 0
+
+/**
+ * @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               FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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         FALSE
+
+/**
+ * @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                  FALSE
+
+/**
+ * @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                     FALSE
+
+/**
+ * @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                 FALSE
+
+/**
+ * @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                  FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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/cannonkeys/an_c/config.h b/keyboards/cannonkeys/an_c/config.h
new file mode 100644 (file)
index 0000000..f8ded7c
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xCA04
+#define PRODUCT_ID      0xA00C
+#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 CannonKeys
+#define PRODUCT AN-C
+#define DESCRIPTION AN-C Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_COL_PINS { B11, B10, B2, A9, A15, B3, B4, B5, B6, B7, B8, B9, C13, C14, C15 }
+#define MATRIX_ROW_PINS { B1, B0, A7, A5, A4 }
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_LEVELS 6
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
+
+/* 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
+
+#define RGBLIGHT_ANIMATIONS
+
+#define WS2812_LED_N 14
+#define RGBLED_NUM WS2812_LED_N
+#define PORT_WS2812     GPIOB
+#define PIN_WS2812      15
+#define WS2812_SPI SPID2
+
+
+// EEPROM usage
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x02
+#define EEPROM_VERSION_ADDR 34
+
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600) = 635
+// start + layer * rows * col * 2
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+#define EEPROM_CUSTOM_BACKLIGHT 636
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 637
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 200
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+
+/*
+ * 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
diff --git a/keyboards/cannonkeys/an_c/halconf.h b/keyboards/cannonkeys/an_c/halconf.h
new file mode 100644 (file)
index 0000000..38743e0
--- /dev/null
@@ -0,0 +1,354 @@
+/*
+    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                 TRUE
+#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                 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         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     1
+#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/cannonkeys/an_c/info.json b/keyboards/cannonkeys/an_c/info.json
new file mode 100644 (file)
index 0000000..712ce26
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "keyboard_name": "AN-C",
+    "url": "https://cannonkeys.com",
+    "maintainer": "awkannan",
+    "width": 15,
+    "height": 5,
+    "layouts": {
+        "LAYOUT_60_ansi": {
+            "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+        },
+        "LAYOUT_60_tsangan_hhkb": {
+            "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+        }
+    }
+}
diff --git a/keyboards/cannonkeys/an_c/keymaps/default/keymap.c b/keyboards/cannonkeys/an_c/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..d6d69ee
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+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 QMK_KEYBOARD_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 _FN1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT_60_ansi(
+    KC_GESC, 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(_FN1), KC_RCTL
+  ),
+
+  [_FN1] = LAYOUT_60_ansi(
+    KC_GESC, 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,
+    RGB_TOG, RGB_MOD, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    BL_INC,  BL_DEC,  BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______,                   _______, 
+    KC_GRV,  _______, _______,                            _______,                            _______, _______, _______, RESET
+  )
+};
diff --git a/keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c b/keyboards/cannonkeys/an_c/keymaps/tsangan/keymap.c
new file mode 100644 (file)
index 0000000..857415a
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+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 QMK_KEYBOARD_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 _FN1 1
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT_60_tsangan_hhkb(
+    KC_GESC, 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_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_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(_FN1),
+    KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                          KC_RALT, KC_RGUI, KC_RCTL
+  ),
+
+  [_FN1] = LAYOUT_60_tsangan_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, _______,
+    RGB_TOG, RGB_MOD, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    BL_INC,  BL_DEC,  BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______,                   _______, _______,
+    _______,  _______, _______,                            _______,                            _______, _______, RESET
+  )
+};
diff --git a/keyboards/cannonkeys/an_c/keymaps/via/keymap.c b/keyboards/cannonkeys/an_c/keymaps/via/keymap.c
new file mode 100644 (file)
index 0000000..b182ac5
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+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 QMK_KEYBOARD_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 _FN1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT_all(
+    KC_GESC, 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_DEL,
+    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, MO(_FN1),
+    KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                          KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
+  ),
+
+  [_FN1] = LAYOUT_all(
+    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, _______,
+    RGB_TOG, RGB_MOD, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+    BL_INC,  BL_DEC,  BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______,                   _______, _______,
+    _______,  _______, _______,                            _______,                            _______, _______, _______, RESET
+  )
+};
diff --git a/keyboards/cannonkeys/an_c/keymaps/via/rules.mk b/keyboards/cannonkeys/an_c/keymaps/via/rules.mk
new file mode 100644 (file)
index 0000000..d124977
--- /dev/null
@@ -0,0 +1,5 @@
+# rules.mk overrides to enable VIA
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+
diff --git a/keyboards/cannonkeys/an_c/mcuconf.h b/keyboards/cannonkeys/an_c/mcuconf.h
new file mode 100644 (file)
index 0000000..048eb4d
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+    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
+// #define STM32F070xB
+
+/*
+ * 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                  TRUE
+#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_I2C1_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C1_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 6)
+#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                  TRUE
+#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                  TRUE
+#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_SPI2_RX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI2_TX_DMA_STREAM        STM32_DMA_STREAM_ID(1, 5)
+#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/cannonkeys/an_c/readme.md b/keyboards/cannonkeys/an_c/readme.md
new file mode 100644 (file)
index 0000000..7d631a0
--- /dev/null
@@ -0,0 +1,12 @@
+# AN-C
+
+AN-C Keyboard
+
+Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)  
+Hardware Supported: STM32F072CBT6  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make cannonkeys/an_c:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cannonkeys/an_c/rules.mk b/keyboards/cannonkeys/an_c/rules.mk
new file mode 100644 (file)
index 0000000..2f30956
--- /dev/null
@@ -0,0 +1,59 @@
+# project specific files
+# SRC = ssd1306.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.
+#
+
+# project specific files
+VPATH += keyboards/cannonkeys/stm32f072
+SRC =  keyboard.c \
+      led.c
+
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+#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 = no # Custom matrix file
+# BACKLIGHT_ENABLE = yes # This is broken on 072 for some reason
+RGBLIGHT_ENABLE = yes
+
+# RAW_ENABLE = yes
+# DYNAMIC_KEYMAP_ENABLE = yes
+
+LAYOUTS = 60_ansi 60_tsangan_hhkb
index 73a64b8b3282578794a3514cd93c41f14c90dc73..6d410968a06fea8ef7654074dd69ef504ba55f9d 100644 (file)
@@ -5,10 +5,10 @@
     "width": 15,
     "height": 5,
     "layouts": {
-        "LAYOUT_ansi": {
+        "LAYOUT_60_ansi": {
             "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
         },
-        "LAYOUT_tsangan": {
+        "LAYOUT_60_tsangan_hhkb": {
             "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
         }
     }
index 67d5ba98fe215cadadf0dbbc411e03ff1a0c54bf..6d2085016360605770368ea55e50367dee874b92 100644 (file)
@@ -4,7 +4,7 @@
 
 #define KNO KC_NO
 
-#define LAYOUT_ansi( \
+#define LAYOUT_60_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,      K1E, \
   K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,           K2E, \
@@ -18,7 +18,7 @@
   {  K40,  K41,  K42,  KNO,  KNO,    K45,    KNO,    KNO,    KNO,    K49,  K4A,  K4B,  KNO,  KNO,  K4E  }  \
 }
 
-#define LAYOUT_tsangan( \
+#define LAYOUT_60_tsangan_hhkb( \
   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,      K1E, \
   K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,           K2E, \
index 7753181a489357412b17f63a6871e5ff50eb2419..303f307301f9e7bf9a84631ce264b9e451a33d6f 100644 (file)
@@ -30,7 +30,7 @@ enum custom_keycodes {
 };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_BASE] = LAYOUT_ansi(
+  [_BASE] = LAYOUT_60_ansi(
     KC_GESC, 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,  \
@@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                          KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
   ),
 
-  [_FN1] = LAYOUT_ansi(
+  [_FN1] = LAYOUT_60_ansi(
     KC_GESC, 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, \
     RGB_TOG, RGB_MOD, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______, \
index c16c506301f2d4f1e94a2f309aa045a5ff5d0a7e..d75d9f288ada042aa13f4a018e04915aa052fbc6 100644 (file)
@@ -30,7 +30,7 @@ enum custom_keycodes {
 };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_BASE] = LAYOUT_tsangan(
+  [_BASE] = LAYOUT_60_tsangan_hhkb(
     KC_GESC, 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_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_ENT,  \
@@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                                          KC_RALT, KC_RGUI, KC_RCTL
   ),
 
-  [_FN1] = LAYOUT_tsangan(
+  [_FN1] = LAYOUT_60_tsangan_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, _______,\
     RGB_TOG, RGB_MOD, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
     BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,          _______, \
index 9cd91e9516ee274659276a0310998f7c6ee421af..bee5f72ebf9a3666d8a34880bc8258c8fc762dd5 100644 (file)
@@ -2,9 +2,11 @@
 
 Instant60 Keyboard
 
-Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan1)  
+Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)  
 Hardware Supported: STM32F072CBT6  
 
+[PCB Support Docs](https://docs.cannonkeys.com/instant60/)
+
 Make example for this keyboard (after setting up your build environment):
 
     make cannonkeys/instant60:default
index cd366c76aa7c9eef27583f6334d71cf76edc22ea..5d4fb1cf724707528208701100e706bef14c2463 100644 (file)
@@ -54,3 +54,4 @@ RGBLIGHT_ENABLE = yes
 # RAW_ENABLE = yes
 # DYNAMIC_KEYMAP_ENABLE = yes
 
+LAYOUTS = 60_ansi 60_tsangan_hhkb
diff --git a/keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.c b/keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.c
new file mode 100644 (file)
index 0000000..8c5a87f
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+    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"
+
+// Value to place in RTC backup register 10 for persistent bootloader mode
+#define RTC_BOOTLOADER_FLAG 0x424C
+
+/**
+ * @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) {
+   //JTAG-DP Disabled and SW-DP Enabled
+   AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
+   //Set backup register DR10 to enter bootloader on reset
+   BKP->DR10 = RTC_BOOTLOADER_FLAG;
+}
diff --git a/keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.h b/keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.h
new file mode 100644 (file)
index 0000000..9427ada
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    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 GPIOA_LED               8
+#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_ */
diff --git a/keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.mk b/keyboards/cannonkeys/ortho75/boards/GENERIC_STM32_F103/board.mk
new file mode 100644 (file)
index 0000000..6b8b312
--- /dev/null
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103
diff --git a/keyboards/cannonkeys/ortho75/bootloader_defs.h b/keyboards/cannonkeys/ortho75/bootloader_defs.h
new file mode 100644 (file)
index 0000000..6b8fa9f
--- /dev/null
@@ -0,0 +1,10 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* 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
+ */
+
+// STM32F103* does NOT have an USB bootloader in ROM (only serial),
+//  so setting anything here does not make much sense
+#define STM32_BOOTLOADER_ADDRESS 0x80000000
diff --git a/keyboards/cannonkeys/ortho75/chconf.h b/keyboards/cannonkeys/ortho75/chconf.h
new file mode 100644 (file)
index 0000000..bbd9b2d
--- /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                 0
+
+/**
+ * @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         FALSE
+
+/**
+ * @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                 FALSE
+
+/**
+ * @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                  FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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/cannonkeys/ortho75/config.h b/keyboards/cannonkeys/ortho75/config.h
new file mode 100644 (file)
index 0000000..6c240e2
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+/* 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 CannonKeys
+#define PRODUCT Ortho75
+#define DESCRIPTION Ortho75
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_COL_PINS { B11, B10, B1, B0, A7, A6, A5, B14, A15, A0, C15, C14, B7, B6, B5 }
+#define MATRIX_ROW_PINS { B12, C13, A2, A1, A3 }
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_LEVELS 6
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
+
+#define NUMBER_OF_ENCODERS 1
+#define ENCODERS_PAD_A { B9 }
+#define ENCODERS_PAD_B { B8 }
+
+/* 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
+
+#define RGBLIGHT_ANIMATIONS
+
+#define WS2812_LED_N 16
+#define RGBLED_NUM WS2812_LED_N
+#define PORT_WS2812     GPIOB
+#define PIN_WS2812      15
+#define WS2812_SPI SPID2
+
+
+/*
+ * 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
diff --git a/keyboards/cannonkeys/ortho75/halconf.h b/keyboards/cannonkeys/ortho75/halconf.h
new file mode 100644 (file)
index 0000000..72879a5
--- /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                 TRUE
+#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                 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         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     1
+#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/cannonkeys/ortho75/info.json b/keyboards/cannonkeys/ortho75/info.json
new file mode 100644 (file)
index 0000000..b6aaa8e
--- /dev/null
@@ -0,0 +1,88 @@
+{
+  "keyboard_name": "Ortho75",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 15,
+  "height": 5,
+  "layouts": {
+    "LAYOUT_ortho_5x12": {
+      "layout": [
+        {"label":"`", "x":0, "y":0},
+        {"label":"1", "x":1, "y":0},
+        {"label":"2", "x":2, "y":0},
+        {"label":"3", "x":3, "y":0},
+        {"label":"4", "x":4, "y":0},
+        {"label":"5", "x":5, "y":0},
+        {"label":"6", "x":6, "y":0},
+        {"label":"7", "x":7, "y":0},
+        {"label":"8", "x":8, "y":0},
+        {"label":"9", "x":9, "y":0},
+        {"label":"0", "x":10, "y":0},
+        {"label":"Backspace", "x":11, "y":0},
+        {"label":"0", "x":12, "y":0},
+        {"label":"0", "x":13, "y":0},
+        {"label":"0", "x":14, "y":0},
+        {"label":"Tab", "x":0, "y":1},
+        {"label":"Q", "x":1, "y":1},
+        {"label":"W", "x":2, "y":1},
+        {"label":"E", "x":3, "y":1},
+        {"label":"R", "x":4, "y":1},
+        {"label":"T", "x":5, "y":1},
+        {"label":"Y", "x":6, "y":1},
+        {"label":"U", "x":7, "y":1},
+        {"label":"I", "x":8, "y":1},
+        {"label":"O", "x":9, "y":1},
+        {"label":"P", "x":10, "y":1},
+        {"label":"Delete", "x":11, "y":1},
+        {"label":"0", "x":12, "y":1},
+        {"label":"0", "x":13, "y":1},
+        {"label":"0", "x":14, "y":1},
+        {"label":"Esc", "x":0, "y":2},
+        {"label":"A", "x":1, "y":2},
+        {"label":"S", "x":2, "y":2},
+        {"label":"D", "x":3, "y":2},
+        {"label":"F", "x":4, "y":2},
+        {"label":"G", "x":5, "y":2},
+        {"label":"H", "x":6, "y":2},
+        {"label":"J", "x":7, "y":2},
+        {"label":"K", "x":8, "y":2},
+        {"label":"L", "x":9, "y":2},
+        {"label":";", "x":10, "y":2},
+        {"label":"'", "x":11, "y":2},
+        {"label":"0", "x":12, "y":2},
+        {"label":"0", "x":13, "y":2},
+        {"label":"0", "x":14, "y":2},
+        {"label":"Shift", "x":0, "y":3},
+        {"label":"Z", "x":1, "y":3},
+        {"label":"X", "x":2, "y":3},
+        {"label":"C", "x":3, "y":3},
+        {"label":"V", "x":4, "y":3},
+        {"label":"B", "x":5, "y":3},
+        {"label":"N", "x":6, "y":3},
+        {"label":"M", "x":7, "y":3},
+        {"label":",", "x":8, "y":3},
+        {"label":".", "x":9, "y":3},
+        {"label":"/", "x":10, "y":3},
+        {"label":"Enter", "x":11, "y":3},
+        {"label":"0", "x":12, "y":3},
+        {"label":"0", "x":13, "y":3},
+        {"label":"0", "x":14, "y":3},
+        {"label":"Fn", "x":0, "y":4},
+        {"label":"Ctrl", "x":1, "y":4},
+        {"label":"Alt", "x":2, "y":4},
+        {"label":"Meta", "x":3, "y":4},
+        {"label":"Lower", "x":4, "y":4},
+        {"label":"Space", "x":5, "y":4},
+        {"label":"Space", "x":6, "y":4},
+        {"label":"Raise", "x":7, "y":4},
+        {"label":"Left", "x":8, "y":4},
+        {"label":"Down", "x":9, "y":4},
+        {"label":"Up", "x":10, "y":4},
+        {"label":"Right", "x":11, "y":4},
+        {"label":"0", "x":12, "y":4},
+        {"label":"0", "x":13, "y":4},
+        {"label":"0", "x":14, "y":4}
+      ]
+    }
+  }
+}
diff --git a/keyboards/cannonkeys/ortho75/keymaps/default/keymap.c b/keyboards/cannonkeys/ortho75/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..1aef110
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+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 QMK_KEYBOARD_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 _FN 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC    | 1      | 2      | 3      | 4      | 5      | -      | `      | =      | 6      | 7      | 8      | 9      | 0      | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB    | Q      | W      | E      | R      | T      | [      | \      | ]      | Y      | U      | I      | O      | P      | '      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A      | S      | D      | F      | G      | HOME   | DEL    | PG UP  | H      | J      | K      | L      | ;      | ENTER  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | END    | UP     | PG DN  | N      | M      | ,      | .      | /      | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL  | LGUI   | LALT   | FN     | SPACE  | SPACE  | LEFT   | DOWN   | RIGHT  | SPACE  | SPACE  | FN     | RALT   | RGUI   | RCTRL  |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_BASE] = LAYOUT_ortho_5x15( /* QWERTY */
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS, KC_GRV,  KC_EQL,  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_LBRC, KC_BSLS, KC_RBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_QUOT,
+    KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_HOME, KC_DEL,  KC_PGUP, 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_END,  KC_UP,   KC_PGDN, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+    KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC,  KC_SPC,  KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC,  KC_SPC,  MO(_FN), KC_RALT, KC_RGUI, KC_RCTL
+  ),
+
+/* FUNCTION
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | F1     | F2     | F3     | F4     | F5     | F6     | NUM LK | P/     | P*     | F7     | F8     | F9     | F10    | F11    | F12    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SELECT | CALC   | MYCOMP | MAIL   | RGB HD | RGB HI | P7     | P8     | P9     | -      |        |        | PR SCR | SCR LK | PAUSE  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | PREV   | PLAY   | NEXT   | STOP   | RGB SD | RGB SI | P4     | P5     | P6     | +      |        | RESET  |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | VOL-   | MUTE   | VOL+   | APP    | RGB VD | RGB VI | P1     | P2     | P3     | PENT   |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        | RGB TG | FN     | RGB RMD| RGB MD | P0     |        | P.     | PENT   | PENT   | FN     |        |        |        |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_FN] = LAYOUT_ortho_5x15( /* FUNCTION */
+    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_NLCK, KC_SLSH, KC_ASTR, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,
+    KC_MSEL, KC_CALC, KC_MYCM, KC_MAIL, RGB_HUD, RGB_HUI, KC_P7,   KC_P8,   KC_P9,   KC_MINS, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS,
+    KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, RGB_SAD, RGB_SAI, KC_P4,   KC_P5,   KC_P6,   KC_PLUS, _______, RESET,   _______, _______, _______,
+    KC_VOLD, KC_MUTE, KC_VOLU, KC_APP,  RGB_VAD, RGB_VAI, KC_P1,   KC_P2,   KC_P3,   KC_PENT, _______, _______, _______, _______, _______,
+    _______, _______, RGB_TOG, MO(_FN), RGB_RMOD,RGB_MOD, KC_P0,   _______, KC_PDOT, KC_PENT, KC_PENT, MO(_FN), _______, _______, _______
+  )
+};
diff --git a/keyboards/cannonkeys/ortho75/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/cannonkeys/ortho75/ld/STM32F103x8_stm32duino_bootloader.ld
new file mode 100644 (file)
index 0000000..d0688ef
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+    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 = 64k - 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/cannonkeys/ortho75/mcuconf.h b/keyboards/cannonkeys/ortho75/mcuconf.h
new file mode 100644 (file)
index 0000000..fced272
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    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                  TRUE
+#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                  TRUE
+#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/cannonkeys/ortho75/ortho75.c b/keyboards/cannonkeys/ortho75/ortho75.c
new file mode 100644 (file)
index 0000000..c3ceee2
--- /dev/null
@@ -0,0 +1,49 @@
+
+#include "ortho75.h"
+
+#define MEDIA_KEY_DELAY 10
+
+uint8_t layer = 0;
+
+uint32_t layer_state_set_kb(uint32_t state) {
+  state = layer_state_set_user(state);
+  layer = biton32(state);
+  return state;
+}
+
+void encoder_update_kb(uint8_t index, bool clockwise) {
+  uint16_t mapped_code = 0;
+  if (index == 0) {
+    if (clockwise) {
+        switch(layer){
+            case 0:
+            default:
+                mapped_code = KC_VOLU;
+                break;
+            case 1:
+                mapped_code = KC_MEDIA_NEXT_TRACK;
+                break;
+            case 2:
+                mapped_code = KC_PGDN;
+                break;
+        }
+    } else {
+        switch(layer){
+            case 0:
+            default:
+                mapped_code = KC_VOLD;
+                break;
+            case 1:
+                mapped_code = KC_MEDIA_PREV_TRACK;
+                break;
+            case 2:
+                mapped_code = KC_PGUP;
+                break;
+        }
+    }
+    uint16_t held_keycode_timer = timer_read();
+    register_code(mapped_code);
+    while (timer_elapsed(held_keycode_timer) < MEDIA_KEY_DELAY){ /* no-op */ }
+    unregister_code(mapped_code);
+  }
+}
diff --git a/keyboards/cannonkeys/ortho75/ortho75.h b/keyboards/cannonkeys/ortho75/ortho75.h
new file mode 100644 (file)
index 0000000..d23e064
--- /dev/null
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_5x15( \
+    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, k2c, k2d, k2e, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+    k40, k41, k42, k43, k44, k45, k46, k47, k48, 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, k2c, k2d, k2e }, \
+    { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+    { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4e }, \
+}
diff --git a/keyboards/cannonkeys/ortho75/readme.md b/keyboards/cannonkeys/ortho75/readme.md
new file mode 100644 (file)
index 0000000..3f94c62
--- /dev/null
@@ -0,0 +1,12 @@
+# Ortho 75
+
+A Blue Pill STM32F103C8T6-based 15x5 ortholinear keyboard.
+
+Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)  
+Hardware Supported: Blue Pill STM32F103C8T6  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make cannonkeys/ortho75:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cannonkeys/ortho75/rules.mk b/keyboards/cannonkeys/ortho75/rules.mk
new file mode 100644 (file)
index 0000000..db15586
--- /dev/null
@@ -0,0 +1,57 @@
+# project specific files
+VPATH += keyboards/cannonkeys/bluepill
+SRC =  led.c \
+      keyboard.c
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
+
+# OPT_DEFS =
+# MCU_LDSCRIPT = STM32F103x8
+# BOARD = GENERIC_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
+
+DFU_ARGS = -d 1eaf:0003 -a 2 -R
+
+#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
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+ENCODER_ENABLE = yes
+
+LAYOUTS = LAYOUT_ortho_5x15
index 326d5876d0d5a548911cc96d06a668e5ecac89e4..c32a8566115c81da129014d604d5fd04bc31c5e2 100644 (file)
@@ -128,7 +128,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
   {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
-  {KC_SPC,  XXXXXXX, _______, _______, _______, _______, _______, _______, G_0,     _______, _______, _______}
+  {KC_SPC,  XXXXXXX, _______, _______, _______, KC_LCTL, KC_LCTL, _______, G_0,     _______, _______, _______}
 }
 };
 
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
new file mode 100644 (file)
index 0000000..56d4de2
--- /dev/null
@@ -0,0 +1,17 @@
+
+// generated from users/manna-harbour_miryoku/miryoku.org
+
+#define LAYOUT_miryoku( \
+       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, \
+       N30,   N31,   K32,   K33,   K34,   K35,   K36,   K37,   N38,   N39 \
+) \
+LAYOUT( \
+KC_NO, K00,   K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   KC_NO, \
+KC_NO, K10,   K11,   K12,   K13,   K14,   K15,   K16,   K17,   K18,   K19,   KC_NO, \
+KC_NO, K20,   K21,   K22,   K23,   K24,   K25,   K26,   K27,   K28,   K29,   KC_NO, \
+                     K32,   K33,   K34,   K35,   K36,   K37 \
+)
+
+#include "manna-harbour_miryoku.c"
diff --git a/keyboards/crkbd/keymaps/thumb_ctrl/config.h b/keyboards/crkbd/keymaps/thumb_ctrl/config.h
new file mode 100755 (executable)
index 0000000..5670d8c
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+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/>.
+*/
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 150
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/crkbd/keymaps/thumb_ctrl/keymap.c b/keyboards/crkbd/keymaps/thumb_ctrl/keymap.c
new file mode 100755 (executable)
index 0000000..c67958a
--- /dev/null
@@ -0,0 +1,253 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+  #include "lufa.h"
+  #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+  #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// 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 layer_names {
+  _QWERTY,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  ADJUST,
+  BACKLIT,
+  RGBRST
+};
+
+#define KC_ KC_TRNS
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_RST   RESET
+#define KC_LRST  RGBRST
+#define KC_LTOG  RGB_TOG
+#define KC_LHUI  RGB_HUI
+#define KC_LHUD  RGB_HUD
+#define KC_LSAI  RGB_SAI
+#define KC_LSAD  RGB_SAD
+#define KC_LVAI  RGB_VAI
+#define KC_LVAD  RGB_VAD
+#define KC_LMOD  RGB_MOD
+#define KC_CTLTB CTL_T(KC_TAB)
+#define KC_GUIEI GUI_T(KC_LANG2)
+#define KC_ALTKN ALT_T(KC_LANG1)
+#define KC_CTLEN CTL_T(KC_LANG2)    // for Linux and Windows
+#define KC_GUIEN GUI_T(KC_LANG2)    // for Mac
+#define KC_SFTJP SFT_T(KC_LANG1)
+#define KC_ALTSP ALT_T(KC_SPACE)
+#define KC_ALTDL ALT_T(KC_DEL)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = LAYOUT_kc(
+  //,-----------------------------------------.                ,-----------------------------------------.
+        ESC,     Q,     W,     E,     R,     T,                      Y,     U,     I,     O,     P,  BSPC,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+      CTLTB,     A,     S,     D,     F,     G,                      H,     J,     K,     L,  SCLN,  QUOT,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+       LSFT,     Z,     X,     C,     V,     B,                      N,     M,  COMM,   DOT,  SLSH,   ENT,
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                  ALTSP, LOWER, GUIEN,    SFTJP, RAISE, ALTDL
+                              //`--------------------'  `--------------------'
+  ),
+
+  [_LOWER] = LAYOUT_kc(
+  //,-----------------------------------------.                ,-----------------------------------------.
+           ,     1,     2,     3,     4,     5,                      6,     7,     8,     9,     0,      ,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+           ,  HOME,   END,  PGDN,  PGUP,   F11,                   LEFT,  DOWN,    UP,  RGHT,   F12,  PIPE,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+           ,    F1,    F2,    F3,    F4,    F5,                     F6,    F7,    F8,    F9,   F10,      ,
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                       ,      ,      ,         ,      ,       
+                              //`--------------------'  `--------------------'
+  ),
+
+  [_RAISE] = LAYOUT_kc(
+  //,-----------------------------------------.                ,-----------------------------------------.
+           ,  EXLM,    AT,  HASH,   DLR,  PERC,                   CIRC,  AMPR,  ASTR,  LPRN,  RPRN,      ,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+           , XXXXX, XXXXX, XXXXX, XXXXX,  PSCR,                    GRV,  MINS,  PLUS,  LCBR,  RCBR,  BSLS,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+           , XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                   TILD,  UNDS,   EQL,  LBRC,  RBRC,      ,
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                       ,      ,      ,         ,      ,       
+                              //`--------------------'  `--------------------'
+  ),
+
+  [_ADJUST] = LAYOUT_kc(
+  //,-----------------------------------------.                ,-----------------------------------------.
+        RST,  LRST, XXXXX, XXXXX, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+       LTOG,  LHUI,  LSAI,  LVAI, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+       LMOD,  LHUD,  LSAD,  LVAD, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                  GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN 
+                              //`--------------------'  `--------------------'
+  )
+};
+
+int RGB_current_mode;
+
+void persistent_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+  if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+    layer_on(layer3);
+  } else {
+    layer_off(layer3);
+  }
+}
+
+void matrix_init_user(void) {
+    #ifdef RGBLIGHT_ENABLE
+      RGB_current_mode = rgblight_config.mode;
+    #endif
+    //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+    #ifdef SSD1306OLED
+        iota_gfx_init(!has_usb());   // turns on the display
+    #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void matrix_scan_user(void) {
+   iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+  if (is_master) {
+    // If you want to change the display of OLED, you need to change here
+    matrix_write_ln(matrix, read_layer_state());
+    matrix_write_ln(matrix, read_keylog());
+    matrix_write_ln(matrix, read_keylogs());
+    //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+    //matrix_write_ln(matrix, read_host_led_state());
+    //matrix_write_ln(matrix, read_timelog());
+  } else {
+    matrix_write(matrix, read_logo());
+  }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+  if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+    memcpy(dest->display, source->display, sizeof(dest->display));
+    dest->dirty = true;
+  }
+}
+
+void iota_gfx_task_user(void) {
+  struct CharacterMatrix matrix;
+  matrix_clear(&matrix);
+  matrix_render_user(&matrix);
+  matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  if (record->event.pressed) {
+#ifdef SSD1306OLED
+    set_keylog(keycode, record);
+#endif
+    // set_timelog();
+  }
+
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        persistent_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+        if (record->event.pressed) {
+          layer_on(_ADJUST);
+        } else {
+          layer_off(_ADJUST);
+        }
+        return false;
+        break;
+    case RGB_MOD:
+      #ifdef RGBLIGHT_ENABLE
+        if (record->event.pressed) {
+          rgblight_mode(RGB_current_mode);
+          rgblight_step();
+          RGB_current_mode = rgblight_config.mode;
+        }
+      #endif
+      return false;
+      break;
+    case RGBRST:
+      #ifdef RGBLIGHT_ENABLE
+        if (record->event.pressed) {
+          eeconfig_update_rgblight_default();
+          rgblight_enable();
+          RGB_current_mode = rgblight_config.mode;
+        }
+      #endif
+      break;
+  }
+  return true;
+}
+
diff --git a/keyboards/crkbd/keymaps/thumb_ctrl/rules.mk b/keyboards/crkbd/keymaps/thumb_ctrl/rules.mk
new file mode 100755 (executable)
index 0000000..16deaf4
--- /dev/null
@@ -0,0 +1,31 @@
+
+# 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 = 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 = 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. 
+SWAP_HANDS_ENABLE = no      # 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
+
+# If you want to change the display of OLED, you need to change here
+SRC +=  ./lib/glcdfont.c \
+        ./lib/rgb_state_reader.c \
+        ./lib/layer_state_reader.c \
+        ./lib/logo_reader.c \
+        ./lib/keylogger.c \
+        # ./lib/mode_icon_reader.c \
+        # ./lib/host_led_state_reader.c \
+        # ./lib/timelogger.c \
diff --git a/keyboards/dz60/keymaps/kifinnsson/keymap.c b/keyboards/dz60/keymaps/kifinnsson/keymap.c
new file mode 100644 (file)
index 0000000..7d88b6d
--- /dev/null
@@ -0,0 +1,210 @@
+#include QMK_KEYBOARD_H
+
+bool is_lgui_active = false;
+uint16_t lgui_timer = 0;
+
+
+//Macro Declarations
+enum my_keycodes {
+  KI_NO = SAFE_RANGE,
+    KI_1,
+    KI_2,
+    KI_3,
+    KI_4,
+    KI_5,
+    KI_6,
+    KI_7,
+    KI_8,
+    KI_9,
+    KI_10,
+    KI_11,
+    KI_12,
+    KI_ESC,
+    KI_BKSP,
+    KI_BSLS,
+    KI_WLFT,
+    KI_WRGT,
+    };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+       LAYOUT_all(
+               KC_GESC, 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_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(1),   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_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    MO(2),   KC_K,   KC_M,     KC_COMM, KC_DOT,  KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX,
+               KC_LCTL, KC_LGUI, KC_LALT, KC_SPC,  KC_SPC,  KC_SPC,  KC_RALT, MO(1),  XXXXXXX,  MO(3),   KC_RCTL),
+
+       LAYOUT_all(
+               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,
+               _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_UP,   KC_END,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+               _______, XXXXXXX, KC_TAB,  KC_LSFT, KC_LCTL, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL,  KC_CAPS, XXXXXXX,
+               _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,,
+               _______, _______, XXXXXXX, KC_ENT,  KC_ENT,  KC_ENT,  _______, _______, _______, _______, RESET),
+
+       LAYOUT_all(
+               KI_ESC,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KI_BKSP,
+               _______, KI_1,    KI_2,    KI_3,    KI_4,    KI_5,    KI_6,    KI_7,    KI_8,    KI_9,    KI_10,   KI_11,   KI_12,   KI_BSLS,
+               _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+               _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, KI_WLFT, KI_WRGT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+               _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX),
+
+       LAYOUT_all(
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // Keycodes Starting with KI_ are place holders for my personal macros. They are set below. Most are simple SEND_STRINGS().
+    case KI_ESC:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_1:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_2:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_3:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_4:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_5:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_6:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_7:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_8:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_9:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_10:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_11:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_12:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_BKSP:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    case KI_BSLS:
+      if (record->event.pressed) {
+        SEND_STRING("");
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+
+    //Windows Win+Left tap to move window without resetting KC_LGUI
+    //Additional code is in matrix_scan_user()
+    case KI_WLFT:
+      if (record->event.pressed) {
+        if (!is_lgui_active) {
+          is_lgui_active = true;
+          register_code(KC_LGUI);
+        } 
+        lgui_timer = timer_read();
+        tap_code(KC_LEFT);
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    //Windows Win+Right tap to move window without resetting KC_LGUI
+    //Additional code is in matrix_scan_user()
+    case KI_WRGT:
+      if (record->event.pressed) {
+        if (!is_lgui_active) {
+          is_lgui_active = true;
+          register_code(KC_LGUI);
+        } 
+        lgui_timer = timer_read();
+        tap_code(KC_RIGHT);
+      } else {
+        
+      }
+      return false; // Skip all further processing of this key
+    default:
+      return true; // Process all other keycodes normally
+  }
+}
+
+//Check if KC_LGUI is active in KI_WLFT and KI_WRGT
+void matrix_scan_user(void) { 
+  if (is_lgui_active) {
+    if (timer_elapsed(lgui_timer) > 1000) {
+      unregister_code(KC_LGUI);
+      is_lgui_active = false;
+    }
+  }
+}
\ No newline at end of file
diff --git a/keyboards/dz60/keymaps/kifinnsson/readme.md b/keyboards/dz60/keymaps/kifinnsson/readme.md
new file mode 100644 (file)
index 0000000..49f5595
--- /dev/null
@@ -0,0 +1,5 @@
+# kifinnsson's Colemak angle mod ansi-ish layout
+-----------------
+
+Keymap for my non-standard DZ60 layout. It is an ansi layout on the right and iso on the left (ie 1.25x left shift). This is to implement the angle mod on for Colemak which is the base layer. A side effect of this is that I have an extra key on row 4, which sits between the "b" and "k" keys in Colemak. I use this key as a switch to layer 2 which is my macro layer.
+
diff --git a/keyboards/dz60/keymaps/kifinnsson/rules.mk b/keyboards/dz60/keymaps/kifinnsson/rules.mk
new file mode 100644 (file)
index 0000000..5fb201c
--- /dev/null
@@ -0,0 +1,6 @@
+# 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)
\ No newline at end of file
index 7166bf70b8a28a62402f452cacf94e550001ec5b..a50008beb77b8718b79503636561f34d4fda9982 100644 (file)
@@ -5,6 +5,8 @@
 #define PERMISSIVE_HOLD
 #define TAPPING_TERM 150
 
+#define TAP_HOLD_CAPS_DELAY 0
+
 #undef DISABLE_RGB_MATRIX_SPLASH
 #undef DISABLE_RGB_MATRIX_MULTISPLASH
 #undef DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/ergodash/rev1/keymaps/333fred/config.h b/keyboards/ergodash/rev1/keymaps/333fred/config.h
new file mode 100644 (file)
index 0000000..e48702f
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma once
+
+#include QMK_KEYBOARD_CONFIG_H
+#include "333fred_config.h"
+
+#define USE_SERIAL
+#define MASTER_LEFT
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
diff --git a/keyboards/ergodash/rev1/keymaps/333fred/keymap.c b/keyboards/ergodash/rev1/keymaps/333fred/keymap.c
new file mode 100644 (file)
index 0000000..8ed826d
--- /dev/null
@@ -0,0 +1,57 @@
+#include QMK_KEYBOARD_H
+#include "333fred.h"
+
+extern keymap_config_t keymap_config;
+
+// Use an expanded macro with VA_ARGS to ensure that the common
+// rows get expanded out before getting passed to the LAYOUT
+// macro.
+
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = LAYOUT_wrapper( \
+    ROW5_LEFT_BASE,          KC_F5,                                     KC_F6,            ROW5_RGHT_BASE,
+    ROW4_LEFT_BASE,          TG(GAME),                                  TG(GAME_ARROW),   ROW4_RGHT_BASE,
+    ROW3_LEFT_BASE,          KC_LGUI,                                   KC_BSPC,          ROW3_RGHT_BASE,
+    ROW2_LEFT_BASE,          TD(TD_COPY_PASTE),                         KC_UP ,           ROW2_RGHT_BASE,
+    ROW1_LEFT_BASE, KC_BSPC, TD(TD_SYM_VIM),    KC_DEL,         KC_ENT, KC_SPC , KC_DOWN, ROW1_RGHT_BASE
+  ),
+
+  [SYMB] = LAYOUT_wrapper(
+    ROW5_LEFT_SYMB,          _______,                           _______,          ROW5_RGHT_SYMB,
+    ROW4_LEFT_SYMB,          PSCREEN_APP,                       _______,          ROW4_RGHT_SYMB,
+    ROW3_LEFT_SYMB,          KC_PSCR,                           KC_VOLU,          ROW3_RGHT_SYMB,
+    ROW2_LEFT_SYMB,          _______,                           KC_VOLD,          ROW2_RGHT_SYMB,
+    ROW1_LEFT_SYMB, _______, _______, _______,         KC_MPRV, KC_MPLY, KC_MNXT, ROW1_RGHT_SYMB
+  ),
+
+  [VIM] = LAYOUT_wrapper(
+    ROW5_LEFT_VIM,          _______,                           _______,          ROW5_RGHT_VIM,
+    ROW4_LEFT_VIM,          _______,                           _______,          ROW4_RGHT_VIM,
+    ROW3_LEFT_VIM,          _______,                           _______,          ROW3_RGHT_VIM,
+    ROW2_LEFT_VIM,          _______,                           _______,          ROW2_RGHT_VIM,
+    ROW1_LEFT_VIM, _______, _______, _______,         _______, _______, _______, ROW1_RGHT_VIM
+  ),
+
+  [GAME] = LAYOUT_wrapper(
+      KC_ESC,   SIX_TRNS,                                                   _______, SIX_TRNS,
+      SIX_TRNS,                                              _______,     _______, SIX_TRNS,
+      KC_LCTL,  FOUR_TRNS,                          _______, KC_F6,         _______, SIX_TRNS,
+      KC_LSFT,  KC_Z,    FOUR_TRNS,                          KC_F5,         _______, SIX_TRNS,
+      KC_ENT,   _______, KC_LOCK, KC_BSPC, KC_LALT, KC_SPC,  OSM(SYMB),     _______, SIX_TRNS
+  ),
+
+  [GAME_ARROW] = LAYOUT_wrapper(
+      KC_ESC,   SIX_TRNS,                                                  _______, SIX_TRNS,
+      _______,  _______, KC_UP,   _______,  _______, _______, _______,     _______, SIX_TRNS,
+      KC_LCTL,  KC_LEFT, KC_DOWN, KC_RGHT,  _______, _______, KC_F6,       _______, SIX_TRNS,
+      KC_LSFT,  KC_Z,    FOUR_TRNS,                           KC_F5,       _______, SIX_TRNS,
+      KC_ENT,   _______, KC_LOCK, KC_BSPC, KC_LALT, KC_SPC,  OSM(SYMB),    _______, SIX_TRNS
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  tap_dance_process_keycode(keycode);
+  return !try_handle_macro(keycode, record);
+}
diff --git a/keyboards/ergodash/rev1/keymaps/333fred/rules.mk b/keyboards/ergodash/rev1/keymaps/333fred/rules.mk
new file mode 100644 (file)
index 0000000..9d8ff37
--- /dev/null
@@ -0,0 +1,7 @@
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
+NKRO_ENABLE = yes
+KEY_LOCK_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+CONSOLE_ENABLE = no
diff --git a/keyboards/ergodone/keymaps/vega/keymap.c b/keyboards/ergodone/keymaps/vega/keymap.c
new file mode 100644 (file)
index 0000000..9e52295
--- /dev/null
@@ -0,0 +1,555 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+    BASE,
+    GREL,
+    GREU,
+    SYMB,
+    MATH,
+    QWER,
+    FNLR
+};
+
+enum unicode_names {
+  //MATH
+       neq,  //≠
+       intgrl,  //∫
+       angl,  //∠
+       imply,  //⇒
+       equiv,  //⇔
+       porp,  //∝
+       exists,  //∃
+       nexists,  //∄
+       forall,  //∀
+       and,  //∧
+       or,  //∨
+       xor,  //⊕
+       apeql,  //≅
+       root,  //√
+       not,  //¬
+       sum,  //∑
+       plsminus,  //±
+       infin,  //∞
+       emtyset,  //∅
+       Mn,  //ℕ
+       Mz,  //ℤ
+       Mq,  //ℚ
+       Mr,  //ℝ
+       Mc,  //ℂ
+       eleof,  //∈
+       member,  //∋
+       neleof,  //∉
+       nmember,  //∌
+       subsetof,  //⊂
+       suprsetof,  //⊃
+       intersection,  //∩
+       Munion,  //∪
+
+  //SYMB
+  arwl,
+  arwu,
+  arwr,
+  arwd,
+
+  uxclm,
+  cent,
+  degree,
+  trade,
+  copy,
+  numero,
+  sect,
+  mdot,
+  rang,
+
+
+  lshade,
+  mshade,
+  dshade,
+
+  fire,
+  water,
+  cleft,
+  baster,
+  neteen,
+  floppy,
+
+  boxemp,
+  boxchk,
+  boxX,
+
+  bbstr,
+  bbstl,
+  bbml,
+  bbmr,
+  bbmb,
+  bbrtr,
+  bbrbr,
+  bbrtl,
+  bbrbl,
+  bbsbr,
+  bbsbl,
+  bbmbr,
+  bbmbl,
+
+  Agrave,
+  Aacute,
+  Acircm,
+  Atilde,
+  Abreve,
+  Adiaer,
+  Adacut,
+
+    // not all ogham letters, as I
+    // actually intend to use them for hex
+  OS,
+  Oa,
+  Ob,
+  Oc,
+  Od,
+  Oe,
+  Of,
+  Og,
+  Oh,
+  Oi,
+  OA,
+  OB,
+  OC,
+  OD,
+  OE,
+  OF,
+  Os,
+  OED,
+  Ox,
+  gnd,
+  sqr,
+  sine,
+  opt,
+
+  geq,
+  leq,
+  brkup,
+  brkdn,
+  perup,
+  perdn,
+
+  //GREEL
+       rone,  // 1:: ⅰ
+       rtwo,
+       rthree,
+       rfour,  // 4:: ⅳ
+       rfive,  // 5:: ⅴ
+       rsix,  // 6:: ⅵ
+       rseven,  // 7:: ⅶ
+       reight,  // 8:: ⅷ
+       rnine,  // 9:: ⅸ
+       rten,  // 0:: ⅹ
+       gq,  // q:: θ
+       gw,  // w:: ω
+       ge,  // e:: ε
+       gr,  // r:: ρ
+       gt,  // t:: τ
+       gy,  // y:: ψ
+       gu,  // u:: υ
+       gi,  // i:: ι
+       go,  // o:: ο
+       gp,  // p:: π
+       ga,  // a:: α
+       gs,  // s:: σ
+       gd,  // d:: δ
+       gf,  // f:: φ
+       gg,  // g:: γ
+       gh,  // h:: η
+       gj,  // j:: ϑ
+       gk,  // k:: κ
+       gl,  // l:: λ
+       gz,  // z:: ζ
+       gx,  // x:: ξ
+       gc,  // c:: χ
+       gv,  // v:: ς
+       gb,  // b:: β
+       gn,  // n:: ν
+       gm,  // m:: μ
+
+  //GREEU
+       Rone,  // 1:: Ⅰ
+       Rtwo,  // 2:: Ⅱ
+       Rthree,  // 3:: Ⅲ
+       Rfour,  // 4:: Ⅳ
+       Rfive,  // 5:: Ⅴ
+       Rsix,  // 6:: Ⅵ
+       Rseven,  // 7:: Ⅶ
+       Reight,  // 8:: Ⅷ
+       Rnine,  // 9:: Ⅸ
+  Rten,
+       Gq,  // Q:: Θ
+       Gw,  // W:: Ω
+       Ge,  // E:: Ε
+       Gr,  // R:: Ρ
+       Gt,  // T:: Τ
+       Gy,  // Y:: Ψ
+       Gu,  // U:: Υ
+       Gi,  // I:: Ι
+       Go,  // O:: Ο
+       Gp,  // P:: Π
+       Ga,  // A:: Α
+       Gs,  // S:: Σ
+       Gd,  // D:: Δ
+       Gf,  // F:: Φ
+       Gg,  // G:: Γ
+       Gh,  // H:: Η
+       Gj,  // J:: J
+       Gk,  // K:: Κ
+       Gl,  // L:: Λ
+       Gz,  // Z:: Ζ
+       Gx,  // X:: Ξ
+       Gc,  // C:: Χ
+       Gv,  // V:: V
+       Gb,  // B:: Β
+       Gn,  // N:: Ν
+       Gm,  // M:: Μ
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+  //MATH
+       [neq] = 0x2260,  //≠
+       [intgrl] = 0x222B,  //∫
+       [angl] = 0x2220,  //∠
+       [imply] = 0x21D2,  //⇒
+       [equiv] = 0x21D4,  //⇔
+       [porp] = 0x221D,  //∝
+       [exists] = 0x2203,  //∃
+       [nexists] = 0x2204,  //∄
+       [forall] = 0x2200,  //∀
+       [and] = 0x2227,  //∧
+       [or] = 0x2228,  //∨
+       [xor] = 0x2295,  //⊕
+       [apeql] = 0x2245,  //≅
+       [root] = 0x221A,  //√
+       [not] = 0x00AC,  //¬
+       [sum] = 0x2211,  //∑
+       [plsminus] = 0x00B1,  //±
+       [infin] = 0x221E,  //∞
+       [emtyset] = 0x2205,  //∅
+       [Mn] = 0x2115,  //ℕ
+       [Mz] = 0x2124,  //ℤ
+       [Mq] = 0x211A,  //ℚ
+       [Mr] = 0x211D,  //ℝ
+       [Mc] = 0x2102,  //ℂ
+       [eleof] = 0x2208,  //∈
+       [member] = 0x220B,  //∋
+       [neleof] = 0x2209,  //∉
+       [nmember] = 0x220C,  //∌
+       [subsetof] = 0x2282,  //⊂
+       [suprsetof] = 0x2283,  //
+       [intersection] = 0x2229,  //∩
+       [Munion] = 0x222A,  //∪
+  //Symbol
+       [arwl] = 0x2190,  //←
+  [arwu] = 0x2191, //↑
+       [arwr] = 0x2192,  //→
+  [arwd] = 0x2193, //↓
+
+       [uxclm] = 0x00A1,  //¡
+  [cent] = 0x00A2, //¢
+  [degree] = 0x00B0, //°
+  [trade] = 0x2122, //™
+  [copy] = 0x00A9, //©
+  [numero] = 0x2116, //№
+  [sect] = 0x00A7, //§
+  [mdot] = 0x00B7, //·
+  [rang] = 0x299C, //⦜
+
+
+  [lshade] = 0x2591,//░
+  [mshade] = 0x2592,//▒
+  [dshade] = 0x2593,//▓
+
+  [fire] = 0x1F525, //🔥
+  [water] = 0x1F322, //🌢
+  [cleft] = 0x1F12F, //🄯
+  [baster] = 0x1F7BC, //🞼
+  [neteen] = 0x1F51E, //🔞
+  [floppy] = 0x1F5AB, //🖫
+
+       [boxemp] = 0x2610,  //☐
+       [boxchk] = 0x2611,  //☑
+       [boxX] = 0x2612,  //☒
+
+       [bbstr] = 0x23A1,  //⎡
+       [bbstl] = 0x23A4,  //⎤
+       [bbml] = 0x23A8,  //⎨
+       [bbmr] = 0x23AC,  //⎬
+       [bbmb] = 0x23AA,  //⎪
+       [bbrtr] = 0x23A7,  //⎧
+       [bbrbr] = 0x23A9,  //⎩
+       [bbrtl] = 0x23AB,  //⎫
+       [bbrbl] = 0x23AD,  //⎭
+       [bbsbr] = 0x23A3,  //⎣
+       [bbsbl] = 0x23A6,  //⎦
+       [bbmbr] = 0x23A5,  //⎥
+       [bbmbl] = 0x23A2,  //⎢
+
+  [Agrave] = 0x0300,//è //above  [wtf] = 0x1242A, //𒐪
+       [Aacute] = 0x0301,//é //1st
+  [Acircm] = 0x0302,//ê //2nd
+       [Atilde] = 0x0303,//ẽ //5th
+       [Abreve] = 0x0306,//ĕ //4th
+       [Adiaer] = 0x0308,//ë //3rd
+       [Adacut] = 0x030B,//e̋
+
+  // not all ogham letters, as I
+  // actually intend to use them for hex
+  [OS] = 0x1680,//space
+  [Oa] = 0x1681,//1
+  [Ob] = 0x1682,//2
+  [Oc] = 0x1683,//3
+  [Od] = 0x1684,//4
+  [Oe] = 0x1685,//5
+  [Of] = 0x1686,//6
+  [Og] = 0x1687,//7
+  [Oh] = 0x1688,//8
+  [Oi] = 0x1689,//9
+  [OA] = 0x168A,//A
+  [OB] = 0x168B,//B
+  [OC] = 0x168C,//C
+  [OD] = 0x168D,//D
+  [OE] = 0x168E,//E
+  [OF] = 0x168F,//F
+  [Os] = 0x169B,//Start
+  [OED] = 0x169C,//End
+  [Ox] = 0x1695,//X
+
+  [gnd] = 0x23DA,//⏚
+  [sqr] = 0x238D,//⎍, actually monostable
+  [sine] = 0x223F,//∿
+  [opt] = 0x2325,//⌥, actually option used for switch
+
+       [geq] = 0x2264,  //≤
+       [leq] = 0x2265,  //≥
+       [brkup] = 0xFE38,  //︸
+       [brkdn] = 0xFE37,  //︷
+  [perup] = 0xFE35, //︵
+  [perdn] = 0xFE36, //︶
+  //GREEKL
+  [rone] = 0x2170,  // 1:: ⅰ
+       [rtwo] = 0x2171,  // 2:: ⅱ
+       [rthree] = 0x2172,  // 3:: ⅲ
+       [rfour] = 0x2173,  // 4:: ⅳ
+       [rfive] = 0x2174,  // 5:: ⅴ
+       [rsix] = 0x2175,  // 6:: ⅵ
+       [rseven] = 0x2176,  // 7:: ⅶ
+       [reight] = 0x2177,  // 8:: ⅷ
+       [rnine] = 0x2178,  // 9:: ⅸ
+       [rten] = 0x2179,  // 0:: ⅹ
+       [gq] = 0x03B8,  // q:: θ
+       [gw] = 0x03C9,  // w:: ω
+       [ge] = 0x03B5,  // e:: ε
+       [gr] = 0x03C1,  // r:: ρ
+       [gt] = 0x03C4,  // t:: τ
+       [gy] = 0x03C8,  // y:: ψ
+       [gu] = 0x03C5,  // u:: υ
+       [gi] = 0x03B9,  // i:: ι
+       [go] = 0x03BF,  // o:: ο
+       [gp] = 0x03C0,  // p:: π
+       [ga] = 0x03B1,  // a:: α
+       [gs] = 0x03C3,  // s:: σ
+       [gd] = 0x03B4,  // d:: δ
+       [gf] = 0x03C6,  // f:: φ
+       [gg] = 0x03B3,  // g:: γ
+       [gh] = 0x03B7,  // h:: η
+       [gj] = 0x03D1,  // j:: ϑ
+       [gk] = 0x03BA,  // k:: κ
+       [gl] = 0x03BB,  // l:: λ
+       [gz] = 0x03B6,  // z:: ζ
+       [gx] = 0x03BE,  // x:: ξ
+       [gc] = 0x03C7,  // c:: χ
+       [gv] = 0x03C2,  // v:: ς
+       [gb] = 0x03B2,  // b:: β
+       [gn] = 0x03BD,  // n:: ν
+       [gm] = 0x03BC,  // m:: μ
+  //GREEKU
+       [Rone] = 0x2160,  // 1:: Ⅰ
+       [Rtwo] = 0x2161,  // 2:: Ⅱ
+       [Rthree] = 0x2162,  // 3:: Ⅲ
+       [Rfour] = 0x2163,  // 4:: Ⅳ
+       [Rfive] = 0x2164,  // 5:: Ⅴ
+       [Rsix] = 0x2165,  // 6:: Ⅵ
+       [Rseven] = 0x2166,  // 7:: Ⅶ
+       [Reight] = 0x2167,  // 8:: Ⅷ
+       [Rnine] = 0x2168,  // 9:: Ⅸ
+       [Rten] = 0x2169,  // 0:: Ⅹ
+       [Gq] = 0x0398,  // Q:: Θ
+       [Gw] = 0x03A9,  // W:: Ω
+       [Ge] = 0x0395,  // E:: Ε
+       [Gr] = 0x03A1,  // R:: Ρ
+       [Gt] = 0x03A4,  // T:: Τ
+       [Gy] = 0x03A8,  // Y:: Ψ
+       [Gu] = 0x03A5,  // U:: Υ
+       [Gi] = 0x0399,  // I:: Ι
+       [Go] = 0x039F,  // O:: Ο
+       [Gp] = 0x03A0,  // P:: Π
+       [Ga] = 0x0391,  // A:: Α
+       [Gs] = 0x03A3,  // S:: Σ
+       [Gd] = 0x0394,  // D:: Δ
+       [Gf] = 0x03A6,  // F:: Φ
+       [Gg] = 0x0393,  // G:: Γ
+       [Gh] = 0x0397,  // H:: Η
+       [Gj] = 0x004A,  // J:: J
+       [Gk] = 0x039A,  // K:: Κ
+       [Gl] = 0x039B,  // L:: Λ
+       [Gz] = 0x0396,  // Z:: Ζ
+       [Gx] = 0x039E,  // X:: Ξ
+       [Gc] = 0x03A7,  // C:: Χ
+       [Gv] = 0x0056,  // V:: V
+       [Gb] = 0x0392,  // B:: Β
+       [Gn] = 0x039D,  // N:: Ν
+       [Gm] = 0x039C,  // M:: Μ
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[BASE] = LAYOUT_ergodox(  // layer 0 : default
+        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
+        KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BSLS,
+        KC_EQL, KC_A, KC_O, KC_E, KC_U, KC_I,
+        KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_AMPR,
+        OSL(FNLR), TT(GREL), TT(MATH), KC_UP, KC_DOWN,
+        KC_LBRC, KC_HOME, KC_INS, KC_SPC, KC_LGUI, KC_DEL,
+
+        OSL(FNLR), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+        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, KC_RSPC,
+        KC_LEFT, KC_RIGHT, KC_RALT, TT(SYMB), TT(QWER),
+        KC_END, KC_RBRC, KC_PSCR, KC_RALT, KC_RCTL, KC_ENT
+),
+
+[FNLR] = LAYOUT_ergodox(
+       // left hand
+       KC_NO,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_NO,
+       KC_NO,KC_F11, KC_F12, KC_F13,KC_F14, KC_F15,  KC_NO,
+       KC_NO,KC_F21, KC_F22, KC_F23,KC_F24, KC_NO,
+       KC_NO,KC_PAUSE,KC_PSCR,KC_SLCK,KC_NO,KC_NO,KC_NO,
+          EEP_RST,TO(BASE),TO(BASE),TO(BASE),TO(BASE),
+                                       KC_NO,KC_NO,
+                                               KC_NO,
+                               KC_NO,KC_NO,KC_NO,
+       // right hand
+       TO(BASE), KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  UC_M_LN,
+       KC_NO, KC_F16,  KC_F17,KC_F18,   KC_F19,  KC_F20,  UC_M_WI,
+                KC_NO, KC_NO,   KC_NO,    KC_NO,    KC_NO, KC_NO,
+       KC_NO, KC_NO, KC_NO,   KC_NO,    KC_NO,    KC_NO, KC_NO,
+                         KC_NO,KC_NO,  KC_NO,    KC_NO,  KC_NO,
+       KC_NO, KC_NO,
+       KC_NO,
+       KC_NO, KC_RCTL, KC_NO
+),
+
+[QWER] = LAYOUT_ergodox(
+        KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
+        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSLS,
+        KC_AMPR, KC_A, KC_S, KC_D, KC_F, KC_G,
+        KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_QUOT,
+        KC_BSLS, KC_LCTL, KC_LGUI, KC_RALT, KC_APP,
+        KC_LBRC, KC_HOME, KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN,
+
+        OSL(FNLR), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+        KC_MINS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH,
+        KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+        KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+        KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT, TO(BASE),
+        KC_END, KC_INS, KC_DEL, KC_RGHT, KC_ENT, KC_SPC
+),
+
+[MATH] = LAYOUT_ergodox(
+       KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
+       KC_TAB, X(Mc),  X(Munion),      X(arwl),        X(or),  X(exists),      KC_BSLASH,
+       X(arwr), X(root), X(and), X(imply), X(nexists), X(forall),
+       KC_LSPO,        KC_SCLN,        X(intgrl),      X(Mn),  X(Mz),  X(member),      X(arwl),
+       KC_MS_L, TO(BASE), TO(BASE), KC_INS, KC_DEL,
+       KC_LBRC, KC_HOME, KC_UP, KC_SPC, KC_LGUI, KC_DOWN,
+
+       TT(FNLR), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+       KC_PGUP, X(plsminus),   X(infin),       X(neleof),      X(equiv),       X(Mq),  KC_EQL,
+       X(sum), X(emtyset),     X(porp),        X(suprsetof),   X(not), X(neq),
+       KC_PGDN,        X(subsetof),    X(intersection),        X(angl),        X(nmember),     X(eleof),       KC_RSPC,
+       KC_RCTL, KC_RALT, KC_APP, TO(BASE), TO(BASE),
+       KC_END, KC_RBRC, KC_LEFT, KC_RGHT, KC_ENT, KC_SPC
+),
+
+[SYMB] = LAYOUT_ergodox(
+       X(Os), X(Oa), X(Ob), X(Oc), X(Od), X(Oe), X(mdot),
+       X(boxemp), X(bbstr), X(bbrtr), X(bbrtl), X(bbstl), X(degree), X(brkdn),
+       X(boxchk), X(bbmbl), X(bbml), X(bbmr), X(bbmbr), X(neteen),
+       X(boxX), X(bbsbr), X(bbrbr), X(bbrbl), X(bbsbl), X(uxclm), X(brkup),
+       X(floppy), TO(BASE), TO(BASE), X(arwu), X(arwd),
+       X(fire), X(lshade), X(mshade), KC_SPC, X(OS), X(dshade),
+
+       X(Ox), X(Of), X(Og), X(Oh), X(Oi), X(OA), X(OB),
+       X(numero), X(trade), X(copy), X(cleft), X(cent), X(OED), X(OC),
+       X(Agrave), X(gnd), X(sqr), X(sine), X(opt), X(OD),
+       X(sect), X(Aacute), X(Acircm), X(Adiaer), X(Abreve), X(Atilde), X(OE),
+       X(arwl), X(arwr), X(geq), X(leq), X(OF),
+       X(rang), X(water), X(perup), X(perdn), X(baster), KC_ENT
+),
+
+[GREL] = LAYOUT_ergodox(
+       KC_ESC, X(Rone), X(Rtwo), X(Rthree), X(Rfour), X(Rfive), KC_GRV,
+       KC_TAB, KC_QUOT, KC_COMM, KC_DOT, X(gp), X(gy), KC_SLSH,
+       KC_SLSH, X(ga), X(go), X(ge), X(gu), X(gi),
+       MO(GREU), KC_SCLN, X(gq), X(gj), X(gk), X(gx), KC_AMPR,
+       KC_MS_L, TO(BASE), TO(BASE), KC_INS, KC_DEL,
+       KC_LBRC, KC_HOME, KC_UP, KC_SPC, KC_LGUI, KC_DOWN,
+
+       TO(BASE), X(Rsix), X(Rseven), X(Reight), X(Rnine), X(Rten), KC_BSPC,
+       KC_PGUP, X(gf), X(gg), X(gc), X(gr), X(gl), KC_EQL,
+       X(gd), X(gh), X(gt), X(gn), X(gs), KC_MINS,
+       KC_PGDN, X(gb), X(gm), X(gw), X(gv), X(gz), MO(GREU),
+       KC_RCTL, KC_RALT, KC_APP, TO(BASE), TO(BASE),
+       KC_END, KC_RBRC, KC_LEFT, KC_RGHT, KC_ENT, KC_SPC
+),
+
+[GREU] = LAYOUT_ergodox(
+       KC_ESC, X(Rone), X(Rtwo), X(Rthree), X(Rfour), X(Rfive), KC_GRV,
+       KC_TAB, KC_QUOT, KC_COMM, KC_DOT, X(Gp), X(Gy), KC_SLSH,
+       KC_SLSH, X(Ga), X(Go), X(Ge), X(Gu), X(Gi),
+       KC_TRNS, KC_SCLN, X(Gq), X(Gj), X(Gk), X(Gx), KC_AMPR,
+       KC_MS_L, TO(BASE), TO(BASE), KC_INS, KC_DEL,
+       KC_LBRC, KC_HOME, KC_UP, KC_SPC, KC_LGUI, KC_DOWN,
+
+       TO(BASE), X(Rsix), X(Rseven), X(Reight), X(Rnine), X(Rten), KC_BSPC,
+       KC_PGUP, X(Gf), X(Gg), X(Gc), X(Gr), X(Gl), KC_EQL,
+       X(Gd), X(Gh), X(Gt), X(Gn), X(Gs), KC_MINS,
+       KC_PGDN, X(Gb), X(Gm), X(Gw), X(Gv), X(Gz), KC_TRNS,
+       KC_RCTL, KC_RALT, KC_APP, TO(BASE), TO(BASE),
+       KC_END, KC_RBRC, KC_LEFT, KC_RGHT, KC_ENT, KC_SPC
+),
+
+};
+
+// 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/ergodone/keymaps/vega/rules.mk b/keyboards/ergodone/keymaps/vega/rules.mk
new file mode 100644 (file)
index 0000000..d4b8547
--- /dev/null
@@ -0,0 +1,2 @@
+UNICODE_ENABLE          = no # Unicode
+UNICODEMAP_ENABLE = yes
index 09443cf72529bed15484cba780a3ca1ca5a62be9..947a173e369276ba197b6e5b744cc106a09ada2d 100644 (file)
@@ -304,4 +304,14 @@ led_config_t g_led_config = { {
     4, 4, 1, 1, 1, 1
 } };
 
+void suspend_power_down_kb(void) {
+    rgb_matrix_set_suspend_state(true);
+    suspend_power_down_user();
+}
+
+ void suspend_wakeup_init_kb(void) {
+    rgb_matrix_set_suspend_state(false);
+    suspend_wakeup_init_user();
+}
+
 #endif
index e188d95d510264816fa20c23776ea48342c2046b..a0ba655ede1c4861005f904b4dcf875cdaabc166 100644 (file)
@@ -6,12 +6,15 @@
 
 
 #undef  TAPPING_TERM
-#define TAPPING_TERM 200
+#define TAPPING_TERM 175
 
 #undef  DEBOUNCE
-#define DEBOUNCE 10
+#define DEBOUNCE 15
 
 #undef  IGNORE_MOD_TAP_INTERRUPT
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true
 
 #undef  FORCE_NKRO
 #define FORCE_NKRO
 #define TAPPING_TOGGLE 5
 
 #define LEADER_TIMEOUT 1000
-#define IGNORE_MOD_TAP_INTERRUPT
 #define PERMISSIVE_HOLD
 #define QMK_KEYS_PER_SCAN 4
 #define DANCING_TERM 175
 
 #define ONESHOT_TAP_TOGGLE 5
+
+#undef  ONESHOT_TIMEOUT
 #define ONESHOT_TIMEOUT 5000
 
 #define COMBO_COUNT 4
index 23f19d18afb4bd6f63e3969c070c3c317d96747b..81a4e93fda418b873f0f49ea862bb08f441554b6 100644 (file)
@@ -1,19 +1,22 @@
-let gulp = require('gulp');
-let run = require('gulp-run-command').default;
+const gulp = require('gulp');
+const run = require('gulp-run-command').default;
 
 
-gulp.task('clean', run('rm -rf ../../../../.build'));
+const ROOT_DIR = '../../../../';
+const BUILD_DIR = `${ROOT_DIR}.build`;
+const HACKER_DVORAK_DIR = './**/*';
 
-gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', {
-    ignoreErrors: true
-}));
+const CLEAN_CMD = `rm -rf ${BUILD_DIR}`;
+const BUILD_CMD = `make -C ${ROOT_DIR} ergodox_ez:hacker_dvorak`;
+
+gulp.task('clean', run(CLEAN_CMD));
 
-gulp.task('watch', ['build'], () => {
-    gulp.watch([
-        'keymap.c',
-        'config.h',
-        'rules.mk',
-    ], ['build']);
-});
+gulp.task('build', gulp.series('clean', run(BUILD_CMD, {
+        ignoreErrors: true
+})));
+
+gulp.task('watch', gulp.series('build', () => {
+    gulp.watch(HACKER_DVORAK_DIR, gulp.series('build'));
+}));
 
-gulp.task('default', ['watch']);
+gulp.task('default', gulp.series('watch'));
index 65878a67cb4f644f6f23b7bc1698f53116aed305..71cf1053aa02c0c0e7a7e46abbce138ca0b23011 100644 (file)
@@ -13,21 +13,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
          //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
         //  TAB                    |      MOD TAP: ALT+SHIFT |       MOD TAP: CTRL+ALT |     MOD TAP: CTRL+SHIFT | P                       | Y                       |                         //
         //                         |                         |                         |                         |                         |                         |                         //
-                   KC_TAB,                TD(NONE_LEAD),            TD(QUOT_DQUO),            TD(DOT_COMM),              ALL_T(KC_P),              MEH_T(KC_Y),            DYN_MACRO_PLAY1,    //
+                   KC_TAB,                TD(NONE_LEAD),            TD(QUOT_DQUO),           TD(DOT_COMM),               LCG_T(KC_P),              LAG_T(KC_Y),            DYN_MACRO_PLAY1,    //
         //                         |                    LEAD |                       " |                       , |                         |                         |                         //
-        //                         |         TAP DANCE: NONE |            TAP DANCE: ' |            TAP DANCE: . |          MOD TAP: HYPER |            MOD TAP: MEH |                         //
+        //                         |         TAP DANCE: NONE |            TAP DANCE: ' |            TAP DANCE: . |       MOD TAP: CTRL+GUI |        MOD TAP: ALT+GUI |                         //
          //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|   PLAY DYNAMIC MACRO 1  //
-        //                         |            MOD TAP: ALT |           MOD TAP: CTRL |        LAYER TAP: SHIFT |   LAYER TAP: ARROW KEYS |            MOD TAP: GUI |                         //
+        //                         |            MOD TAP: ALT |           MOD TAP: CTRL |        LAYER TAP: SHIFT | M TAP DANCE: ARROWS/GUI |      MOD TAP: SHIFT+GUI |                         //
         //                         |                         |                         |                         |                       Ü |                         |                         //
-                TD(EQL_PLUS),              ALT_T(KC_A),              CTL_T(KC_O),              SFT_T(KC_E),           LT(ARROWS, KC_U),           LGUI_T(KC_I),      //-----------------------//
+                TD(EQL_PLUS),             LALT_T(KC_A),             LCTL_T(KC_O),             LSFT_T(KC_E),            TD(U_ARR_GUI),             SGUI_T(KC_I),      //-----------------------//
         //                       + |                       Á |                       Ó |                       É |                       Ú |                       Í |                         //
         //            TAP DANCE: = |            TAP DANCE: A |            TAP DANCE: O |            TAP DANCE: E |            TAP DANCE: U |            TAP DANCE: I |                         //
          //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------|  META                   //
         //          STOP RECORDING |  MOD TAP: GUI+SHIFT+ALT | Q                       | J                       | K                       | X                       |                         //
         //                         |                         |                         |                         |                         |                         |                         //
-                DYN_REC_STOP,             TD(SCLN_COLN),            SGUI_T(KC_Q),          LT(MEDIA_FN, KC_J),        LT(NUMPAD, KC_K),           LCAG_T(KC_X),                KC_LGUI,        //
+                DYN_REC_STOP,             TD(SCLN_COLN),            LCAG_T(KC_Q),             TD(J_MED_MEH),            TD(K_NUM_HYP),            LCSG_T(KC_X),                KC_LGUI,        //
         //                         |                       : |                         |                         |                         |                         |                         //
-        //           DYNAMIC MACRO |            TAP DANCE: ; |      MOD TAP: SHIFT+GUI | LAYER TAP: MEDIA/F-KEYS |   LAYER TAP: ATM NUMPAD |    MOD TAP: CTL+ALT+GUI |                         //
+        //           DYNAMIC MACRO |            TAP DANCE: ; |      MOD TAP: SHIFT+GUI |  M TAP DANCE: MEDIA/MEH |  M TAP DANCE: ATM/HYPER |  MOD TAP: CTL+SHIFT+GUI |                         //
          //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
         //         LAYERS SWITCHER | APPLICATION MENU        |                         |                         |                        //
         //                         |                         |                         |                         |                  SCROLL //
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                                                                                                 //-------------------------+-------------------------+------------------------//
                                                                                                                //                          |                         | HOME                    //
                                                                                                                //                          |                         |                         //
-                                                                                                                /*  SPACE                   |  BACKSPACE             */         KC_HOME,        //
+                                                                                                                /*  SPACE                   |  BACKSPACE             */         KC_HOME,       //
                                                                                                                //                          |                         |                         //
                                                                                                                //                          |                         |                         //
                                                                                                                            KC_SPC,                   KC_BSPC,        //-----------------------//
@@ -69,19 +69,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
          //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |                         |                         |                         |                         |                         |                         //
-                DYN_MACRO_PLAY2,           MEH_T(KC_F),               ALL_T(KC_G),            C_S_T(KC_C),                LCA_T(KC_R),             LAS_T(KC_L),             TD(SLSH_BSLS),     //
+                DYN_MACRO_PLAY2,           LAG_T(KC_F),              LCG_T(KC_G),             C_S_T(KC_C),                LCA_T(KC_R),             LAS_T(KC_L),             TD(SLSH_BSLS),     //
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |                         |                         |                         |                         |                         |                         //
-        /*-----------------------*/        LGUI_T(KC_D),           LT(MOUSE, KC_H),            SFT_T(KC_T),             CTL_T(KC_N),               ALT_T(KC_S),             TD(MINS_UNDS),     //
+        /*-----------------------*/        SGUI_T(KC_D),            TD(H_MOU_GUI),            LSFT_T(KC_T),               LCTL_T(KC_N),            LALT_T(KC_S),            TD(MINS_UNDS),     //
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |                         |                         |                         |                         |                         |                         //
-                   KC_LGUI,                LCAG_T(KC_B),           LT(HYPER, KC_M),         LT(MEDIA_FN, KC_W),          SGUI_T(KC_V),            LGAS_T(KC_Z),                COMPOSE,        //
+                   KC_LGUI,                LCSG_T(KC_B),            TD(M_CHO_HYP),            TD(W_MED_MEH),            LCAG_T(KC_V),             LASG_T(KC_Z),                COMPOSE,        //
         //                         |                         |                         |                         |                         |                         |                         //
         //                         |                         |                         |                         |                         |                         | ⎄                      //
          //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
@@ -163,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                    KC_RBRC,     KC_LEFT,     KC_DOWN, KC_RIGHT, XXXXXXX,
 
         // right thumb
-        KC_MS_BTN5, MO(HYPER),
+        KC_MS_BTN5, MO(CHORD),
         KC_MS_BTN4,
         KC_MS_BTN3, KC_MS_BTN2,   KC_MS_BTN1
     ),
@@ -295,10 +295,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         // right thumb
         XXXXXXX,   XXXXXXX,
         XXXXXXX,
-        RGB_GREEN, XXXXXXX, XXXXXXX
+        XXXXXXX, XXXXXXX, XXXXXXX
     ),
 
-    [HYPER] = LAYOUT_ergodox(
+    [CHORD] = LAYOUT_ergodox(
         // left hand
         XXXXXXX, HYPR(KC_F1),  HYPR(KC_F2),  HYPR(KC_F3),  HYPR(KC_F4),  HYPR(KC_F5),  XXXXXXX,
         XXXXXXX, HYPR(KC_F6),  HYPR(KC_F7),  HYPR(KC_F8),  HYPR(KC_F9),  HYPR(KC_F10), XXXXXXX,
index e5eba182021fa0a45eeafb357e762796192fb536..323358357added6eb2ae443b3466d25e6fdbf394 100644 (file)
@@ -1,5 +1,13 @@
-// Keycode aliases
+// Compound keycode aliases
 #define SCTL(kc)   LSFT(LCTL(kc))  // Modifier keys: SHIFT+CTRL+kc combination.
-#define LGAS_T(kc) MT(MOD_LGUI | MOD_LALT | MOD_LSFT, kc)  // Mod tap: kc when tapped, GUI+ALT+SHIFT when held.
-#define LAS_T(kc)  MT(MOD_LALT | MOD_LSFT, kc)  // Mod tap: kc when tapped, ALT+SHIFT whin held.
+
+// Tap
+#define LASG_T(kc) MT(MOD_LGUI | MOD_LALT | MOD_LSFT, kc)  // Mod tap: kc when tapped, GUI+ALT+SHIFT when held.
+#define LCSG_T(kc) MT(MOD_LGUI | MOD_LSFT | MOD_LCTL, kc)  // Mod tap: kc when tapped, GUI+CTL+SHIFT when held.
+
+#define LCG_T(kc)  MT(MOD_LCTL | MOD_LGUI, kc)  // Mod tap: kc when tapped, CTL+GUI when held.
+#define LAS_T(kc)  MT(MOD_LALT | MOD_LSFT, kc)  // Mod tap: kc when tapped, ALT+SHIFT when held.
+#define LAG_T(kc)  MT(MOD_LALT | MOD_LGUI, kc)  // Mod tap: kc when tapped, ALT+GUI when held.
+
+// Others
 #define COMPOSE    KC_RALT  // Compose key (used to input characters like á, ñ, ü).
index 368062172bc13ef846709c851187c8faafcaf18e..338910b53f6ed9e6fe5625180c6048ce10cfd2db 100644 (file)
@@ -1,7 +1,6 @@
 // Define custom user keycodes:
 enum custom_keycodes {
     PLACEHOLDER = SAFE_RANGE,  // Can always be here.
-    RGB_GREEN,                 // To set default RGB layer as green once.
     MY_CUSTOM_MACRO,           // Custom macro example.
     MY_OTHER_MACRO,            // Custom macro example.
     DYNAMIC_MACRO_RANGE        // Should always be the last.
index af06d2bd815d21724b531aca741de71d550d042c..e953f06de8c97ff7bf71452e4ccd0abc9106734a 100644 (file)
@@ -9,6 +9,15 @@
 #include "tap_dance/tap_dances.c"
 #include "user/matrix_scan_user.c"
 #include "tap_dance/mod_tap_layer_dances/none_lead.c"
+#include "tap_dance/mod_tap_layer_dances/dot_comm.c"
+#include "tap_dance/mod_tap_layer_dances/quot_dquot.c"
+#include "tap_dance/mod_tap_layer_dances/scln_coln.c"
+#include "tap_dance/mod_tap_layer_dances/u_arrows_gui.c"
+#include "tap_dance/mod_tap_layer_dances/h_mouse_gui.c"
+#include "tap_dance/mod_tap_layer_dances/j_media_meh.c"
+#include "tap_dance/mod_tap_layer_dances/w_media_meh.c"
+#include "tap_dance/mod_tap_layer_dances/k_numpad_hyper.c"
+#include "tap_dance/mod_tap_layer_dances/m_chords_hyper.c"
 #include "tap_dance/tap_dance_actions.c"
 #include "keycodes/custom_keycodes.c"
 #include "dynamic_macro.h"    // Includes dynamic macro definitions, needed *after* the custom keycodes.
index f190e4f6f9b22f7836a3c1b3fb997e4eb6399ca3..f252bc802b2e140ea91cd7e3c4e89af2702d9eb6 100644 (file)
@@ -7,6 +7,6 @@ enum layers {        // Hacker Dvorak keyboard layers:
     NUMPAD   = 5,    //   * ATM style numpad with symbols and letters that should suffice to input any numeric literal.
     LAYERS   = 6,    //   * Layer switcher used to change between DVORAK, PLOVER and GAMING layers.
     MEDIA_FN = 7,    //   * Media, RGB and function keys from F1 to F24 in symmetric fashion.
-    HYPER    = 8,    //   * Hot keys layer (uses hyper + F1 .. F24) suitable for global shortcut tasks.
+    CHORD    = 8,    //   * Hot keys layer (uses hyper + F1 .. F24) suitable for global shortcut tasks.
     FIRMWARE = 9     //   * Layer with firmware related functionality, like the reset and EEPROM keys.
 };
index 1e89c4bfca301de5f659418bbcb424aeb19ceb8c..c22670a05aafbf2efb15f37d71a46c947d753f0d 100644 (file)
@@ -1,14 +1 @@
 LEADER_EXTERNS();
-
-void qk_leader_start(void) {
-    if (!leading) {
-        leading = true;
-        leader_time = timer_read();
-        leader_sequence_size = 0;
-        leader_sequence[0] = 0;
-        leader_sequence[1] = 0;
-        leader_sequence[2] = 0;
-        leader_sequence[3] = 0;
-        leader_sequence[4] = 0;
-    }
-}
index 116911e46bb8769b0d0c61884850a78c88360e0e..173bcd5a866c34049526a93790f0381387f61375 100644 (file)
@@ -9,7 +9,7 @@
   "author": "SalchiPapa",
   "license": "GPL-2.0",
   "dependencies": {
-    "gulp": "^3.9.1",
+    "gulp": "^4.0.0",
     "gulp-run-command": "0.0.9"
   }
 }
index 51a9ff0d4969385c9519be426672c6f9cdef4743..aa13f98bd609fafbd29ef90894847bd18a845116 100644 (file)
@@ -1,6 +1,7 @@
 # Set any rules.mk overrides for your specific keymap here.
 # See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
 
+LINK_TIME_OPTIMIZATION_ENABLE = yes
 NKRO_ENABLE      = yes  # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 TAP_DANCE_ENABLE = yes
 MOUSEKEY_ENABLE  = yes  # Mouse keys(+4700b).
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/dot_comm.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/dot_comm.c
new file mode 100644 (file)
index 0000000..cbfbcda
--- /dev/null
@@ -0,0 +1,41 @@
+//instanalize an instance of 'tap' for the Dot - Comma tap dance.
+static tap dot_comm_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void dot_comm_finished(qk_tap_dance_state_t *state, void *user_data) {
+    dot_comm_state.state = current_dance(state);
+    switch (dot_comm_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_DOT);
+            break;
+
+        case SINGLE_HOLD:
+            register_code(KC_LCTL);
+            register_code(KC_LSFT);
+            break;
+
+        case DOUBLE_TAP:
+            register_code(KC_COMM);
+            break;
+    }
+}
+
+void dot_comm_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (dot_comm_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_DOT);
+            break;
+
+        case SINGLE_HOLD:
+            unregister_code(KC_LCTL);
+            unregister_code(KC_LSFT);
+            break;
+
+        case DOUBLE_TAP:
+            unregister_code(KC_COMM);
+            break;
+    }
+    dot_comm_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/h_mouse_gui.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/h_mouse_gui.c
new file mode 100644 (file)
index 0000000..76dda6e
--- /dev/null
@@ -0,0 +1,39 @@
+//instanalize an instance of 'tap' for the H - Mouse - Gui tap dance.
+static tap h_mouse_gui_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void h_mouse_gui_finished(qk_tap_dance_state_t *state, void *user_data) {
+    h_mouse_gui_state.state = current_dance(state);
+    switch (h_mouse_gui_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_H);
+            break;
+
+        case SINGLE_HOLD:
+            layer_on(MOUSE);
+            break;
+
+        case DOUBLE_HOLD:
+            register_code(KC_LGUI);
+            break;
+    }
+}
+
+void h_mouse_gui_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (h_mouse_gui_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_H);
+            break;
+
+        case SINGLE_HOLD:
+            layer_off(MOUSE);
+            break;
+
+        case DOUBLE_HOLD:
+            unregister_code(KC_LGUI);
+            break;
+    }
+    h_mouse_gui_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/j_media_meh.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/j_media_meh.c
new file mode 100644 (file)
index 0000000..daf7be1
--- /dev/null
@@ -0,0 +1,43 @@
+//instanalize an instance of 'tap' for the J - Media - Meh tap dance.
+static tap j_media_meh_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void j_media_meh_finished(qk_tap_dance_state_t *state, void *user_data) {
+    j_media_meh_state.state = current_dance(state);
+    switch (j_media_meh_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_J);
+            break;
+
+        case SINGLE_HOLD:
+            layer_on(MEDIA_FN);
+            break;
+
+        case DOUBLE_HOLD:
+            register_code(KC_LCTL);
+            register_code(KC_LSFT);
+            register_code(KC_LALT);
+            break;
+    }
+}
+
+void j_media_meh_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (j_media_meh_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_J);
+            break;
+
+        case SINGLE_HOLD:
+            layer_off(MEDIA_FN);
+            break;
+
+        case DOUBLE_HOLD:
+            unregister_code(KC_LCTL);
+            unregister_code(KC_LSFT);
+            unregister_code(KC_LALT);
+            break;
+    }
+    j_media_meh_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/k_numpad_hyper.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/k_numpad_hyper.c
new file mode 100644 (file)
index 0000000..609e9f5
--- /dev/null
@@ -0,0 +1,45 @@
+//instanalize an instance of 'tap' for the K - Numpad - Hyper tap dance.
+static tap k_numpad_hyper_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void k_numpad_hyper_finished(qk_tap_dance_state_t *state, void *user_data) {
+    k_numpad_hyper_state.state = current_dance(state);
+    switch (k_numpad_hyper_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_K);
+            break;
+
+        case SINGLE_HOLD:
+            layer_on(NUMPAD);
+            break;
+
+        case DOUBLE_HOLD:
+            register_code(KC_LCTL);
+            register_code(KC_LSFT);
+            register_code(KC_LALT);
+            register_code(KC_LGUI);
+            break;
+    }
+}
+
+void k_numpad_hyper_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (k_numpad_hyper_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_K);
+            break;
+
+        case SINGLE_HOLD:
+            layer_off(NUMPAD);
+            break;
+
+        case DOUBLE_HOLD:
+            unregister_code(KC_LCTL);
+            unregister_code(KC_LSFT);
+            unregister_code(KC_LALT);
+            unregister_code(KC_LGUI);
+            break;
+    }
+    k_numpad_hyper_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/m_chords_hyper.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/m_chords_hyper.c
new file mode 100644 (file)
index 0000000..e7df3ae
--- /dev/null
@@ -0,0 +1,45 @@
+//instanalize an instance of 'tap' for the M - Chords - Hyper tap dance.
+static tap m_chords_hyper_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void m_chords_hyper_finished(qk_tap_dance_state_t *state, void *user_data) {
+    m_chords_hyper_state.state = current_dance(state);
+    switch (m_chords_hyper_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_M);
+            break;
+
+        case SINGLE_HOLD:
+            layer_on(CHORD);
+            break;
+
+        case DOUBLE_HOLD:
+            register_code(KC_LCTL);
+            register_code(KC_LSFT);
+            register_code(KC_LALT);
+            register_code(KC_LGUI);
+            break;
+    }
+}
+
+void m_chords_hyper_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (m_chords_hyper_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_M);
+            break;
+
+        case SINGLE_HOLD:
+            layer_off(CHORD);
+            break;
+
+        case DOUBLE_HOLD:
+            unregister_code(KC_LCTL);
+            unregister_code(KC_LSFT);
+            unregister_code(KC_LALT);
+            unregister_code(KC_LGUI);
+            break;
+    }
+    m_chords_hyper_state.state = 0;
+}
index 6debc1ce4562df9828951f6df481a60fb8ba2a0e..0ba31cec81f8dcbf49d87bf233134c3250c3b394 100644 (file)
@@ -1,7 +1,7 @@
 //instanalize an instance of 'tap' for the None - Lead tap dance.
 static tap none_lead_state = {
-        .is_press_action = true,
-        .state           = 0
+    .is_press_action = true,
+    .state           = 0
 };
 
 void none_lead_finished(qk_tap_dance_state_t *state, void *user_data) {
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/quot_dquot.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/quot_dquot.c
new file mode 100644 (file)
index 0000000..ac6da9e
--- /dev/null
@@ -0,0 +1,41 @@
+//instanalize an instance of 'tap' for the Quote - Double Quote tap dance.
+static tap quot_dquot_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void quot_dquot_finished(qk_tap_dance_state_t *state, void *user_data) {
+    quot_dquot_state.state = current_dance(state);
+    switch (quot_dquot_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_QUOT);
+            break;
+
+        case SINGLE_HOLD:
+            register_code(KC_LCTL);
+            register_code(KC_LALT);
+            break;
+
+        case DOUBLE_TAP:
+            register_code16(KC_DQUO);
+            break;
+    }
+}
+
+void quot_dquot_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (quot_dquot_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_QUOT);
+            break;
+
+        case SINGLE_HOLD:
+            unregister_code(KC_LCTL);
+            unregister_code(KC_LALT);
+            break;
+
+        case DOUBLE_TAP:
+            unregister_code16(KC_DQUO);
+            break;
+    }
+    quot_dquot_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/scln_coln.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/scln_coln.c
new file mode 100644 (file)
index 0000000..513c932
--- /dev/null
@@ -0,0 +1,43 @@
+//instanalize an instance of 'tap' for the Semicolon - Colon tap dance.
+static tap scln_coln_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void scln_coln_finished(qk_tap_dance_state_t *state, void *user_data) {
+    scln_coln_state.state = current_dance(state);
+    switch (scln_coln_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_SCLN);
+            break;
+
+        case SINGLE_HOLD:
+            register_code(KC_LALT);
+            register_code(KC_LSFT);
+            register_code(KC_LGUI);
+            break;
+
+        case DOUBLE_TAP:
+            register_code16(KC_COLN);
+            break;
+    }
+}
+
+void scln_coln_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (scln_coln_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_SCLN);
+            break;
+
+        case SINGLE_HOLD:
+            unregister_code(KC_LALT);
+            unregister_code(KC_LSFT);
+            unregister_code(KC_LGUI);
+            break;
+
+        case DOUBLE_TAP:
+            unregister_code16(KC_COLN);
+            break;
+    }
+    scln_coln_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/u_arrows_gui.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/u_arrows_gui.c
new file mode 100644 (file)
index 0000000..e57502a
--- /dev/null
@@ -0,0 +1,39 @@
+//instanalize an instance of 'tap' for the U - Arrows - Gui tap dance.
+static tap u_arrows_gui_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void u_arrows_gui_finished(qk_tap_dance_state_t *state, void *user_data) {
+    u_arrows_gui_state.state = current_dance(state);
+    switch (u_arrows_gui_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_U);
+            break;
+
+        case SINGLE_HOLD:
+            layer_on(ARROWS);
+            break;
+
+        case DOUBLE_HOLD:
+            register_code(KC_LGUI);
+            break;
+    }
+}
+
+void u_arrows_gui_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (u_arrows_gui_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_U);
+            break;
+
+        case SINGLE_HOLD:
+            layer_off(ARROWS);
+            break;
+
+        case DOUBLE_HOLD:
+            unregister_code(KC_LGUI);
+            break;
+    }
+    u_arrows_gui_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/w_media_meh.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/w_media_meh.c
new file mode 100644 (file)
index 0000000..c269805
--- /dev/null
@@ -0,0 +1,43 @@
+//instanalize an instance of 'tap' for the W - Media - Meh tap dance.
+static tap w_media_meh_state = {
+    .is_press_action = true,
+    .state           = 0
+};
+
+void w_media_meh_finished(qk_tap_dance_state_t *state, void *user_data) {
+    w_media_meh_state.state = current_dance(state);
+    switch (w_media_meh_state.state) {
+        case SINGLE_TAP:
+            register_code(KC_W);
+            break;
+
+        case SINGLE_HOLD:
+            layer_on(MEDIA_FN);
+            break;
+
+        case DOUBLE_HOLD:
+            register_code(KC_LCTL);
+            register_code(KC_LSFT);
+            register_code(KC_LALT);
+            break;
+    }
+}
+
+void w_media_meh_reset(qk_tap_dance_state_t *state, void *user_data) {
+    switch (w_media_meh_state.state) {
+        case SINGLE_TAP:
+            unregister_code(KC_W);
+            break;
+
+        case SINGLE_HOLD:
+            layer_off(MEDIA_FN);
+            break;
+
+        case DOUBLE_HOLD:
+            unregister_code(KC_LCTL);
+            unregister_code(KC_LSFT);
+            unregister_code(KC_LALT);
+            break;
+    }
+    w_media_meh_state.state = 0;
+}
index 550e1f7c846b09d005213eb52807d2876dec8ae3..59e3e2b0dcdf71befc81825082c5ec99904a0f4f 100644 (file)
@@ -1,20 +1,26 @@
 // Register the double tap dances:
 qk_tap_dance_action_t tap_dance_actions[] = {
-        [EQL_PLUS]  = ACTION_TAP_DANCE_DOUBLE(KC_EQL,  KC_PLUS),
-        [MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
-        [SLSH_BSLS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS),
-        [GRV_TILD]  = ACTION_TAP_DANCE_DOUBLE(KC_GRV,  KC_TILD),
-        [QUOT_DQUO] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQUO),
-        [SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
-        [ASTR_CIRC] = ACTION_TAP_DANCE_DOUBLE(KC_ASTR, KC_CIRC),
-        [APMR_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_AMPR, KC_PIPE),
-        [EXLM_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_EXLM, KC_QUES),
-        [HASH_PERC] = ACTION_TAP_DANCE_DOUBLE(KC_HASH, KC_PERC),
-        [AT_DLR]    = ACTION_TAP_DANCE_DOUBLE(KC_AT,   KC_DLR),
-        [LPRN_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
-        [RPRN_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
-        [LCBR_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_LABK),
-        [RCBR_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_RCBR, KC_RABK),
-        [DOT_COMM]  = ACTION_TAP_DANCE_DOUBLE(KC_DOT,  KC_COMM),
-        [NONE_LEAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, none_lead_finished, none_lead_reset, DANCING_TERM)
+    [EQL_PLUS]  = ACTION_TAP_DANCE_DOUBLE(KC_EQL,  KC_PLUS),
+    [MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
+    [SLSH_BSLS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS),
+    [GRV_TILD]  = ACTION_TAP_DANCE_DOUBLE(KC_GRV,  KC_TILD),
+    [ASTR_CIRC] = ACTION_TAP_DANCE_DOUBLE(KC_ASTR, KC_CIRC),
+    [APMR_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_AMPR, KC_PIPE),
+    [EXLM_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_EXLM, KC_QUES),
+    [HASH_PERC] = ACTION_TAP_DANCE_DOUBLE(KC_HASH, KC_PERC),
+    [AT_DLR]    = ACTION_TAP_DANCE_DOUBLE(KC_AT,   KC_DLR),
+    [LPRN_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
+    [RPRN_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
+    [LCBR_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_LABK),
+    [RCBR_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_RCBR, KC_RABK),
+    [SCLN_COLN] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, scln_coln_finished,       scln_coln_reset,      DANCING_TERM),
+    [QUOT_DQUO] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, quot_dquot_finished,      quot_dquot_reset,     DANCING_TERM),
+    [DOT_COMM]  = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, dot_comm_finished,        dot_comm_reset,       DANCING_TERM),
+    [NONE_LEAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, none_lead_finished,       none_lead_reset,      DANCING_TERM),
+    [U_ARR_GUI] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, u_arrows_gui_finished,    u_arrows_gui_reset,   DANCING_TERM),
+    [H_MOU_GUI] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, h_mouse_gui_finished,     h_mouse_gui_reset,    DANCING_TERM),
+    [J_MED_MEH] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, j_media_meh_finished,     j_media_meh_reset,    DANCING_TERM),
+    [W_MED_MEH] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, w_media_meh_finished,     w_media_meh_reset,    DANCING_TERM),
+    [K_NUM_HYP] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, k_numpad_hyper_finished,  k_numpad_hyper_reset, DANCING_TERM),
+    [M_CHO_HYP] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, m_chords_hyper_finished,  m_chords_hyper_reset, DANCING_TERM),
 };
index 3d44698729f8307353e3f5b5cd4e5c41f421775e..d05a71d7e59b51fe129690cedc0e798c899141ed 100644 (file)
@@ -4,71 +4,95 @@
 // Mod tap dances:     //              |               |              |               |              |               //
 enum tap_dances {      //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    EQL_PLUS  = 0,     //       =      |       +       |              |               |              |               //
+    EQL_PLUS  = 0,     //       =      |               |       +      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    MINS_UNDS = 1,     //       -      |       _       |              |               |              |               //
+    MINS_UNDS = 1,     //       -      |               |       _      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    SLSH_BSLS = 2,     //       /      |       \       |              |               |              |               //
+    SLSH_BSLS = 2,     //       /      |               |       \      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    GRV_TILD  = 3,     //       `      |       ~       |              |               |              |               //
+    GRV_TILD  = 3,     //       `      |               |       ~      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    QUOT_DQUO = 4,     //       '      |       "       |              |               |              |               //
+    QUOT_DQUO = 4,     //       '      |   CTRL+ALT    |      "       |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    SCLN_COLN = 5,     //       ;      |       :       |              |               |              |               //
+    SCLN_COLN = 5,     //       ;      |ALT+SHIFT+META |      :       |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    ASTR_CIRC = 6,     //       *      |       ^       |              |               |              |               //
+    ASTR_CIRC = 6,     //       *      |               |       ^      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    APMR_PIPE = 7,     //       &      |       |       |              |               |              |               //
+    APMR_PIPE = 7,     //       &      |               |       |      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    EXLM_QUES = 8,     //       !      |       ?       |              |               |              |               //
+    EXLM_QUES = 8,     //       !      |               |       ?      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    HASH_PERC = 9,     //       #      |       %       |              |               |              |               //
+    HASH_PERC = 9,     //       #      |               |       %      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    AT_DLR    = 10,    //       @      |       $       |              |               |              |               //
+    AT_DLR    = 10,    //       @      |               |       $      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    LPRN_LBRC = 11,    //       (      |       [       |              |               |              |               //
+    LPRN_LBRC = 11,    //       (      |               |       [      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    RPRN_RBRC = 12,    //       )      |       ]       |              |               |              |               //
+    RPRN_RBRC = 12,    //       )      |               |       ]      |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    LCBR_LABK = 13,    //       {      |       <       |              |               |              |               //
+    LCBR_LABK = 13,    //       {      |               |      <       |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    RCBR_RABK = 14,    //       }      |       >       |              |               |              |               //
+    RCBR_RABK = 14,    //       }      |               |      >       |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    DOT_COMM  = 15,    //       .      |       ,       |              |               |              |               //
+    DOT_COMM  = 15,    //       .      |  CTRL+SHIFT   |      ,       |               |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
                        //              |               |              |               |              |               //
-    NONE_LEAD = 16,    //     NONE     |   ALT+SHIFT   | LEAD         |               |              |               //
+    NONE_LEAD = 16,    //     NONE     |   ALT+SHIFT   |     LEAD     |               |              |               //
+                       //              |               |              |               |              |               //
+                       //--------------------------------------------------------------------------------------------//
+                       //              |               |              |               |              |               //
+    U_ARR_GUI = 17,    //       U      |     ARROWS    |              |      GUI      |              |               //
+                       //              |               |              |               |              |               //
+                       //--------------------------------------------------------------------------------------------//
+                       //              |               |              |               |              |               //
+    H_MOU_GUI = 18,    //       H      |     MOUSE     |              |      GUI      |              |               //
+                       //              |               |              |               |              |               //
+                       //--------------------------------------------------------------------------------------------//
+                       //              |               |              |               |              |               //
+    J_MED_MEH = 19,    //       J      |   MEDIA_FN    |              |      MEH      |              |               //
+                       //              |               |              |               |              |               //
+                       //--------------------------------------------------------------------------------------------//
+                       //              |               |              |               |              |               //
+    W_MED_MEH = 20,    //       W      |   MEDIA_FN    |              |      MEH      |              |               //
+                       //              |               |              |               |              |               //
+                       //--------------------------------------------------------------------------------------------//
+                       //              |               |              |               |              |               //
+    K_NUM_HYP = 21,    //       K      |    NUMPAD     |              |    HYPER      |              |               //
+                       //              |               |              |               |              |               //
+                       //--------------------------------------------------------------------------------------------//
+                       //              |               |              |               |              |               //
+    M_CHO_HYP = 22,    //       M      |     CHORD     |              |    HYPER      |              |               //
                        //              |               |              |               |              |               //
                        //--------------------------------------------------------------------------------------------//
 };
index e2eeed6fa9c47ececdaac25dc3c28a4167f6df2e..c0b3b9c9951f1b88d272f6162ef3d6ac1b22e6b9 100644 (file)
@@ -91,7 +91,7 @@ uint32_t layer_state_set_user(uint32_t state) {
 
             break;
 
-        case HYPER:
+        case CHORD:
             rgblight_sethsv_noeeprom_magenta();
             rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
 
diff --git a/keyboards/fc660c/keymaps/siroleo/README.md b/keyboards/fc660c/keymaps/siroleo/README.md
new file mode 100644 (file)
index 0000000..91dd9ed
--- /dev/null
@@ -0,0 +1,8 @@
+# Sid's mods for the fc660c
+
+Emulates original keymap with modifications for:
+
+- Media keys
+- Grave key(s)
+- Reset on the function layer
+- Mouse keys ala Tada68
diff --git a/keyboards/fc660c/keymaps/siroleo/config.h b/keyboards/fc660c/keymaps/siroleo/config.h
new file mode 100644 (file)
index 0000000..8262805
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Khader Syed
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/fc660c/keymaps/siroleo/keymap.c b/keyboards/fc660c/keymaps/siroleo/keymap.c
new file mode 100644 (file)
index 0000000..a2d859f
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+Copyright 2019 Khader Syed
+
+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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    /* BASE layer: Default Layer
+   * ,--------------------------------------------------------------------------------------------------.
+   * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  | Backspace |  | `   |
+   * |-----------------------------------------------------------------------------------------+  +-----+
+   * | Tab    |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  [  |  ]  |  Bksp  |  | Del |
+   * |-----------------------------------------------------------------------------------------+  +-----+
+   * | `       |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |    Enter    |
+   * |--------------------------------------------------------------------------------------------+
+   * | Shift      |  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  | Shift       | Up  |
+   * +--------------------------------------------------------------------------------------------+-----+
+   * | Ctrl  | Alt   | Gui  |               Space                | Fn  | Ctrl | Alt   | Left| Down|Right|
+   * `--------------------------------------------------------------------------------------------------´
+   */
+  [0] = LAYOUT(
+        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_GRV ,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_UP,
+        KC_LCTL,KC_LALT,KC_LGUI,          KC_SPC,                       MO(1),KC_RCTL,KC_RALT,      KC_LEFT,KC_DOWN,KC_RGHT
+    ),
+   /* FN layer
+   * ,--------------------------------------------------------------------------------------------------.
+   * | `   | F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 | F11 | F12 |       Mute|  | Vol-|
+   * |-----------------------------------------------------------------------------------------+  +-----+
+   * |        |     |     |     |     |     |     |     |PrtSc| Slck| Paus|     |     |        |  | Vol+|
+   * |-----------------------------------------------------------------------------------------+  +-----+
+   * |         |     |     |     |     |     |     |     | Home| PgUp|     |     |             |
+   * |--------------------------------------------------------------------------------------------+
+   * |            |     |     |     |     |     |     |     | End | PgDn|     | Mouse Btn 1 | MsU |
+   * +--------------------------------------------------------------------------------------------+-----+
+   * |       | Reset |      |                                    |      |      |      | MsL | MsD | MsR |
+   * `--------------------------------------------------------------------------------------------------´
+   */
+  [1] = LAYOUT(
+        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_MUTE,     KC_VOLU,
+        _______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______,     KC_VOLD,
+        _______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,KC_PGUP,_______,_______,     _______,
+        _______,_______,_______,_______,_______,_______,_______,_______,KC_END, KC_PGDN,_______,KC_BTN1,     KC_MS_U,
+        _______,  RESET,_______,                _______,                MO(1),  _______,_______,       KC_MS_L,KC_MS_D,KC_MS_R
+    )
+};
diff --git a/keyboards/handwired/hnah40/config.h b/keyboards/handwired/hnah40/config.h
new file mode 100644 (file)
index 0000000..b7a4105
--- /dev/null
@@ -0,0 +1,220 @@
+/* Copyright 2018 HnahKB
+
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0000
+#define DEVICE_VER      0x0002
+#define MANUFACTURER    HnahKB
+#define PRODUCT         hnah40
+#define DESCRIPTION     Custom 40% PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+/*
+ * 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 { B4, B5, B3, D4 }
+#define MATRIX_COL_PINS { B0, D7, D6, D5, B2, B1, C0, C1, C2, C3, D1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * 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.
+ *
+ */
+
+
+
+/* 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
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES           2     //< number of visible lines of the display
+#define LCD_DISP_LENGTH    16     //< visibles characters per line of the display
+
+#define LCD_IO_MODE      1            //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT         PORTB        //< port for the LCD lines
+#define LCD_DATA0_PORT   LCD_PORT     //< port for 4bit data bit 0
+#define LCD_DATA1_PORT   LCD_PORT     //< port for 4bit data bit 1
+#define LCD_DATA2_PORT   LCD_PORT     //< port for 4bit data bit 2
+#define LCD_DATA3_PORT   LCD_PORT     //< port for 4bit data bit 3
+#define LCD_DATA0_PIN    4            //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN    5            //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN    6            //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN    7            //< pin for 4bit data bit 3
+#define LCD_RS_PORT      LCD_PORT     //< port for RS line
+#define LCD_RS_PIN       3            //< pin  for RS line
+#define LCD_RW_PORT      LCD_PORT     //< port for RW line
+#define LCD_RW_PIN       2            //< pin  for RW line
+#define LCD_E_PORT       LCD_PORT     //< port for Enable line
+#define LCD_E_PIN        1            //< pin  for Enable line
+#endif
+*/
+
diff --git a/keyboards/handwired/hnah40/hnah40.c b/keyboards/handwired/hnah40/hnah40.c
new file mode 100644 (file)
index 0000000..0f08136
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 HnahKB
+ *
+ * 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 "hnah40.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/handwired/hnah40/hnah40.h b/keyboards/handwired/hnah40/hnah40.h
new file mode 100644 (file)
index 0000000..28e09f6
--- /dev/null
@@ -0,0 +1,38 @@
+/* Copyright 2019 HnahKB
+ *
+ * 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/>.
+ */
+#pragma once
+
+#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 arguments representing the physical
+// layout of the board and position of the keys
+// The second converts the arguments into a two-dimensional array which 
+// represents the switch matrix. 
+
+#define LAYOUT( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k39, \
+    k10,  k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A,  \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A,  \
+    k30, k31, k32, k33, k35, k37, k38, k3A\
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A }, \
+    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A }, \
+    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A }, \
+    { k30, k31, k32, k33, KC_NO, k35, KC_NO, k37, k38, k39, k3A }, \
+}
diff --git a/keyboards/handwired/hnah40/info.json b/keyboards/handwired/hnah40/info.json
new file mode 100644 (file)
index 0000000..6a577a5
--- /dev/null
@@ -0,0 +1,54 @@
+{
+    "keyboard_name": "Hnah40", 
+    "url": "https://github.com/vuhopkep/PCB/tree/master/Hnah40-Atmega328p/PCB_V1/PCB", 
+    "maintainer": "HnahKB", 
+    "width": 12, 
+    "height": 4, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0}, 
+                {"label":"Q", "x":1, "y":0}, 
+                {"label":"W", "x":2, "y":0}, 
+                {"label":"E", "x":3, "y":0}, 
+                {"label":"R", "x":4, "y":0}, 
+                {"label":"T", "x":5, "y":0}, 
+                {"label":"Y", "x":6, "y":0}, 
+                {"label":"U", "x":7, "y":0}, 
+                {"label":"I", "x":8, "y":0}, 
+                {"label":"O", "x":9, "y":0}, 
+                {"label":"P", "x":10, "y":0}, 
+                {"label":"BSPC", "x":11, "y":0}, 
+                {"label":"Tab", "x":0, "y":1, "w":1.5}, 
+                {"label":"A", "x":1.5, "y":1}, 
+                {"label":"S", "x":2.5, "y":1}, 
+                {"label":"D", "x":3.5, "y":1}, 
+                {"label":"F", "x":4.5, "y":1}, 
+                {"label":"G", "x":5.5, "y":1}, 
+                {"label":"H", "x":6.5, "y":1}, 
+                {"label":"J", "x":7.5, "y":1}, 
+                {"label":"K", "x":8.5, "y":1}, 
+                {"label":"L", "x":9.5, "y":1}, 
+                {"label":"Enter", "x":10.5, "y":1, "w":1.5}, 
+                {"label":"Shift", "x":0, "y":2, "w":1.75}, 
+                {"label":"Z", "x":1.75, "y":2}, 
+                {"label":"X", "x":2.75, "y":2}, 
+                {"label":"C", "x":3.75, "y":2}, 
+                {"label":"V", "x":4.75, "y":2}, 
+                {"label":"B", "x":5.75, "y":2}, 
+                {"label":"N", "x":6.75, "y":2}, 
+                {"label":"M", "x":7.75, "y":2}, 
+                {"label":",", "x":8.75, "y":2}, 
+                {"label":"Shift", "x":9.75, "y":2, "w":2.25}, 
+                {"label":"Ctrl", "x":0, "y":3, "w":1.25}, 
+                {"label":"Win", "x":1.25, "y":3, "w":1.5}, 
+                {"label":"Alt", "x":2.75, "y":3, "w":1.25}, 
+                {"label":"Space", "x":4, "y":3, "w":2}, 
+                {"label":"Space", "x":6, "y":3, "w":2},
+                {"label":"App", "x":8, "y":3, "w":1.25}, 
+                {"label":"Fn", "x":9.25, "y":3, "w":1.5}, 
+                {"label":"Ctrl", "x":10.75, "y":3, "w":1.25}
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/hnah40/keymaps/default/config.h b/keyboards/handwired/hnah40/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..74412a9
--- /dev/null
@@ -0,0 +1,18 @@
+/* Copyright 2019 HnahKB
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/handwired/hnah40/keymaps/default/keymap.c b/keyboards/handwired/hnah40/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..2fc67ba
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright 2019 HnahKB
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum hnah_layers{
+  _QWERTY,
+  _LOWER,
+  _RAISE
+};
+
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = LAYOUT( /* 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, 
+    LT(RAISE, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+    KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
+    KC_LCTL,  KC_LGUI,  KC_LALT,   KC_SPACE,   KC_SPACE,   KC_APP,  LOWER,  KC_RCTL   
+  ),
+  [_LOWER] = LAYOUT( /* Base */
+    RESET, KC_1,  KC_2,  KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, 
+    RAISE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_COMM, KC_DOT, KC_SLSH, KC_SLSH,
+    KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_APP, KC_TRNS, KC_RCTL   
+  ),
+    [_RAISE] = LAYOUT( /* Base */
+    RESET, KC_1,  KC_UP,  RGB_TOG, RGB_MOD, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, 
+    KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT , RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_ENT,
+    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_SPACE, KC_SPACE, KC_LEFT, KC_DOWN, KC_RGHT   
+  ),
+};
diff --git a/keyboards/handwired/hnah40/keymaps/default/readme.md b/keyboards/handwired/hnah40/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..b948ef9
--- /dev/null
@@ -0,0 +1 @@
+![Hnah40 Layout Image](https://i.imgur.com/7LT6Vam.jpg)
\ No newline at end of file
diff --git a/keyboards/handwired/hnah40/readme.md b/keyboards/handwired/hnah40/readme.md
new file mode 100644 (file)
index 0000000..20e2d71
--- /dev/null
@@ -0,0 +1,20 @@
+# hnah40
+
+![Hnah40](https://i.imgur.com/nXVmcyc.jpg)
+
+A custom 40% keyboard PCB, insprired by Plaid keyboard from hsgw
+
+
+Keyboard Maintainer: [vuhopkep](https://github.com/vuhopkep)  
+Hardware Availability: https://github.com/vuhopkep/PCB/tree/master/Hnah40-Atmega328p
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/hnah40:default:program
+
+## Bootloader 
+use usbasploader from hsgw.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/hnah40/rules.mk b/keyboards/handwired/hnah40/rules.mk
new file mode 100644 (file)
index 0000000..efd11bf
--- /dev/null
@@ -0,0 +1,73 @@
+# MCU name
+MCU = atmega328p
+PROTOCOL = VUSB
+
+# 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
+
+BOOTLOADER = bootloadHID
+
+# Flash program via avrdude, but default command is not suitable.
+# You can use hnah40:default:program
+PROGRAM_CMD = avrdude -c usbasp -p m328p -U flash:w:$(BUILD_DIR)/$(TARGET).hex
+
+
+# disable debug code
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+
+# 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
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
\ No newline at end of file
diff --git a/keyboards/handwired/hnah40/usbconfig.h b/keyboards/handwired/hnah40/usbconfig.h
new file mode 100644 (file)
index 0000000..cbd37c3
--- /dev/null
@@ -0,0 +1,397 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME      D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT      3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT       2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ       (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC       0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME   D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT          4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT    1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3   1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER              3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN           USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT          0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE      0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL      1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED         0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+// max power draw with maxed white underglow measured at 120 mA (peaks)
+#define USB_CFG_MAX_BUS_POWER           100
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE      1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ       0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT   0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL        0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE       0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS          0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len)     if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts)     if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK()              hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF                   0
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ *     in      YL, TCNT0
+ *     sts     timer0Snapshot, YL
+ *     endm
+ * #endif
+ * #define USB_SOF_HOOK                    myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING     0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH   0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC                0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID       (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID       (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc.  Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION  0x00, 0x01
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME     'H','n','a','h','K','B'
+#define USB_CFG_VENDOR_NAME_LEN 6
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME     'H', 'n', 'a', 'h', '4', '0'
+#define USB_CFG_DEVICE_NAME_LEN 6
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+#define USB_CFG_SERIAL_NUMBER   'H','n','a','h','K','B'
+#define USB_CFG_SERIAL_NUMBER_LEN   6
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS        0
+#define USB_CFG_DEVICE_SUBCLASS     0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS     3   /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS  1   /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL  1   /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ *   + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ *     at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ *     used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ *     you want RAM pointers.
+ *   + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ *     in static memory is in RAM, not in flash memory.
+ *   + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ *     the driver must know the descriptor's length. The descriptor itself is
+ *     found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ *   char usbDescriptorDevice[];
+ *   char usbDescriptorConfiguration[];
+ *   char usbDescriptorHidReport[];
+ *   char usbDescriptorString0[];
+ *   int usbDescriptorStringVendor[];
+ *   int usbDescriptorStringDevice[];
+ *   int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE   (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ *   USB_CFG_DESCR_PROPS_DEVICE
+ *   USB_CFG_DESCR_PROPS_CONFIGURATION
+ *   USB_CFG_DESCR_PROPS_STRINGS
+ *   USB_CFG_DESCR_PROPS_STRING_0
+ *   USB_CFG_DESCR_PROPS_STRING_VENDOR
+ *   USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ *   USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ *   USB_CFG_DESCR_PROPS_HID
+ *   USB_CFG_DESCR_PROPS_HID_REPORT
+ *   USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int  serialNumberDescriptor[] = {
+ *     USB_STRING_DESCRIPTOR_HEADER(6),
+ *     'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE                  0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION           USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_CONFIGURATION           0
+#define USB_CFG_DESCR_PROPS_STRINGS                 0
+#define USB_CFG_DESCR_PROPS_STRING_0                0
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR           0
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT          0
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER    0
+#define USB_CFG_DESCR_PROPS_HID                     USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID                     0
+#define USB_CFG_DESCR_PROPS_HID_REPORT              USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID_REPORT              0
+#define USB_CFG_DESCR_PROPS_UNKNOWN                 0
+
+#define usbMsgPtr_t unsigned short
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
+ * a scalar type here because gcc generates slightly shorter code for scalar
+ * arithmetics than for pointer arithmetics. Remove this define for backward
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
+ */
+
+/* ----------------------- Optional MCU Description ------------------------ */
+
+/* The following configurations have working defaults in usbdrv.h. You
+ * usually don't need to set them explicitly. Only if you want to run
+ * the driver on a device which is not yet supported or with a compiler
+ * which is not fully supported (such as IAR C) or if you use a differnt
+ * interrupt than INT0, you may have to define some of these.
+ */
+/* #define USB_INTR_CFG            MCUCR */
+/* #define USB_INTR_CFG_SET        ((1 << ISC00) | (1 << ISC01)) */
+/* #define USB_INTR_CFG_CLR        0 */
+/* #define USB_INTR_ENABLE         GIMSK */
+/* #define USB_INTR_ENABLE_BIT     INT0 */
+/* #define USB_INTR_PENDING        GIFR */
+/* #define USB_INTR_PENDING_BIT    INTF0 */
+/* #define USB_INTR_VECTOR         INT0_vect */
+
+/* Set INT1 for D- falling edge to count SOF */
+/* #define USB_INTR_CFG            EICRA */
+// #define USB_INTR_CFG_SET        ((1 << ISC11) | (0 << ISC10))
+// /* #define USB_INTR_CFG_CLR        0 */
+// /* #define USB_INTR_ENABLE         EIMSK */
+// #define USB_INTR_ENABLE_BIT     INT1
+// /* #define USB_INTR_PENDING        EIFR */
+// #define USB_INTR_PENDING_BIT    INTF1
+// #define USB_INTR_VECTOR         INT1_vect
+
+#endif /* __usbconfig_h_included__ */
diff --git a/keyboards/handwired/jopr/config.h b/keyboards/handwired/jopr/config.h
new file mode 100644 (file)
index 0000000..aece709
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x4DAE
+#define PRODUCT_ID      0x1000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    joelproko
+#define PRODUCT         jopr-106-Nl2SR-Cl2nL
+#define DESCRIPTION     jopr-106 Mechanical Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 11
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D6, D2, D4, D3, D5, D7, C6, B6, F5 }
+#define MATRIX_COL_PINS { B3, B2, B1, B0, F7, E6, F6, B5, C7, B4, D1 }
+#define UNUSED_PINS { B7 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* 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
+/* #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) */
+#define NO_ACTION_ONESHOT
+#define TAPPING_TOGGLE 3
+
+/*#define RGB_DI_PIN F4*/
+#ifdef RGB_DI_PIN
+/*#define RGBLIGHT_ANIMATIONS*/
+#define RGBLED_NUM 1
+#define RGBLIGHT_HUE_STEP 1
+#define RGBLIGHT_SAT_STEP 1
+#define RGBLIGHT_VAL_STEP 1
+#endif
diff --git a/keyboards/handwired/jopr/info.json b/keyboards/handwired/jopr/info.json
new file mode 100644 (file)
index 0000000..c4cadb8
--- /dev/null
@@ -0,0 +1,562 @@
+{
+  "keyboard_name": "jopr-106",
+  "url": "https://github.com/joelproko/keyboard_layout_jopr",
+  "maintainer": "joelproko",
+  "width": 22.5,
+  "height": 6.25,
+  "layouts": {
+    "LAYOUT": {
+      "key_count": 106,
+      "layout": [
+        {
+          "label": "MX_A0",
+          "x": 0,
+          "y": 0
+        },
+        {
+          "label": "MX_B0",
+          "x": 1.25,
+          "y": 0
+        },
+        {
+          "label": "MX_C0",
+          "x": 2.25,
+          "y": 0
+        },
+        {
+          "label": "MX_D0",
+          "x": 3.25,
+          "y": 0
+        },
+        {
+          "label": "MX_E0",
+          "x": 4.25,
+          "y": 0
+        },
+        {
+          "label": "MX_F0",
+          "x": 5.5,
+          "y": 0
+        },
+        {
+          "label": "MX_G0",
+          "x": 6.5,
+          "y": 0
+        },
+        {
+          "label": "MX_H0",
+          "x": 7.5,
+          "y": 0
+        },
+        {
+          "label": "MX_I0",
+          "x": 8.5,
+          "y": 0
+        },
+        {
+          "label": "MX_J0",
+          "x": 9.75,
+          "y": 0
+        },
+        {
+          "label": "MX_A6",
+          "x": 10.75,
+          "y": 0
+        },
+        {
+          "label": "MX_B6",
+          "x": 11.75,
+          "y": 0
+        },
+        {
+          "label": "MX_C6",
+          "x": 12.75,
+          "y": 0
+        },
+        {
+          "label": "MX_D6",
+          "x": 14,
+          "y": 0
+        },
+        {
+          "label": "MX_E6",
+          "x": 15.25,
+          "y": 0
+        },
+        {
+          "label": "MX_F6",
+          "x": 16.25,
+          "y": 0
+        },
+        {
+          "label": "MX_G6",
+          "x": 17.25,
+          "y": 0
+        },
+        {
+          "label": "MX_H6",
+          "x": 18.25,
+          "y": 0
+        },
+        {
+          "label": "MX_A1",
+          "x": 0,
+          "y": 1.25
+        },
+        {
+          "label": "MX_B1",
+          "x": 1,
+          "y": 1.25
+        },
+        {
+          "label": "MX_C1",
+          "x": 2,
+          "y": 1.25
+        },
+        {
+          "label": "MX_D1",
+          "x": 3,
+          "y": 1.25
+        },
+        {
+          "label": "MX_E1",
+          "x": 4,
+          "y": 1.25
+        },
+        {
+          "label": "MX_F1",
+          "x": 5,
+          "y": 1.25
+        },
+        {
+          "label": "MX_G1",
+          "x": 6,
+          "y": 1.25
+        },
+        {
+          "label": "MX_H1",
+          "x": 7,
+          "y": 1.25
+        },
+        {
+          "label": "MX_I1",
+          "x": 8,
+          "y": 1.25
+        },
+        {
+          "label": "MX_J1",
+          "x": 9,
+          "y": 1.25
+        },
+        {
+          "label": "MX_A7",
+          "x": 10,
+          "y": 1.25
+        },
+        {
+          "label": "MX_B7",
+          "x": 11,
+          "y": 1.25
+        },
+        {
+          "label": "MX_C7",
+          "x": 12,
+          "y": 1.25
+        },
+        {
+          "label": "MX_D7",
+          "x": 13,
+          "y": 1.25,
+          "w": 2
+        },
+        {
+          "label": "MX_E7",
+          "x": 15.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_F7",
+          "x": 16.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_G7",
+          "x": 17.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_H7",
+          "x": 18.25,
+          "y": 1.25
+        },
+        {
+          "label": "MX_A2",
+          "x": 0,
+          "y": 2.25,
+          "w": 1.5
+        },
+        {
+          "label": "MX_B2",
+          "x": 1.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_C2",
+          "x": 2.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_D2",
+          "x": 3.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_E2",
+          "x": 4.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_F2",
+          "x": 5.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_G2",
+          "x": 6.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_H2",
+          "x": 7.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_I2",
+          "x": 8.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_J2",
+          "x": 9.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_A8",
+          "x": 10.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_B8",
+          "x": 11.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_C8",
+          "x": 12.5,
+          "y": 2.25
+        },
+        {
+          "label": "MX_D8",
+          "x": 13.75,
+          "y": 2.25,
+          "w": 1.25,
+          "h": 2
+        },
+        {
+          "label": "MX_E8",
+          "x": 15.25,
+          "y": 2.25
+        },
+        {
+          "label": "MX_F8",
+          "x": 16.25,
+          "y": 2.25
+        },
+        {
+          "label": "MX_G8",
+          "x": 17.25,
+          "y": 2.25
+        },
+        {
+          "label": "MX_H8",
+          "x": 18.25,
+          "y": 2.25,
+          "h": 2
+        },
+        {
+          "label": "MX_A3",
+          "x": 0,
+          "y": 3.25,
+          "w": 1.75
+        },
+        {
+          "label": "MX_B3",
+          "x": 1.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_C3",
+          "x": 2.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_D3",
+          "x": 3.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_E3",
+          "x": 4.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_F3",
+          "x": 5.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_G3",
+          "x": 6.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_H3",
+          "x": 7.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_I3",
+          "x": 8.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_J3",
+          "x": 9.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_A9",
+          "x": 10.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_B9",
+          "x": 11.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_C9",
+          "x": 12.75,
+          "y": 3.25
+        },
+        {
+          "label": "MX_E9",
+          "x": 15.25,
+          "y": 3.25
+        },
+        {
+          "label": "MX_F9",
+          "x": 16.25,
+          "y": 3.25
+        },
+        {
+          "label": "MX_G9",
+          "x": 17.25,
+          "y": 3.25
+        },
+        {
+          "label": "MX_H9",
+          "x": 19.5,
+          "y": 3.25
+        },
+        {
+          "label": "MX_K1",
+          "x": 20.5,
+          "y": 3.25
+        },
+        {
+          "label": "MX_K0",
+          "x": 21.5,
+          "y": 3.25
+        },
+        {
+          "label": "MX_A4",
+          "x": 0,
+          "y": 4.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_B4",
+          "x": 1.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_C4",
+          "x": 2.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_D4",
+          "x": 3.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_E4",
+          "x": 4.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_F4",
+          "x": 5.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_G4",
+          "x": 6.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_H4",
+          "x": 7.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I4",
+          "x": 8.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J4",
+          "x": 9.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I9",
+          "x": 10.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I8",
+          "x": 11.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_I7",
+          "x": 12.25,
+          "y": 4.25,
+          "w": 2.75
+        },
+        {
+          "label": "MX_I6",
+          "x": 15.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J9",
+          "x": 16.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J8",
+          "x": 17.25,
+          "y": 4.25
+        },
+        {
+          "label": "MX_J7",
+          "x": 18.25,
+          "y": 4.25,
+          "h": 2
+        },
+        {
+          "label": "MX_J6",
+          "x": 19.5,
+          "y": 4.25
+        },
+        {
+          "label": "MX_K3",
+          "x": 20.5,
+          "y": 4.25
+        },
+        {
+          "label": "MX_K2",
+          "x": 21.5,
+          "y": 4.25
+        },
+        {
+          "label": "MX_A5",
+          "x": 0,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_B5",
+          "x": 1.25,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_C5",
+          "x": 2.5,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_D5",
+          "x": 3.75,
+          "y": 5.25,
+          "w": 6.25
+        },
+        {
+          "label": "MX_J5",
+          "x": 10,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_I5",
+          "x": 11.25,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_K9",
+          "x": 12.5,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_E5",
+          "x": 13.75,
+          "y": 5.25,
+          "w": 1.25
+        },
+        {
+          "label": "MX_K8",
+          "x": 15.25,
+          "y": 5.25,
+          "w": 2
+        },
+        {
+          "label": "MX_K7",
+          "x": 17.25,
+          "y": 5.25
+        },
+        {
+          "label": "MX_K6",
+          "x": 19.5,
+          "y": 5.25
+        },
+        {
+          "label": "MX_K5",
+          "x": 20.5,
+          "y": 5.25
+        },
+        {
+          "label": "MX_K4",
+          "x": 21.5,
+          "y": 5.25
+        }
+      ]
+    }
+  }
+}
diff --git a/keyboards/handwired/jopr/jopr.c b/keyboards/handwired/jopr/jopr.c
new file mode 100644 (file)
index 0000000..3dccb71
--- /dev/null
@@ -0,0 +1,11 @@
+#include "jopr.h"
+void matrix_init_kb(void) {
+    matrix_init_user();
+    led_init_ports();
+};
+
+void led_init_ports(void) {
+    setPinOutput(F0);
+    setPinOutput(F1);
+    setPinOutput(F4);
+}
\ No newline at end of file
diff --git a/keyboards/handwired/jopr/jopr.h b/keyboards/handwired/jopr/jopr.h
new file mode 100644 (file)
index 0000000..b79a8f2
--- /dev/null
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+    K000,  K001, K002, K003, K004,  K005, K006, K007, K008,  K009, K600, K601, K602,  K603,  K604, K605, K606, K607, \
+    K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K700, K701, K702, K703,      K704, K705, K706, K707, \
+    K200,   K201, K202, K203, K204, K205, K206, K207, K208, K209, K800, K801, K802, K803,    K804, K805, K806, K807, \
+    K300,    K301, K302, K303, K304, K305, K306, K307, K308, K309, K900, K901, K902,         K904, K905, K906,        K907, K110, K010, \
+    K400,  K401, K402, K403, K404, K405, K406, K407, K408, K409, K908, K808, K708,           K608, K909, K809, K709,  K609, K310, K210, \
+    K500,  K501,  K502,  K503,                            K509,  K508,  K910,  K504,         K810,       K710,        K610, K510, K410 \
+) \
+{ \
+    { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010 }, \
+    { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110 }, \
+    { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210 }, \
+    { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310 }, \
+    { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410 }, \
+    { K500, K501, K502, K503, K504, KC_NO, KC_NO, KC_NO, K508, K509, K510 }, \
+    { K600, K601, K602, K603, K604, K605, K606, K607, K608, K609, K610 }, \
+    { K700, K701, K702, K703, K704, K705, K706, K707, K708, K709, K710 }, \
+    { K800, K801, K802, K803, K804, K805, K806, K807, K808, K809, K810 }, \
+    { K900, K901, K902, KC_NO, K904, K905, K906, K907, K908, K909, K910 } \
+}
diff --git a/keyboards/handwired/jopr/keymaps/default/keymap.c b/keyboards/handwired/jopr/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..d6b998f
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN 1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_BL] = LAYOUT(
+        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_DEL,    KC_NO,   KC_CAPS, 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_PSCR, 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_ENT,        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
+        KC_MHEN,       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_P4,   KC_P5,   KC_P6,              KC_PGUP, KC_INS,  KC_PGDN,
+        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_P1,   KC_P2,   KC_P3,   KC_PENT,   KC_HOME, KC_UP,   KC_END,
+        KC_LCTL,   KC_LWIN,   KC_LALT,   KC_SPC,                                                KC_RALT, KC_RWIN, LT(_FN,KC_APP),  KC_RCTL,     KC_P0,            KC_PDOT,            KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+    [_FN] = LAYOUT(
+               _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______,   KC_SYSREQ, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______, _______, _______,
+               _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,       KC_MSTP, KC_VOLU, _______, _______,
+               _______,       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,              KC_MPRV, KC_MPLY, KC_MNXT,            _______, KC_MUTE, _______,
+               _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                  KC_MUTE, KC_VOLD, _______, _______,   KC_VOLD, KC_MSTP, KC_VOLU,
+               _______,   _______,   _______,   _______,                                                 _______,   _______,   _______,   _______,     _______,          _______,            KC_MPRV, KC_MPLY, KC_MNXT
+    )
+};
+
+void led_set_user(uint8_t usb_led) {
+
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinHigh(F1);
+       } else {
+        writePinLow(F1);
+    }
+
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinHigh(F0);
+       } else {
+        writePinLow(F0);
+    }
+    
+    if (!(IS_LED_ON(usb_led, USB_LED_NUM_LOCK))) {
+        tap_code(KC_NUMLOCK);
+    }
+}
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    static bool sysreq_led = false;
+    if (record->event.pressed) {
+        if (sysreq_led) {
+            sysreq_led = false;
+            writePinLow(F4);
+        }
+        else {
+            switch(keycode) {
+                case KC_SYSREQ:
+                    sysreq_led = true;
+                    writePinHigh(F4);
+            }
+        }
+    }
+    return true;
+}
diff --git a/keyboards/handwired/jopr/keymaps/modded_white/keymap.c b/keyboards/handwired/jopr/keymaps/modded_white/keymap.c
new file mode 100644 (file)
index 0000000..da1f9e1
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN 1
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_BL] = LAYOUT(
+        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_DEL,    KC_NO,   KC_CAPS, KC_SLCK, KC_PAUS,
+        KC_NUHS, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_NUBS, KC_SLSH, KC_BSPC,           KC_PSCR, KC_PSLS, KC_PAST, KC_PMNS,
+        KC_TAB,      KC_V,    KC_Y,    KC_D,    KC_COMM, KC_QUOT, KC_INT1, KC_J,    KC_M,    KC_L,    KC_U,    KC_LBRC, KC_RBRC, KC_ENT,        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
+        KC_MHEN,       KC_A,    KC_T,    KC_H,    KC_E,    KC_B,    KC_MINS, KC_C,    KC_S,    KC_N,    KC_O,    KC_I,    KC_EQL,               KC_P4,   KC_P5,   KC_P6,              KC_PGUP, KC_INS,  KC_PGDN,
+        KC_LSFT,   KC_GRV,  KC_P,    KC_K,    KC_G,    KC_W,    KC_Q,    KC_X,    KC_R,    KC_F,    KC_DOT,  KC_Z,    KC_RSFT,                  KC_P1,   KC_P2,   KC_P3,   KC_PENT,   KC_HOME, KC_UP,   KC_END,
+        KC_LCTL,   KC_LWIN,   KC_LALT,   KC_SPC,                                                KC_RALT, KC_RWIN, LT(_FN,KC_APP), KC_RCTL,      KC_P0,            KC_PDOT,            KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+    [_FN] = LAYOUT(
+               _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______, _______, _______, _______,   _______,   KC_SYSREQ, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______, _______, _______,
+               _______,     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,       KC_MSTP, KC_VOLU, _______, _______,
+               _______,       _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,              KC_MPRV, KC_MPLY, KC_MNXT,            _______, KC_MUTE, _______,
+               _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                  KC_MUTE, KC_VOLD, _______, _______,   KC_VOLD, KC_MSTP, KC_VOLU,
+               _______,   _______,   _______,   _______,                                                 _______,   _______,   _______,   _______,     _______,          _______,            KC_MPRV, KC_MPLY, KC_MNXT
+    )
+};
+
+void led_set_user(uint8_t usb_led) {
+
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinHigh(F1);
+       } else {
+        writePinLow(F1);
+    }
+
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinHigh(F0);
+       } else {
+        writePinLow(F0);
+    }
+    
+    if (!(IS_LED_ON(usb_led, USB_LED_NUM_LOCK))) {
+        tap_code(KC_NUMLOCK);
+    }
+}
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    static bool sysreq_led = false;
+    if (record->event.pressed) {
+        if (sysreq_led) {
+            sysreq_led = false;
+            writePinLow(F4);
+        }
+        else {
+            switch(keycode) {
+                case KC_SYSREQ:
+                    sysreq_led = true;
+                    writePinHigh(F4);
+            }
+        }
+    }
+    return true;
+}
\ No newline at end of file
diff --git a/keyboards/handwired/jopr/readme.md b/keyboards/handwired/jopr/readme.md
new file mode 100644 (file)
index 0000000..eab197d
--- /dev/null
@@ -0,0 +1,17 @@
+# jopr-106-Nl2SR-Cl2MH
+
+106-key based on ISO 105-key, NumLock to SysReq, CapsLock to Muhenkan/ROYA, NumLock state forced on
+
+![jopr-106-default](https://raw.githubusercontent.com/joelproko/keyboard_layout_jopr/master/keycode_layout_default.png)  
+![jopr-106-modded_white](https://raw.githubusercontent.com/joelproko/keyboard_layout_jopr/master/keycap_layout_modded_white.png)
+
+Inspired by [KeyBored](https://github.com/itractus/KeyBored) and [white_keyboard_layout](https://github.com/mw8/white_keyboard_layout)
+
+Keyboard Maintainer: [joelproko](https://github.com/joelproko)  
+Hardware: https://github.com/joelproko/keyboard_layout_jopr
+
+Make example for this keyboard (after setting up your build environment):
+
+    make jopr:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/jopr/rules.mk b/keyboards/handwired/jopr/rules.mk
new file mode 100644 (file)
index 0000000..de83252
--- /dev/null
@@ -0,0 +1,63 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# 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 = 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 = yes      # 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
+AUDIO_ENABLE = no
+UNICODE_ENABLE = yes
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.c b/keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.c
new file mode 100644 (file)
index 0000000..8c5a87f
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+    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"
+
+// Value to place in RTC backup register 10 for persistent bootloader mode
+#define RTC_BOOTLOADER_FLAG 0x424C
+
+/**
+ * @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) {
+   //JTAG-DP Disabled and SW-DP Enabled
+   AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
+   //Set backup register DR10 to enter bootloader on reset
+   BKP->DR10 = RTC_BOOTLOADER_FLAG;
+}
diff --git a/keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.h b/keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.h
new file mode 100644 (file)
index 0000000..9427ada
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+    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 GPIOA_LED               8
+#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_ */
diff --git a/keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.mk b/keyboards/handwired/onekey/bluepill/boards/GENERIC_STM32_F103/board.mk
new file mode 100644 (file)
index 0000000..6b8b312
--- /dev/null
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103
diff --git a/keyboards/handwired/onekey/bluepill/bootloader_defs.h b/keyboards/handwired/onekey/bluepill/bootloader_defs.h
new file mode 100644 (file)
index 0000000..6b8fa9f
--- /dev/null
@@ -0,0 +1,10 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* 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
+ */
+
+// STM32F103* does NOT have an USB bootloader in ROM (only serial),
+//  so setting anything here does not make much sense
+#define STM32_BOOTLOADER_ADDRESS 0x80000000
diff --git a/keyboards/handwired/onekey/bluepill/chconf.h b/keyboards/handwired/onekey/bluepill/chconf.h
new file mode 100644 (file)
index 0000000..bbd9b2d
--- /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                 0
+
+/**
+ * @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         FALSE
+
+/**
+ * @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                 FALSE
+
+/**
+ * @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                  FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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/handwired/onekey/bluepill/config.h b/keyboards/handwired/onekey/bluepill/config.h
new file mode 100644 (file)
index 0000000..3d88ee0
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+#define MATRIX_COL_PINS { B0 }
+#define MATRIX_ROW_PINS { A7 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/bluepill/halconf.h b/keyboards/handwired/onekey/bluepill/halconf.h
new file mode 100644 (file)
index 0000000..72879a5
--- /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                 TRUE
+#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                 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         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     1
+#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/handwired/onekey/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/handwired/onekey/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld
new file mode 100644 (file)
index 0000000..d0688ef
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+    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 = 64k - 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/handwired/onekey/bluepill/mcuconf.h b/keyboards/handwired/onekey/bluepill/mcuconf.h
new file mode 100644 (file)
index 0000000..fced272
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+    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                  TRUE
+#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                  TRUE
+#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/handwired/onekey/bluepill/readme.md b/keyboards/handwired/onekey/bluepill/readme.md
new file mode 100644 (file)
index 0000000..0bf1f57
--- /dev/null
@@ -0,0 +1,3 @@
+# bluepill onekey
+
+To trigger keypress, short together pins *B0* and *A7*.
diff --git a/keyboards/handwired/onekey/bluepill/rules.mk b/keyboards/handwired/onekey/bluepill/rules.mk
new file mode 100644 (file)
index 0000000..4627406
--- /dev/null
@@ -0,0 +1,37 @@
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
+
+# OPT_DEFS =
+# MCU_LDSCRIPT = STM32F103x8
+# BOARD = GENERIC_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
index 4a3042eeae4ca1bd1fa10829db499b4257e7a24d..6f7ec1289faf605677b7edec94470297d4d8e6c2 100644 (file)
@@ -15,14 +15,11 @@ 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"
+#pragma once
 
 /* USB Device descriptor parameter */
 #define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6464
+#define PRODUCT_ID      0x6465
 #define DEVICE_VER      0x0001
 #define MANUFACTURER    none
 #define PRODUCT         onekey
@@ -32,10 +29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MATRIX_ROWS 1
 #define MATRIX_COLS 1
 
-#define MATRIX_COL_PINS {  B0 }
-#define MATRIX_ROW_PINS {  D0 }
-#define UNUSED_PINS
-
 /* define if matrix has ghost */
 //#define MATRIX_HAS_GHOST
 
@@ -64,5 +57,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //#define NO_ACTION_ONESHOT
 //#define NO_ACTION_MACRO
 //#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/handwired/onekey/elite_c/config.h b/keyboards/handwired/onekey/elite_c/config.h
new file mode 100644 (file)
index 0000000..fbcd630
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+#define MATRIX_COL_PINS { F4 }
+#define MATRIX_ROW_PINS { F5 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/elite_c/readme.md b/keyboards/handwired/onekey/elite_c/readme.md
new file mode 100644 (file)
index 0000000..28a0885
--- /dev/null
@@ -0,0 +1,3 @@
+# Elite-C onekey
+
+To trigger keypress, short together pins *F4* and *F5* (marked on the PCB as *A3* and *A2*).
diff --git a/keyboards/handwired/onekey/elite_c/rules.mk b/keyboards/handwired/onekey/elite_c/rules.mk
new file mode 100644 (file)
index 0000000..eb7c443
--- /dev/null
@@ -0,0 +1,58 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
index 8ce6fec2d081641949022ef8f40daeddc8f158c9..2924ff3ff8dcfd366b8bd1ae2ed9a9bcf5324d24 100644 (file)
@@ -1,5 +1,20 @@
-#ifndef ONEKEY_H
-#define ONEKEY_H
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
 
 #include "quantum.h"
 
@@ -8,5 +23,3 @@
   ) { \
     { k00 }  \
 }
-
-#endif
diff --git a/keyboards/handwired/onekey/promicro/config.h b/keyboards/handwired/onekey/promicro/config.h
new file mode 100644 (file)
index 0000000..fbcd630
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+#define MATRIX_COL_PINS { F4 }
+#define MATRIX_ROW_PINS { F5 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/promicro/readme.md b/keyboards/handwired/onekey/promicro/readme.md
new file mode 100644 (file)
index 0000000..260eab8
--- /dev/null
@@ -0,0 +1,3 @@
+# Pro Micro onekey
+
+To trigger keypress, short together pins *F4* and *F5* (marked on the PCB as *A3* and *A2*).
diff --git a/keyboards/handwired/onekey/promicro/rules.mk b/keyboards/handwired/onekey/promicro/rules.mk
new file mode 100644 (file)
index 0000000..dc6f196
--- /dev/null
@@ -0,0 +1,58 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
diff --git a/keyboards/handwired/onekey/proton_c/config.h b/keyboards/handwired/onekey/proton_c/config.h
new file mode 100644 (file)
index 0000000..f6bedcf
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+#define MATRIX_COL_PINS { A3 }
+#define MATRIX_ROW_PINS { A2 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/proton_c/readme.md b/keyboards/handwired/onekey/proton_c/readme.md
new file mode 100644 (file)
index 0000000..0feedbb
--- /dev/null
@@ -0,0 +1,3 @@
+# Proton C onekey
+
+To trigger keypress, short together pins *A3* and *A2*.
diff --git a/keyboards/handwired/onekey/proton_c/rules.mk b/keyboards/handwired/onekey/proton_c/rules.mk
new file mode 100644 (file)
index 0000000..b17a3d0
--- /dev/null
@@ -0,0 +1,2 @@
+# MCU name
+MCU = STM32F303
index eab3b75a936f539fb8db39e6d310e12002e26ab4..0e9d6a538aafe64dc8882a60ee70dedba7c7af34 100644 (file)
@@ -2,11 +2,11 @@
 
 Custom handwired one key keyboard.
 
-Keyboard Maintainer:  
-Hardware Supported: Custom handwired one key  
+Keyboard Maintainer: QMK Community  
+Hardware Supported: bluepill, Elite-C, Pro Micro, Proton C, Teensy 2.0, Teensy++ 2.0, Teensy LC, Teensy 3.2  
 Hardware Availability: 
 
-Switch must be connected to pins B0 and D0. 
+**See each individual board for pin infomation**
 
 Make example for this keyboard (after setting up your build environment):
 
index cfa693a73b909fb3e65ad384a663ad3431491273..245f9025d77e663aa95da2c74cbbb6e8f103858b 100644 (file)
@@ -1,61 +1,22 @@
-
-
-# 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.
+#   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
-#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
+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 = yes       # 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
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no         # Enable support for HD44780 based LCDs (+400)
+
+DEFAULT_FOLDER = handwired/onekey/promicro
diff --git a/keyboards/handwired/onekey/teensy_2/config.h b/keyboards/handwired/onekey/teensy_2/config.h
new file mode 100644 (file)
index 0000000..fbcd630
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+#define MATRIX_COL_PINS { F4 }
+#define MATRIX_ROW_PINS { F5 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/teensy_2/readme.md b/keyboards/handwired/onekey/teensy_2/readme.md
new file mode 100644 (file)
index 0000000..86a3114
--- /dev/null
@@ -0,0 +1,3 @@
+# Teensy 2.0 onekey
+
+To trigger keypress, short together pins *F4* and *F5*
diff --git a/keyboards/handwired/onekey/teensy_2/rules.mk b/keyboards/handwired/onekey/teensy_2/rules.mk
new file mode 100644 (file)
index 0000000..3fb7c7e
--- /dev/null
@@ -0,0 +1,58 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = halfkay
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
diff --git a/keyboards/handwired/onekey/teensy_2pp/config.h b/keyboards/handwired/onekey/teensy_2pp/config.h
new file mode 100644 (file)
index 0000000..9d99398
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+#define MATRIX_COL_PINS { B2 }
+#define MATRIX_ROW_PINS { B1 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/teensy_2pp/readme.md b/keyboards/handwired/onekey/teensy_2pp/readme.md
new file mode 100644 (file)
index 0000000..9cb99e1
--- /dev/null
@@ -0,0 +1,3 @@
+# Teensy++ 2.0 onekey
+
+To trigger keypress, short together pins *B2* and *B1*
diff --git a/keyboards/handwired/onekey/teensy_2pp/rules.mk b/keyboards/handwired/onekey/teensy_2pp/rules.mk
new file mode 100644 (file)
index 0000000..e318e4b
--- /dev/null
@@ -0,0 +1,58 @@
+# MCU name
+MCU = at90usb1286
+
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = halfkay
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   Teensy halfKay      512
+#   Teensy++ halfKay    1024
+#   Atmel DFU loader    4096
+#   LUFA bootloader     4096
+#   USBaspLoader        2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
diff --git a/keyboards/handwired/onekey/teensy_32/chconf.h b/keyboards/handwired/onekey/teensy_32/chconf.h
new file mode 100644 (file)
index 0000000..3294ac7
--- /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                 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 */
+
+/** @} */
diff --git a/keyboards/handwired/onekey/teensy_32/config.h b/keyboards/handwired/onekey/teensy_32/config.h
new file mode 100644 (file)
index 0000000..0d82a05
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// TODO: including this causes "error: expected identifier before '(' token" errors
+//#include "config_common.h"
+
+#define MATRIX_COL_PINS { D5 }
+#define MATRIX_ROW_PINS { B2 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/teensy_32/halconf.h b/keyboards/handwired/onekey/teensy_32/halconf.h
new file mode 100644 (file)
index 0000000..1b6f2ad
--- /dev/null
@@ -0,0 +1,354 @@
+/*
+    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
+
+/*===========================================================================*/
+/* 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     1
+#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/handwired/onekey/teensy_32/ld/MK20DX256.ld b/keyboards/handwired/onekey/teensy_32/ld/MK20DX256.ld
new file mode 100644 (file)
index 0000000..66bc6b8
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * 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.
+ */
+
+/*
+ * MK20DX256 memory setup.
+ */
+MEMORY
+{
+  flash0   : org = 0x00000000, len = 0x400
+  flash1   : org = 0x00000400, len = 0x10
+  flash2   : org = 0x00000410, len = 256k - 0x410
+  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 = 0x1FFF8000, len = 64k
+  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);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/onekey/teensy_32/mcuconf.h b/keyboards/handwired/onekey/teensy_32/mcuconf.h
new file mode 100644 (file)
index 0000000..13a9e33
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    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.
+ */
+/* 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
+
+/*
+ * 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 (configured for K20x) might not apply
+ *   2 for Teensy LC
+ *   5 for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY         5
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/handwired/onekey/teensy_32/readme.md b/keyboards/handwired/onekey/teensy_32/readme.md
new file mode 100644 (file)
index 0000000..216aecf
--- /dev/null
@@ -0,0 +1,40 @@
+# Teensy 3.2 onekey
+
+To trigger keypress, short together pins *D5* and *B2* (marked on the PCB as *20* and *19*).
+
+## Hardware
+
+### Pins
+When setting matrix pins, you need to use the MCU definitions instead of what is printed on the PCB. Sourced from <https://www.pjrc.com/teensy/schematic32.gif>. The following table can be used to convert between the two.
+
+|  PCB   | MCU | Notes                       |
+|------- |-----|-----------------------------|
+| 0      | B16 |                             |
+| 1      | B17 |                             |
+| 2      | D0  |                             |
+| 3      | A12 |                             |
+| 4      | A13 |                             |
+| 5      | D7  |                             |
+| 6      | D4  |                             |
+| 7      | D2  |                             |
+| 8      | D3  |                             |
+| 9      | C3  |                             |
+| 10     | C4  |                             |
+| 11     | C6  |                             |
+| 12     | C7  |                             |
+| 13/LED | C5  |                             |
+| 14/A0  | D1  |                             |
+| 15/A1  | C0  |                             |
+| 16/A2  | B0  |                             |
+| 17/A3  | B1  |                             |
+| 18/A4  | B3  |                             |
+| 19/A5  | B2  |                             |
+| 20/A6  | D5  |                             |
+| 21/A7  | D6  |                             |
+| 22/A8  | C1  |                             |
+| 23/A9  | C2  |                             |
+| 24/A10 |     | ADC0_DP0 in schematic *[1]* |
+| 25/A11 |     | ADC0_DM0 in schematic *[1]* |
+| 26/A12 |     | ADC0_DP3 in schematic *[1]* |
+
+*[1]* - Currently not configured and may require extra work to implement.
diff --git a/keyboards/handwired/onekey/teensy_32/rules.mk b/keyboards/handwired/onekey/teensy_32/rules.mk
new file mode 100644 (file)
index 0000000..9717161
--- /dev/null
@@ -0,0 +1,41 @@
+## 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 = 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
+MCU_LDSCRIPT = MK20DX256
+
+# 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 = 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
+BOARD = PJRC_TEENSY_3_1
+
+# Cortex version
+# Teensy LC is cortex-m0plus; 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
diff --git a/keyboards/handwired/onekey/teensy_lc/chconf.h b/keyboards/handwired/onekey/teensy_lc/chconf.h
new file mode 100644 (file)
index 0000000..3294ac7
--- /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                 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 */
+
+/** @} */
diff --git a/keyboards/handwired/onekey/teensy_lc/config.h b/keyboards/handwired/onekey/teensy_lc/config.h
new file mode 100644 (file)
index 0000000..0d82a05
--- /dev/null
@@ -0,0 +1,24 @@
+/* Copyright 2019
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// TODO: including this causes "error: expected identifier before '(' token" errors
+//#include "config_common.h"
+
+#define MATRIX_COL_PINS { D5 }
+#define MATRIX_ROW_PINS { B2 }
+#define UNUSED_PINS
diff --git a/keyboards/handwired/onekey/teensy_lc/halconf.h b/keyboards/handwired/onekey/teensy_lc/halconf.h
new file mode 100644 (file)
index 0000000..1b6f2ad
--- /dev/null
@@ -0,0 +1,354 @@
+/*
+    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
+
+/*===========================================================================*/
+/* 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     1
+#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/handwired/onekey/teensy_lc/ld/MKL26Z64.ld b/keyboards/handwired/onekey/teensy_lc/ld/MKL26Z64.ld
new file mode 100644 (file)
index 0000000..c4ca8b8
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * 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
diff --git a/keyboards/handwired/onekey/teensy_lc/mcuconf.h b/keyboards/handwired/onekey/teensy_lc/mcuconf.h
new file mode 100644 (file)
index 0000000..ea576df
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+    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.
+ */
+/* 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
+
+/*
+ * 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 (configured for K20x) might not apply
+ *   2 for Teensy LC
+ *   5 for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY         2
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/handwired/onekey/teensy_lc/readme.md b/keyboards/handwired/onekey/teensy_lc/readme.md
new file mode 100644 (file)
index 0000000..676d794
--- /dev/null
@@ -0,0 +1,40 @@
+# Teensy LC onekey
+
+To trigger keypress, short together pins *D5* and *B2* (marked on the PCB as *20* and *19*).
+
+## Hardware
+
+### Pins
+When setting matrix pins, you need to use the MCU definitions instead of what is printed on the PCB. Sourced from <https://www.pjrc.com/teensy/schematic_lc.gif>. The following table can be used to convert between the two.
+
+|  PCB   | MCU | Notes |
+|------- |-----|-------|
+| 0      | B16 |       |
+| 1      | B17 |       |
+| 2      | D0  |       |
+| 3      | A1  |       |
+| 4      | A2  |       |
+| 5      | D7  |       |
+| 6      | D4  |       |
+| 7      | D2  |       |
+| 8      | D3  |       |
+| 9      | C3  |       |
+| 10     | C4  |       |
+| 11     | C6  |       |
+| 12     | C7  |       |
+| 13/LED | C5  |       |
+| 14/A0  | D1  |       |
+| 15/A1  | C0  |       |
+| 16/A2  | B0  |       |
+| 17/A3  | B1  |       |
+| 18/A4  | B3  |       |
+| 19/A5  | B2  |       |
+| 20/A6  | D5  |       |
+| 21/A7  | D6  |       |
+| 22/A8  | C1  |       |
+| 23/A9  | C2  |       |
+| 24/A10 | E2  |       |
+| 25/A11 | E21 | *[1]* |
+| 26/A12 | E30 | *[1]* |
+
+*[1]* - Currently not configured and may require extra work to implement.
diff --git a/keyboards/handwired/onekey/teensy_lc/rules.mk b/keyboards/handwired/onekey/teensy_lc/rules.mk
new file mode 100644 (file)
index 0000000..7859f6d
--- /dev/null
@@ -0,0 +1,41 @@
+## 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
diff --git a/keyboards/handwired/tritium_numpad/config.h b/keyboards/handwired/tritium_numpad/config.h
new file mode 100644 (file)
index 0000000..83333c0
--- /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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0003
+#define MANUFACTURER    Handwired
+#define PRODUCT         Tritium Numpad
+#define DESCRIPTION     QMK keyboard firmware for handwired numpad
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { D1, D0, D4, C6, D7, E6 }
+#define MATRIX_COL_PINS { F4, F6, B1, B2 }
+#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 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
+
+/* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 4
+
+/* Underlight configuration
+ */
+
+#define RGB_DI_PIN D2
+#define RGBLED_NUM 4     // Number of LEDs
+
+/*
+ * 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
+
diff --git a/keyboards/handwired/tritium_numpad/info.json b/keyboards/handwired/tritium_numpad/info.json
new file mode 100644 (file)
index 0000000..bc10efc
--- /dev/null
@@ -0,0 +1,21 @@
+{
+  "keyboard_name": "Tritium_numpad",
+  "url": "https://www.thingiverse.com/thing:2855938",
+  "maintainer": "qmk",
+  "width": 4,
+  "height": 6,
+  "layouts": {
+    "LAYOUT_numpad_6x4": {
+      "key_count": 21,
+      "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k13", "x":3, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}, {"label":"k30", "x":0, "y":3}, {"label":"k31", "x":1, "y":3}, {"label":"k32", "x":2, "y":3}, {"label":"k23", "x":3, "y":2, "h":2}, {"label":"k40", "x":0, "y":4}, {"label":"k41", "x":1, "y":4}, {"label":"k42", "x":2, "y":4}, {"label":"k50", "x":0, "y":5, "w":2}, {"label":"k52", "x":2, "y":5}, {"label":"k43", "x":3, "y":4, "h":2}]
+    },
+       "LAYOUT_nontra_6x4": {
+         "key_count": 22,
+      "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k13", "x":3, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}, {"label":"k23", "x":3, "y":2, "h":2}, {"label":"k30", "x":0, "y":3}, {"label":"k31", "x":1, "y":3}, {"label":"k32", "x":2, "y":3}, {"label":"k40", "x":0, "y":4}, {"label":"k41", "x":1, "y":4}, {"label":"k42", "x":2, "y":4}, {"label":"k43", "x":3, "y":4, "h":2}, {"label":"k50", "x":0, "y":5}, {"label":"k51", "x":1, "y":5}, {"label":"k52", "x":2, "y":5}]
+    },
+    "LAYOUT_ortho_6x4": {
+      "key_count": 24,
+      "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k13", "x":3, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}, {"label":"k23", "x":3, "y":2}, {"label":"k30", "x":0, "y":3}, {"label":"k31", "x":1, "y":3}, {"label":"k32", "x":2, "y":3}, {"label":"k33", "x":3, "y":3}, {"label":"k40", "x":0, "y":4}, {"label":"k41", "x":1, "y":4}, {"label":"k42", "x":2, "y":4}, {"label":"k43", "x":3, "y":4}, {"label":"k50", "x":0, "y":5}, {"label":"k51", "x":1, "y":5}, {"label":"k52", "x":2, "y":5}, {"label":"k53", "x":3, "y":5}]
+    }
+  }
+}
diff --git a/keyboards/handwired/tritium_numpad/keymaps/blu/keymap.c b/keyboards/handwired/tritium_numpad/keymaps/blu/keymap.c
new file mode 100644 (file)
index 0000000..958c17e
--- /dev/null
@@ -0,0 +1,40 @@
+#include QMK_KEYBOARD_H
+
+void keyboard_pre_init_user(void)
+{
+       // Set layer LED as an output
+    setPinOutput(B0);
+}
+
+uint32_t layer_state_set_user(uint32_t state)
+{
+       // Switch layer LED accordingly
+    switch (biton32(state)) {
+    case 0:
+        writePinHigh(B0);
+        break;
+    case 1:
+        writePinLow(B0);
+        break;
+       }
+    return state;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = LAYOUT_ortho_6x4(
+               KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 
+               KC_P7,   KC_P8,   KC_P9,   KC_PPLS, 
+               KC_P4,   KC_P5,   KC_P6,   KC_BSPC, 
+               KC_P1,   KC_P2,   KC_P3,   KC_PENT, 
+               KC_P0,   KC_UP,   KC_PDOT, TT(1), 
+               KC_LEFT, KC_DOWN, KC_RGHT, BL_STEP
+       ),
+       [1] = LAYOUT_ortho_6x4(
+               KC_NO,   KC_NO,   KC_NO,   KC_NO, 
+               KC_NO,   KC_K,    KC_NO,   KC_NO, 
+               KC_H,    KC_NO,   KC_L,    KC_NO, 
+               KC_NO,   KC_J,    KC_NO,   KC_NO, 
+               KC_LSFT, KC_Z,    KC_X,    KC_TRNS, 
+               KC_NO,   KC_NO,   KC_NO,   KC_NO
+       )
+};
diff --git a/keyboards/handwired/tritium_numpad/keymaps/blu/layers.json b/keyboards/handwired/tritium_numpad/keymaps/blu/layers.json
new file mode 100644 (file)
index 0000000..5335c65
--- /dev/null
@@ -0,0 +1 @@
+[["KC_NLCK", "KC_PSLS", "KC_PAST", "KC_PMNS", "KC_P7", "KC_P8", "KC_P9", "KC_PPLS", "KC_P4", "KC_P5", "KC_P6", "KC_BSPC", "KC_P1", "KC_P2", "KC_P3", "KC_PENT", "KC_P0", "KC_UP", "KC_PDOT", "TT(1)", "KC_LEFT", "KC_DOWN", "KC_RGHT", "BL_STEP"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_K", "KC_NO", "KC_NO", "KC_H", "KC_NO", "KC_L", "KC_NO", "KC_NO", "KC_J", "KC_NO", "KC_NO", "KC_LSFT", "KC_Z", "KC_X", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_NO"]]
\ No newline at end of file
diff --git a/keyboards/handwired/tritium_numpad/keymaps/blu/readme.md b/keyboards/handwired/tritium_numpad/keymaps/blu/readme.md
new file mode 100644 (file)
index 0000000..fd07b15
--- /dev/null
@@ -0,0 +1,13 @@
+# Generated Keymap Layout
+
+This layout was generated by the QMK API. You can find the JSON data used to
+generate this keymap in the file layers.json.
+
+To make use of this file you will need follow the following steps:
+
+* Download or Clone QMK Firmware: <https://github.com/qmk/qmk_firmware/>
+* Extract QMK Firmware to a location on your hard drive
+* Copy this folder into %s
+* You are now ready to compile or use your keymap with the source
+
+More information can be found in the QMK docs: <https://docs.qmk.fm>
\ No newline at end of file
diff --git a/keyboards/handwired/tritium_numpad/keymaps/default/keymap.c b/keyboards/handwired/tritium_numpad/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..6043021
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_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 _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-------------------.
+   * |Esc |TAB |BS  | =  |
+   * |----|----|----|----|
+   * | NL | /  | *  | -  |
+   * |----|----|----|----|
+   * | 7  | 8  | 9  |    |
+   * |----|----|----| +  |
+   * | 4  | 5  | 6  |    |
+   * |----|----|----|----|
+   * | 1  | 2  | 3  |    |
+   * |----|----|----| En |
+   * |   0     |./FN|    |
+   * `-------------------'
+   */
+
+  [_BL] = LAYOUT_numpad_6x4(
+    KC_ESC,  KC_TAB,  KC_BSPC, KC_PEQL, 
+    KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 
+    KC_P7,   KC_P8,   KC_P9,   
+    KC_P4,   KC_P5,   KC_P6,   KC_PPLS, 
+    KC_P1,   KC_P2,   KC_P3,   
+      KC_P0, LT(_FL,KC_PDOT),  KC_PENT  
+  ),
+
+  /* Keymap _FL: Function Layer
+   * ,-------------------.
+   * |Esc |TAB |BS  | =  |
+   * |----|----|----|----|
+   * | NL | /  | *  | -  |
+   * |----|----|----|----|
+   * | 7  | 8  | 9  |    |
+   * |----|----|----|RST |
+   * | 4  | 5  | 6  |    |
+   * |----|----|----|----|
+   * | 1  | 2  | 3  |    |
+   * |----|----|----| En |
+   * |   0     |./FN|    |
+   * `-------------------'
+   */
+  [_FL] = LAYOUT_numpad_6x4(
+    KC_ESC,  KC_TAB,  KC_BSPC, KC_PEQL, 
+    KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 
+    KC_P7,   KC_P8,   KC_P9,   
+    KC_P4,   KC_P5,   KC_P6,   RESET,   
+    KC_P1,   KC_P2,   KC_P3,   
+      KC_P0, LT(_FL,KC_PDOT),  KC_PENT 
+  ),
+};
diff --git a/keyboards/handwired/tritium_numpad/keymaps/max/keymap.c b/keyboards/handwired/tritium_numpad/keymaps/max/keymap.c
new file mode 100644 (file)
index 0000000..bba5c43
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_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 _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-------------------.
+   * |Esc |Setp| -  | =  |
+   * |----|----|----|----|
+   * | F1 | F2 | F3 | F4 |
+   * |----|----|----|----|
+   * | 7  | 8  | 9  |  - |
+   * |----|----|----|----|
+   * | 4  | 5  | 6  | LF |
+   * |----|----|----|----|
+   * | 1  | 2  | 3  | \  |
+   * |----|----|----|----|
+   * |Left|Down| Up |Rght|
+   * `-------------------'
+   */
+
+  [_BL] = LAYOUT_ortho_6x4(
+    KC_ESC,  KC_TAB,  KC_MINS,KC_EQL,  
+    KC_F1,   KC_F2,   KC_F3,  KC_F4,   
+    KC_P7,   KC_P8,   KC_P9,  KC_PMNS,
+    KC_P4,   KC_P5,   KC_P6,  KC_PENT, 
+    KC_P1,   KC_P2,   KC_P3,  KC_BSLS, 
+    KC_LEFT, KC_DOWN, KC_UP,  KC_RIGHT
+  ),
+
+  /* Keymap _FL: Function Layer
+   * ,-------------------.
+   * |Esc |TAB |BS  | =  |
+   * |----|----|----|----|
+   * | NL | /  | *  | -  |
+   * |----|----|----|----|
+   * | 7  | 8  | 9  |    |
+   * |----|----|----|RST |
+   * | 4  | 5  | 6  |    |
+   * |----|----|----|----|
+   * | 1  | 2  | 3  |    |
+   * |----|----|----| En |
+   * |   0     |./FN|    |
+   * `-------------------'
+   */
+  [_FL] = LAYOUT_ortho_6x4(
+    KC_ESC,  KC_TAB,  KC_BSPC, KC_PEQL, 
+    KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 
+    KC_P7,   KC_P8,   KC_P9,   RESET,   
+    KC_P4,   KC_P5,   KC_P6,   KC_PENT, 
+    KC_P1,   KC_P2,   KC_P3,   KC_PENT, 
+    KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT
+  ),
+};
diff --git a/keyboards/handwired/tritium_numpad/keymaps/ortho_left/keymap.c b/keyboards/handwired/tritium_numpad/keymaps/ortho_left/keymap.c
new file mode 100644 (file)
index 0000000..9d569f1
--- /dev/null
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_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 _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-------------------.
+   * | T  | G  | B  |Spac|
+   * |----|----|----|----|
+   * | R  | F  | V  | Fn |
+   * |----|----|----|----|
+   * | E  | D  | C  | OS |
+   * |----|----|----|----|
+   * | W  | S  | X  | Alt|
+   * |----|----|----|----|
+   * | Q  | A  | Z  | Ctl|
+   * |----|----|----|----|
+   * | Esc| Tab|Shft| Fn2|
+   * `-------------------'
+   */
+
+  [_BL] = LAYOUT_ortho_6x4(
+    KC_T,   KC_G,   KC_B,      KC_SPACE,
+    KC_R,   KC_F,   KC_V,      MO(1),    
+    KC_E,   KC_D,   KC_C,      KC_LGUI, 
+    KC_W,   KC_S,   KC_X,      KC_LALT,
+    KC_Q,   KC_A,   KC_Z,      KC_LCTL, 
+    KC_TAB, KC_ESC, KC_LSHIFT, MO(1)
+  ),
+
+  /* Keymap _FL: Function Layer
+   * ,-------------------.
+   * | 5  | F5 | F11|Spac|
+   * |----|----|----|----|
+   * | 4  | F4 | F10|    |
+   * |----|----|----|----|
+   * | 3  | F3 | F9 | OS |
+   * |----|----|----|----|
+   * | 2  | F2 | F8 | Alt|
+   * |----|----|----|----|
+   * | 1  | F1 | F7 | Ctl|
+   * |----|----|----|----|
+   * | `  | Del|Shft|    |
+   * `-------------------'
+   */
+  [_FL] = LAYOUT_ortho_6x4(
+    KC_5,  KC_F5,  KC_F11,  _______, 
+    KC_4,  KC_F4,  KC_F10,  _______, 
+    KC_3,  KC_F3,  KC_F9,   _______, 
+    KC_2,  KC_F2,  KC_F8,   _______, 
+    KC_1,  KC_F1,  KC_F7,   _______, 
+    KC_GRV,KC_DEL, _______, _______
+  ),
+};
diff --git a/keyboards/handwired/tritium_numpad/keymaps/ortho_right/keymap.c b/keyboards/handwired/tritium_numpad/keymaps/ortho_right/keymap.c
new file mode 100644 (file)
index 0000000..0dc2f81
--- /dev/null
@@ -0,0 +1,61 @@
+#include QMK_KEYBOARD_H
+
+#ifdef RGBLIGHT_ENABLE
+#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 _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _BL: (Base Layer) Default Layer
+   * ,-------------------.
+   * |Spac| N  | H  | Y  |
+   * |----|----|----|----|
+   * | Fn | M  | J  | U  |
+   * |----|----|----|----|
+   * |Left| ,  | K  | I  |
+   * |----|----|----|----|
+   * |Down| .  | L  | O  |
+   * |----|----|----|----|
+   * | Up | /  | ;  | P  |
+   * |----|----|----|----|
+   * |Rght| Ret| "  |Bspc|
+   * `-------------------'
+   */
+  [_BL] = LAYOUT_ortho_6x4(
+    KC_SPACE, KC_N,     KC_H,      KC_Y,   
+    MO(1),    KC_M,     KC_J,      KC_U,   
+    KC_LEFT,  KC_COMM,  KC_K,      KC_I,   
+    KC_DOWN,  KC_DOT,   KC_L,      KC_O,   
+    KC_UP,    KC_SLASH, KC_SCLN,   KC_P,   
+    KC_RIGHT, KC_ENT,   KC_QUOT,   KC_BSPC
+  ),
+
+  /* Keymap _FL: Function Layer
+   * ,-------------------.
+   * |Esc | F12| F6 | 6  |
+   * |----|----|----|----|
+   * | NL | M  | -  | 7  |
+   * |----|----|----|----|
+   * |Left| ,  | =  | 8  |
+   * |----|----|----|----|
+   * |Down| .  | [  | 9  |
+   * |----|----|----|----|
+   * | Up | /  | ]  | 0  |
+   * |----|----|----|----|
+   * |Rght| Ret| \  | Del|
+   * `-------------------'
+   */
+  [_FL] = LAYOUT_ortho_6x4(
+    _______, KC_F12,  KC_F6,   KC_6,  
+    _______, _______, KC_MINS, KC_7, 
+    _______, _______, KC_EQL,  KC_8,  
+    _______, _______, KC_LBRC, KC_9,  
+    _______, _______, KC_RBRC, KC_0,  
+    _______, _______, KC_BSLS, KC_DEL
+  ),
+};
diff --git a/keyboards/handwired/tritium_numpad/readme.md b/keyboards/handwired/tritium_numpad/readme.md
new file mode 100644 (file)
index 0000000..21acfe7
--- /dev/null
@@ -0,0 +1,28 @@
+Tritium Numpad
+===
+
+Keyboard Maintainer: QMK Community  
+Hardware Supported: Handwired 6x4 numpads using promicro controller  
+Hardware Availability: https://www.thingiverse.com/thing:2855938
+
+Wiring is accomplished on the Pro Micro board using the following pins as rows:
+* D2 : Row 1
+* D3 : Row 2
+* D4 : Row 3
+* D5 : Row 4
+* D6 : Row 5
+* D7 : Row 6
+
+and the following pins as columns:
+* A3 : Col 1
+* A1 : Col 2
+* D15 : Col 3
+* D16 : Col 4
+
+Make example for this keyboard (after setting up your build environment):
+
+    make tritium_numpad:default
+
+Bootmagic is enabled.  Press the key at 0,0 (usually escape or numlock in the top left corner) while plugging the keyboard in to jump to bootloader.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/tritium_numpad/rules.mk b/keyboards/handwired/tritium_numpad/rules.mk
new file mode 100644 (file)
index 0000000..c990a6a
--- /dev/null
@@ -0,0 +1,61 @@
+# 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)
+
+# Bootloader
+#     This definition is optional, and if your keyboard supports multiple bootloaders of
+#     different sizes, comment this out, and the correct address will be loaded
+#     automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite        # Key at 0,0 makes the keyboard go into bootloader(+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
+
+LAYOUTS = numpad_6x4 ortho_6x4 nontra_6x4
diff --git a/keyboards/handwired/tritium_numpad/tritium_numpad.c b/keyboards/handwired/tritium_numpad/tritium_numpad.c
new file mode 100644 (file)
index 0000000..7193a93
--- /dev/null
@@ -0,0 +1,29 @@
+#include "tritium_numpad.h"
+#include "led.h"
+
+void keyboard_pre_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+       keyboard_pre_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
+    // Numlock LED
+    setPinOutput(D5);
+}
+
+void led_set_kb(uint8_t usb_led) {
+    if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinLow(D5);
+    } else {
+        writePinHigh(D5);
+    }
+}
diff --git a/keyboards/handwired/tritium_numpad/tritium_numpad.h b/keyboards/handwired/tritium_numpad/tritium_numpad.h
new file mode 100644 (file)
index 0000000..8d2e783
--- /dev/null
@@ -0,0 +1,95 @@
+#pragma once
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+/*  matrix layout
+   * ,-------------------.
+   * | 00 | 01 | 02 | 03 |
+   * |----|----|----|----|
+   * | 10 | 11 | 12 | 13 |
+   * |----|----|----|----|
+   * | 20 | 21 | 22 |    |
+   * |----|----|----| 23 |
+   * | 30 | 31 | 32 |    |
+   * |----|----|----|----|
+   * | 40 | 41 | 42 |    |
+   * |----|----|----| 43 |
+   * |   50    | 52 |    |
+   * `-------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_numpad_6x4( \
+  k00, k01, k02, k03, \
+  k10, k11, k12, k13, \
+  k20, k21, k22,      \
+  k30, k31, k32, k23, \
+  k40, k41, k42,      \
+     k50,   k52, k43  \
+) \
+{ \
+  {k00, k01, k02, k03}, \
+  {k10, k11, k12, k13}, \
+  {k20, k21, k22, k23}, \
+  {k30, k31, k32, XXX}, \
+  {k40, k41, k42, k43}, \
+  {k50, XXX, k52, XXX} \
+}
+
+/*  matrix layout
+   * ,-------------------.
+   * | 00 | 01 | 02 | 03 |
+   * |----|----|----|----|
+   * | 10 | 11 | 12 | 13 |
+   * |----|----|----|----|
+   * | 20 | 21 | 22 |    |
+   * |----|----|----| 23 |
+   * | 30 | 31 | 32 |    |
+   * |----|----|----|----|
+   * | 40 | 41 | 42 |    |
+   * |----|----|----| 43 |
+   * | 50 | 51 | 52 |    |
+   * `-------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT_nontra_6x4( \
+  k00, k01, k02, k03, \
+  k10, k11, k12, k13, \
+  k20, k21, k22,      \
+  k30, k31, k32, k23, \
+  k40, k41, k42,      \
+  k50, k51, k52, k43  \
+) \
+{ \
+  {k00, k01, k02, k03}, \
+  {k10, k11, k12, k13}, \
+  {k20, k21, k22, k23}, \
+  {k30, k31, k32, xxx}, \
+  {k40, k41, k42, k43}, \
+  {k50, k51, k52, xxx} \
+}
+
+#define LAYOUT_ortho_6x4( \
+  k00, k01, k02, k03, \
+  k10, k11, k12, k13, \
+  k20, k21, k22, k23, \
+  k30, k31, k32, k33, \
+  k40, k41, k42, k43, \
+  k50, k51, k52, k53  \
+) \
+{ \
+  {k00, k01, k02, k03}, \
+  {k10, k11, k12, k13}, \
+  {k20, k21, k22, k23}, \
+  {k30, k31, k32, k33}, \
+  {k40, k41, k42, k43}, \
+  {k50, k51, k52, k53} \
+}
+
+void keyboard_pre_init_user(void);
+void matrix_scan_user(void);
+
diff --git a/keyboards/katana60/keymaps/josefadamcik/config.h b/keyboards/katana60/keymaps/josefadamcik/config.h
new file mode 100644 (file)
index 0000000..0054f43
--- /dev/null
@@ -0,0 +1,20 @@
+/* Copyright 2017 Baris Tosun
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
+
diff --git a/keyboards/katana60/keymaps/josefadamcik/keymap.c b/keyboards/katana60/keymaps/josefadamcik/keymap.c
new file mode 100644 (file)
index 0000000..8556ee4
--- /dev/null
@@ -0,0 +1,163 @@
+/* Copyright 2019 Josef Adamcik
+ *
+ *  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 QMK_KEYBOARD_H
+
+enum katana_layers {
+    /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
+    _M_COLEMAK,
+    _M_QWERTY,
+    _W_COLEMAK,
+    _W_QWERTY,
+    _NUMB,
+    _SYMB,
+    _M_EXT,
+    _W_EXT
+};
+
+enum katana_keycodes {
+    M_COLEMAK = SAFE_RANGE,
+    M_QWERTY,
+    W_COLEMAK,
+    W_QWERTY
+};
+
+#define K_SPCFN LT(_SYMB, KC_SPACE) /* Tap for space, hold for symbols layer */
+#define K_BSPFN LT(_SYMB, KC_BSPC)  /* Tap for backspace, hold for symbols layer */
+/* Linux/win variants */
+#define W_LEFT_MOD MT(MOD_RCTL, KC_LEFT)
+#define W_DOWN_MOD MT(MOD_RALT, KC_DOWN)
+#define W_UP_MOD MT(MOD_RGUI, KC_UP)
+#define W_UNDO    LCTL(KC_Z)
+#define W_CUT     LCTL(KC_X)
+#define W_COPY    LCTL(KC_C)
+#define W_PASTE   LCTL(KC_V)
+#define W_PRVWD LCTL(KC_LEFT)
+#define W_NXTWD LCTL(KC_RIGHT)
+#define W_LSTRT KC_HOME
+#define W_LEND KC_END
+/* Mac variants */
+#define M_LEFT_MOD MT(MOD_RGUI, KC_LEFT)
+#define M_DOWN_MOD MT(MOD_RALT, KC_DOWN)
+#define M_UP_MOD MT(MOD_RCTL, KC_UP)
+#define M_UNDO LGUI(KC_Z)
+#define M_CUT LGUI(KC_X)
+#define M_COPY LGUI(KC_C)
+#define M_PASTE LGUI(KC_V)
+#define M_PRVWD LALT(KC_LEFT)
+#define M_NXTWD LALT(KC_RIGHT)
+#define M_LSTRT LGUI(KC_LEFT)
+#define M_LEND LGUI(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_M_COLEMAK] = LAYOUT(
+    KC_ESC,    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   TG(_NUMB),KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,
+    KC_TAB,    KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_LBRC,          KC_RBRC, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC,
+    MO(_M_EXT),KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_MINS,          KC_QUOT, 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_EQL,  KC_DEL,  KC_BSLS, KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+    MO(_SYMB), KC_LCTL, KC_LALT, KC_LGUI,                   K_BSPFN, KC_ENT,  KC_SPACE,         M_LEFT_MOD,M_DOWN_MOD,M_UP_MOD,  KC_RIGHT,MO(_SYMB)
+),
+[_M_QWERTY] = LAYOUT(
+    KC_ESC,    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   TG(_NUMB),KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,
+    KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_LBRC,          KC_RBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    MO(_M_EXT),KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_MINS,          KC_QUOT, 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_EQL,  KC_DEL,  KC_BSLS, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+    MO(_SYMB), KC_LCTL, KC_LALT, KC_LGUI,                   K_BSPFN, KC_ENT,  KC_SPACE,         M_LEFT_MOD,M_DOWN_MOD,M_UP_MOD,   KC_RIGHT,MO(_SYMB)
+),
+[_W_COLEMAK] = LAYOUT(
+    KC_ESC,    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   TG(_NUMB),KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,
+    KC_TAB,    KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_LBRC,          KC_RBRC, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC,
+    MO(_W_EXT),KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_MINS,          KC_QUOT, 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_EQL,  KC_DEL,  KC_BSLS, KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+    MO(_SYMB), KC_LGUI, KC_LALT, KC_LCTL,                   K_BSPFN, KC_ENT,  KC_SPACE,         W_LEFT_MOD,W_DOWN_MOD,W_UP_MOD,  KC_RIGHT,MO(_SYMB)
+),
+[_W_QWERTY] = LAYOUT(
+    KC_ESC,    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   TG(_NUMB),KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,
+    KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_LBRC,          KC_RBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    MO(_W_EXT),KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_MINS,          KC_QUOT, 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_EQL,  KC_DEL,  KC_BSLS, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+    MO(_SYMB), KC_LGUI, KC_LALT, KC_LCTL,                   K_BSPFN, KC_ENT,  KC_SPACE,         W_LEFT_MOD,W_DOWN_MOD,W_UP_MOD,   KC_RIGHT,MO(_SYMB)
+),
+[_NUMB] = LAYOUT(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, KC_PSLS, KC_PAST, KC_PMNS, _______, _______,
+    _______, _______, _______, KC_MS_U, _______, _______, _______,          _______,_______, KC_7,    KC_8,    KC_9,    KC_PPLS, _______,
+    _______, KC_BTN2, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,          _______,_______, KC_4,    KC_5,    KC_6,    KC_PPLS, _______,
+    _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______,_______, KC_1,    KC_2,    KC_3,    KC_PENT, _______,
+    _______, _______, _______, _______,                   KC_BTN1, _______, KC_P0,            KC_PDOT, _______, _______, _______, _______
+),
+[_SYMB] = LAYOUT(
+    RESET,   _______, 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_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______,          _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,
+    _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_VOLD,          KC_VOLU, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+    _______, KC_PLUS, KC_MINS, KC_EQL,  KC_LCBR, KC_RCBR, KC_MPRV, KC_MPLY, KC_MNXT, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
+    _______, _______, _______, _______,                   KC_DEL,  _______, _______,          _______, _______, _______, _______, _______
+),
+[_M_EXT] = LAYOUT(
+    RESET  ,M_COLEMAK,M_QWERTY,W_COLEMAK,W_QWERTY,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______,          _______, KC_PGUP, M_PRVWD, KC_UP,   M_NXTWD, _______, _______,
+    _______, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_CAPS, _______,          _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL,  _______,
+    _______, M_UNDO,  M_CUT,   M_COPY,  M_PASTE, _______, _______, _______, _______, _______, M_LSTRT, _______, M_LEND,  _______, _______,
+    _______, _______, _______, _______,                   _______, _______, _______,          _______, _______, _______, _______, _______
+),
+[_W_EXT] = LAYOUT(
+    RESET  ,M_COLEMAK,M_QWERTY,W_COLEMAK,W_QWERTY,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______,          _______, KC_PGUP, W_PRVWD, KC_UP,   W_NXTWD, _______, _______,
+    _______, KC_LALT, KC_LCTL, KC_LSFT, _______, KC_CAPS, _______,          _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT,KC_DEL,  _______,
+    _______, W_UNDO,  W_CUT,   W_COPY,  W_PASTE, _______, _______, _______, _______, _______, W_LSTRT, _______, W_LEND,  _______, _______,
+    _______, _______, _______, _______,                   _______, _______, _______,          _______, _______, _______, _______, _______
+)
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case M_QWERTY:
+            if (record->event.pressed) {
+                set_single_persistent_default_layer(_M_QWERTY);
+            }
+            return false;
+            break;
+        case M_COLEMAK:
+            if (record->event.pressed) {
+                set_single_persistent_default_layer(_M_COLEMAK);
+            }
+            return false;
+            break;
+        case W_QWERTY:
+            if (record->event.pressed) {
+                set_single_persistent_default_layer(_W_QWERTY);
+            }
+            return false;
+            break;
+        case W_COLEMAK:
+            if (record->event.pressed) {
+                set_single_persistent_default_layer(_W_COLEMAK);
+            }
+            return false;
+            break;
+    }
+    return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/katana60/keymaps/josefadamcik/readme.md b/keyboards/katana60/keymaps/josefadamcik/readme.md
new file mode 100644 (file)
index 0000000..5d72b1d
--- /dev/null
@@ -0,0 +1,23 @@
+![Multi OS Katana60 layout image](https://i.imgur.com/1w2OA1o.png)
+
+# Multi OS Katana60 layout
+
+Based on the default Katana60 layout, customized by [Josef Adamcik](https://josef-adamcik.cz) with several basic layers (Colemak vs Qwerty, Mac OS vs Linux/Win)
+
+- Supports 4 default layers: Colemak Mac, Qwerty Mac, Colemak Win/Linux, Qwerty Win/Linux. Switching between default layers is persisted. For more details about Mac vs Win/Linux see below.
+- There are arrows mapped to the right side of the bottom row on Katana6O. I kept this mapping but modified it a bit - when you press and hold any of the first three arrow keys it acts as a modifier (CMD, OPT, CTRL). If you just tap it, it acts as an arrow.
+
+## Mac versus Win/Linux layers:
+
+- Modifiers are ordered differently. Mac version has (from the middle to the outside): CMD, ALT, CTRL, Win/Linux version has CTRL, ALT, CMD. It's meant to make switching between platforms easier.
+- Extend layer is different, so the keys which represent shortcuts ("previous/next word" and "copy", "paste", "cut", "undo") work properly.
+
+## More details - reasons for some choices in this layout
+
+I use Mac for work and Ubuntu at home. So I would like to stay compatible with both systems. The main problem is the modifiers. Firstly, they tend to be ordered differently on Mac keyboards. Secondly, the main modifier on Mac is CMD (equivalent to WIn or SUPER on other keyboards). The same role is played by CTRL on Windows and Linux. Most of IDE’s or editors (Android Studio, VS Code, SublimeText) follow this habit in their OS-specific keymaps.
+
+I am a user of the Colemak layout. But I would like to have the ability to switch to qwerty. That would allow my other people to use my keyboard occasionally.
+
+I am a heavy user of keyboard shortcuts. So I need the layout to support my needs. Some keyboard layout has modifiers only on one side of the keyboard or they hide some of them (CMD) under a key combination. I tend to press the modifiers for a key shortcut with the opposite hand to the one which presses the letter. 
+
+Layout in [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/14d62ee67d36621c37888783fa29b107)
index 97945eec8658d54aef0a986c38cee416b4a453f2..d4e200fa8e5d773aff24ab97eaf316f75ef666a7 100644 (file)
@@ -56,7 +56,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define RGB_DI_PIN E2
 #ifdef RGB_DI_PIN
 #define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 18
+#define RGBLED_NUM 20
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
 #define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/keebio/nyquist/keymaps/georgepetri/config.h b/keyboards/keebio/nyquist/keymaps/georgepetri/config.h
new file mode 100644 (file)
index 0000000..bc7fed8
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.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/>.
+*/
+
+#pragma once
+
+// #define USE_I2C
+
+/* Select hand configuration */
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLED_NUM 12
diff --git a/keyboards/keebio/nyquist/keymaps/georgepetri/keymap.c b/keyboards/keebio/nyquist/keymaps/georgepetri/keymap.c
new file mode 100644 (file)
index 0000000..6564e2a
--- /dev/null
@@ -0,0 +1,91 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _BASE 0
+#define _L 1
+#define _R 2
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE
+};
+
+#define KC_TL LCTL(KC_PGUP)
+#define KC_TR LCTL(KC_PGDN)
+#define KC_TC LCTL(KC_W)
+#define KC_TRO LCTL(LSFT(KC_T))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BASE] = LAYOUT(
+//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+    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_E   , KC_R   , KC_T   ,   KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_DEL ,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    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_CAPS, KC_LCTL, KC_LGUI, KC_LALT, MO(_L) , KC_SPC ,   KC_SPC , TG(_R) , KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT  
+//└────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┘
+  ),
+  
+  [_L] = LAYOUT(
+//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+    _______, 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_MINS, KC_EQL , KC_LBRC, KC_RBRC, KC_BSLS,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    _______, _______, _______, _______, _______, _______,   _______, KC_PGDN, KC_PGUP, KC_HOME, KC_END , _______,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______
+//└────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┘
+  ),
+  
+  [_R] = LAYOUT(
+//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+    _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    _______, KC_TL  , KC_TR  , KC_TC  , KC_TRO , _______,   _______, KC_TL  , KC_TR  , KC_TC  , KC_TRO , _______,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    _______, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT, _______,   KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT, _______, _______,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    _______, KC_PGDN, KC_PGUP, KC_HOME, KC_END , _______,   _______, KC_PGDN, KC_PGUP, KC_HOME, KC_END , _______,
+//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+    _______, _______, _______, _______, _______, _______,   _______, _______, _______, _______, _______, _______
+//└────────┴────────┴────────┴────────┴────────┴────────┘ └────────┴────────┴────────┴────────┴────────┴────────┘
+  )
+};
+
+void keyboard_post_init_user(void) {
+  rgblight_sethsv_noeeprom(HSV_BLUE);
+}
+
+void update_led(void) {
+    switch (biton32(layer_state)) {
+    case _BASE:
+      rgblight_sethsv_noeeprom(HSV_BLUE);
+      break;
+    case _L:
+      rgblight_sethsv_noeeprom(HSV_CORAL);
+      break;
+    case _R:
+      rgblight_sethsv_noeeprom(HSV_MAGENTA);
+      break;
+    }
+  if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
+    rgblight_sethsv_range(HSV_WHITE,0,3);
+    rgblight_sethsv_range(HSV_WHITE,9,12);
+  }
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+  update_led();
+  return state;
+}
+
+void led_set_user(uint8_t usb_led) {
+  update_led();
+}
diff --git a/keyboards/keebio/nyquist/keymaps/georgepetri/readme.md b/keyboards/keebio/nyquist/keymaps/georgepetri/readme.md
new file mode 100644 (file)
index 0000000..a773c98
--- /dev/null
@@ -0,0 +1,52 @@
+# George Petri's Nyquist layout
+
+```
+make keebio/nyquist/rev2:georgepetri
+```
+
+Features a dedicated navigation layer on rise and current layer status on rgb underglow.  
+
+### Base Layer
+```
+┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+│ GRAVE│  1   │  2   │  3   │  4   │  5   │ │  6   │  7   │  8   │  9   │  0   │ BSPC │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│  TAB │  Q   │  W   │  E   │  R   │  T   │ │  Y   │  U   │  I   │  O   │  P   │ DEL  │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│  ESC │  A   │  S   │  D   │  F   │  G   │ │  H   │  J   │  K   │  L   │  SCLN│ QUOT │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│  LSFT│  Z   │  X   │  C   │  V   │  B   │ │  N   │  M   │ COMM │  DOT │  SLSH│ ENT  │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│  CAPS│  LCTL│ LGUI │ LALT │MO(_L)│  SPC │ │ SPC  │MO(_R)│ LEFT │  DOWN│  UP  │ RGHT │
+└──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+```
+
+### Lower
+```
+┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+│      │  F1  │  F2  │  F3  │  F4  │  F5  │ │  F6  │  F7  │  F8  │  F9  │  F10 │      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │  F11 │  F12 │      │      │      │ │      │      │      │      │      │      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │      │      │      │      │      │ │      │  MINS│  EQL │  LBRC│  RBRC│ BSLS │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │      │      │      │      │      │ │      │  PGDN│ PGUP │  HOME│  END │      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │      │      │      │      │      │ │      │      │      │      │      │      │
+└──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+```
+
+### Rise
+```
+┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+│      │      │      │      │      │      │ │      │      │      │      │      │      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │ TAB_L│ TAB_R│ TAB_C│ TAB_R│      │ │      │ TAB_L│ TAB_R│ TAB_C│ TAB_R│      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │ LEFT │ DOWN │ UP   │ RGHT │      │ │ LEFT │ DOWN │ UP   │ RGHT │      │      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │ PGDN │ PGUP │  HOME│ END  │      │ │      │ PGDN │ PGUP │  HOME│ END  │      │
+├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+│      │      │      │      │      │      │ │      │      │      │      │      │      │
+└──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+```
diff --git a/keyboards/keebio/nyquist/keymaps/georgepetri/rules.mk b/keyboards/keebio/nyquist/keymaps/georgepetri/rules.mk
new file mode 100644 (file)
index 0000000..2e145d5
--- /dev/null
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = no
+COMMAND_ENABLE = no
index 110a7ac0f98626c4de1a097c3e43b2ce3c0e59a2..652263d2b76f789350898db82a9bccae24ac4523 100644 (file)
@@ -15,17 +15,16 @@ 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
+#pragma once
 
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x6050
-#define DEVICE_VER      0x0104
-#define MANUFACTURER    KBDMania
-#define PRODUCT         KMAC
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6050
+#define DEVICE_VER 0x0104
+#define MANUFACTURER KBDMania
+#define PRODUCT KMAC
 #define DESCRIPTION     QMK keyboard firmware for KMAC
 
 /* key matrix size */
@@ -36,9 +35,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * Keyboard Matrix Assignments
  * The KMAC uses demultiplexers for the cols, they are only included here as documentation.
  * See matrix.c for more details.
-*/
-#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5, B7 }
-#define MATRIX_COL_PINS { C6, B6, F0, F1, C7, B5 }
+ */
+#define MATRIX_ROW_PINS \
+    { D0, D1, D2, D3, D5, B7 }
+#define MATRIX_COL_PINS \
+    { B6, C6, C7, F1, F0, B5 }
 #define UNUSED_PINS
 
 /* COL2ROW, ROW2COL*/
@@ -169,5 +170,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 //#define MIDI_TONE_KEYCODE_OCTAVES 1
-
-#endif
index f86cfdde59de913079a3d014ce2aa636ab85efdf..2fe0ef2697a3d699efe408169765d437fd3abed5 100644 (file)
@@ -6,7 +6,8 @@
   "width": 18.25,
   "height": 6.5,
   "layouts": {
-    "LAYOUT": {
+    "LAYOUT_tkl_ansi": {
+      "key_count": 87,
       "layout": [
         { "label": "Esc", "x": 0, "y": 0 },
         { "label": "F1", "x": 2, "y": 0 },
@@ -97,8 +98,8 @@
         { "label": "\u2192", "x": 17.25, "y": 5.5 }
       ]
     },
-
-    "LAYOUT_WKL": {
+    "LAYOUT_tkl_ansi_wkl": {
+      "key_count": 84,
       "layout": [
         { "label": "Esc", "x": 0, "y": 0 },
         { "label": "F1", "x": 2, "y": 0 },
         { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 },
         { "label": "\u2191", "x": 16.25, "y": 4.5 },
         { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 },
-        { "label": "Win", "x": 1.5, "y": 5.5 },
         { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 },
         { "x": 4, "y": 5.5, "w": 7 },
         { "label": "Alt", "x": 11, "y": 5.5, "w": 1.5 },
-        { "label": "Win", "x": 12.5, "y": 5.5 },
         { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 },
         { "label": "\u2190", "x": 15.25, "y": 5.5 },
         { "label": "\u2193", "x": 16.25, "y": 5.5 },
index 09b8f1bc73a173027f3d792294dd121cdcbf812b..14b43132a7270d8d156e6201fa7f3cd86c07d3e8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2017 Mathias Andersson <wraul@dbox.se>
+/* Copyright 2019 Mathias Andersson <wraul@dbox.se>
  *
  * 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
index 3444f3cd50257f490a8087b114ca14a02b37f253..05ccd1bcb1f6d923e11370d97d5927e1b51e7bb0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2017 Mathias Andersson <wraul@dbox.se>
+/* Copyright 2017-2019 Mathias Andersson <wraul@dbox.se>
  *
  * 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
  */
 #include QMK_KEYBOARD_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 _BL 0
-#define _FL 1
+enum layer_names {
+    _QW,
+    _FN,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+    MCR_01 = SAFE_RANGE,
+    MCR_02,
+    MCR_03,
+    MCR_04,
+    MCR_05,
+    MCR_06,
+    MCR_07,
+    MCR_08,
+    MCR_09,
+    MCR_10,
+    MCR_11,
+};
 
+// clang-format off
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    [_BL] = LAYOUT(
-        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_BRK,
-        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_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_UP,
-        KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-    [_FL] = LAYOUT(
-        BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______,
+    [_QW] = LAYOUT_tkl_ansi(
+        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_BRK,
+        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_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_UP,
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+    [_FN] = LAYOUT_tkl_ansi(
+        BL_STEP,          MCR_01,  MCR_02,  MCR_03,  MCR_03,  MCR_04,  MCR_05,  MCR_06,  MCR_07,  MCR_08,  MCR_09,  MCR_10,  MCR_11,  _______, _______, _______,
         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,          _______,
+        _______, _______, _______,                   _______,                                     _______, _______, _______, _______, _______, _______, _______),
 };
+// clang-format on
 
-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("The");
-            return false;
-        }
-        break;
-    case 1:
-        if (record->event.pressed)
-        {
-            SEND_STRING("Custom");
-            return false;
-        }
-        break;
-    case 2:
-        if (record->event.pressed)
-        {
-            SEND_STRING("Keyboard");
-            return false;
-        }
-        break;
-    case 3:
-        if (record->event.pressed)
-        {
-            return MACRO(D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END);
-        }
-        break;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case MCR_01:
+            if (record->event.pressed) {
+                SEND_STRING("The");
+            }
+            break;
+        case MCR_02:
+            if (record->event.pressed) {
+                SEND_STRING("Custom");
+            }
+            break;
+        case MCR_03:
+            if (record->event.pressed) {
+                SEND_STRING("Keyboard");
+            }
+            break;
+        case MCR_04:
+            if (record->event.pressed) {
+                SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
+            }
+            break;
     }
-    return MACRO_NONE;
+    return true;
 };
 
-void matrix_init_user(void)
-{
-}
-
-void matrix_scan_user(void)
-{
-}
+void matrix_init_user(void) {}
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
-    return true;
-}
+void matrix_scan_user(void) {}
 
-void led_set_user(uint8_t usb_led)
-{
-}
+void led_set_user(uint8_t usb_led) {}
index aaa6f9bf255a548d453cd39dacad22a559d241d4..a6084037530c6f695792c23e25af7a1ee9f3d20b 100644 (file)
@@ -2,8 +2,6 @@
 
 This is the default keymap for the winkey version of the PCB. It implements the same features as the official default KMAC firmware.
 
-See [keymap.c](keymap.c) for details.
-
 ## Layers
 
 The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
@@ -50,7 +48,3 @@ These are mostly useless and serve more like examples I guess.
 | 2     | Types `Custom`                         |
 | 3     | Types `Keyboard`                       |
 | 4     | Inputs `<Ctrl+c>` `<Right>` `<Ctrl+v>` |
-
-## Building
-
-To build the firmware with the default keymap, run `make default`.
diff --git a/keyboards/kmac/keymaps/default/rules.mk b/keyboards/kmac/keymaps/default/rules.mk
deleted file mode 100644 (file)
index 1284879..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 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/>.
-
-
-# QMK 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 = yes      # Enable keyboard backlight functionality
-MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
-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
-
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi/config.h b/keyboards/kmac/keymaps/default_tkl_ansi/config.h
new file mode 100644 (file)
index 0000000..14b4313
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Mathias Andersson <wraul@dbox.se>
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c b/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c
new file mode 100644 (file)
index 0000000..05ccd1b
--- /dev/null
@@ -0,0 +1,87 @@
+/* Copyright 2017-2019 Mathias Andersson <wraul@dbox.se>
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layer_names {
+    _QW,
+    _FN,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+    MCR_01 = SAFE_RANGE,
+    MCR_02,
+    MCR_03,
+    MCR_04,
+    MCR_05,
+    MCR_06,
+    MCR_07,
+    MCR_08,
+    MCR_09,
+    MCR_10,
+    MCR_11,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QW] = LAYOUT_tkl_ansi(
+        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_BRK,
+        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_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_UP,
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+    [_FN] = LAYOUT_tkl_ansi(
+        BL_STEP,          MCR_01,  MCR_02,  MCR_03,  MCR_03,  MCR_04,  MCR_05,  MCR_06,  MCR_07,  MCR_08,  MCR_09,  MCR_10,  MCR_11,  _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,          _______,
+        _______, _______, _______,                   _______,                                     _______, _______, _______, _______, _______, _______, _______),
+};
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case MCR_01:
+            if (record->event.pressed) {
+                SEND_STRING("The");
+            }
+            break;
+        case MCR_02:
+            if (record->event.pressed) {
+                SEND_STRING("Custom");
+            }
+            break;
+        case MCR_03:
+            if (record->event.pressed) {
+                SEND_STRING("Keyboard");
+            }
+            break;
+        case MCR_04:
+            if (record->event.pressed) {
+                SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
+            }
+            break;
+    }
+    return true;
+};
+
+void matrix_init_user(void) {}
+
+void matrix_scan_user(void) {}
+
+void led_set_user(uint8_t usb_led) {}
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi/readme.md b/keyboards/kmac/keymaps/default_tkl_ansi/readme.md
new file mode 100644 (file)
index 0000000..a608403
--- /dev/null
@@ -0,0 +1,50 @@
+# Keymap for the winkey version of KMAC
+
+This is the default keymap for the winkey version of the PCB. It implements the same features as the official default KMAC firmware.
+
+## Layers
+
+The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
+
+### Layer 1: Default Layer
+     ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
+     |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
+     `---'   `---------------' `---------------' `---------------' `-----------'
+     ,-----------------------------------------------------------. ,-----------.
+     |~  |  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp | |Ins|Hom|PgU|
+     |-----------------------------------------------------------| |-----------|
+     |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD|
+     |-----------------------------------------------------------| '-----------'
+     |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
+     |-----------------------------------------------------------|     ,---.
+     |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |     |Up |
+     |-----------------------------------------------------------| ,-----------.
+     |Ctl|Gui|Alt|             Space             |Alt|Gui|Fn |Ctl| |Lef|Dow|Rig|
+     `-----------------------------------------------------------' `-----------'
+
+### Layer 2: Function Layer
+     ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
+     |Led|   |M1 |M2 |M3 |M4 | |M5 |M6 |M7 |M8 | |M9 |M10|M11|M12| |   |   |   |
+     `---'   `---------------' `---------------' `---------------' `-----------'
+     ,-----------------------------------------------------------. ,-----------.
+     |   |   |   |   |   |   |   |   |   |   |   |   |   |       | |   |   |   |
+     |-----------------------------------------------------------| |-----------|
+     |     |   |   |   |   |   |   |   |   |   |   |   |   |     | |   |   |   |
+     |-----------------------------------------------------------| '-----------'
+     |      |   |   |   |   |   |   |   |   |   |   |   |        |
+     |-----------------------------------------------------------|     ,---.
+     |        |   |   |   |   |   |   |   |   |   |   |          |     |   |
+     |-----------------------------------------------------------| ,-----------.
+     |   |   |   |                               |   |   |   |   | |   |   |   |
+     `-----------------------------------------------------------' `-----------'
+
+## Macros
+
+These are mostly useless and serve more like examples I guess.
+
+| Macro | Action                                 |
+|:-----:| -------------------------------------- |
+| 1     | Types `The`                            |
+| 2     | Types `Custom`                         |
+| 3     | Types `Keyboard`                       |
+| 4     | Inputs `<Ctrl+c>` `<Right>` `<Ctrl+v>` |
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/config.h b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/config.h
new file mode 100644 (file)
index 0000000..14b4313
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Mathias Andersson <wraul@dbox.se>
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c
new file mode 100644 (file)
index 0000000..42be547
--- /dev/null
@@ -0,0 +1,87 @@
+/* Copyright 2017-2019 Mathias Andersson <wraul@dbox.se>
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layer_names {
+    _QW,
+    _FN,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+    MCR_01 = SAFE_RANGE,
+    MCR_02,
+    MCR_03,
+    MCR_04,
+    MCR_05,
+    MCR_06,
+    MCR_07,
+    MCR_08,
+    MCR_09,
+    MCR_10,
+    MCR_11,
+};
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QW] = LAYOUT_tkl_ansi_wkl(
+        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_BRK,
+        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_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_UP,
+        KC_LCTL,          KC_LALT,                            KC_SPC,                                      MO(_FN),          KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+    [_FN] = LAYOUT_tkl_ansi_wkl(
+        BL_STEP,          MCR_01,  MCR_02,  MCR_03,  MCR_03,  MCR_04,  MCR_05,  MCR_06,  MCR_07,  MCR_08,  MCR_09,  MCR_10,  MCR_11,  _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
+        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,          _______,
+        _______,          _______,                            _______,                                     _______,          _______, _______, _______, _______),
+};
+// clang-format on
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    switch (keycode) {
+        case MCR_01:
+            if (record->event.pressed) {
+                SEND_STRING("The");
+            }
+            break;
+        case MCR_02:
+            if (record->event.pressed) {
+                SEND_STRING("Custom");
+            }
+            break;
+        case MCR_03:
+            if (record->event.pressed) {
+                SEND_STRING("Keyboard");
+            }
+            break;
+        case MCR_04:
+            if (record->event.pressed) {
+                SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
+            }
+            break;
+    }
+    return true;
+};
+
+void matrix_init_user(void) {}
+
+void matrix_scan_user(void) {}
+
+void led_set_user(uint8_t usb_led) {}
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/readme.md b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/readme.md
new file mode 100644 (file)
index 0000000..a66ed10
--- /dev/null
@@ -0,0 +1,50 @@
+# Keymap for the winkeyless version of KMAC
+
+This is the default keymap for the winkeyless version of the PCB. It implements the same features as the official default KMAC firmware.
+
+## Layers
+
+The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
+
+### Layer 1: Default Layer
+     ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
+     |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
+     `---'   `---------------' `---------------' `---------------' `-----------'
+     ,-----------------------------------------------------------. ,-----------.
+     |~  |  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp | |Ins|Hom|PgU|
+     |-----------------------------------------------------------| |-----------|
+     |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD|
+     |-----------------------------------------------------------| '-----------'
+     |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
+     |-----------------------------------------------------------|     ,---.
+     |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |     |Up |
+     |-----------------------------------------------------------| ,-----------.
+     |Ctl |   |Alt |              Space            |Fn  |   |Ctl | |Lef|Dow|Rig|
+     `----'   `-----------------------------------------'   `----' `-----------'
+
+### Layer 2: Function Layer
+     ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
+     |Led|   |M1 |M2 |M3 |M4 | |M5 |M6 |M7 |M8 | |M9 |M10|M11|M12| |   |   |   |
+     `---'   `---------------' `---------------' `---------------' `-----------'
+     ,-----------------------------------------------------------. ,-----------.
+     |   |   |   |   |   |   |   |   |   |   |   |   |   |       | |   |   |   |
+     |-----------------------------------------------------------| |-----------|
+     |     |   |   |   |   |   |   |   |   |   |   |   |   |     | |   |   |   |
+     |-----------------------------------------------------------| '-----------'
+     |      |   |   |   |   |   |   |   |   |   |   |   |        |
+     |-----------------------------------------------------------|     ,---.
+     |        |   |   |   |   |   |   |   |   |   |   |          |     |   |
+     |-----------------------------------------------------------| ,-----------.
+     |    |   |    |                               |    |   |    | |   |   |   |
+     `----'   `-----------------------------------------'   `----' `-----------'
+
+## Macros
+
+These are mostly useless and serve more like examples I guess.
+
+| Macro | Action                                 |
+|:-----:| -------------------------------------- |
+| 1     | Types `The`                            |
+| 2     | Types `Custom`                         |
+| 3     | Types `Keyboard`                       |
+| 4     | Inputs `<Ctrl+c>` `<Right>` `<Ctrl+v>` |
diff --git a/keyboards/kmac/keymaps/winkeyless/config.h b/keyboards/kmac/keymaps/winkeyless/config.h
deleted file mode 100644 (file)
index a3828f7..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2017 Mathias Andersson <wraul@dbox.se>
- *
- * 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"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/kmac/keymaps/winkeyless/keymap.c b/keyboards/kmac/keymaps/winkeyless/keymap.c
deleted file mode 100644 (file)
index 0df0aaf..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright 2017 Mathias Andersson <wraul@dbox.se>
- *
- * 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 QMK_KEYBOARD_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 _BL 0
-#define _FL 1
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    [_BL] = LAYOUT_WKL(
-        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_BRK,
-        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_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_UP,
-        KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-    [_FL] = LAYOUT_WKL(
-        BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
-};
-
-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("The");
-            return false;
-        }
-        break;
-    case 1:
-        if (record->event.pressed)
-        {
-            SEND_STRING("Custom");
-            return false;
-        }
-        break;
-    case 2:
-        if (record->event.pressed)
-        {
-            SEND_STRING("Keyboard");
-            return false;
-        }
-        break;
-    case 3:
-        if (record->event.pressed)
-        {
-            return MACRO(D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END);
-        }
-        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/kmac/keymaps/winkeyless/readme.md b/keyboards/kmac/keymaps/winkeyless/readme.md
deleted file mode 100644 (file)
index 9c579e9..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# Keymap for the winkeyless version of KMAC
-
-This is the default keymap for the winkeyless version of the PCB. It implements the same features as the official default KMAC firmware.
-
-
-See [keymap.c](keymap.c) for details.
-
-## Layers
-
-The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key.
-
-### Layer 1: Default Layer
-     ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
-     |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
-     `---'   `---------------' `---------------' `---------------' `-----------'
-     ,-----------------------------------------------------------. ,-----------.
-     |~  |  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp | |Ins|Hom|PgU|
-     |-----------------------------------------------------------| |-----------|
-     |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \| |Del|End|PgD|
-     |-----------------------------------------------------------| '-----------'
-     |Caps  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
-     |-----------------------------------------------------------|     ,---.
-     |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |     |Up |
-     |-----------------------------------------------------------| ,-----------.
-     |Ctl|Gui|Alt|               Space               |Alt|Fn |Ctl| |Lef|Dow|Rig|
-     `-----------------------------------------------------------' `-----------'
-
-### Layer 2: Function Layer
-     ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
-     |Led|   |M1 |M2 |M3 |M4 | |M5 |M6 |M7 |M8 | |M9 |M10|M11|M12| |   |   |   |
-     `---'   `---------------' `---------------' `---------------' `-----------'
-     ,-----------------------------------------------------------. ,-----------.
-     |   |   |   |   |   |   |   |   |   |   |   |   |   |       | |   |   |   |
-     |-----------------------------------------------------------| |-----------|
-     |     |   |   |   |   |   |   |   |   |   |   |   |   |     | |   |   |   |
-     |-----------------------------------------------------------| '-----------'
-     |      |   |   |   |   |   |   |   |   |   |   |   |        |
-     |-----------------------------------------------------------|     ,---.
-     |        |   |   |   |   |   |   |   |   |   |   |          |     |   |
-     |-----------------------------------------------------------| ,-----------.
-     |   |   |   |                                   |   |   |   | |   |   |   |
-     `-----------------------------------------------------------' `-----------'
-
-## Macros
-
-These are mostly useless and serve more like examples I guess.
-
-| Macro | Action                                 |
-|:-----:| -------------------------------------- |
-| 1     | Types `The`                            |
-| 2     | Types `Custom`                         |
-| 3     | Types `Keyboard`                       |
-| 4     | Inputs `<Ctrl+c>` `<Right>` `<Ctrl+v>` |
-
-## Building
-
-To build the firmware with the keymap for the winkeyless version, run `make winkeyless`.
diff --git a/keyboards/kmac/keymaps/winkeyless/rules.mk b/keyboards/kmac/keymaps/winkeyless/rules.mk
deleted file mode 100644 (file)
index 1284879..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 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/>.
-
-
-# QMK 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 = yes      # Enable keyboard backlight functionality
-MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
-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
-
index 6b54294b4b15247f9635cb907038bb231432951b..dcbbc2f1796821be857a72e5c497448fbaca433e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2017 Mathias Andersson <wraul@dbox.se>
+/* Copyright 2017-2019 Mathias Andersson <wraul@dbox.se>
  *
  * 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
  */
 #include "kmac.h"
 
+#define CAPS_PIN B0
+#define SCROLL_PIN E6
+#define F_ROW_MASK 0b01
+#define WASD_MASK 0b10
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
 void matrix_init_kb(void) {
     // put your keyboard start-up code here
     // runs once when the firmware starts up
-    led_init_ports();
+    setPinOutput(CAPS_PIN);
+    setPinOutput(SCROLL_PIN);
+
     matrix_init_user();
 }
 
+/*
+
 void matrix_scan_kb(void) {
-    // put your looping keyboard code here
-    // runs every cycle (a lot)
+  // put your looping keyboard code here
+  // runs every cycle (a lot)
 
-    matrix_scan_user();
+  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
+  // put your per-action keyboard code here
+  // runs for every action, just before processing by the firmware
 
-    return process_record_user(keycode, record);
+  return process_record_user(keycode, record);
 }
 
-void led_init_ports(void) {
-    DDRB |= (1<<0); // OUT
-    DDRE |= (1<<6); // OUT
-}
+*/
 
 /* LED pin configuration
  * Scroll Lock: Low PE6
  * Caps Lock: Low PB0
  */
 void led_set_kb(uint8_t usb_led) {
-    if (usb_led & (1<<USB_LED_CAPS_LOCK))
-    {
-        PORTB &= ~(1<<0); // LO
-    }
-    else
-    {
-        PORTB |= (1<<0); // HI
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinLow(CAPS_PIN);
+    } else {
+        writePinHigh(CAPS_PIN);
     }
 
-    if (usb_led & (1<<USB_LED_SCROLL_LOCK))
-    {
-        PORTE &= ~(1<<6); // LO
-    }
-    else
-    {
-        PORTE |= (1<<6); // HI
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinLow(SCROLL_PIN);
+    } else {
+        writePinHigh(SCROLL_PIN);
     }
 
     led_set_user(usb_led);
 }
 
 void backlight_init_ports(void) {
-    DDRB |= (1<<1) | (1<<2) | (1<<3) | (1<<4); // OUT
-    DDRD |= (1<<7); // OUT
+    setPinOutput(B1);
+    setPinOutput(B2);
+    setPinOutput(B3);
+    setPinOutput(B4);
+    setPinOutput(D7);
 }
 
 /* Backlight pin configuration
@@ -79,31 +86,24 @@ void backlight_init_ports(void) {
  * S: Low PB3
  * D: Low PD7
  */
-void backlight_set(uint8_t level)
-{
+void backlight_set(uint8_t level) {
     // F-row
-    if(level & (1<<0))
-    {
-        PORTB |= (1<<1); // HI
-    }
-    else
-    {
-        PORTB &= ~(1<<1); // LO
+    if (level & F_ROW_MASK) {
+        writePinHigh(B1);
+    } else {
+        writePinLow(B1);
     }
 
     // WASD
-    if(level & (1<<1))
-    {
-        PORTB &= ~(1<<4); // LO
-        PORTB &= ~(1<<2); // LO
-        PORTB &= ~(1<<3); // LO
-        PORTD &= ~(1<<7); // LO
-    }
-    else
-    {
-        PORTB |= (1<<4); // HI
-        PORTB |= (1<<2); // HI
-        PORTB |= (1<<3); // HI
-        PORTD |= (1<<7); // HI
+    if (level & WASD_MASK) {
+        writePinLow(B2);
+        writePinLow(B3);
+        writePinLow(B4);
+        writePinLow(D7);
+    } else {
+        writePinHigh(B2);
+        writePinHigh(B3);
+        writePinHigh(B4);
+        writePinHigh(D7);
     }
 }
index 44de8914af5fd674a2cab2ca0a9392d8fb8be451..edeb6358363f87dd9e1fee2cec81d2ba792e4b7d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2017 Mathias Andersson <wraul@dbox.se>
+/* Copyright 2017-2019 Mathias Andersson <wraul@dbox.se>
  *
  * 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
  * 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 KMAC_H
-#define KMAC_H
+#pragma once
 
 #include "quantum.h"
 
-// Keymap for the winkey version of the PCB.
-#define LAYOUT(                                                                                                                           \
-    K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G,                                                       \
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G,                                                  \
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G,                                                  \
-    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D,                                                                      \
-    K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F,                                                                      \
-    K50, K51, K52, K55, K58, K5A, K5C, K5D, K5E, K5F, K5G)                                                                                \
-    {                                                                                                                                     \
-        /*        0      1      2      3      4      5      6      7      8      9      A      B      C      D      E      F      G    */ \
-        /* 0 */ {K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G},                                  \
-            /* 1 */ {K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G},                                \
-            /* 2 */ {K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G},                                \
-            /* 3 */ {K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO, KC_NO, KC_NO},                        \
-            /* 4 */ {K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, KC_NO, KC_NO, K4D, KC_NO, K4F, KC_NO},                        \
-        /* 5 */ { K50, K51, K52, KC_NO, KC_NO, K55, KC_NO, KC_NO, K58, KC_NO, K5A, KC_NO, K5C, K5D, K5E, K5F, K5G }                       \
-    }
+// clang-format off
+#define LAYOUT_tkl_ansi( \
+    k00,      k02, k03, k04, k05,      k06, k07, k08, k09,      k0A, k0B, k0C, k0D,      k0E, k0F, k0G, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C,           k1D,      k1E, k1F, k1G, \
+    k20,      k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C,      k2D,      k2E, k2F, k2G, \
+    k30,      k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B,           k3D,                     \
+    k40,      k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A,                k4D,           k4F,      \
+    k50, k51, k52,                     k55,                     k58, k5A, k5C, k5D,      k5E, k5F, k5G  \
+) \
+{ \
+    {k00, KC_NO, k02, k03,   k04,   k05, k06,   k07,   k08, k09,   k0A, k0B,   k0C,   k0D, k0E,   k0F,   k0G},   \
+    {k10, k11,   k12, k13,   k14,   k15, k16,   k17,   k18, k19,   k1A, k1B,   k1C,   k1D, k1E,   k1F,   k1G},   \
+    {k20, k21,   k22, k23,   k24,   k25, k26,   k27,   k28, k29,   k2A, k2B,   k2C,   k2D, k2E,   k2F,   k2G},   \
+    {k30, k31,   k32, k33,   k34,   k35, k36,   k37,   k38, k39,   k3A, k3B,   KC_NO, k3D, KC_NO, KC_NO, KC_NO}, \
+    {k40, k41,   k42, k43,   k44,   k45, k46,   k47,   k48, k49,   k4A, KC_NO, KC_NO, k4D, KC_NO, k4F,   KC_NO}, \
+    {k50, k51,   k52, KC_NO, KC_NO, k55, KC_NO, KC_NO, k58, KC_NO, k5A, KC_NO, k5C,   k5D, k5E,   k5F,   k5G }   \
+}
+// clang-format on
 
-// Keymap for the winkeyless version of the PCB.
-#define LAYOUT_WKL(                                                                                                                               \
-    K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G,                                                               \
-    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G,                                                          \
-    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G,                                                          \
-    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D,                                                                              \
-    K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F,                                                                              \
-    K50, K51, K52, K55, K58, K5A, K5D, K5E, K5F, K5G) LAYOUT(K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G,      \
-                                                             K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
-                                                             K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
-                                                             K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D,                     \
-                                                             K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F,                     \
-                                                             K50, K51, K52, K55, K58, K5A, KC_NO, K5D, K5E, K5F, K5G)
-
-#endif
+// clang-format off
+#define LAYOUT_tkl_ansi_wkl( \
+    k00,      k02, k03, k04, k05,      k06, k07, k08, k09,      k0A, k0B, k0C, k0D,      k0E, k0F, k0G, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C,           k1D,      k1E, k1F, k1G, \
+    k20,      k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C,      k2D,      k2E, k2F, k2G, \
+    k30,      k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B,           k3D,                     \
+    k40,      k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A,                k4D,           k4F,      \
+    k50,      k52,                     k55,                          k58,      k5D,      k5E, k5F, k5G  \
+) \
+{ \
+    {k00, KC_NO, k02, k03,   k04,   k05, k06,   k07,   k08, k09,   k0A,   k0B,   k0C,   k0D, k0E,   k0F,   k0G},   \
+    {k10, k11,   k12, k13,   k14,   k15, k16,   k17,   k18, k19,   k1A,   k1B,   k1C,   k1D, k1E,   k1F,   k1G},   \
+    {k20, k21,   k22, k23,   k24,   k25, k26,   k27,   k28, k29,   k2A,   k2B,   k2C,   k2D, k2E,   k2F,   k2G},   \
+    {k30, k31,   k32, k33,   k34,   k35, k36,   k37,   k38, k39,   k3A,   k3B,   KC_NO, k3D, KC_NO, KC_NO, KC_NO}, \
+    {k40, k41,   k42, k43,   k44,   k45, k46,   k47,   k48, k49,   k4A,   KC_NO, KC_NO, k4D, KC_NO, k4F,   KC_NO}, \
+    {k50, KC_NO, k52, KC_NO, KC_NO, k55, KC_NO, KC_NO, k58, KC_NO, KC_NO, KC_NO, KC_NO, k5D, k5E,   k5F,   k5G }   \
+}
+// clang-format on
index 00da96604d38c14165065cec36dfe2317c36e8ad..2212ee076b4c003749b006086142b4f93c56af9e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright 2017 Mathias Andersson <wraul@dbox.se>
+Copyright 2017-2019 Mathias Andersson <wraul@dbox.se>
 
 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
@@ -16,118 +16,137 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include <stdint.h>
 #include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
 #include "wait.h"
 #include "print.h"
 #include "debug.h"
 #include "util.h"
 #include "matrix.h"
-#include "timer.h"
-
-
-/* Set 0 if debouncing isn't needed */
-#ifndef DEBOUNCE
-#   define DEBOUNCE 5
+#include "debounce.h"
+#include "quantum.h"
+
+#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
 
-#define COL_SHIFTER ((uint32_t)1)
-
-static uint16_t debouncing_time;
-static bool debouncing = false;
-
-
-static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_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_debouncing[MATRIX_ROWS];
+static matrix_row_t raw_matrix[MATRIX_ROWS];  // raw values
+static matrix_row_t matrix[MATRIX_ROWS];      // debounced values
 
-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 select_col(uint8_t col);
+__attribute__((weak)) void matrix_init_quantum(void) { matrix_init_kb(); }
 
-inline
-uint8_t matrix_rows(void) {
-    return MATRIX_ROWS;
-}
+__attribute__((weak)) void matrix_scan_quantum(void) { matrix_scan_kb(); }
 
-inline
-uint8_t matrix_cols(void) {
-    return MATRIX_COLS;
-}
+__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
 
-void matrix_init(void) {
-    unselect_cols();
-    init_rows();
+__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
 
-    // initialize matrix state: all keys off
-    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
-        matrix[i] = 0;
-        matrix_debouncing[i] = 0;
-    }
+__attribute__((weak)) void matrix_init_user(void) {}
 
-    matrix_init_quantum();
-}
+__attribute__((weak)) void matrix_scan_user(void) {}
 
-uint8_t matrix_scan(void)
-{
-    // Set col, read rows
-    for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-        bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col);
-        if (matrix_changed) {
-            debouncing = true;
-            debouncing_time = timer_read();
-        }
-    }
-
-    if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCE)) {
-        for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-            matrix[i] = matrix_debouncing[i];
-        }
-        debouncing = false;
-    }
+inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
 
-    matrix_scan_quantum();
-    return 1;
-}
+inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
 
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
-    return (matrix[row] & ((matrix_row_t)1<<col));
-}
+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];
-}
+inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
 
-void matrix_print(void)
-{
-    print("\nr/c 0123456789ABCDEFGHIJKLMNOPQRSTUV\n");
+void matrix_print(void) {
+    print_matrix_header();
 
     for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        phex(row); print(": ");
-        print_bin_reverse32(matrix_get_row(row));
+        phex(row);
+        print(": ");
+        print_matrix_row(row);
         print("\n");
     }
 }
 
-uint8_t matrix_key_count(void)
-{
+uint8_t matrix_key_count(void) {
     uint8_t count = 0;
     for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-        count += bitpop32(matrix[i]);
+        count += matrix_bitpop(i);
     }
     return count;
 }
 
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
+/* Columns 0 - 15
+ * These columns uses two 74HC237D 3 to 8 bit demultiplexers.
+ * col / pin:    PB6  PC6  PC7  PF1  PF0
+ * 0:             0    1    0    0    0
+ * 1:             0    1    0    0    1
+ * 2:             0    1    0    1    0
+ * 3:             0    1    0    1    1
+ * 4:             0    1    1    0    0
+ * 5:             0    1    1    0    1
+ * 6:             0    1    1    1    0
+ * 7:             0    1    1    1    1
+ * 8:             1    0    0    0    0
+ * 9:             1    0    0    0    1
+ * 10:            1    0    0    1    0
+ * 11:            1    0    0    1    1
+ * 12:            1    0    1    0    0
+ * 13:            1    0    1    0    1
+ * 14:            1    0    1    1    0
+ * 15:            1    0    1    1    1
+ *
+ * col: 16
+ * pin: PB5
+ */
+static void unselect_cols(void) {
+    for (uint8_t x = 0; x < 6; x++) {
+        setPinOutput(col_pins[x]);
+        writePinLow(col_pins[x]);
+    }
+}
+
+static void select_col(uint8_t col) {
+    if (col < 16) {
+        uint8_t c = col + 8;
+
+        writePin(B6, c & 0b10000);
+        writePin(C6, c & 0b01000);
+        writePin(C7, c & 0b00100);
+        writePin(F1, c & 0b00010);
+        writePin(F0, c & 0b00001);
+    } else {
+        writePinHigh(B5);
+    }
+}
+
+/* Row pin configuration
+ * row: 0   1   2   3   4   5
+ * pin: D0  D1  D2  D3  D5  B7
+ *
+ * Caps lock uses its own pin E2
+ */
+static void init_pins(void) {
+    unselect_cols();
+    for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+        setPinInput(row_pins[x]);
+    }
+
+    setPinInputHigh(E2);
+}
+
+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
@@ -135,42 +154,32 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
     wait_us(30);
 
     // For each row...
-    for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++)
-    {
+    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
         // Use the otherwise unused row: 3, col: 0 for caps lock
         if (row_index == 3 && current_col == 0) {
-            // Pin E2 uses active low
-            if ((_SFR_IO8(E2 >> 4) & _BV(E2 & 0xF)) == 0)
-            {
+            if (readPin(E2) == 0) {
                 // Pin LO, set col bit
-                current_matrix[row_index] |= (COL_SHIFTER << current_col);
-            }
-            else
-            {
+                current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+            } else {
                 // Pin HI, clear col bit
-                current_matrix[row_index] &= ~(COL_SHIFTER << current_col);
+                current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
             }
-        }
-        else {
-            if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)))
-            {
-                // Pin HI, set col bit
-                current_matrix[row_index] |= (COL_SHIFTER << current_col);
-            }
-            else
-            {
-                // Pin LO, clear col bit
-                current_matrix[row_index] &= ~(COL_SHIFTER << current_col);
+        } else {
+            if (readPin(row_pins[row_index]) == 0) {
+                // Pin HI, clear col bit
+                current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+            } else {
+                // Pin LO, set 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))
-        {
+        if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) {
             matrix_changed = true;
         }
     }
@@ -181,131 +190,31 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
     return matrix_changed;
 }
 
-/* Row pin configuration
- * row: 0   1   2   3   4   5
- * pin: D0  D1  D2  D3  D5  B7
- *
- * Caps lock uses its own pin E2
- */
-static void init_rows(void)
-{
-    DDRD  &= ~((1<<0)| (1<<1) | (1<<2) | (1<<3) | (1<<5)); // IN
-    PORTD &= ~((1<<0)| (1<<1) | (1<<2) | (1<<3) | (1<<5)); // LO
-    DDRB  &= ~(1<<7); // IN
-    PORTB &= ~(1<<7); // LO
-
-    DDRE &= ~(1<<2); // IN
-    PORTE |= (1<<2); // HI
-}
+void matrix_init(void) {
+    // initialize key pins
+    init_pins();
 
-/* Columns 0 - 15
- * These columns uses two 74HC237D 3 to 8 bit demultiplexers.
- * col / pin:    PC6  PB6  PF0  PF1  PC7
- * 0:             1    0    0    0    0
- * 1:             1    0    1    0    0
- * 2:             1    0    0    1    0
- * 3:             1    0    1    1    0
- * 4:             1    0    0    0    1
- * 5:             1    0    1    0    1
- * 6:             1    0    0    1    1
- * 7:             1    0    1    1    1
- * 8:             0    1    0    0    0
- * 9:             0    1    1    0    0
- * 10:            0    1    0    1    0
- * 11:            0    1    1    1    0
- * 12:            0    1    0    0    1
- * 13:            0    1    1    0    1
- * 14:            0    1    0    1    1
- * 15:            0    1    1    1    1
- *
- * col: 16
- * pin: PB5
- */
-static void unselect_cols(void)
-{
-    DDRB  |= (1<<5) | (1<<6); // OUT
-    PORTB &= ~((1<<5) | (1<<6)); // LO
+    // initialize matrix state: all keys off
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        raw_matrix[i] = 0;
+        matrix[i]     = 0;
+    }
 
-    DDRC  |= (1<<6) | (1<<7); // OUT
-    PORTC &= ~((1<<6) | (1<<7)); // LO
+    debounce_init(MATRIX_ROWS);
 
-    DDRF  |= (1<<0) | (1<<1); // OUT
-    PORTF &= ~((1<<0) | (1<<1)); // LO
+    matrix_init_quantum();
 }
 
-static void select_col(uint8_t col)
-{
-    switch (col) {
-        case 0:
-            PORTC |= (1<<6); // HI
-            break;
-        case 1:
-            PORTC |= (1<<6); // HI
-            PORTF |= (1<<0); // HI
-            break;
-        case 2:
-            PORTC |= (1<<6); // HI
-            PORTF |= (1<<1); // HI
-            break;
-        case 3:
-            PORTC |= (1<<6); // HI
-            PORTF |= (1<<0) | (1<<1); // HI
-            break;
-        case 4:
-            PORTC |= (1<<6); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 5:
-            PORTC |= (1<<6); // HI
-            PORTF |= (1<<0); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 6:
-            PORTC |= (1<<6); // HI
-            PORTF |= (1<<1); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 7:
-            PORTC |= (1<<6); // HI
-            PORTF |= (1<<0) | (1<<1); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 8:
-            PORTB |= (1<<6); // HI
-            break;
-        case 9:
-            PORTB |= (1<<6); // HI
-            PORTF |= (1<<0); // HI
-            break;
-        case 10:
-            PORTB |= (1<<6); // HI
-            PORTF |= (1<<1); // HI
-            break;
-        case 11:
-            PORTB |= (1<<6); // HI
-            PORTF |= (1<<0) | (1<<1); // HI
-            break;
-        case 12:
-            PORTB |= (1<<6); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 13:
-            PORTB |= (1<<6); // HI
-            PORTF |= (1<<0); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 14:
-            PORTB |= (1<<6); // HI
-            PORTF |= (1<<1); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 15:
-            PORTB |= (1<<6); // HI
-            PORTF |= (1<<0) | (1<<1); // HI
-            PORTC |= (1<<7); // HI
-            break;
-        case 16:
-            PORTB |= (1<<5); // HI
-            break;
+uint8_t matrix_scan(void) {
+    bool changed = false;
+
+    for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+        changed |= read_rows_on_col(raw_matrix, current_col);
     }
+
+    debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+    matrix_scan_quantum();
+
+    return (uint8_t)changed;
 }
index cd181a5f68a348d01fe706e110885afd03579866..47dbaa847f61ad7ed5a0f16d130796b5dba08ec6 100644 (file)
@@ -1,44 +1,21 @@
-# KMAC keyboard firmware
+# KMAC
 
 A Korean custom keyboard designed by Byungho Kim and the KBDMania community.
 
-## Supported models
+Keyboard Maintainer: [Mathias Andersson](https://github.com/wraul)  
+Hardware Supported: KMAC & KMAC 2  
+Hardware Availability: http://www.kbdmania.net/xe/news/5232321
 
-All the tenkeyless models should be supported.
+Make example for this keyboard (after setting up your build environment):
 
-## Bootloader
-
-The PCB is hardwired to run the bootloader if the key at the `Caps Lock` position is held down when connecting the keyboard.
+    make kmac:default
 
-It is also possible to use Boot Magic and Command to access the bootloader.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
 
-## Quantum MK Firmware
+## Bootloader
 
-For the full Quantum feature list, see the [documentation](https://docs.qmk.fm).
+The PCB is hardwired to run the bootloader if the key at the `Caps Lock` position is held down when connecting the keyboard.
 
-## Building
+## PCB versions
 
 The KMAC are available with two different PCB layouts, a winkey version and a winkeyless version. A default keymap are provided for each versions of the PCB.
-
-Depending on which PCB and keymap you would like to use, you will have to compile the firmware slightly differently. All of the commands should be run in the [qmk root](https://github.com/qmk/qmk_firmware/) folder.
-
-### Winkey keymap
-
-The [default keymap](keymaps/default) are designed for the winkey version of the PCB.
-
-### Winkeyless Keymap
-
-A [keymap](keymaps/winkeyless) for the winkeyless version of the PCB are also provided.
-
-### Custom keymaps
-
-To define your own keymap, copy one of the [existing keymap](keymaps) folders and give it the name of your keymap. Then check the [keymap documentation](https://docs.qmk.fm/faq_keymap.html) for details on how to modify the keymap.
-
-To make it easy to define keymaps for the different versions of the PCB two macros are provided.
-
-| PCB            | Macro          |
-| -------------- | -------------- |
-| Winkey PCB     | `LAYOUT()`     |
-| Winkeyless PCB | `LAYOUT_WKL()` |
-
-To build the firmware with a custom keymap, run `make <keymap name>`
index 41b16979d69c72570afdb586c5c5435e85e9a4b4..dbcf540bdac9709f84590f0394311612dfe7cdb0 100644 (file)
@@ -1,5 +1,5 @@
 # Project specific files
-SRC = matrix.c
+SRC += matrix.c
 
 # MCU name
 #MCU = at90usb1287
@@ -42,15 +42,19 @@ F_USB = $(F_CPU)
 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
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
 
 
+# Supported layouts
+LAYOUTS = tkl_ansi
+
 # Build Options
 #   change yes to no to disable
 #
index 4ee767cdd13128dbfb4cf2609fa4ffbd60ee92a2..b7a469208dd76ba371e7a6faac3a8af4d32948c9 100644 (file)
@@ -5,6 +5,8 @@
 #define PERMISSIVE_HOLD
 #define TAPPING_TERM 150
 
+#define TAP_HOLD_CAPS_DELAY 0
+
 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
 
 // #define DISABLE_RGB_MATRIX_SOLID_COLOR
index 112be66d6cc2122c3a19544112e1888bc6890f38..11b4d70cab7367f02bbaeb470b01bbda482e8532 100644 (file)
@@ -206,7 +206,7 @@ void rgb_matrix_indicators_user(void)
                        rgb_matrix_set_color(71, 0x00, 0xFF, 0x01); //MAS_GRN
                        rgb_matrix_set_color(72, 0xFF, 0xA5, 0x18); //MAS_CRM
                        rgb_matrix_set_color(60, 0x81, 0x3C, 0xFF); //MAS_PRP
-                       rgb_matrix_set_color(26, 0xFF, 0xFF, 0xFF); //MAS_WHT
+                       rgb_matrix_set_color(43, 0xFF, 0xFF, 0xFF); //MAS_WHT
                }
                break;
                }
diff --git a/keyboards/maxr1998/pulse4k/config.h b/keyboards/maxr1998/pulse4k/config.h
new file mode 100644 (file)
index 0000000..cb4eab6
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+Copyright (C) 2012-2019  Jun Wako <wakojun@gmail.com>, Maxr1998 <max.rumpf1998@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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Maxr1998
+#define PRODUCT         Pulse 4k
+#define DESCRIPTION     A four-key macropad
+
+/* Key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 3
+
+/* Matrix pins */
+#define MATRIX_ROW_PINS { B4, E6 }
+#define MATRIX_COL_PINS { B7, B3, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Rotary encoders */
+#define NUMBER_OF_ENCODERS 2
+#define ENCODERS_PAD_A { D2, F6 }
+#define ENCODERS_PAD_B { D3, F5 }
+#define ENCODER_RESOLUTION 4
+
+/* Combo setup */
+#define COMBO_COUNT 1
+#define COMBO_TERM 150
+
+/* RGB LED Setup */
+#define RGB_DI_PIN          F7 // pin the DI on the WS2812B is hooked-up to
+#define RGBLIGHT_ANIMATIONS    // run RGB animations
+#define RGBLED_NUM          2  // number of LEDs
+
+/*
+ * 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
diff --git a/keyboards/maxr1998/pulse4k/info.json b/keyboards/maxr1998/pulse4k/info.json
new file mode 100644 (file)
index 0000000..0ac4f06
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "keyboard_name": "Pulse 4k",
+  "keyboard_folder": "maxr1998/pulse4k",
+  "url": "https://github.com/Maxr1998/Pulse_4k",
+  "maintainer": "Maxr1998",
+  "width": 3,
+  "height": 2,
+  "layouts": {
+    "LAYOUT_pulse4k": {
+      "key_count": 6,
+      "layout": [ 
+        { "w": 1, "x": 0, "y": 0 }, 
+        { "w": 1, "x": 1, "y": 0 }, 
+        { "w": 1, "x": 2, "y": 0 }, 
+        { "w": 1, "x": 0, "y": 1 }, 
+        { "w": 1, "x": 1, "y": 1 }, 
+        { "w": 1, "x": 2, "y": 1 } ]
+    }
+  }
+}
diff --git a/keyboards/maxr1998/pulse4k/keymaps/default/keymap.c b/keyboards/maxr1998/pulse4k/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..873c87d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (C) 2019  Maxr1998 <max.rumpf1998@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 QMK_KEYBOARD_H
+
+enum layers {
+  DEFAULT
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [DEFAULT] = {
+        { KC_END,  KC_UP,   KC_MUTE },
+        { KC_LEFT, KC_DOWN, KC_RGHT }
+    }
+};
+
+void matrix_init_user(void) {
+}
+
+void encoder_one_update(bool clockwise) {
+    if (clockwise) {
+        tap_code(KC_PGDN);
+    } else {
+        tap_code(KC_PGUP);
+    }
+}
+
+void encoder_two_update(bool clockwise) {
+    if (clockwise) {
+        tap_code(KC_VOLU);
+    } else {
+        tap_code(KC_VOLD);
+    }
+}
diff --git a/keyboards/maxr1998/pulse4k/keymaps/default/rules.mk b/keyboards/maxr1998/pulse4k/keymaps/default/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/maxr1998/pulse4k/pulse4k.c b/keyboards/maxr1998/pulse4k/pulse4k.c
new file mode 100644 (file)
index 0000000..ee3d41c
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+Copyright (C) 2019  Maxr1998 <max.rumpf1998@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 "pulse4k.h"
+#include "rgblight.h"
+
+enum combo_events {
+    LED_ADJUST
+};
+
+const uint16_t PROGMEM led_adjust_combo[] = {KC_LEFT, KC_RGHT, COMBO_END};
+
+combo_t key_combos[COMBO_COUNT] = {
+    [LED_ADJUST] = COMBO_ACTION(led_adjust_combo)
+};
+
+bool led_adjust_active = false;
+
+void matrix_init_kb(void) {
+    matrix_init_user();
+}
+
+void process_combo_event(uint8_t combo_index, bool pressed) {
+    if (combo_index == LED_ADJUST) {
+        led_adjust_active = pressed;
+    }
+}
+
+void encoder_update_kb(uint8_t index, bool clockwise) {
+    if (index == 0) {
+        if (led_adjust_active) {
+            if (clockwise) {
+                rgblight_increase_val();
+            } else {
+                rgblight_decrease_val();
+            }
+        } else encoder_one_update(clockwise);
+    } else if (index == 1) {
+        if (led_adjust_active) {
+            if (clockwise) {
+                rgblight_increase_hue();
+            } else {
+                rgblight_decrease_hue();
+            }
+        } else encoder_two_update(clockwise);
+    }
+}
diff --git a/keyboards/maxr1998/pulse4k/pulse4k.h b/keyboards/maxr1998/pulse4k/pulse4k.h
new file mode 100644 (file)
index 0000000..7c34870
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (C) 2019  Maxr1998 <max.rumpf1998@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/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+      k00, k01, k02, \
+      k10, k11, k12 \
+) \
+{ \
+    { k00, k01, k02 }, \
+    { k10, k11, k12 }, \
+}
+
+void encoder_one_update(bool clockwise);
+
+void encoder_two_update(bool clockwise);
diff --git a/keyboards/maxr1998/pulse4k/readme.md b/keyboards/maxr1998/pulse4k/readme.md
new file mode 100644 (file)
index 0000000..3a55218
--- /dev/null
@@ -0,0 +1,11 @@
+# Pulse 4k
+A four-key macropad with two rotary encoders, developed by Maxr1998, [fully open-source](https://github.com/Maxr1998/Pulse_4k).
+
+Keyboard Maintainer: [Maxr1998](https://github.com/Maxr1998)  
+Hardware Availability: DIY from the [open-source design files](https://github.com/Maxr1998/Pulse_4k), potential official distribution in the future
+
+Make example for this keyboard (after setting up your build environment):
+
+    make maxr1998/pulse4k:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/maxr1998/pulse4k/rules.mk b/keyboards/maxr1998/pulse4k/rules.mk
new file mode 100644 (file)
index 0000000..6446662
--- /dev/null
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader
+#     This definition is optional, and if your keyboard supports multiple bootloaders of
+#     different sizes, comment this out, and the correct address will be loaded
+#     automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = atmel-dfu
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# 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 = lite    # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+ENCODER_ENABLE = yes       # Rotary encoders
+EXTRAKEY_ENABLE = yes      # Audio control and System control(+450)
+CONSOLE_ENABLE = yes       # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+COMBO_ENABLE = yes         # Key combo feature
+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.
+API_SYSEX_ENABLE = no
+SLEEP_LED_ENABLE = no      # Breathing sleep LED during USB suspend
+
index d4e9de03698b9a9e696da511023191603acd835b..a7e06c6043e0b7a88895916c826e88f761624f87 100644 (file)
@@ -101,10 +101,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 */
 
 [_NAV] = LAYOUT_ortho(
-  ALTF4,    KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
+  _______,  KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
   _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_END,   XXXXXXX,  XXXXXXX,  GUIL,     GUID,     GUIR,     EMOJI,   KC_ENT,
   _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  RGB_TOG,  RGB_MOD,  RGB_HUI,  CU_RGBV,  _______,
-  RESET,    CU_ESCT,  _______,  _______,  _______,  KC_SPC,   CTLENT,   RGB_M_P,  _______,  _______,  _______,  CU_GAME
+  RESET,    CU_ESCT,  ALTF4,    _______,  _______,  KC_SPC,   CTLENT,   RGB_M_P,  _______,  _______,  _______,  CU_GAME
 )
 
 };
index 1c70a3791a59d3257a0a8c310c1c446652a9cf0f..0e82b628b4d284f78bc793db2485cae176c5be38 100644 (file)
 //#define NO_ACTION_FUNCTION
 
 #ifdef AUDIO_ENABLE
-#define STARTUP_SONG SONG(MARIO_MUSHROOM)
-#define DEFAULT_LAYER_SONGS {                   \
-    SONG(QWERTY_SOUND),                         \
-    SONG(COLEMAK_SOUND),                        \
-    SONG(DVORAK_SOUND),                         \
-    SONG(ZELDA_TREASURE),                       \
-  }
+#define STARTUP_SONG SONG(STARTUP_SOUND)
+#define DEFAULT_LAYER_SONGS { \
+        SONG(QWERTY_SOUND),   \
+        SONG(COLEMAK_SOUND),  \
+        SONG(DVORAK_SOUND),   \
+        SONG(WORKMAN_SOUND),  \
+        }
 #define AUDIO_VOICES
 #define AUDIO_CLICKY
 #define C6_AUDIO
index c893c9782a6a40cda0846b940ffa5eccc2f88bc2..41f52615a74b620a84e1dd6d15e7cafd2905c3b1 100755 (executable)
@@ -1,7 +1,7 @@
 NK65
 =========
 
-[NK65]()
+![NK65](https://i.imgur.com/EXNbVpL.jpg)
 
 This is a standard fixed layout 65% PCB. It supports VIA and full per-key RGB.
 
diff --git a/keyboards/omnikeyish/config.h b/keyboards/omnikeyish/config.h
new file mode 100644 (file)
index 0000000..d510c64
--- /dev/null
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "config_common.h"
+
+#define KEYBOARD_PCB_REV 11
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0666
+#define DEVICE_VER      0x1337
+#define MANUFACTURER    Henrik O. Sørensen
+#define PRODUCT         Omnikey(-ish) Keyboard
+#define DESCRIPTION     Replacement PCB for Omnikey keyboards
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 23
+
+/* key matrix pins */
+#if KEYBOARD_PCB_REV == 10
+#define MATRIX_ROW_PINS { D2, D3, D4, D5, D6, D7 }
+#else
+#define MATRIX_ROW_PINS { D2, D3, D4, D5, E6, D7 }
+#endif 
+#define MATRIX_COL_PINS { F0, F1, F2, F3, F4, F5, F6, F7, C7, C6, C5, C4, C3, C2, C1, C0, B0, B1, B2, B3, B4, B5, B6 }
+
+#define NUMLOCKLEDPIN E0
+#define CAPSLOCKLEDPIN E1
+#define SCROLLLOCKLEDPIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* number of backlight levels */
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* 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
+
+/* force n-key rollover*/
+#define FORCE_NKRO
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#define DYNAMIC_MACRO_COUNT 12
+#define DYNAMIC_MACRO_SIZE 48
+#define DYNAMIC_MACRO_EEPROM_STORAGE
+#define DYNAMIC_MACRO_EEPROM_MAGIC_ADDR (uint16_t*)32
+#define DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR (uint8_t*)34
diff --git a/keyboards/omnikeyish/dynamic_macro.c b/keyboards/omnikeyish/dynamic_macro.c
new file mode 100644 (file)
index 0000000..c359b0b
--- /dev/null
@@ -0,0 +1,252 @@
+#include QMK_KEYBOARD_H
+#include <string.h>
+
+void dynamic_macro_init(void) {
+  /* zero out macro blocks  */
+  memset(&dynamic_macros, 0, DYNAMIC_MACRO_COUNT * sizeof(dynamic_macro_t));
+}
+
+/* Blink the LEDs to notify the user about some event. */
+void dynamic_macro_led_blink(void) {
+#ifdef BACKLIGHT_ENABLE
+  backlight_toggle();
+  wait_ms(100);
+  backlight_toggle();
+#else
+  led_set(host_keyboard_leds() ^ 0xFF);
+  wait_ms(100);
+  led_set(host_keyboard_leds());
+#endif
+}
+
+/**
+ * Start recording of the dynamic macro.
+ *
+ * @param macro_id[in]     The id of macro to be recorded
+ */
+void dynamic_macro_record_start(uint8_t macro_id) {
+  dprintf("dynamic macro recording: started for slot %d\n", macro_id);
+
+  dynamic_macro_led_blink();
+
+  clear_keyboard();
+  layer_clear();
+
+  dynamic_macros[macro_id].length = 0;
+}
+
+/**
+ * Play the dynamic macro.
+ *
+ * @param macro_id[in]     The id of macro to be played
+ */
+void dynamic_macro_play(uint8_t macro_id) {
+  dprintf("dynamic macro: slot %d playback, length %d\n", macro_id, dynamic_macros[macro_id].length);
+
+  uint32_t saved_layer_state = layer_state;
+
+  clear_keyboard();
+  layer_clear();
+
+  for (uint8_t i = 0; i < dynamic_macros[macro_id].length; ++i) {
+    process_record(&dynamic_macros[macro_id].events[i]);
+  }
+
+  clear_keyboard();
+
+  layer_state = saved_layer_state;
+}
+
+/**
+ * Record a single key in a dynamic macro.
+ *
+ * @param macro_id[in] The start of the used macro buffer.
+ * @param record[in]     The current keypress.
+ */
+void dynamic_macro_record_key(uint8_t macro_id, keyrecord_t* record) {
+  dynamic_macro_t* macro  = &dynamic_macros[macro_id];
+  uint8_t          length = macro->length;
+
+  /* If we've just started recording, ignore all the key releases. */
+  if (!record->event.pressed && length == 0) {
+    dprintln("dynamic macro: ignoring a leading key-up event");
+    return;
+  }
+
+  if (length < DYNAMIC_MACRO_SIZE) {
+    macro->events[length] = *record;
+    macro->length         = ++length;
+  } else {
+    dynamic_macro_led_blink();
+  }
+
+  dprintf("dynamic macro: slot %d length: %d/%d\n", macro_id, length, DYNAMIC_MACRO_SIZE);
+}
+
+/**
+ * End recording of the dynamic macro. Essentially just update the
+ * pointer to the end of the macro.
+ */
+void dynamic_macro_record_end(uint8_t macro_id) {
+  dynamic_macro_led_blink();
+
+  dynamic_macro_t* macro  = &dynamic_macros[macro_id];
+  uint8_t          length = macro->length;
+
+  keyrecord_t* events_begin   = &(macro->events[0]);
+  keyrecord_t* events_pointer = &(macro->events[length - 1]);
+
+  dprintf("dynamic_macro: macro length before trimming: %d\n", macro->length);
+  while (events_pointer != events_begin && (events_pointer)->event.pressed) {
+    dprintln("dynamic macro: trimming a trailing key-down event");
+    --(macro->length);
+    --events_pointer;
+  }
+
+#ifdef DYNAMIC_MACRO_EEPROM_STORAGE
+  macro->checksum = dynamic_macro_calc_crc(macro);
+  dynamic_macro_save_eeprom(macro_id);
+#endif
+
+  dprintf("dynamic macro: slot %d saved, length: %d\n", macro_id, length);
+}
+
+/* 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) {
+  /* 0 to DYNAMIC_MACRO_COUNT -1 - macro macro_id is being recorded */
+  static uint8_t macro_id        = 255;
+  static uint8_t recording_state = STATE_NOT_RECORDING;
+
+  if (STATE_NOT_RECORDING == recording_state) {
+    /* Program key pressed to request programming mode */
+    if (keycode == DYN_MACRO_PROG && record->event.pressed) {
+      dynamic_macro_led_blink();
+
+      recording_state = STATE_RECORD_KEY_PRESSED;
+      dprintf("dynamic macro: programming key pressed, waiting for macro slot selection. %d\n", recording_state);
+
+      return false;
+    }
+    /* Macro key pressed to request macro playback */
+    if (keycode >= DYN_MACRO_KEY1 && keycode <= DYN_MACRO_KEY12 && record->event.pressed) {
+      dynamic_macro_play(keycode - DYN_MACRO_KEY1);
+
+      return false;
+    }
+
+    /* Non-dynamic macro key, process it elsewhere. */
+    return true;
+  } else if (STATE_RECORD_KEY_PRESSED == recording_state) {
+    /* Program key pressed again before a macro selector key, cancel macro recording.
+       Blink leds to indicate cancelation. */
+    if (keycode == DYN_MACRO_PROG && record->event.pressed) {
+      dynamic_macro_led_blink();
+
+      recording_state = STATE_NOT_RECORDING;
+      dprintf("dynamic macro: programming key pressed, programming mode canceled. %d\n", recording_state);
+
+      return false;
+    } else if (keycode >= DYN_MACRO_KEY1 && keycode <= DYN_MACRO_KEY12 && record->event.pressed) {
+      macro_id = keycode - DYN_MACRO_KEY1;
+
+      /* Macro slot selected, enter recording state. */
+      recording_state = STATE_CURRENTLY_RECORDING;
+      dynamic_macro_record_start(macro_id);
+
+      return false;
+    }
+    /* Ignore any non-macro key press while in RECORD_KEY_PRESSED state. */
+    return false;
+  } else if (STATE_CURRENTLY_RECORDING == recording_state) {
+    /* Program key pressed to request end of macro recording. */
+    if (keycode == DYN_MACRO_PROG && record->event.pressed) {
+      dynamic_macro_record_end(macro_id);
+      recording_state = STATE_NOT_RECORDING;
+
+      return false;
+    }
+    /* Don't record other macro key presses. */
+    else if (keycode >= DYN_MACRO_KEY1 && keycode <= DYN_MACRO_KEY12 && record->event.pressed) {
+      dprintln("dynamic macro: playback key ignored in programming mode.");
+      return false;
+    }
+    /* Non-macro keypress that should be recorded  */
+    else {
+      dynamic_macro_record_key(macro_id, record);
+
+      /* Don't output recorded keypress. */
+      return false;
+    }
+  }
+
+  return true;
+}
+
+#ifdef __AVR__
+#  include <util/crc16.h>
+uint16_t dynamic_macro_calc_crc(dynamic_macro_t* macro) {
+  uint16_t crc  = 0;
+  uint8_t* data = (uint8_t*)macro;
+
+  for (uint16_t i = 0; i < DYNAMIC_MACRO_CRC_LENGTH; ++i) {
+    crc = _crc16_update(crc, *(data++));
+  }
+  return crc;
+}
+#endif /* __AVR__ */
+
+inline void* dynamic_macro_eeprom_macro_addr(uint8_t macro_id) { 
+    return DYNAMIC_MACRO_EEPROM_BLOCK0_ADDR + sizeof(dynamic_macro_t) * macro_id;
+}
+
+bool dynamic_macro_header_correct(void) { 
+    return eeprom_read_word(DYNAMIC_MACRO_EEPROM_MAGIC_ADDR) == DYNAMIC_MACRO_EEPROM_MAGIC;
+}
+
+void dynamic_macro_load_eeprom_all(void) {
+  if (!dynamic_macro_header_correct()) {
+    dprintf("dynamic_macro: eeprom header not valid, not restoring macros.\n");
+    return;
+  }
+
+  for (uint8_t i = 0; i < DYNAMIC_MACRO_COUNT; ++i) {
+    dynamic_macro_load_eeprom(i);
+  }
+}
+
+void dynamic_macro_load_eeprom(uint8_t macro_id) {
+  dynamic_macro_t* dst = &dynamic_macros[macro_id];
+
+  eeprom_read_block(dst, dynamic_macro_eeprom_macro_addr(macro_id), sizeof(dynamic_macro_t));
+
+  /* Validate checksum, ifchecksum is NOT valid for macro, set its length to 0 to prevent its use. */
+  if (dynamic_macro_calc_crc(dst) != dst->checksum) {
+    dprintf("dynamic macro: slot %d not loaded, checksum mismatch\n", macro_id);
+    dst->length = 0;
+
+    return;
+  }
+
+  dprintf("dynamic macro: slot %d loaded from eeprom, checksum okay\n", macro_id);
+}
+
+void dynamic_macro_save_eeprom(uint8_t macro_id) {
+  if (!dynamic_macro_header_correct()) {
+    eeprom_write_word(DYNAMIC_MACRO_EEPROM_MAGIC_ADDR, DYNAMIC_MACRO_EEPROM_MAGIC);
+    dprintf("dynamic macro: writing magic eeprom header\n");
+  }
+
+  dynamic_macro_t* src = &dynamic_macros[macro_id];
+
+  eeprom_update_block(src, dynamic_macro_eeprom_macro_addr(macro_id), sizeof(dynamic_macro_t));
+  dprintf("dynamic macro: slot %d saved to eeprom\n", macro_id);
+}
diff --git a/keyboards/omnikeyish/dynamic_macro.h b/keyboards/omnikeyish/dynamic_macro.h
new file mode 100644 (file)
index 0000000..87665c4
--- /dev/null
@@ -0,0 +1,95 @@
+/* Copyright 2016 Jack Humbert
+ *
+ * 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/>.
+ */
+
+/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */
+#pragma once
+
+#include "action.h"
+#include "action_layer.h"
+
+#ifndef DYNAMIC_MACRO_COUNT
+#define DYNAMIC_MACRO_COUNT 2
+#endif
+
+#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 64
+#endif
+
+#ifndef DYNAMIC_MACRO_EEPROM_STORAGE
+#define DYNAMIC_MACRO_EEPROM_STORAGE
+#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_MACRO_PROG = DYNAMIC_MACRO_RANGE,
+
+  /* Requirement: DYN_MACRO_KEYs are in sequence in the enum. */
+  DYN_MACRO_KEY1,
+  DYN_MACRO_KEY2,
+  DYN_MACRO_KEY3,
+  DYN_MACRO_KEY4,
+  DYN_MACRO_KEY5,
+  DYN_MACRO_KEY6,
+  DYN_MACRO_KEY7,
+  DYN_MACRO_KEY8,
+  DYN_MACRO_KEY9,
+  DYN_MACRO_KEY10,
+  DYN_MACRO_KEY11,
+  DYN_MACRO_KEY12
+};
+
+enum dynamic_macro_recording_state { STATE_NOT_RECORDING, STATE_RECORD_KEY_PRESSED, STATE_CURRENTLY_RECORDING };
+
+typedef struct {
+  keyrecord_t events[DYNAMIC_MACRO_SIZE];
+  uint8_t     length;
+  uint16_t    checksum;
+} dynamic_macro_t;
+
+dynamic_macro_t dynamic_macros[DYNAMIC_MACRO_COUNT];
+
+void     dynamic_macro_init(void);
+void     dynamic_macro_led_blink(void);
+void     dynamic_macro_record_start(uint8_t macro_id);
+void     dynamic_macro_play(uint8_t macro_id);
+void     dynamic_macro_record_key(uint8_t macro_id, keyrecord_t* record);
+void     dynamic_macro_record_end(uint8_t macro_id);
+bool     process_record_dynamic_macro(uint16_t keycode, keyrecord_t* record);
+
+#define DYNAMIC_MACRO_CRC_LENGTH (sizeof(dynamic_macro_t) - sizeof(uint16_t))
+
+#ifdef DYNAMIC_MACRO_EEPROM_STORAGE
+#define DYNAMIC_MACRO_EEPROM_MAGIC (uint16_t)0xDEAD
+
+uint16_t dynamic_macro_calc_crc(dynamic_macro_t* macro);
+void dynamic_macro_load_eeprom_all(void);
+void dynamic_macro_load_eeprom(uint8_t macro_id);
+void dynamic_macro_save_eeprom(uint8_t macro_id);
+bool dynamic_macro_header_correct(void);
+#endif
+
diff --git a/keyboards/omnikeyish/info.json b/keyboards/omnikeyish/info.json
new file mode 100644 (file)
index 0000000..0efb127
--- /dev/null
@@ -0,0 +1,36 @@
+{
+    "keyboard_name": "Omnikey-(ish)", 
+    "url": "https://github.com/henrikosorensen/keyboard_pcbs/tree/master/omnikeyish_pcb", 
+    "maintainer": "qmk", 
+    "width": 25.6667, 
+    "height": 7, 
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"x":21.6667, "y":0}, {"x":22.6667, "y":0}, {"x":23.6667, "y":0}, {"x":24.6667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"|", "x":16.1667, "y":3, "w":1.5}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"~", "x":15.4167, "y":4}, {"label":"Enter", "x":16.4167, "y":4, "w":1.25}, {"x":18.1667, "y":4}, {"x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":1.25}, {"label":"|", "x":3.9167, "y":5}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"x":18.1667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.25}, {"label":"Win", "x":3.9167, "y":6, "w":1.25}, {"label":"Alt", "x":5.1667, "y":6, "w":1.25}, {"x":6.4167, "y":6, "w":6.25}, {"label":"Alt Gr", "x":12.6667, "y":6, "w":1.25}, {"label":"Win", "x":13.9167, "y":6, "w":1.25}, {"label":"Compose", "x":15.1667, "y":6, "w":1.25}, {"label":"Ctrl", "x":16.4167, "y":6, "w":1.25}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_101": {
+            "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "x":21.5, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "x":21.5, "y":2.5, "h":2}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.5}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.5}, {"x":4, "y":5.5, "w":7}, {"label":"Alt", "x":11, "y":5.5, "w":1.5}, {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5, "w":2}, {"label":".", "x":20.5, "y":5.5}]
+        },
+        "LAYOUT_ultra_rev1": {
+            "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"F1", "x":2.6667, "y":0}, {"label":"F2", "x":3.6667, "y":0}, {"label":"F3", "x":4.6667, "y":0}, {"label":"F4", "x":5.6667, "y":0}, {"label":"F5", "x":8.1667, "y":0}, {"label":"F6", "x":9.1667, "y":0}, {"label":"F7", "x":10.1667, "y":0}, {"label":"F8", "x":11.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.6667, "y":0}, {"label":"Scroll Lock", "x":19.6667, "y":0}, {"label":"Pause", "x":20.6667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_ultra_rev3": {
+            "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_plus_rev3": {
+            "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_plus_rev1": {
+            "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"x":18.1667, "y":4}, {"label":"\u2191", "x":19.1667, "y":4}, {"x":20.1667, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2190", "x":18.1667, "y":5}, {"label":"\u2193", "x":19.1667, "y":5}, {"label":"\u2192", "x":20.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"Insert", "x":18.1667, "y":6, "w":1.5}, {"label":"Delete", "x":19.6667, "y":6, "w":1.5}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_102_rev1": {
+            "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"Esc", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"~", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_102_rev3": {
+            "layout": [{"label":"F11", "x":0, "y":0}, {"label":"F12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"F1", "x":0, "y":2}, {"label":"F2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"F3", "x":0, "y":3}, {"label":"F4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"F5", "x":0, "y":4}, {"label":"F6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"F7", "x":0, "y":5}, {"label":"F8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"F9", "x":0, "y":6}, {"label":"F10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"*", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        },
+        "LAYOUT_ultra_t": {
+            "layout": [{"label":"P11", "x":0, "y":0}, {"label":"P12", "x":1, "y":0}, {"label":"Esc", "x":2.6667, "y":0}, {"label":"F1", "x":4.6667, "y":0}, {"label":"F2", "x":5.6667, "y":0}, {"label":"F3", "x":6.6667, "y":0}, {"label":"F4", "x":7.6667, "y":0}, {"label":"F5", "x":9.1667, "y":0}, {"label":"F6", "x":10.1667, "y":0}, {"label":"F7", "x":11.1667, "y":0}, {"label":"F8", "x":12.1667, "y":0}, {"label":"F9", "x":13.6667, "y":0}, {"label":"F10", "x":14.6667, "y":0}, {"label":"F11", "x":15.6667, "y":0}, {"label":"F12", "x":16.6667, "y":0}, {"label":"PrtSc", "x":18.1667, "y":0}, {"label":"Scroll Lock", "x":19.1667, "y":0}, {"label":"Pause", "x":20.1667, "y":0}, {"label":"P1", "x":0, "y":2}, {"label":"P2", "x":1, "y":2}, {"label":"~", "x":2.6667, "y":2}, {"label":"!", "x":3.6667, "y":2}, {"label":"@", "x":4.6667, "y":2}, {"label":"#", "x":5.6667, "y":2}, {"label":"$", "x":6.6667, "y":2}, {"label":"%", "x":7.6667, "y":2}, {"label":"^", "x":8.6667, "y":2}, {"label":"&", "x":9.6667, "y":2}, {"label":"*", "x":10.6667, "y":2}, {"label":"(", "x":11.6667, "y":2}, {"label":")", "x":12.6667, "y":2}, {"label":"_", "x":13.6667, "y":2}, {"label":"+", "x":14.6667, "y":2}, {"label":"Back Space", "x":15.6667, "y":2, "w":2}, {"label":"Insert", "x":18.1667, "y":2}, {"label":"Home", "x":19.1667, "y":2}, {"label":"PgUp", "x":20.1667, "y":2}, {"label":"Num Lock", "x":21.6667, "y":2}, {"label":"/", "x":22.6667, "y":2}, {"label":"*", "x":23.6667, "y":2}, {"label":"-", "x":24.6667, "y":2}, {"label":"P3", "x":0, "y":3}, {"label":"P4", "x":1, "y":3}, {"label":"Tab", "x":2.6667, "y":3, "w":1.5}, {"label":"Q", "x":4.1667, "y":3}, {"label":"W", "x":5.1667, "y":3}, {"label":"E", "x":6.1667, "y":3}, {"label":"R", "x":7.1667, "y":3}, {"label":"T", "x":8.1667, "y":3}, {"label":"Y", "x":9.1667, "y":3}, {"label":"U", "x":10.1667, "y":3}, {"label":"I", "x":11.1667, "y":3}, {"label":"O", "x":12.1667, "y":3}, {"label":"P", "x":13.1667, "y":3}, {"label":"{", "x":14.1667, "y":3}, {"label":"}", "x":15.1667, "y":3}, {"label":"Enter", "x":16.1667, "y":3, "w":1.5, "h":2}, {"label":"Delete", "x":18.1667, "y":3}, {"label":"End", "x":19.1667, "y":3}, {"label":"PgDn", "x":20.1667, "y":3}, {"label":"7", "x":21.6667, "y":3}, {"label":"8", "x":22.6667, "y":3}, {"label":"9", "x":23.6667, "y":3}, {"label":"+", "x":24.6667, "y":3}, {"label":"P5", "x":0, "y":4}, {"label":"P6", "x":1, "y":4}, {"label":"Caps Lock", "x":2.6667, "y":4, "w":1.75}, {"label":"A", "x":4.4167, "y":4}, {"label":"S", "x":5.4167, "y":4}, {"label":"D", "x":6.4167, "y":4}, {"label":"F", "x":7.4167, "y":4}, {"label":"G", "x":8.4167, "y":4}, {"label":"H", "x":9.4167, "y":4}, {"label":"J", "x":10.4167, "y":4}, {"label":"K", "x":11.4167, "y":4}, {"label":"L", "x":12.4167, "y":4}, {"label":":", "x":13.4167, "y":4}, {"label":"\"", "x":14.4167, "y":4}, {"label":"4", "x":21.6667, "y":4}, {"label":"5", "x":22.6667, "y":4}, {"label":"6", "x":23.6667, "y":4}, {"label":"=", "x":24.6667, "y":4}, {"label":"P7", "x":0, "y":5}, {"label":"P8", "x":1, "y":5}, {"label":"Shift", "x":2.6667, "y":5, "w":2.25}, {"label":"Z", "x":4.9167, "y":5}, {"label":"X", "x":5.9167, "y":5}, {"label":"C", "x":6.9167, "y":5}, {"label":"V", "x":7.9167, "y":5}, {"label":"B", "x":8.9167, "y":5}, {"label":"N", "x":9.9167, "y":5}, {"label":"M", "x":10.9167, "y":5}, {"label":"<", "x":11.9167, "y":5}, {"label":">", "x":12.9167, "y":5}, {"label":"?", "x":13.9167, "y":5}, {"label":"Shift", "x":14.9167, "y":5, "w":1.75}, {"label":"|", "x":16.6667, "y":5}, {"label":"\u2191", "x":19.1667, "y":5}, {"label":"1", "x":21.6667, "y":5}, {"label":"2", "x":22.6667, "y":5}, {"label":"3", "x":23.6667, "y":5}, {"label":"Enter", "x":24.6667, "y":5, "h":2}, {"label":"P9", "x":0, "y":6}, {"label":"P10", "x":1, "y":6}, {"label":"Ctrl", "x":2.6667, "y":6, "w":1.5}, {"label":"Win", "x":4.1667, "y":6}, {"label":"Alt", "x":5.1667, "y":6, "w":1.5}, {"x":6.6667, "y":6, "w":7}, {"label":"Alt Gr", "x":13.6667, "y":6, "w":1.5}, {"label":"Compose", "x":15.1667, "y":6}, {"label":"Ctrl", "x":16.1667, "y":6, "w":1.5}, {"label":"\u2190", "x":18.1667, "y":6}, {"label":"\u2193", "x":19.1667, "y":6}, {"label":"\u2192", "x":20.1667, "y":6}, {"label":"0", "x":21.6667, "y":6, "w":2}, {"label":".", "x":23.6667, "y":6}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/omnikeyish/keymaps/default/keymap.c b/keyboards/omnikeyish/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..fd434b5
--- /dev/null
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+#define M_PROG DYN_MACRO_PROG
+
+/*    COL1             COL2                  COL3     COL4     COL5     COL6     COL7     COL8     COL9     COL10    COL11    COL12    COL13    COL14    COL15    COL16        COL17    COL18    COL19        COL20    COL21    COL22    COL23 */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  LAYOUT_all(
+         DYN_MACRO_KEY11, DYN_MACRO_KEY12,      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,     XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+         DYN_MACRO_KEY1,  DYN_MACRO_KEY2,       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,     M_PROG,  KC_PSLS, KC_PAST, KC_PMNS,
+         DYN_MACRO_KEY3,  DYN_MACRO_KEY4,       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,
+         DYN_MACRO_KEY5,  DYN_MACRO_KEY6,       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_NUHS, KC_ENT,      KC_MPRV, KC_MPLY, KC_MNXT,     KC_P4,   KC_P5,   KC_P6,   KC_PEQL,
+         DYN_MACRO_KEY7,  DYN_MACRO_KEY8,       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_BSLS,     DEBUG,   KC_UP,   RESET,       KC_P1,   KC_P2,   KC_P3,   KC_PENT,
+         DYN_MACRO_KEY9,  DYN_MACRO_KEY10,      KC_LCTL, KC_LGUI, KC_LALT,                                     KC_SPACE,                  KC_RALT, KC_RGUI, KC_APP,  KC_RCTL,     KC_LEFT, KC_DOWN, KC_RGHT,     KC_P0,            KC_PDOT)
+};
diff --git a/keyboards/omnikeyish/omnikeyish.c b/keyboards/omnikeyish/omnikeyish.c
new file mode 100644 (file)
index 0000000..d7b68d4
--- /dev/null
@@ -0,0 +1,55 @@
+#include "omnikeyish.h"
+
+void keyboard_pre_init_user(void) {
+  /* Configure LED driving pins as output pins */
+  setPinOutput(NUMLOCKLEDPIN);
+  setPinOutput(CAPSLOCKLEDPIN);
+  setPinOutput(SCROLLLOCKLEDPIN);
+
+  dynamic_macro_init();
+}
+
+void keyboard_post_init_user(void) {
+  /* Customise these values to desired behaviour */
+  //debug_enable = true;
+  //debug_matrix=true;
+  //debug_keyboard=true;
+  //debug_mouse=true;
+
+#ifdef DYNAMIC_MACRO_EEPROM_STORAGE
+  /* Restore macros from eeprom */
+  dynamic_macro_load_eeprom_all();
+#endif
+
+  /* Send numlock keycode to attempt to force numlock back on. */
+  register_code(KC_NUMLOCK);
+  unregister_code(KC_NUMLOCK);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  if (!process_record_dynamic_macro(keycode, record)) {
+    return false;
+  }
+
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinHigh(NUMLOCKLEDPIN);
+  } else {
+    writePinLow(NUMLOCKLEDPIN);
+  }
+
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinHigh(CAPSLOCKLEDPIN);
+  } else {
+    writePinLow(CAPSLOCKLEDPIN);
+  }
+
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinHigh(SCROLLLOCKLEDPIN);
+  } else {
+    writePinLow(SCROLLLOCKLEDPIN);
+  }
+}
\ No newline at end of file
diff --git a/keyboards/omnikeyish/omnikeyish.h b/keyboards/omnikeyish/omnikeyish.h
new file mode 100644 (file)
index 0000000..b961d7c
--- /dev/null
@@ -0,0 +1,159 @@
+#pragma once
+
+#include "quantum.h" 
+
+enum keycodes {
+       QWERTY = SAFE_RANGE,
+       DYNAMIC_MACRO_RANGE
+};
+
+#include "dynamic_macro.h"
+
+#define ____ KC_NO
+
+/* Every possible switch positions on the PCB. Depending on plate and keycap choice, some of these positions will be blocked by other keys. */
+#define LAYOUT_all( \
+       K101, K102,   K103,       K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119,   K120, K121, K122, K123, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316,   K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416,   K417, K418, K419,   K420, K421, K422, K423, \
+       K501, K502,   K503, K504, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614, K615, K616,   K617, K618, K619,   K620,       K622        \
+) { \
+       { K101, K102,   K103, ____, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119,   K120, K121, K122, K123 }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416,   K417, K418, K419,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, K504, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, K615, K616,   K617, K618, K619,   K620, ____, K622, ____ } \
+}
+
+/* Northgate Factory Plates. Most are based on internet research, user beware. */ 
+#define LAYOUT_101 ( \
+                                       K103,       K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119, \
+                                       K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+                                       K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316    K317, K318, K319,   K320, K321, K322, K323, \
+                                       K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,                          K420, K421, K422,       \
+                                       K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,         K518,         K520, K521, K522, K523, \
+                                       K603,       K605,                               K610,       K613,             K616,   K617, K618, K619,   K620,       K622  \
+) { \
+       { ____, ____,   K103, ____  K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { ____, ____,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { ____, ____,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { ____, ____,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   ____, ____, ____,   K420, K421, K422, ____ }, \
+       { ____, ____,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   ____, K518, ____,   K520, K521, K522, K523 }, \
+       { ____, ____,   K603, ____, K605, ____, ____, ____, ____, K610, ____, ____, K613, ____, ____, K616,   K617, K618, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_102_rev1( \
+       K101, K102,                                                                                                                                                                     K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,                          K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,         K518,         K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,   K617, K618, K619,   K620,       K622  \
+) { \
+       { K101, K102,   ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   ____, ____, ____,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   ____, K518, ____,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, K618, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_102_rev3( \
+       K101, K102,   K103,                                                                                                                                                             K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,                          K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,         K518,         K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,   K617, K618, K619,   K620,       K622  \
+) { \
+       { K101, K102,   K103, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   ____, ____, ____,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   ____, K518, ____,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, K618, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_plus_rev1( \
+       K101, K102,                                                                                                                                                                     K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,      K417, K418, K419,   K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,      K617, K619,      K620,       K622  \
+) { \
+       { K101, K102,   ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   K417, K418, K419,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, ____, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_plus_rev3( \
+       K101, K102,   K103,                                                                                                                                                             K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,      K417, K418, K419,   K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,      K617, K619,      K620,       K622  \
+) { \
+       { K101, K102,   K103, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   K417, K418, K419,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, ____, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_ultra_rev1( \
+       K101, K102,               K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,       K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,      K417, K418, K419,   K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,      K617, K619,      K620,       K622  \
+) { \
+       { K101, K102,   ____, ____, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   K417, K418, K419,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, ____, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_ultra_rev3( \
+       K101, K102,   K103,       K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,       K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,      K417, K418, K419,   K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,      K617, K619,      K620,       K622  \
+) { \
+       { K101, K102,   K103, ____, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   K417, K418, K419,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   K517, K518, K519,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, ____, K619,   K620, ____, K622, ____ } \
+}
+
+#define LAYOUT_ultra_t( \
+       K101, K102,   K103,       K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119, \
+       K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223, \
+       K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315,         K317, K318, K319,   K320, K321, K322, K323, \
+       K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414,    K416,                          K420, K421, K422, K423, \
+       K501, K502,   K503,       K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,         K518,         K520, K521, K522, K523, \
+       K601, K602,   K603, K604, K605,                         K610,             K613, K614,       K616,   K617, K618, K619,   K620,       K622  \
+) { \
+       { K101, K102,   K103, ____, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116,   K117, K118, K119,   ____, ____, ____, ____ }, \
+       { K201, K202,   K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216,   K217, K218, K219,   K220, K221, K222, K223 }, \
+       { K301, K302,   K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, ____,   K317, K318, K319,   K320, K321, K322, K323 }, \
+       { K401, K402,   K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, ____, K416,   ____, ____, ____,   K420, K421, K422, K423 }, \
+       { K501, K502,   K503, ____, K505, K506, K507, K508, K509, K510, K511, K512, K513, K514, K515, K516,   ____, K518, ____,   K520, K521, K522, K523 }, \
+       { K601, K602,   K603, K604, K605, ____, ____, ____, ____, K610, ____, ____, K613, K614, ____, K616,   K617, K618, K619,   K620, ____, K622, ____ } \
+}
+
diff --git a/keyboards/omnikeyish/readme.md b/keyboards/omnikeyish/readme.md
new file mode 100644 (file)
index 0000000..31387bb
--- /dev/null
@@ -0,0 +1,14 @@
+Omnikey(-ish)
+===
+
+A replacement PCB for Omnikey keyboards. (In theory) supports 101, 102, Plus, Ultra T, Ultra, Prime and Stellar, as well as customs.
+
+Keyboard Maintainer: QMK Community and Henrik O. Sørensen  
+Hardware Supported: Omnikey(-ish) PCB  
+Hardware Availability: https://github.com/henrikosorensen/keyboard_pcbs/tree/master/omnikeyish_pcb
+
+Make example for this keyboard (after setting up your build environment):
+
+    make omnikeyish:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/omnikeyish/rules.mk b/keyboards/omnikeyish/rules.mk
new file mode 100644 (file)
index 0000000..38d5042
--- /dev/null
@@ -0,0 +1,65 @@
+# keyboard specific files
+SRC += dynamic_macro.c
+
+# MCU name
+MCU = at90usb1286
+
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = halfkay
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite        # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no   # 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 = no  # 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 = no          # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
\ No newline at end of file
diff --git a/keyboards/pdxkbc/config.h b/keyboards/pdxkbc/config.h
new file mode 100644 (file)
index 0000000..c547bb0
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+Copyright 2019 Franklin Harding
+
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Franklin Harding
+#define PRODUCT         pdxkbc
+#define DESCRIPTION     A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 2
+
+/*
+ * 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 { F7, B6, F4 }
+#define MATRIX_COL_PINS { D1, E6 }
+#define UNUSED_PINS { D0, D4, C6, D7, B4, B5, F5, F6, B1, B3, B2 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+//   #define RGBLED_NUM 16
+//   #define RGBLIGHT_HUE_STEP 8
+//   #define RGBLIGHT_SAT_STEP 8
+//   #define RGBLIGHT_VAL_STEP 8
+//   #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+//   #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+//   #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+//   #define RGBLIGHT_EFFECT_BREATHING
+//   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//   #define RGBLIGHT_EFFECT_SNAKE
+//   #define RGBLIGHT_EFFECT_KNIGHT
+//   #define RGBLIGHT_EFFECT_CHRISTMAS
+//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//   #define RGBLIGHT_EFFECT_RGB_TEST
+//   #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+//   /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+//   #define RGBLIGHT_BREATHE_TABLE_SIZE 256      // 256(default) or 128 or 64
+//   /*==== use exp() and sin() ====*/
+//   #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
+//   #define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_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_HELP           H
+//#define MAGIC_KEY_HELP_ALT       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         0
+//#define MAGIC_KEY_LAYER0_ALT     GRAVE
+//#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     B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_EEPROM_CLEAR   BSPACE
+//#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
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES           2     //< number of visible lines of the display
+#define LCD_DISP_LENGTH    16     //< visibles characters per line of the display
+
+#define LCD_IO_MODE      1            //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT         PORTB        //< port for the LCD lines
+#define LCD_DATA0_PORT   LCD_PORT     //< port for 4bit data bit 0
+#define LCD_DATA1_PORT   LCD_PORT     //< port for 4bit data bit 1
+#define LCD_DATA2_PORT   LCD_PORT     //< port for 4bit data bit 2
+#define LCD_DATA3_PORT   LCD_PORT     //< port for 4bit data bit 3
+#define LCD_DATA0_PIN    4            //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN    5            //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN    6            //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN    7            //< pin for 4bit data bit 3
+#define LCD_RS_PORT      LCD_PORT     //< port for RS line
+#define LCD_RS_PIN       3            //< pin  for RS line
+#define LCD_RW_PORT      LCD_PORT     //< port for RW line
+#define LCD_RW_PIN       2            //< pin  for RW line
+#define LCD_E_PORT       LCD_PORT     //< port for Enable line
+#define LCD_E_PIN        1            //< pin  for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/pdxkbc/info.json b/keyboards/pdxkbc/info.json
new file mode 100644 (file)
index 0000000..6c32ea7
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "pdxkbc", 
+    "url": "", 
+    "maintainer": "qmk", 
+    "width": 2, 
+    "height": 3, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"label":"reddit", "x":0, "y":0}, {"label":"discord", "x":1, "y":0}, {"label":"badge", "x":0, "y":1}, {"label":"hack", "x":1, "y":1}, {"label":"volu", "x":0, "y":2}, {"label":"vold", "x":1, "y":2}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/pdxkbc/keymaps/default/config.h b/keyboards/pdxkbc/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..355f2db
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/pdxkbc/keymaps/default/keymap.c b/keyboards/pdxkbc/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..feb3447
--- /dev/null
@@ -0,0 +1,65 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * 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 QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+    PDXKBCREDDIT = SAFE_RANGE,
+    PDXKBCDISCORD,
+    BADGELIFE,
+    HACKTHEPLANET
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT(
+      PDXKBCREDDIT, PDXKBCDISCORD,
+      BADGELIFE,    HACKTHEPLANET,
+      KC_VOLU,      KC_VOLD
+    ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case PDXKBCREDDIT:
+      if (record->event.pressed) {
+        SEND_STRING("https://reddit.com/r/pdxkbc" SS_TAP(X_ENTER));
+      }
+      break;
+    case PDXKBCDISCORD:
+      if (record->event.pressed) {
+        SEND_STRING("https://discordapp.com/invite/bHwjHXh" SS_TAP(X_ENTER));
+      }
+      break;
+    case BADGELIFE:
+      if (record->event.pressed) {
+        SEND_STRING("#badgelife" SS_TAP(X_ENTER));
+      }
+      break;
+    case HACKTHEPLANET:
+      if (record->event.pressed) {
+        SEND_STRING("HACK THE PLANET!" SS_TAP(X_ENTER));
+      }
+      break;
+  }
+
+  return true;
+}
+
+void matrix_init_user(void) {}
+
+void matrix_scan_user(void) {}
+
+void led_set_user(uint8_t usb_led) {}
diff --git a/keyboards/pdxkbc/keymaps/default/readme.md b/keyboards/pdxkbc/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..1371be8
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for pdxkbc
\ No newline at end of file
diff --git a/keyboards/pdxkbc/pdxkbc.c b/keyboards/pdxkbc/pdxkbc.c
new file mode 100644 (file)
index 0000000..26c2d2f
--- /dev/null
@@ -0,0 +1,51 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * 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 "pdxkbc.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+
+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/pdxkbc/pdxkbc.h b/keyboards/pdxkbc/pdxkbc.h
new file mode 100644 (file)
index 0000000..4700252
--- /dev/null
@@ -0,0 +1,37 @@
+/* Copyright 2019 Franklin Harding
+ *
+ * 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/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+    k00, k01, \
+    k10, k11, \
+    k20, k21 \
+) \
+{ \
+    { k00, k01 }, \
+    { k10, k11 }, \
+    { k20, k21 }, \
+}
diff --git a/keyboards/pdxkbc/readme.md b/keyboards/pdxkbc/readme.md
new file mode 100644 (file)
index 0000000..cb23074
--- /dev/null
@@ -0,0 +1,17 @@
+# pdxkbc
+
+![pdxkbc](https://i.imgur.com/GgNvZcW.jpg)
+
+A macropad made for the Portland Keyboard Club and DEF CON
+
+Keyboard Maintainer: [Franklin Harding](https://github.com/fharding1)  
+
+Hardware Supported: https://github.com/fharding1/pdxkbc-badge
+
+Hardware Availability: https://github.com/fharding1/pdxkbc-badge
+
+Make example for this keyboard (after setting up your build environment):
+
+    make pdxkbc:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/pdxkbc/rules.mk b/keyboards/pdxkbc/rules.mk
new file mode 100644 (file)
index 0000000..bc370be
--- /dev/null
@@ -0,0 +1,80 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   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
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
index 3ad694c4a32615c18a0f651857499782cf0904f6..e739b90b8c9eaf7b5762e13e5224b46913045069 100644 (file)
@@ -15,6 +15,7 @@
  */
 #include "ez.h"
 
+#ifdef RGB_MATRIX_ENABLE
 const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
 /* Refer to IS31 manual for these locations
  *   driver
@@ -100,6 +101,16 @@ led_config_t g_led_config = { {
     1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1
 } };
 
+void suspend_power_down_kb(void) {
+    rgb_matrix_set_suspend_state(true);
+    suspend_power_down_user();
+}
+
+ void suspend_wakeup_init_kb(void) {
+    rgb_matrix_set_suspend_state(false);
+    suspend_wakeup_init_user();
+}
+#endif
 
 void matrix_init_kb(void) {
   matrix_init_user();
index a3ca2b6ecebd5c7925aef280ec666d90040be9db..55c4032422ab2061cb251cdb42e16df41a25c644 100644 (file)
     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 \
+    k30, k31, k32, k33, k34,    k35,   k37, k38, k39, k3a, k3b \
 ) \
 { \
-    { k00, k01, k02, k03, k04, k05 }, \
-    { k10, k11, k12, k13, k14, k15 }, \
-    { k20, k21, k22, k23, k24, k25 }, \
-    { k30, k31, k32, k39, k3a, k3b }, \
-    { k06, k07, k08, k09, k0a, k0b }, \
-    { k16, k17, k18, k19, k1a, k1b }, \
-    { k26, k27, k28, k29, k2a, k2b }, \
-    { k36, k37, k38, k33, k34, k35 } \
+    { k00, k01, k02, k03, k04, k05   }, \
+    { k10, k11, k12, k13, k14, k15   }, \
+    { k20, k21, k22, k23, k24, k25   }, \
+    { k30, k31, k32, k3a, k3b, KC_NO }, \
+    { k06, k07, k08, k09, k0a, k0b   }, \
+    { k16, k17, k18, k19, k1a, k1b   }, \
+    { k26, k27, k28, k29, k2a, k2b   }, \
+    { k37, k38, k39, k33, k34, k35   } \
 }
 
-#define LAYOUT_planck_1x2uR( \
-    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 \
+#define LAYOUT_ortho_4x12( \
+    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, KC_NO, k37, k38, k39, k3a, k3b  \
 ) \
-{ \
-    { k00, k01, k02, k03, k04, k05 }, \
-    { k10, k11, k12, k13, k14, k15 }, \
-    { k20, k21, k22, k23, k24, k25 }, \
-    { k30, k31, k32, k39, k3a, k3b }, \
-    { k06, k07, k08, k09, k0a, k0b }, \
-    { k16, k17, k18, k19, k1a, k1b }, \
-    { k26, k27, k28, k29, k2a, k2b }, \
-    { k36, k37, k38, k33, k34, k35 } \
-}
-
-#define LAYOUT_planck_1x2uL( \
+LAYOUT_planck_1x2uC( \
     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 \
-) \
-{ \
-    { k00, k01, k02, k03, k04, k05 }, \
-    { k10, k11, k12, k13, k14, k15 }, \
-    { k20, k21, k22, k23, k24, k25 }, \
-    { k30, k31, k32, k39, k3a, k3b }, \
-    { k06, k07, k08, k09, k0a, k0b }, \
-    { k16, k17, k18, k19, k1a, k1b }, \
-    { k26, k27, k28, k29, k2a, k2b }, \
-    { k36, k37, k38, k33, k34, k35 } \
-}
-
-#define LAYOUT_planck_2x2u( \
-    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,      k36,    k37, k38, k39, k3a \
-) \
-{ \
-    { k00, k01, k02, k03, k04, k05 }, \
-    { k10, k11, k12, k13, k14, k15 }, \
-    { k20, k21, k22, k23, k24, k25 }, \
-    { k30, k31, k32, k39, k3a, k3b }, \
-    { k06, k07, k08, k09, k0a, k0b }, \
-    { k16, k17, k18, k19, k1a, k1b }, \
-    { k26, k27, k28, k29, k2a, k2b }, \
-    { k36, k37, k38, k33, k34, k35 } \
-}
-
-#define LAYOUT_planck_grid( \
-    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, KC_NO, k36, k37, k38, k39, k3a \
-) \
-{ \
-    { k00, k01, k02, k03, k04, k05 }, \
-    { k10, k11, k12, k13, k14, k15 }, \
-    { k20, k21, k22, k23, k24, k25 }, \
-    { k30, k31, k32, k39, k3a, KC_NO }, \
-    { k06, k07, k08, k09, k0a, k0b }, \
-    { k16, k17, k18, k19, k1a, k1b }, \
-    { k26, k27, k28, k29, k2a, k2b }, \
-    { k36, k37, k38, k33, k34, k35 } \
-}
+    k30, k31, k32, k33, k34,    k35,   k37, k38, k39, k3a, k3b  \
+)
 
-#define KEYMAP LAYOUT_planck_grid
-#define LAYOUT_ortho_4x12 LAYOUT_planck_grid
-#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
diff --git a/keyboards/planck/ez/info.json b/keyboards/planck/ez/info.json
new file mode 100644 (file)
index 0000000..b8382bf
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "keyboard_name": "Planck EZ",
+  "keyboard_folder": "planck/ez",
+  "url": "https://ergodox-ez.com/pages/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
diff --git a/keyboards/planck/ez/readme.md b/keyboards/planck/ez/readme.md
new file mode 100644 (file)
index 0000000..9bd161a
--- /dev/null
@@ -0,0 +1,15 @@
+# Planck EZ
+
+![Planck EZ](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/planck/ez/neat-planck-banner.png)
+
+A variant of the Planck featuring a 2u spacebar and per-key RGB backlighting.
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck EZ  
+Hardware Availability: [ergodox-ez.com](https://ergodox-ez.com/pages/planck)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/ez:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
index e66db1d7e80d3673da54a9e6d8ce72821b812d13..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,7 +0,0 @@
-#define MOUSEKEY_DELAY             0
-#define MOUSEKEY_INTERVAL          16
-#define MOUSEKEY_MAX_SPEED         20
-#define MOUSEKEY_TIME_TO_MAX       100
-#define MOUSEKEY_WHEEL_DELAY       0
-#define MOUSEKEY_WHEEL_MAX_SPEED   1
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
index 08d0c69b88d673e358045027206780a3a4700f44..2a7a53d38df757f716e3ea43f4b0c79c509aff13 100644 (file)
 #include "planck.h"
 #include "action_layer.h"
 
-extern keymap_config_t keymap_config;
+#define a KC_A
+#define b KC_B
+#define c KC_C
+#define d KC_D
+#define e KC_E
+#define f KC_F
+#define g KC_G
+#define h KC_H
+#define i KC_I
+#define j KC_J
+#define k KC_K
+#define l KC_L
+#define m KC_M
+#define n KC_N
+#define o KC_O
+#define p KC_P
+#define q KC_Q
+#define r KC_R
+#define s KC_S
+#define t KC_T
+#define u KC_U
+#define v KC_V
+#define w KC_W
+#define x KC_X
+#define y KC_Y
+#define z KC_Z
+
+#define lalt KC_LALT
+#define lctl KC_LCTL
+#define lsft KC_LSFT
+#define ralt KC_RALT
+#define rctl KC_RCTL
+#define rsft KC_RSFT
+
+#define n0 KC_0
+#define n1 KC_1
+#define n2 KC_2
+#define n3 KC_3
+#define n4 KC_4
+#define n5 KC_5
+#define n6 KC_6
+#define n7 KC_7
+#define n8 KC_8
+#define n9 KC_9
+
+#define bspc KC_BSPC
+#define caps KC_CAPS
+#define comm KC_COMM
+#define dash A(KC_MINS)
+#define scln KC_SCLN
+#define slsh KC_SLSH
+#define spc KC_SPC
+#define tab KC_TAB
+#define del KC_DEL
+#define dot KC_DOT
+#define ent KC_ENT
+#define mins KC_MINS
+#define quot KC_QUOT
+#define esc KC_ESC
+#define gbp A(KC_3)
+
+#define down KC_DOWN
+#define home KC_HOME
+#define end KC_END
+#define up KC_UP
+#define pgdn KC_PGDN
+#define pgup KC_PGUP
+#define left KC_LEFT
+#define rght KC_RGHT
+
+#define tabl S(C(KC_TAB))
+#define tabr C(KC_TAB)
+#define fwd G(KC_RBRC)
+#define back G(KC_LBRC)
+#define dtl C(KC_LEFT)
+#define dtr C(KC_RGHT)
+#define slup S(A(KC_UP))
+#define sldn S(A(KC_DOWN))
+
+#define f1 KC_F1
+#define f2 KC_F2
+#define f3 KC_F3
+#define f4 KC_F4
+#define f5 KC_F5
+#define f6 KC_F6
+#define f7 KC_F7
+#define f8 KC_F8
+#define f9 KC_F9
+#define f10 KC_F10
+#define f11 KC_F11
+#define f12 KC_F12
+#define f13 KC_F13
+#define f14 KC_F14
+#define f15 KC_F15
+#define f16 KC_F16
+#define f17 KC_F17
+#define f18 KC_F18
+#define f19 KC_F19
+#define f20 KC_F20
+
+#define mute KC_MUTE
+#define next KC_MNXT
+#define play KC_MPLY
+#define prev KC_MPRV
+#define vold KC_F11
+#define volu KC_F12
+
+#define symb MO(SYMB)
+#define move MO(MOVE)
+#define func MO(FUNC)
+
+#define rset RESET
+#define powr KC_POWER
+
+#define ____ KC_TRNS
+#define xxxx KC_NO
 
-#define AC(X) A(C(X))
-#define SC(X) S(C(X))
+extern keymap_config_t keymap_config;
 
 enum planck_layers {
-    _COLEMAK,
-    _QWERTY,
-    _SYMB,
-    _MOVE,
-    _FUNC,
-    _MOUSE,
-};
-
-enum planck_keycodes {
-    COLEMAK = SAFE_RANGE,
-    QWERTY,
+    BASE,
     SYMB,
     MOVE,
     FUNC,
-    MOUSE,
 };
 
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-    /* COLEMAK
-     * ,-----------------------------------------------------------------------.
-     * |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 |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
-     * `-----------------------------------------------------------------------'
-     */
-    [_COLEMAK] = LAYOUT_planck_grid(
-        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,
+enum planck_keycodes {
+    ampr = SAFE_RANGE,
+    astr,
+    at,
+    bsls,
+    circ,
+    dlr,
+    eql,
+    exlm,
+    grv,
+    hash,
+    lbrc,
+    lcbr,
+    lprn,
+    perc,
+    pipe,
+    plus,
+    rbrc,
+    rcbr,
+    rprn,
+    tild,
+
+    cmd,
+};
 
-        FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
-        SYMB,         KC_ENT,       KC_SPC,       MOVE,
-        KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [BASE] = LAYOUT_planck_grid(
+         tab,    q,    w,    f,    p,    g,    j,    l,    u,    y, scln, mins,
+        bspc,    a,    r,    s,    t,    d,    h,    n,    e,    i,    o, quot,
+        lsft,    z,    x,    c,    v,    b,    k,    m, comm,  dot, slsh, rsft,
+        func, lctl, lalt,  cmd, move,  ent,  spc, symb,  cmd, ralt, rctl, func
     ),
 
-    /* QWERTY
-     * ,-----------------------------------------------------------------------.
-     * |Tab  |  Q  |  W  |  E  |  R  |  T  |  Y  |  U  |  I  |  O  |  P  |  -  |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |Bksp |  A  |  S  |  D  |  F  |  G  |  H  |  J  |  K  |  L  |  ;  |  '  |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |Shift|  Z  |  X  |  C  |  V  |  B  |  N  |  M  |  ,  |  .  |  /  |Shift|
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
-     * `-----------------------------------------------------------------------'
-     */
-    [_QWERTY] = LAYOUT_planck_grid(
-        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_BSPC,      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,
-
-        FUNC,         KC_LCTL,      KC_LALT,      KC_LGUI,
-        SYMB,         KC_ENT,       KC_SPC,       MOVE,
-        KC_RGUI,      KC_RALT,      KC_RCTL,      FUNC
+    [SYMB] = LAYOUT_planck_grid(
+         esc,   n7,   n5,   n3,   n1,   n9,   n8,   n0,   n2,   n4,   n6, dash,
+         del, bsls, hash, astr,  eql, pipe,   at, rprn, lprn,  dlr, ampr,  gbp,
+        caps,  grv, exlm, lbrc, rbrc, circ, tild, rcbr, lcbr, plus, perc, caps,
+        ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
     ),
 
-    /* SYMB
-     * ,-----------------------------------------------------------------------.
-     * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |ndash|
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * | Del |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  |  £  |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |  ~  |  `  |  +  |  =  |  |  |  \  |  [  |  ]  |  {  |  }  |     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |     |     |     |     |     |
-     * `-----------------------------------------------------------------------'
-     */
-    [_SYMB] = LAYOUT_planck_grid(
-        KC_ESC,       KC_1,         KC_2,         KC_3,
-        KC_4,         KC_5,         KC_6,         KC_7,
-        KC_8,         KC_9,         KC_0,         A(KC_MINS),
-
-        KC_DEL,       KC_EXLM,      KC_AT,        KC_HASH,
-        KC_DLR,       KC_PERC,      KC_CIRC,      KC_AMPR,
-        KC_ASTR,      KC_LPRN,      KC_RPRN,      A(KC_3),
-
-        _______,      KC_TILD,      KC_GRV,       KC_PLUS,
-        KC_EQL,       KC_PIPE,      KC_BSLS,      KC_LBRC,
-        KC_RBRC,      KC_LCBR,      KC_RCBR,      _______,
-
-        _______,      _______,      _______,      _______,
-        _______,      _______,      _______,      _______,
-        _______,      _______,      _______,      _______
+    [MOVE] = LAYOUT_planck_grid(
+         esc, xxxx, slup,  dtl,  dtr, xxxx, xxxx, home,   up,  end, xxxx, xxxx,
+         del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, xxxx,
+        ____, xxxx, xxxx, back,  fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
+        ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
     ),
 
-    /* MOVE
-     * ,-----------------------------------------------------------------------.
-     * |     |     |     |     |     |     |CtrUp|Home | Up  | End |Caps |Mouse|
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |CtrL |Left |Down |Right|CtrR |     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |CtrDn|PgDn |PgUp |TabL |TabR |     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |     |     |     |     |     |
-     * `-----------------------------------------------------------------------'
-     */
-    [_MOVE] = LAYOUT_planck_grid(
-        AC(KC_A),     AC(KC_B),     AC(KC_C),     AC(KC_D),
-        AC(KC_E),     AC(KC_F),     C(KC_UP),     KC_HOME,
-        KC_UP,        KC_END,       KC_CAPS,      MOUSE,
-
-        AC(KC_G),     AC(KC_H),     AC(KC_I),     AC(KC_J),
-        AC(KC_K),     AC(KC_L),     C(KC_LEFT),   KC_LEFT,
-        KC_DOWN,      KC_RGHT,      C(KC_RIGHT),  XXXXXXX,
-
-        _______,      AC(KC_M),     AC(KC_N),     AC(KC_O),
-        AC(KC_P),     AC(KC_Q),     C(KC_DOWN),   KC_PGDN,
-        KC_PGUP,      SC(KC_TAB),   C(KC_TAB),    _______,
-
-        _______,      _______,      _______,      _______,
-        _______,      _______,      _______,      _______,
-        _______,      _______,      _______,      _______
+    [FUNC] = LAYOUT_planck_grid(
+        rset,   f1,   f2,   f3,   f4,   f5,   f6,   f7,   f8,   f9,  f10, volu,
+        powr,  f11,  f12,  f13,  f14,  f15,  f16,  f17,  f18,  f19,  f20, vold,
+        ____, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, ____,
+        ____, ____, ____, ____, prev, mute, play, next, ____, ____, ____, ____
     ),
-
-    /* FUNC
-     * ,-----------------------------------------------------------------------.
-     * |Reset| F1  | F2  | F3  | F4  | F5  | F6  | F7  | F8  | F9  | F10 |VolUp|
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |     |     |Clmak|Qwrty|     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |Prev |Mute |Play |Next |     |     |     |     |
-     * `-----------------------------------------------------------------------'
-     */
-    [_FUNC] = LAYOUT_planck_grid(
-        RESET,        KC_F1,        KC_F2,        KC_F3,
-        KC_F4,        KC_F5,        KC_F6,        KC_F7,
-        KC_F8,        KC_F9,        KC_F10,       KC_VOLU,
-
-        KC_POWER,     KC_F11,       KC_F12,       KC_F13,
-        KC_F14,       KC_F15,       KC_F16,       KC_F17,
-        KC_F18,       KC_F19,       KC_F20,       KC_VOLD,
-
-        _______,      XXXXXXX,      KC_HOME,      SC(KC_TAB),
-        C(KC_TAB),    KC_END,       XXXXXXX,      XXXXXXX,
-        XXXXXXX,      COLEMAK,      QWERTY,       _______,
-
-        _______,      _______,      _______,      _______,
-        KC_MPRV,      KC_MUTE,      KC_MPLY,      KC_MNXT,
-        _______,      _______,      _______,      _______
-    ),
-
-    /* MOUSE
-     * ,-----------------------------------------------------------------------.
-     * |     |     |CtrL |CtrU |CtrR | B5  |CtrU | ScL |Up   | ScR |     |     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     | Ac0 | Ac1 | Ac2 | B4  |CtrL |Left |Down |Right|CtrR |     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |Home | End | B3  |CtrD | ScD | ScU |TabL |TabR |     |
-     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     | B2  | B1  |     |     |     |     |     |
-     * `-----------------------------------------------------------------------'
-     */
-    [_MOUSE] = LAYOUT_planck_grid(
-        _______,      XXXXXXX,      C(KC_LEFT),   C(KC_UP),
-        C(KC_RIGHT),  KC_BTN5,      C(KC_UP),     KC_WH_R,
-        KC_MS_U,      KC_WH_L,      XXXXXXX,      XXXXXXX,
-
-        _______,      XXXXXXX,      KC_ACL0,      KC_ACL1,
-        KC_ACL2,      KC_BTN4,      C(KC_LEFT),   KC_MS_L,
-        KC_MS_D,      KC_MS_R,      C(KC_RIGHT),  XXXXXXX,
-
-        _______,      XXXXXXX,      XXXXXXX,      KC_HOME,
-        KC_END,       KC_BTN3,      C(KC_DOWN),   KC_WH_U,
-        KC_WH_D,      SC(KC_TAB),   C(KC_TAB),    _______,
-
-        _______,      _______,      _______,      _______,
-        _______,      KC_BTN2,      KC_BTN1,      _______,
-        _______,      _______,      _______,      _______
-    )
 };
 
-#ifdef AUDIO_ENABLE
-float colemak_song[][2] = SONG(COLEMAK_SOUND);
-float qwerty_song[][2] = SONG(QWERTY_SOUND);
-#endif
-
-void set_colemak(void) {
-#ifdef AUDIO_ENABLE
-    stop_all_notes();
-    PLAY_SONG(colemak_song);
-#endif
-    set_single_persistent_default_layer(_COLEMAK);
+bool send_string_if_keydown(keyrecord_t *record, const char *s) {
+    if (record->event.pressed) {
+        send_string(s);
+    }
+    return true;
 }
 
-void set_qwerty(void) {
-#ifdef AUDIO_ENABLE
-    stop_all_notes();
-    PLAY_SONG(qwerty_song);
-#endif
-    set_single_persistent_default_layer(_QWERTY);
-}
+int cmd_keys_down = 0;
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     switch (keycode) {
-        case COLEMAK:
-            if (record->event.pressed) {
-                set_colemak();
-            }
-            return false;
-        case QWERTY:
+        // Override the defualt auto shifted symbols to use SEND_STRING See
+        // https://github.com/qmk/qmk_firmware/issues/4072
+        case ampr:
+            return send_string_if_keydown(record, "&");
+        case astr:
+            return send_string_if_keydown(record, "*");
+        case at:
+            return send_string_if_keydown(record, "@");
+        case bsls:
+            return send_string_if_keydown(record, "\\");
+        case circ:
+            return send_string_if_keydown(record, "^");
+        case dlr:
+            return send_string_if_keydown(record, "$");
+        case eql:
+            return send_string_if_keydown(record, "=");
+        case exlm:
+            return send_string_if_keydown(record, "!");
+        case grv:
+            return send_string_if_keydown(record, "`");
+        case hash:
+            return send_string_if_keydown(record, "#");
+        case lbrc:
+            return send_string_if_keydown(record, "[");
+        case lcbr:
+            return send_string_if_keydown(record, "{");
+        case lprn:
+            return send_string_if_keydown(record, "(");
+        case perc:
+            return send_string_if_keydown(record, "%");
+        case pipe:
+            return send_string_if_keydown(record, "|");
+        case plus:
+            return send_string_if_keydown(record, "+");
+        case rbrc:
+            return send_string_if_keydown(record, "]");
+        case rcbr:
+            return send_string_if_keydown(record, "}");
+        case rprn:
+            return send_string_if_keydown(record, ")");
+        case tild:
+            return send_string_if_keydown(record, "~");
+
+        // cmd + cmd -> cmd + ctl
+        case cmd:
             if (record->event.pressed) {
-                set_qwerty();
-            }
-            return false;
-        case SYMB:
-            if (record->event.pressed) {
-                layer_off(_MOUSE);
-                layer_on(_SYMB);
-            } else {
-                layer_off(_SYMB);
-            }
-            return false;
-        case MOVE:
-            if (record->event.pressed) {
-                layer_off(_MOUSE);
-                layer_on(_MOVE);
+                if (cmd_keys_down == 0) {
+                    register_code(KC_LCMD);
+                } else {
+                    register_code(KC_LCTL);
+                }
+                cmd_keys_down++;
             } else {
-                layer_off(_MOVE);
+                if (cmd_keys_down == 1) {
+                    unregister_code(KC_LCMD);
+                } else {
+                    unregister_code(KC_LCTL);
+                }
+                cmd_keys_down--;
             }
-            return false;
-        case FUNC:
-            if (record->event.pressed) {
-                layer_off(_MOUSE);
-                layer_on(_FUNC);
-            } else {
-                layer_off(_FUNC);
-            }
-            return false;
-        case MOUSE:
-            if (record->event.pressed) {
-                layer_on(_MOUSE);
-            }
-            return false;
-
-        // Override the defualt auto shifted symbols to use SEND_STRING
-        // See https://github.com/qmk/qmk_firmware/issues/4072
-        case KC_EXLM:
-            if (record->event.pressed) { SEND_STRING("!"); }
-            return false;
-        case KC_AT:
-            if (record->event.pressed) { SEND_STRING("@"); }
-            return false;
-        case KC_HASH:
-            if (record->event.pressed) { SEND_STRING("#"); }
-            return false;
-        case KC_DLR:
-            if (record->event.pressed) { SEND_STRING("$"); }
-            return false;
-        case KC_PERC:
-            if (record->event.pressed) { SEND_STRING("%"); }
-            return false;
-        case KC_CIRC:
-            if (record->event.pressed) { SEND_STRING("^"); }
-            return false;
-        case KC_AMPR:
-            if (record->event.pressed) { SEND_STRING("&"); }
-            return false;
-        case KC_ASTR:
-            if (record->event.pressed) { SEND_STRING("*"); }
-            return false;
-        case KC_LPRN:
-            if (record->event.pressed) { SEND_STRING("("); }
-            return false;
-        case KC_RPRN:
-            if (record->event.pressed) { SEND_STRING(")"); }
-            return false;
-        case KC_TILD:
-            if (record->event.pressed) { SEND_STRING("~"); }
-            return false;
-        case KC_GRV:
-            if (record->event.pressed) { SEND_STRING("`"); }
-            return false;
-        case KC_PLUS:
-            if (record->event.pressed) { SEND_STRING("+"); }
-            return false;
-        case KC_EQL:
-            if (record->event.pressed) { SEND_STRING("="); }
-            return false;
-        case KC_PIPE:
-            if (record->event.pressed) { SEND_STRING("|"); }
-            return false;
-        case KC_BSLS:
-            if (record->event.pressed) { SEND_STRING("\\"); }
-            return false;
-        case KC_LBRC:
-            if (record->event.pressed) { SEND_STRING("["); }
-            return false;
-        case KC_RBRC:
-            if (record->event.pressed) { SEND_STRING("]"); }
-            return false;
-        case KC_LCBR:
-            if (record->event.pressed) { SEND_STRING("{"); }
-            return false;
-        case KC_RCBR:
-            if (record->event.pressed) { SEND_STRING("}"); }
-            return false;
+            return true;
     }
     return true;
 }
index 99b6dfbeff00f28a7c7aee1251adf3e96de816d9..190c2b23a552fb0ff61d7d4650c4380571643802 100644 (file)
@@ -1,11 +1,11 @@
-# callums planck layout
+# callum's planck layout
 
 This is a layout for the grid planck, built with a few ideals in mind:
 
 - Consistent and 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
+  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.
@@ -17,7 +17,22 @@ This is a layout for the grid planck, built with a few ideals in mind:
 - There should be two of every modifier (one on each side), otherwise certain
   long key combinations become hard to make.
 
-A layout graphic can be found [here][keyboard-layout-editor] (excludes window
-management keys).
+- It should be possible to do things you might want to do while using the mouse
+  with only the left hand (e.g. change tabs, navigate back or forwards in
+  browser history).
 
-[keyboard-layout-editor]: http://www.keyboard-layout-editor.com/#/gists/ade5ec1f814bf83046489a4b632575ff
+- Symbols should be arranged so that the most frequently used are easiest to
+  reach. This includes numbers, and lower numbers are more commonly used than
+  higher ones. (number arrangement borrowed from [dustypomeleau's minidox
+  layout][].
+
+Layout rendered with [keyboard-layout-editor.com][]:
+
+![](https://callum-oakley.github.io/images/keymap.png)
+
+The only behaviour not captured in this graphic is: pressing both cmd keys will
+send cmd+ctrl. See [keymap.c][] for details.
+
+[dustypomeleau's minidox layout]: https://github.com/qmk/qmk_firmware/tree/master/keyboards/minidox/keymaps/dustypomerleau
+[keyboard-layout-editor.com]: http://www.keyboard-layout-editor.com
+[keymap.c]: keymap.c
index 182322ae2305bc7a4a17adc79c6e3da424ae207c..db87d5ecec7afc89edda626343e5db270a4e8a73 100644 (file)
@@ -3,7 +3,7 @@
 #   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
diff --git a/keyboards/planck/keymaps/deft/config.h b/keyboards/planck/keymaps/deft/config.h
new file mode 100644 (file)
index 0000000..6fa31cc
--- /dev/null
@@ -0,0 +1,39 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+    #define STARTUP_SONG SONG(PLANCK_SOUND)
+    // #define STARTUP_SONG SONG(NO_SOUND)
+
+    #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+                                  SONG(COLEMAK_SOUND), \
+                                  SONG(DVORAK_SOUND) \
+                                }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
diff --git a/keyboards/planck/keymaps/deft/deft-plank.json b/keyboards/planck/keymaps/deft/deft-plank.json
new file mode 100644 (file)
index 0000000..49dc57c
--- /dev/null
@@ -0,0 +1,141 @@
+[
+  {
+    "backcolor": "#ffffff",
+    "name": "Deft Plank",
+    "author": "Michael Speiserß",
+    "switchMount": "cherry",
+    "switchBrand": "gateron",
+    "switchType": "KS-3-Tea",
+    "plate": true,
+    "pcb": true
+  },
+  [
+    {
+      "c": "#ba0000",
+      "sb": "gateron",
+      "st": "KS-3-Tea",
+      "a": 5
+    },
+    "\nDel\n\n\n\n\nEsc",
+    {
+      "c": "#cccccc",
+      "a": 4
+    },
+    "\n\n!\n\n\n\n\n\n1\nQ\nAlt 1",
+    "\n\n@\n\n\n\n\n\n2\nW\nAlt 2",
+    "\n\n#\n\n\n\n\n\n3\nE\nAlt 3",
+    "\n\n$\n\n\n\n\n\n4\nR\nAlt 4",
+    "\n\n%\n\n\n\n\n\n5\nT\n(",
+    "\n\n^\n\n\n\n\n\n6\nY\n)",
+    "\n\n&\n\n\n\n\n\n7\nU\nNum 7",
+    "\n\n*\n\n\n\n\n\n8\nI\nNum 8",
+    "\n\n(\n\n\n\n\n\n9\nO\nNum 9",
+    "\n\n)\n\n\n\n\n\n0\nP\nNum 0",
+    {
+      "c": "#ba0000",
+      "a": 7
+    },
+    "Bksp"
+  ],
+  [
+    {
+      "c": "#365eff"
+    },
+    "Tab",
+    {
+      "c": "#cccccc",
+      "a": 4
+    },
+    "\n\n\n~\n\n\n\n\nF1\nA\n`",
+    "\n\n\n|\n\n\n\n\nF2\nS\n\\",
+    "\n\n\n+\n\n\n\n\nF3\nD\n=",
+    {
+      "n": true
+    },
+    "\n\n\n_\n\n\n\n\nF4\nF\n-",
+    {
+      "a": 5
+    },
+    "F5\n<\n\n\n\n\nG",
+    "F6\n>\n\n\n\n\nH",
+    {
+      "n": true
+    },
+    "F7\nNum 4\n\n\n\n\nJ",
+    "F8\nNum 5\n\n\n\n\nK",
+    "F9\nNum 6\n\n\n\n\nL",
+    {
+      "a": 4
+    },
+    "\n\n\n\n\n\n\n:\nF10\n;\nNum .",
+    "\n\n\n\n\n\n\n\"\n\n'\nNumLk"
+  ],
+  [
+    {
+      "c": "#365eff",
+      "a": 7
+    },
+    "Shift",
+    {
+      "c": "#cccccc",
+      "a": 5
+    },
+    "F11\nNum /\n\n\n\n\nZ",
+    "F12\nNum *\n\n\n\n\nX",
+    "F13\nNum -\n\n\n\n\nC",
+    "F14\nNum +\n\n\n\n\nV",
+    "F15\n[\n\n\n\n\nB",
+    "F16\n]\n\n\n\n\nN",
+    "F17\nNum 1\n\n\n\n\nM",
+    {
+      "a": 4
+    },
+    "\n\n\n\n\n\n\n<\nF18\n,\nNum 2",
+    "\n\n\n\n\n\n\n>\nF19\n.\nNum 3",
+    {
+      "c": "#365eff",
+      "a": 5
+    },
+    "Vol+\nPgup\n\n\n\n\n&uarr;",
+    {
+      "c": "#cccccc",
+      "a": 4
+    },
+    "\n\n\n\n\n\n\n?\n\n/\nNum ="
+  ],
+  [
+    {
+      "c": "#365eff",
+      "a": 7
+    },
+    "Ctrl",
+    {
+      "a": 5
+    },
+    "\nOption\n\n\n\n\nAlt",
+    "\n⌘\n\n\n\n\nWin",
+    "Cut\nPaste\n\n\n\n\nCopy",
+    {
+      "c": "#3f8f00",
+      "a": 7
+    },
+    "Lower",
+    {
+      "c": "#cccccc",
+      "w": 2
+    },
+    "",
+    {
+      "c": "#3f8f00"
+    },
+    "Raise",
+    {
+      "c": "#365eff",
+      "a": 5
+    },
+    "\nNumE\n\n\n\n\nReturn",
+    "Play\nHome\n\n\n\n\n&larr;",
+    "Vol -\nPgdn\n\n\n\n\n&darr;",
+    "Next\nEnd\n\n\n\n\n&rarr;"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/deft/keymap.c b/keyboards/planck/keymaps/deft/keymap.c
new file mode 100644 (file)
index 0000000..25a0a9f
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * The Deft layout for the Planck Keyboard
+ * Version 1.0
+ *
+ * A keyboard layout designed for efficiency in programming and transferability between ortholinear boards.
+ * Deft is currently supported on the following boards:
+ * Planck (12x4)
+ *
+ * The Deft keyboard layout was designed by Michael Speiser. You can find other Deft layouts at my Github:
+ * https://github.com/Speiserm
+ *
+ * For questions, issues, or feedback, feel free to email me at Speiserm@pm.me.
+ *
+ *
+ * Flashing:
+ *
+ * Rev 5 or earlier:
+ * make planck/revX:deft:dfu
+ *
+ * Rev 6:
+ * make planck/rev6:deft:dfu-util
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * Follow my cat:
+ * https://twitter.com/CatBucha
+ * https://www.instagram.com/buchathecat/
+ *
+ */
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+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  |  /   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt  | GUI  | Copy |Lower |    Space    |Raise |Enter | Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+     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_UP,   KC_SLSH,
+    KC_LCTL, KC_LALT, KC_LGUI, C(KC_C),   LOWER,  KC_SPC,  KC_SPC,   RAISE,   KC_ENT, KC_LEFT, KC_DOWN,   KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Del  | Alt1 | Alt2 | Alt3 | Alt4 |  (   |  )   | Num7 | Num8 | Num9 | Num0 |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  `   |  \   |  =   |  -   |  <   |  >   | Num4 | Num5 | Num6 | Num. | NumL |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | Num/ | Num* | Num- | Num+ |  [   |  ]   | Num1 | Num2 | Num3 | Pgup | Num= |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |Paste |      |             |      | NumE | Home | Pgdn | End  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+     KC_DEL, A(KC_1), A(KC_2), A(KC_3), A(KC_4), S(KC_9), S(KC_0),   KC_P7,   KC_P8,   KC_P9,   KC_P0, _______,
+    _______,  KC_GRV,KC_BSLS,KC_EQL, KC_MINS,S(KC_COMM),S(KC_DOT),   KC_P4,   KC_P5,   KC_P6, KC_PDOT, KC_NLCK,
+    _______, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_LBRC, KC_RBRC,   KC_P1,   KC_P2,   KC_P3, KC_PGUP, KC_PEQL,
+    _______, _______, _______, C(KC_V), _______, _______, _______, _______, KC_PENT, KC_HOME,KC_PGDOWN, KC_END
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |      |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  | F10  |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | F11  | F12  | F13  | F14  | F15  | F16  | F17  | F18  | F19  | Vol+ |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      | Cut  |      |             |      |      | Play | Vol- | Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+    _______,    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_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_VOLU, _______,
+    _______, _______, _______, C(KC_X), _______, _______, _______, _______, _______, KC_MPLY, KC_VOLD, KC_MNXT
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Reset |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+      RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/planck/keymaps/deft/readme.md b/keyboards/planck/keymaps/deft/readme.md
new file mode 100644 (file)
index 0000000..715ab37
--- /dev/null
@@ -0,0 +1,73 @@
+# The Deft Planck Layout
+
+![Deft layout for the Planck keyboard](https://i.imgur.com/VtUkAyh.png)
+
+The Deft Planck layout is designed for efficiency in programming and transferability between ortholinear boards. It features a fairly standard default layer with properly placed arrow keys, a lower layer with a usable numpad and symbols, and a raise layer for numbers, f-keys, and music controls. The code is also cut down to only what you need. The result is a very usable Planck that can easily replace fullsize layouts.
+
+The strangely placed Enter key is meant to be closer to your thumb and moving it allows for proper arrow key placement without disturbing our layout too much. I wanted to separate the enter key from the forward slash key anyway, as I was commonly pressing enter when I meant to type a question mark. You get used to it pretty fast.
+
+Follow my cat:
+
+https://twitter.com/CatBucha
+
+https://www.instagram.com/buchathecat/
+
+
+## Flashing:
+| Rev 5 or earlier: | Rev 6: |
+|-|-|
+| `make planck/revX:deft:dfu` | `make planck/rev6:deft:dfu-util` |
+
+## Layout:
+
+### QWERTY layer
+```
+,-----------------------------------------------------------------------------------.
+| 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  |  /   |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Ctrl | Alt  | GUI  | Copy |Lower |    Space    |Raise |Enter | Left | Down |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+### Lower layer
+```
+,-----------------------------------------------------------------------------------.
+| Del  | Alt1 | Alt2 | Alt3 | Alt4 |  (   |  )   | Num7 | Num8 | Num9 | Num0 |      |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+|      |  `   |  \   |  =   |  -   |  <   |  >   | Num4 | Num5 | Num6 | Num. | NumL |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+|      | Num/ | Num* | Num- | Num+ |  [   |  ]   | Num1 | Num2 | Num3 | Pgup | Num= |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      |Paste |      |             |      | NumE | Home | Pgdn | End  |
+`-----------------------------------------------------------------------------------'
+```
+
+### Raise layer
+```
+,-----------------------------------------------------------------------------------.
+|      |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+|      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  | F10  |      |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+|      | F11  | F12  | F13  | F14  | F15  | F16  | F17  | F18  | F19  | Vol+ |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      | Cut  |      |             |      |      | Play | Vol- | Next |
+`-----------------------------------------------------------------------------------'
+```
+
+### Adjust layer
+```
+,-----------------------------------------------------------------------------------.
+|Reset |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+|      |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+|      |      |      |      |      |      |      |      |      |      |      |      |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+|      |      |      |      |      |             |      |      |      |      |      |
+`-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/planck/keymaps/deft/rules.mk b/keyboards/planck/keymaps/deft/rules.mk
new file mode 100644 (file)
index 0000000..dcf16be
--- /dev/null
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/dvorak2space/config.h b/keyboards/planck/keymaps/dvorak2space/config.h
new file mode 100644 (file)
index 0000000..0927fa0
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+#define TAPPING_TOGGLE 1
+#define PERMISSIVE_HOLD
diff --git a/keyboards/planck/keymaps/dvorak2space/keymap.c b/keyboards/planck/keymaps/dvorak2space/keymap.c
new file mode 100644 (file)
index 0000000..4b07759
--- /dev/null
@@ -0,0 +1,242 @@
+#include QMK_KEYBOARD_H
+#include "passwords.c" //Instead of extern just to cut down on compile time. Holds a single array.
+#define MOUSEL KC_BTN1
+#define MOUSER KC_BTN2
+#define CTRLL LCTL(KC_LEFT)
+#define CTRLR LCTL(KC_RGHT)
+#define CAD LCTL(LALT(KC_DEL))
+
+#define BASE_L  0
+#define SHFT_L  1
+#define MOD_L   2
+#define NAV_L   3
+#define AHK_L   4
+#define LOCK_L  5
+#define PASS_L  6
+
+static host_driver_t *host_driver = 0;
+
+enum {
+  HK_SLP = SAFE_RANGE,
+  HK_IF,
+  HK_ELSE,
+  HK_COSL
+};
+
+enum {
+  FB = 0,
+  LPN,
+  RPN,
+  BCK,
+  DSH
+};
+
+enum {
+  SINGLE_TAP = 1,
+  SINGLE_HOLD = 2,
+  DOUBLE_TAP = 3,
+  DOUBLE_HOLD = 4,
+  DOUBLE_SINGLE_TAP = 5, //Distinguishes between double tapping and typing, "tapping", for example. Not sure how accurate it is, and I have no need, so avoiding it at the moment.
+  TRIPLE_TAP = 6,
+  TRIPLE_HOLD = 7
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Base
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   '  |   ,  |   .  |   p  |   y  |   f  |   g  |   c  |   r  |   l  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Nav  |   a  |   o  |   e  |   u  |   i  |   d  |   h  |   t  |   n  |   s  | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shft |   ;  |   q  |   j  |   k  |   x  |   b  |   m  |   w  |   v  |   z  | Shft |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc  | RClk | LClk | Ctrl |    Space    |   Modifier  |  GUI | VolD | VolU |Macros|
+ * `-----------------------------------------------------------------------------------'
+ */
+  [0] = LAYOUT_planck_2x2u(
+    KC_TAB,  KC_QUOT,KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    TD(BCK),
+    MO(NAV_L),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_ESC,  MOUSER, MOUSEL,  KC_LCTL,          KC_SPC,  MO(MOD_L),        KC_LGUI, KC_VOLD, KC_VOLU, OSL(AHK_L)
+  ),
+/* Custom Shifts
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |   ?  |   !  |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |             |             |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+  [1] = LAYOUT_planck_2x2u(
+    KC_TRNS,KC_TRNS,KC_SLSH,KC_1,   KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_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
+  ),
+/* Modifier
+ * ,-----------------------------------------------------------------------------------.
+ * |  Tab |   +  |   -  |   *  |  / \ |  if  | else |  ( [ |  ) ] |   {  |   }  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   =  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |   `  |   <  |   >  |   &  |   |  |   _  |   $  |   @  |   #  |   %  |   ^  |   ~  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |    Space    |             |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+  [2] = LAYOUT_planck_2x2u(
+    KC_TRNS,KC_PLUS,TD(DSH),KC_ASTR,TD(FB), HK_IF,  HK_ELSE,TD(LPN),TD(RPN),KC_LCBR,KC_RCBR,KC_TRNS,
+    KC_EQL, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_TRNS,
+    KC_GRV, KC_LT,  KC_GT,  KC_AMPR,KC_PIPE,KC_UNDS,KC_DLR, KC_AT,  KC_HASH,KC_PERC,KC_CIRC,LSFT(KC_GRV),
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,          KC_SPC, KC_TRNS,        KC_NO,  KC_NO,  KC_NO,  KC_NO
+  ),
+//Nav
+  [3] = LAYOUT_planck_2x2u(
+    KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_HOME,KC_UP,  KC_END,  KC_NO,  KC_TRNS,
+    KC_TRNS,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  CTRLL,  KC_LEFT,KC_DOWN,KC_RGHT, CTRLR,  KC_TRNS,
+    KC_LSFT,KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,   KC_NO,  KC_NO,
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,          KC_SPC, KC_NO,          KC_NO,  KC_NO,   KC_NO,  KC_NO
+  ),
+//AHK-Bindable Macros
+  [4] = LAYOUT_planck_2x2u(
+    KC_F13,      KC_F14,      KC_F15,      KC_F16,      KC_F17,      KC_F18,      KC_F19,      KC_F20,      KC_F21,      KC_F22,      KC_F23,      KC_F24,
+    LCTL(KC_F13),LCTL(KC_F14),LCTL(KC_F15),LCTL(KC_F16),LCTL(KC_F17),LCTL(KC_F18),LCTL(KC_F19),LCTL(KC_F20),LCTL(KC_F21),LCTL(KC_F22),LCTL(KC_F23),LCTL(KC_F24),
+    LSFT(KC_F13),LSFT(KC_F14),LSFT(KC_F15),LSFT(KC_F16),LSFT(KC_F17),LSFT(KC_F18),LSFT(KC_F19),LSFT(KC_F20),LSFT(KC_F21),LSFT(KC_F22),LSFT(KC_F23),LSFT(KC_F24),
+    RESET,       LALT(KC_F14),LALT(KC_F15),OSL(PASS_L),              CAD,         LALT(KC_F19),             LALT(KC_F21),LALT(KC_F22),HK_SLP,      HK_COSL
+  ),
+//Locked Screen
+  [5] = LAYOUT_planck_2x2u(
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,          KC_NO,  KC_NO,          KC_NO,  KC_NO,  HK_SLP, KC_NO
+  ),
+//Passwords (by first letter of service name, at least better than just one)
+  [6] = LAYOUT_planck_2x2u(
+    KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_NO,
+    KC_NO,  KC_A,   KC_O,   KC_E,   KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_NO,
+    KC_NO,  KC_NO,  KC_Q,   KC_J,   KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_NO,
+    KC_NO,  KC_NO,  KC_NO,  HK_COSL,         KC_NO,   KC_NO,            KC_NO,   KC_NO,   KC_NO,   KC_NO
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) { //X_KEY doesn't support aliases
+  switch(keycode) {
+    //if shift pressed and not shift layer or released and other shift not pressed
+    //in separate things because MOD_BIT (probably?) isn't toggled until after this returns true and shift is actually toggled
+    case KC_LSFT: //if pressed and not shift layer or released and other shift not pressed
+      if((record->event.pressed && IS_LAYER_OFF(SHFT_L)) || (!record->event.pressed && !(get_mods() & MOD_BIT(KC_RSFT)))) { layer_invert(SHFT_L); }
+      break;
+    case KC_RSFT:
+      if((record->event.pressed && IS_LAYER_OFF(SHFT_L)) || (!record->event.pressed && !(get_mods() & MOD_BIT(KC_LSFT)))) { layer_invert(SHFT_L); }
+      break;
+    case KC_ENT: //won't repeat on hold and I can't find a solution other than hardcoding timers but I kinda prefer it anyway. Swaps enter and shift enter
+      if(record->event.pressed) {
+        (IS_LAYER_ON(SHFT_L)) //if shifted release correct shift, send, and press same shift, else send shift enter
+          ? (get_mods() & MOD_BIT(KC_LSFT))
+            ? SEND_STRING(SS_UP(X_LSHIFT) SS_TAP(X_ENTER) SS_DOWN(X_LSHIFT))
+            : SEND_STRING(SS_UP(X_RSHIFT) SS_TAP(X_ENTER) SS_DOWN(X_RSHIFT))
+          : SEND_STRING(SS_LSFT(SS_TAP(X_ENTER)));
+      }
+      return false;
+    case HK_IF:
+      if(record->event.pressed) { SEND_STRING("if"); }
+      break;
+    case HK_ELSE:
+      if(record->event.pressed) { SEND_STRING("else"); }
+      break;
+    case HK_COSL:
+      clear_keyboard();
+      break;
+    case HK_SLP:
+      if(record->event.pressed) {
+        if(IS_LAYER_OFF(LOCK_L)) {
+          host_driver = host_get_driver();
+          SEND_STRING(SS_LALT(SS_TAP(X_F23)));
+          host_set_driver(0);
+        }
+        else {
+          host_set_driver(host_driver);
+          SEND_STRING(SS_LALT(SS_TAP(X_F24)));
+        }
+        return false;
+      }
+      layer_invert(LOCK_L);
+      if(IS_LAYER_ON(AHK_L))
+        layer_invert(AHK_L);
+      break;
+    default:
+      if(IS_LAYER_ON(PASS_L) && keycode <= KC_Z) {
+        SEND_STRING(passwords[keycode - KC_A]);
+        layer_invert(PASS_L);
+        return false;
+      }
+  }
+  return true;
+};
+
+//tapdance state evaluation
+int cur_dance(qk_tap_dance_state_t *state) {
+  int press = 0;
+  switch(state->count) {
+    case 1:
+      press = (state->interrupted || !state->pressed)
+        ? SINGLE_TAP
+        : SINGLE_HOLD;
+      break;
+     case 2:
+      press = DOUBLE_TAP;
+      break;
+    case 3:
+      press = TRIPLE_TAP;
+  }
+  return press;
+}
+
+void back_tap(qk_tap_dance_state_t *state, void *user_data) { tap_code(KC_BSPACE); }
+
+void back_finished(qk_tap_dance_state_t *state, void *user_data) { if(!(state->interrupted || !state->pressed)) tap_code16(LCTL(KC_BSPACE)); }
+
+void slash_finished(qk_tap_dance_state_t *state, void *user_data) {
+  int td_state = cur_dance(state);
+  switch(td_state) {
+    case SINGLE_TAP:
+      clear_mods();
+      clear_weak_mods();
+      tap_code(KC_SLSH);
+      break;
+    case DOUBLE_TAP:
+      tap_code(KC_NUBS);
+  }
+}
+
+void dash_finished(qk_tap_dance_state_t *state, void *user_data) {
+  int td_state = cur_dance(state);
+  switch(td_state) {
+    case SINGLE_TAP:
+      tap_code(KC_PMNS);
+      break;
+    case SINGLE_HOLD:
+      register_mods(MOD_BIT(KC_LALT));
+      tap_code(KC_KP_0);
+      tap_code(KC_KP_1);
+      tap_code(KC_KP_5);
+      tap_code(KC_KP_1);
+      unregister_mods(MOD_BIT(KC_LALT));
+      break;
+    case DOUBLE_TAP:
+      tap_code(KC_PMNS);
+      tap_code(KC_PMNS);
+  }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [LPN] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
+  [RPN] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
+  [FB]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, slash_finished, NULL),
+  [BCK] = ACTION_TAP_DANCE_FN_ADVANCED(back_tap, back_finished, NULL), //each tap, on finished, and reset. Normally register_code on press unregister on reset so keys can be held down.
+  [DSH] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dash_finished, NULL)
+};
diff --git a/keyboards/planck/keymaps/dvorak2space/passwords.c b/keyboards/planck/keymaps/dvorak2space/passwords.c
new file mode 100644 (file)
index 0000000..161c564
--- /dev/null
@@ -0,0 +1,28 @@
+char *passwords[26] = {
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  "",
+  ""
+};
diff --git a/keyboards/planck/keymaps/dvorak2space/readme.md b/keyboards/planck/keymaps/dvorak2space/readme.md
new file mode 100644 (file)
index 0000000..1844a57
--- /dev/null
@@ -0,0 +1,5 @@
+![Keyboard Layout](https://i.imgur.com/9jYjllM.png)
+
+# IsaacElenbaas's Planck Layout
+
+Split spacebar, Dvorak. Bottom right button leads to layer with lots of things to be mapped in AutoHotkey. The ones I use (of which the best are sleep, which turns off the monitors and locks all inputs, rebinding keyboard-only mouse inputs, and redirecting media keys to a specific player) can be found [here.](https://github.com/IsaacElenbaas/personal_scripts/blob/master/Keyboard.ahk) Capslock goes to a right-hand navigation layer, there is a custom layer when holding shift, holding dash gives an em dash, holding backspace deletes a word, and I have a obfuscation-based password system you probably shouldn't use, but the rest is pretty standard.
diff --git a/keyboards/planck/keymaps/dvorak2space/rules.mk b/keyboards/planck/keymaps/dvorak2space/rules.mk
new file mode 100644 (file)
index 0000000..59f9f1d
--- /dev/null
@@ -0,0 +1,20 @@
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+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 = no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work. Can make windows not recognize device.
+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.
+API_SYSEX_ENABLE = no
+TAP_DANCE_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
+
+LAYOUTS_HAS_RGB = no
index 7ace78903460056d1b68793cff90fe58b518c55e..71f44c996e2d1388cb6b565b06e15b0a42677402 100644 (file)
@@ -108,10 +108,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 */
 
 [_NAV] = LAYOUT_ortho_4x12(
-  ALTF4,    KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
+  _______,  KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
   _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_END,   XXXXXXX,  XXXXXXX,  GUIL,     GUID,     GUIR,     EMOJI,    KC_ENT,
   _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  MU_ON,    XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,
-  RESET,    CU_ESCT,  _______,  _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
+  RESET,    CU_ESCT,  ALTF4,    _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
 )
 
 };
diff --git a/keyboards/planck/keymaps/tylerwince/config.h b/keyboards/planck/keymaps/tylerwince/config.h
new file mode 100644 (file)
index 0000000..24adad9
--- /dev/null
@@ -0,0 +1,18 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+#define STARTUP_SONG SONG(PLANCK_SOUND)
+#endif
+
+#define MIDI_BASIC
+
+#define ENCODER_RESOLUTION 4
+
+/*
+  Set any config.h overrides for your specific keymap here.
+  See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
+*/
+#define TAPPING_FORCE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#define EECONFIG_RGB_MATRIX (uint32_t *)16
diff --git a/keyboards/planck/keymaps/tylerwince/keymap.c b/keyboards/planck/keymaps/tylerwince/keymap.c
new file mode 100644 (file)
index 0000000..30412e9
--- /dev/null
@@ -0,0 +1,294 @@
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+enum planck_keycodes {
+  RGB_SLD = SAFE_RANGE,
+  TOGGLE_LAYER_COLOR,
+};
+
+enum planck_layers {
+  _BASE,
+  _LOWER,
+  _RAISE,
+  _ADJUST,
+  _LAYER4,
+};
+
+//Tap Dance Declarations
+enum {
+  TD_SEMI_COLON,
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_SEMI_COLON] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT_planck_grid(
+            /* _BASE
+             * ,-----------------------------------------------------------------------------------.
+             * | Tab  |   '  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |   /  |
+             * |------+------+------+------+------+-------------+------+------+------+------+------|
+             * |CtlEsc|   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  | Bksp |
+             * |------+------+------+------+------+------|------+------+------+------+------+------|
+             * |      |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+             * |------+------+------+------+------+------+------+------+------+------+------+------|
+             * |      | Ctrl | Alt  | GUI  |LOWER | Shift/Space | RAISE|      |      |      |      |
+             * `-----------------------------------------------------------------------------------'
+             */
+          KC_TAB,            KC_QUOTE,          KC_COMMA, KC_DOT,  KC_P,  KC_Y,             KC_F,  KC_G,  KC_C,    KC_R,    KC_L,    KC_SLASH,
+          LCTL_T(KC_ESCAPE), KC_A,              KC_O,     KC_E,    KC_U,  KC_I,             KC_D,  KC_H,  KC_T,    KC_N,    KC_S,    KC_BSPACE,
+          _______,           TD(TD_SEMI_COLON), KC_Q,     KC_J,    KC_K,  KC_X,             KC_B,  KC_M,  KC_W,    KC_V,    KC_Z,    KC_ENTER,
+          _______,           KC_LCTRL,          KC_LALT,  KC_LGUI, LOWER, LSFT_T(KC_SPACE), KC_NO, RAISE, _______, _______, _______, _______
+          ),
+
+  [_LOWER] = LAYOUT_planck_grid(
+            /* _LOWER
+             * ,-----------------------------------------------------------------------------------.
+             * |  `   |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |   \  |
+             * |------+------+------+------+------+-------------+------+------+------+------+------|
+             * |  ~   |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |   |  |
+             * |------+------+------+------+------+------|------+------+------+------+------+------|
+             * |      |      |      |      |      |      |      |   _  |   +  |   {  |   }  |Delete|
+             * |------+------+------+------+------+------+------+------+------+------+------+------|
+             * |      | Ctrl | Alt  | GUI  |LOWER | Shift/Space | RAISE|      |   [  |   ]  |      |
+             * `-----------------------------------------------------------------------------------'
+             */
+          KC_GRAVE, KC_1,     KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,        KC_0,        KC_BSLASH,
+          KC_TILD,  KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN,     KC_RPRN,     KC_PIPE,
+          _______,  _______,  _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR,     KC_RCBR,     KC_DELETE,
+          _______,  KC_LCTRL, KC_LALT, KC_LGUI, _______, _______, KC_NO,   _______, _______, KC_LBRACKET, KC_RBRACKET, _______
+          ),
+
+  [_RAISE] = LAYOUT_planck_grid(
+            /* _RAISE
+             * ,-----------------------------------------------------------------------------------.
+             * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |      |      |      |      |RIGHT |      |
+             * |------+------+------+------+------+-------------+------+------+------+------+------|
+             * |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      | LEFT |      |      |      |Delete|
+             * |------+------+------+------+------+------|------+------+------+------+------+------|
+             * |      |      |      | DOWN |  UP  |      |      |   -  |   =  |      |      |      |
+             * |------+------+------+------+------+------+------+------+------+------+------+------|
+             * |THINGS|1PASS |      |      |LOWER | Shift/Space | RAISE|      |      |      |      |
+             * `-----------------------------------------------------------------------------------'
+             */
+
+          KC_F1,          KC_F2,           KC_F3,   KC_F4,   KC_F5,   KC_F6,   _______, _______,  _______,  _______, KC_RIGHT, _______,
+          KC_F7,          KC_F8,           KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_LEFT,  _______,  _______, _______,  KC_DELETE,
+          _______,        _______,         _______, KC_DOWN, KC_UP,   _______, _______, KC_MINUS, KC_EQUAL, _______, _______,  _______,
+          LALT(KC_SPACE), LGUI(KC_BSLASH), _______, _______, _______, _______, KC_NO,   _______,  _______,  _______, _______,  _______
+          ),
+
+  [_ADJUST] = LAYOUT_planck_grid(
+            /* _LOWER
+             * ,-----------------------------------------------------------------------------------.
+             * |Reset |      |      |      |      |WIN-TL|WIN-TR|      |      |      |WIN-R |      |
+             * |------+------+------+------+------+-------------+------+------+------+------+------|
+             * |      |      |      |      |      |WIN-BL|WIN-BR|WIN-L |      |      |      |      |
+             * |------+------+------+------+------+------|------+------+------+------+------+------|
+             * |      |      |      |WIN-B |WIN-T |      |      |      |      |      |      |      |
+             * |------+------+------+------+------+------+------+------+------+------+------+------|
+             * | BASE |LAYER4|      |      |LOWER | Shift/Space | RAISE|VOL-DN| BR-DN|BR-UP |VOL-UP|
+             * `-----------------------------------------------------------------------------------'
+             */
+
+          RESET,   _______, _______, _______,          _______,          LALT(LCTL(KC_7)), LALT(LCTL(KC_8)), _______,          _______,           _______, LALT(LCTL(KC_L)), _______, 
+          _______, _______, _______, _______,          _______,          LALT(LCTL(KC_U)), LALT(LCTL(KC_I)), LALT(LCTL(KC_H)), _______,           _______, _______,          _______,          
+          _______, _______, _______, LALT(LCTL(KC_J)), LALT(LCTL(KC_K)), _______,          _______,          _______,          _______,           _______, _______,          LALT(LCTL(KC_ENTER)),
+          TO(0),   TO(4),   _______, _______,          _______,          _______,          KC_NO,            _______,          KC_AUDIO_VOL_DOWN, KC_F14,  KC_F15,           KC_AUDIO_VOL_UP
+          ),
+
+  [_LAYER4] = LAYOUT_planck_grid(
+            /* _LOWER
+             * ,-----------------------------------------------------------------------------------.
+             * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  |   '  |
+             * |------+------+------+------+------+-------------+------+------+------+------+------|
+             * |CtlEsc|   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  | Bksp |
+             * |------+------+------+------+------+------|------+------+------+------+------+------|
+             * |      |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+             * |------+------+------+------+------+------+------+------+------+------+------+------|
+             * |      | Ctrl | Alt  | GUI  |LOWER | Shift/Space | RAISE|      |      |      |      |
+             * `-----------------------------------------------------------------------------------'
+             */
+
+          KC_TAB,            KC_Q,    KC_W,    KC_E,    KC_R,  KC_T,             KC_Y,  KC_U,  KC_I,     KC_O,    KC_P,      KC_QUOTE,
+          LCTL_T(KC_ESCAPE), KC_A,    KC_S,    KC_D,    KC_F,  KC_G,             KC_H,  KC_J,  KC_K,     KC_L,    KC_SCOLON, KC_BSPACE,
+          _______,           KC_Z,    KC_X,    KC_C,    KC_V,  KC_B,             KC_N,  KC_M,  KC_COMMA, KC_DOT,  KC_SLASH,  KC_ENTER,
+          _______,           KC_LCTL, KC_LALT, KC_LGUI, LOWER, LSFT_T(KC_SPACE), KC_NO, RAISE, _______,  _______, _______,   _______
+          ),
+
+};
+
+extern bool g_suspend_state;
+extern rgb_config_t rgb_matrix_config;
+bool disable_layer_color = 0;
+
+void keyboard_post_init_user(void) {
+  rgb_matrix_enable();
+}
+
+const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = {
+    [0] = { {32,255,234}, {32,255,234}, {12,225,241}, {12,225,241}, {0,204,255}, {0,204,255}, {169,120,255}, {169,120,255}, {169,120,255}, {146,224,255}, {146,224,255}, {146,224,255},
+            {32,255,234}, {32,255,234}, {12,225,241}, {12,225,241}, {0,204,255}, {0,204,255}, {169,120,255}, {169,120,255}, {169,120,255}, {146,224,255}, {146,224,255}, {146,224,255},
+            {32,255,234}, {32,255,234}, {12,225,241}, {12,225,241}, {0,204,255}, {0,204,255}, {169,120,255}, {169,120,255}, {169,120,255}, {146,224,255}, {146,224,255}, {146,224,255}, 
+            {32,255,234}, {32,255,234}, {12,225,241}, {12,225,241}, {0,204,255}, {0,0,0},     {169,120,255}, {169,120,255}, {146,224,255}, {146,224,255}, {146,224,255} },
+
+    [1] = { {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255},
+            {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255},
+            {0,0,0},     {0,0,0},     {0,0,0},     {0,0,0},     {0,0,0},     {0,0,0},     {0,0,0},     {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255},
+            {0,0,0},     {0,204,255}, {0,204,255}, {0,204,255}, {0,204,255}, {0,0,0},     {0,0,0},     {0,0,0},     {0,204,255}, {0,204,255}, {0,0,0} },
+
+    [2] = { {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {169,120,255}, {0,0,0},
+            {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {169,120,255}, {0,0,0}, {0,0,0}, {0,0,0}, {169,120,255},
+            {0,0,0}, {0,0,0}, {0,0,0}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {0,0,0},
+            {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {169,120,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+    [4] = { {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255}, {105,255,255} },
+
+};
+
+void set_layer_color(int layer) {
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    HSV hsv = {
+      .h = pgm_read_byte(&ledmap[layer][i][0]),
+      .s = pgm_read_byte(&ledmap[layer][i][1]),
+      .v = pgm_read_byte(&ledmap[layer][i][2]),
+    };
+    if (!hsv.h && !hsv.s && !hsv.v) {
+        rgb_matrix_set_color( i, 0, 0, 0 );
+    } else {
+        RGB rgb = hsv_to_rgb( hsv );
+        rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b );
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+  if (g_suspend_state || disable_layer_color) { return; }
+  switch (biton32(layer_state)) {
+    case 0:
+      set_layer_color(0);
+      break;
+    case 1:
+      set_layer_color(1);
+      break;
+    case 2:
+      set_layer_color(2);
+      break;
+    case 4:
+      set_layer_color(4);
+      break;
+  }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case RGB_SLD:
+      if (record->event.pressed) {
+        rgblight_mode(1);
+      }
+      return false;
+    case RGB_TOG:
+  if (record->event.pressed) {
+    if (rgb_matrix_config.val) {
+      rgb_matrix_sethsv(rgb_matrix_config.hue, rgb_matrix_config.sat, 0);
+    } else {
+      rgb_matrix_sethsv(rgb_matrix_config.hue, rgb_matrix_config.sat, 255);
+    }
+  }
+  return false;
+    case TOGGLE_LAYER_COLOR:
+      if (record->event.pressed) {
+        disable_layer_color ^= 1;
+      }
+      return false;
+  }
+  return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+    if (muse_mode) {
+        if (IS_LAYER_ON(_RAISE)) {
+            if (clockwise) {
+                muse_offset++;
+            } else {
+                muse_offset--;
+            }
+        } else {
+            if (clockwise) {
+                muse_tempo+=1;
+            } else {
+                muse_tempo-=1;
+            }
+        }
+    } else {
+        if (clockwise) {
+        #ifdef MOUSEKEY_ENABLE
+            tap_code(KC_MS_WH_DOWN);
+        #else
+            tap_code(KC_PGDN);
+        #endif
+        } else {
+        #ifdef MOUSEKEY_ENABLE
+            tap_code(KC_MS_WH_UP);
+        #else
+            tap_code(KC_PGUP);
+        #endif
+        }
+    }
+}
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+    if (muse_mode) {
+        if (muse_counter == 0) {
+            uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+            if (muse_note != last_muse_note) {
+                stop_note(compute_freq_for_midi_note(last_muse_note));
+                play_note(compute_freq_for_midi_note(muse_note), 0xF);
+                last_muse_note = muse_note;
+            }
+        }
+        muse_counter = (muse_counter + 1) % muse_tempo;
+    }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+    switch (keycode) {
+    case RAISE:
+    case LOWER:
+        return false;
+    default:
+        return true;
+    }
+}
+uint32_t layer_state_set_user(uint32_t state) {
+    palClearPad(GPIOB, 8);
+    palClearPad(GPIOB, 9);
+    uint8_t layer = biton32(state);
+    switch (layer) {
+        case _LOWER:
+            palSetPad(GPIOB, 9);
+            break;
+        case _RAISE:
+            palSetPad(GPIOB, 8);
+            break;
+        case _ADJUST:
+            palSetPad(GPIOB, 9);
+            palSetPad(GPIOB, 8);
+            break;
+        default:
+            break;
+    }
+    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/planck/keymaps/tylerwince/rules.mk b/keyboards/planck/keymaps/tylerwince/rules.mk
new file mode 100644 (file)
index 0000000..a4f1a0b
--- /dev/null
@@ -0,0 +1,7 @@
+SRC += muse.c
+# Set any rules.mk overrides for your specific keymap here.
+# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+COMMAND_ENABLE = no
+MOUSEKEY_ENABLE = no
+TAP_DANCE_ENABLE=yes
index 34566f85d3c886964ab3b5e9d12267a2f23e2a53..fa8f4c43beab4f9047e49396f72f7c11adaf645f 100644 (file)
@@ -1,4 +1,115 @@
 {
   "keyboard_name": "Planck Light",
-  "keyboard_folder": "planck/light"
+  "keyboard_folder": "planck/light",
+  "url": "https://olkb.com/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
 }
index a395f30e8877c89196621ab80a22542fbc3b5cd9..2cf46c2a2769fd9ad163b286a92c708ba990af4a 100644 (file)
 #include "planck.h"
 #include "rgb_matrix.h"
 
+#define LAYOUT_planck_1x2uC( \
+    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { 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 } \
+}
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
+
 #endif
\ No newline at end of file
diff --git a/keyboards/planck/light/readme.md b/keyboards/planck/light/readme.md
new file mode 100644 (file)
index 0000000..f372e1f
--- /dev/null
@@ -0,0 +1,15 @@
+# Planck Light
+
+![Planck Light](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/planck/light/planck_light.jpg)
+
+A Planck variant sold by Massdrop. Designed for Kailh PG1350 "Choc" switches, the Planck Light Features per-key RGB backlighting and a dual-channel speaker. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck Light  
+Hardware Availability: [Massdrop](https://www.massdrop.com/buy/massdrop-x-olkb-planck-light-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/light:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
index 09ac0c6077d1ffa4383d87a6ac3263e49b10f43a..1beafa7764a481d0af9563683bd16337115eb16c 100644 (file)
 
 #define encoder_update(clockwise) encoder_update_user(uint8_t index, clockwise)
 
-#ifdef KEYBOARD_planck_ez
+#if defined(KEYBOARD_planck_ez)
   #include "ez.h"
-#endif
-
-#ifdef __AVR__ // Planck revs. 1-5
-
-  #define LAYOUT_planck_1x2uC( \
-    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
-  }
-
-  #define LAYOUT_ortho_4x12( \
-    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 \
-  ) \
-  { \
-    { 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 } \
-  }
-
-#elif KEYBOARD_planck_rev6
-
-  #define LAYOUT_planck_1x2uC( \
-    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,    k36,   k37, k38, k39, k3a, k3b \
-  ) \
-  { \
-    { k00, k01, k02, k03, k04, k05   }, \
-    { k10, k11, k12, k13, k14, k15   }, \
-    { k20, k21, k22, k23, k24, k25   }, \
-    { k30, k31, k32, k39, k3a, k3b   }, \
-    { k06, k07, k08, k09, k0a, k0b   }, \
-    { k16, k17, k18, k19, k1a, k1b   }, \
-    { k26, k27, k28, k29, k2a, k2b   }, \
-    { k36, k37, k38, k33, k34, KC_NO } \
-  }
-
-  #define LAYOUT_planck_1x2uR( \
-    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,   k37,    k38, k39, k3a, k3b \
-  ) \
-  { \
-    { k00,   k01, k02, k03, k04, k05 }, \
-    { k10,   k11, k12, k13, k14, k15 }, \
-    { k20,   k21, k22, k23, k24, k25 }, \
-    { k30,   k31, k32, k39, k3a, k3b }, \
-    { k06,   k07, k08, k09, k0a, k0b }, \
-    { k16,   k17, k18, k19, k1a, k1b }, \
-    { k26,   k27, k28, k29, k2a, k2b }, \
-    { KC_NO, k37, k38, k33, k34, k35 } \
-  }
-
-  #define LAYOUT_planck_1x2uL( \
-    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,   k35,    k36, k37, k38, k39, k3a, k3b \
-  ) \
-  { \
-    { k00, k01, k02, k03, k04,   k05 }, \
-    { k10, k11, k12, k13, k14,   k15 }, \
-    { k20, k21, k22, k23, k24,   k25 }, \
-    { k30, k31, k32, k39, k3a,   k3b }, \
-    { k06, k07, k08, k09, k0a,   k0b }, \
-    { k16, k17, k18, k19, k1a,   k1b }, \
-    { k26, k27, k28, k29, k2a,   k2b }, \
-    { k36, k37, k38, k33, KC_NO, k35 } \
-  }
-
-  #define LAYOUT_planck_2x2u( \
-    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,   k35,      k37,    k38, k39, k3a, k3b \
-  ) \
-  { \
-    { k00,   k01, k02, k03, k04,   k05 }, \
-    { k10,   k11, k12, k13, k14,   k15 }, \
-    { k20,   k21, k22, k23, k24,   k25 }, \
-    { k30,   k31, k32, k39, k3a,   k3b }, \
-    { k06,   k07, k08, k09, k0a,   k0b }, \
-    { k16,   k17, k18, k19, k1a,   k1b }, \
-    { k26,   k27, k28, k29, k2a,   k2b }, \
-    { KC_NO, k37, k38, k33, KC_NO, k35 } \
-  }
-
-  #define LAYOUT_ortho_4x12( \
-    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 \
-  ) \
-  { \
-    { k00, k01, k02, k03, k04, k05 }, \
-    { k10, k11, k12, k13, k14, k15 }, \
-    { k20, k21, k22, k23, k24, k25 }, \
-    { k30, k31, k32, k39, k3a, k3b }, \
-    { k06, k07, k08, k09, k0a, k0b }, \
-    { k16, k17, k18, k19, k1a, k1b }, \
-    { k26, k27, k28, k29, k2a, k2b }, \
-    { k36, k37, k38, k33, k34, k35 } \
-  }
-
-#endif
-
-// all Planck keyboards
-
-// Used to create a keymap using only KC_ prefixed keys
-#define LAYOUT_kc( \
-  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 \
-) \
-LAYOUT_ortho_4x12( \
-  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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
-  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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
-)
-
-#define KEYMAP LAYOUT_ortho_4x12
-#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
-#define LAYOUT_planck_grid LAYOUT_ortho_4x12
-#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
-#define KC_KEYMAP LAYOUT_kc
+#elif defined(KEYBOARD_planck_light)
+  #include "light.h"
+#elif defined(KEYBOARD_planck_rev1)
+  #include "rev1.h"
+#elif defined(KEYBOARD_planck_rev2)
+  #include "rev2.h"
+#elif defined(KEYBOARD_planck_rev3)
+  #include "rev3.h"
+#elif defined(KEYBOARD_planck_rev4)
+  #include "rev4.h"
+#elif defined(KEYBOARD_planck_rev5)
+  #include "rev5.h"
+#elif defined(KEYBOARD_planck_rev6)
+  #include "rev6.h"
+#endif // Planck revisions
 
 #endif
index 94b256c74518b20831f1b34c7da05d59e86f2e78..0d836563c4112409eb6976dc37e4f1ae7d83c9ec 100644 (file)
@@ -6,7 +6,7 @@ Planck
 A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
 
 Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
-Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, rev5, rev6; Planck Light  
+Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, rev5, rev6; Planck Light, Planck EZ  
 Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
 
 Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/planck/rev1/info.json b/keyboards/planck/rev1/info.json
new file mode 100644 (file)
index 0000000..c64cdbf
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "keyboard_name": "Planck rev 1",
+  "keyboard_folder": "planck/rev1",
+  "url": "https://olkb.com/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
diff --git a/keyboards/planck/rev1/readme.md b/keyboards/planck/rev1/readme.md
new file mode 100644 (file)
index 0000000..b5561fc
--- /dev/null
@@ -0,0 +1,13 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck PCB rev1  
+Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/rev1:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/planck/rev1/rev1.h b/keyboards/planck/rev1/rev1.h
new file mode 100644 (file)
index 0000000..f81b36b
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "planck.h"
+
+#define LAYOUT_planck_1x2uC( \
+    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { 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 } \
+}
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
diff --git a/keyboards/planck/rev2/info.json b/keyboards/planck/rev2/info.json
new file mode 100644 (file)
index 0000000..68f89f6
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "keyboard_name": "Planck rev 2",
+  "keyboard_folder": "planck/rev2",
+  "url": "https://olkb.com/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
diff --git a/keyboards/planck/rev2/readme.md b/keyboards/planck/rev2/readme.md
new file mode 100644 (file)
index 0000000..16fa8b7
--- /dev/null
@@ -0,0 +1,13 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck PCB rev2  
+Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/rev2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/planck/rev2/rev2.h b/keyboards/planck/rev2/rev2.h
new file mode 100644 (file)
index 0000000..f81b36b
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "planck.h"
+
+#define LAYOUT_planck_1x2uC( \
+    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { 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 } \
+}
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
diff --git a/keyboards/planck/rev3/info.json b/keyboards/planck/rev3/info.json
new file mode 100644 (file)
index 0000000..65e59ad
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "keyboard_name": "Planck rev 3",
+  "keyboard_folder": "planck/rev3",
+  "url": "https://olkb.com/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
diff --git a/keyboards/planck/rev3/readme.md b/keyboards/planck/rev3/readme.md
new file mode 100644 (file)
index 0000000..26ef898
--- /dev/null
@@ -0,0 +1,13 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck PCB rev3  
+Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/rev3:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/planck/rev3/rev3.h b/keyboards/planck/rev3/rev3.h
new file mode 100644 (file)
index 0000000..f81b36b
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "planck.h"
+
+#define LAYOUT_planck_1x2uC( \
+    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { 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 } \
+}
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
diff --git a/keyboards/planck/rev4/info.json b/keyboards/planck/rev4/info.json
new file mode 100644 (file)
index 0000000..ad135b6
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "keyboard_name": "Planck rev 4",
+  "keyboard_folder": "planck/rev4",
+  "url": "https://olkb.com/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
diff --git a/keyboards/planck/rev4/readme.md b/keyboards/planck/rev4/readme.md
new file mode 100644 (file)
index 0000000..4cf6e8c
--- /dev/null
@@ -0,0 +1,13 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. The first revision of the Planck to support Audio. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck PCB rev4  
+Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/rev4:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/planck/rev4/rev4.h b/keyboards/planck/rev4/rev4.h
new file mode 100644 (file)
index 0000000..f81b36b
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "planck.h"
+
+#define LAYOUT_planck_1x2uC( \
+    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { 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 } \
+}
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
diff --git a/keyboards/planck/rev5/info.json b/keyboards/planck/rev5/info.json
new file mode 100644 (file)
index 0000000..6f31472
--- /dev/null
@@ -0,0 +1,115 @@
+{
+  "keyboard_name": "Planck rev 5",
+  "keyboard_folder": "planck/rev5",
+  "url": "https://olkb.com/planck",
+  "maintainer": "jackhumbert",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_planck_1x2uC": {
+      "key_count": 47,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3, "w": 2 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    },
+    "LAYOUT_ortho_4x12": {
+      "key_count": 48,
+      "layout": [
+        { "x": 0, "y": 0 },
+        { "x": 1, "y": 0 },
+        { "x": 2, "y": 0 },
+        { "x": 3, "y": 0 },
+        { "x": 4, "y": 0 },
+        { "x": 5, "y": 0 },
+        { "x": 6, "y": 0 },
+        { "x": 7, "y": 0 },
+        { "x": 8, "y": 0 },
+        { "x": 9, "y": 0 },
+        { "x": 10, "y": 0 },
+        { "x": 11, "y": 0 },
+        { "x": 0, "y": 1 },
+        { "x": 1, "y": 1 },
+        { "x": 2, "y": 1 },
+        { "x": 3, "y": 1 },
+        { "x": 4, "y": 1 },
+        { "x": 5, "y": 1 },
+        { "x": 6, "y": 1 },
+        { "x": 7, "y": 1 },
+        { "x": 8, "y": 1 },
+        { "x": 9, "y": 1 },
+        { "x": 10, "y": 1 },
+        { "x": 11, "y": 1 },
+        { "x": 0, "y": 2 },
+        { "x": 1, "y": 2 },
+        { "x": 2, "y": 2 },
+        { "x": 3, "y": 2 },
+        { "x": 4, "y": 2 },
+        { "x": 5, "y": 2 },
+        { "x": 6, "y": 2 },
+        { "x": 7, "y": 2 },
+        { "x": 8, "y": 2 },
+        { "x": 9, "y": 2 },
+        { "x": 10, "y": 2 },
+        { "x": 11, "y": 2 },
+        { "x": 0, "y": 3 },
+        { "x": 1, "y": 3 },
+        { "x": 2, "y": 3 },
+        { "x": 3, "y": 3 },
+        { "x": 4, "y": 3 },
+        { "x": 5, "y": 3 },
+        { "x": 6, "y": 3 },
+        { "x": 7, "y": 3 },
+        { "x": 8, "y": 3 },
+        { "x": 9, "y": 3 },
+        { "x": 10, "y": 3 },
+        { "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
diff --git a/keyboards/planck/rev5/readme.md b/keyboards/planck/rev5/readme.md
new file mode 100644 (file)
index 0000000..fed975a
--- /dev/null
@@ -0,0 +1,13 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck PCB rev5  
+Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/rev5:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/planck/rev5/rev5.h b/keyboards/planck/rev5/rev5.h
new file mode 100644 (file)
index 0000000..f81b36b
--- /dev/null
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "planck.h"
+
+#define LAYOUT_planck_1x2uC( \
+    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,   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, k34, k35, k35, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { 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 } \
+}
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
index 81eacabc39859b511d55911c26ee8bd8aad657f6..66dd8f575a60cf38ac46ac11c04fb10e49d89df7 100644 (file)
@@ -1,6 +1,6 @@
 {
-  "keyboard_name": "Planck",
-  "keyboard_folder": "planck",
+  "keyboard_name": "Planck rev 6",
+  "keyboard_folder": "planck/rev6",
   "url": "https://olkb.com/planck",
   "maintainer": "jackhumbert",
   "width": 12,
diff --git a/keyboards/planck/rev6/readme.md b/keyboards/planck/rev6/readme.md
new file mode 100644 (file)
index 0000000..1034eb9
--- /dev/null
@@ -0,0 +1,13 @@
+# Planck
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. A complete hardware rework of the Planck, sporting a faster and more powerful STM32 ARM Cortex-M4 microcontroller, with support for rotary encoders and three additional layouts. [More info on qmk.fm](http://qmk.fm/planck/)
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)  
+Hardware Supported: Planck PCB rev6  
+Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make planck/rev6:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
index 75c2904c5c9c05f4be0c3ce726a9e3fe60b3914c..601e347f5e1df3838550d6f6bde193caef7cad2e 100644 (file)
 
 #include "planck.h"
 
+#define LAYOUT_planck_1x2uC( \
+    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,    k36,   k37, k38, k39, k3a, k3b \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05   }, \
+    { k10, k11, k12, k13, k14, k15   }, \
+    { k20, k21, k22, k23, k24, k25   }, \
+    { k30, k31, k32, k39, k3a, k3b   }, \
+    { k06, k07, k08, k09, k0a, k0b   }, \
+    { k16, k17, k18, k19, k1a, k1b   }, \
+    { k26, k27, k28, k29, k2a, k2b   }, \
+    { k36, k37, k38, k33, k34, KC_NO } \
+}
+
+#define LAYOUT_planck_1x2uR( \
+    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,   k37,    k38, k39, k3a, k3b \
+) \
+{ \
+    { k00,   k01, k02, k03, k04, k05 }, \
+    { k10,   k11, k12, k13, k14, k15 }, \
+    { k20,   k21, k22, k23, k24, k25 }, \
+    { k30,   k31, k32, k39, k3a, k3b }, \
+    { k06,   k07, k08, k09, k0a, k0b }, \
+    { k16,   k17, k18, k19, k1a, k1b }, \
+    { k26,   k27, k28, k29, k2a, k2b }, \
+    { KC_NO, k37, k38, k33, k34, k35 } \
+}
+
+#define LAYOUT_planck_1x2uL( \
+    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,   k35,    k36, k37, k38, k39, k3a, k3b \
+) \
+{ \
+    { k00, k01, k02, k03, k04,   k05 }, \
+    { k10, k11, k12, k13, k14,   k15 }, \
+    { k20, k21, k22, k23, k24,   k25 }, \
+    { k30, k31, k32, k39, k3a,   k3b }, \
+    { k06, k07, k08, k09, k0a,   k0b }, \
+    { k16, k17, k18, k19, k1a,   k1b }, \
+    { k26, k27, k28, k29, k2a,   k2b }, \
+    { k36, k37, k38, k33, KC_NO, k35 } \
+}
+
+#define LAYOUT_planck_2x2u( \
+    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,   k35,      k37,    k38, k39, k3a, k3b \
+) \
+{ \
+    { k00,   k01, k02, k03, k04,   k05 }, \
+    { k10,   k11, k12, k13, k14,   k15 }, \
+    { k20,   k21, k22, k23, k24,   k25 }, \
+    { k30,   k31, k32, k39, k3a,   k3b }, \
+    { k06,   k07, k08, k09, k0a,   k0b }, \
+    { k16,   k17, k18, k19, k1a,   k1b }, \
+    { k26,   k27, k28, k29, k2a,   k2b }, \
+    { KC_NO, k37, k38, k33, KC_NO, k35 } \
+}
+
+#define LAYOUT_ortho_4x12( \
+    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 \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05 }, \
+    { k10, k11, k12, k13, k14, k15 }, \
+    { k20, k21, k22, k23, k24, k25 }, \
+    { k30, k31, k32, k39, k3a, k3b }, \
+    { k06, k07, k08, k09, k0a, k0b }, \
+    { k16, k17, k18, k19, k1a, k1b }, \
+    { k26, k27, k28, k29, k2a, k2b }, \
+    { k36, k37, k38, k33, k34, k35 } \
+}
+
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+    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 \
+) \
+LAYOUT_ortho_4x12( \
+    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_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
+    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_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
+
+#define KEYMAP LAYOUT_ortho_4x12
+#define LAYOUT_planck_mit  LAYOUT_planck_1x2uC
+#define LAYOUT_planck_grid LAYOUT_ortho_4x12
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
+#define KC_KEYMAP LAYOUT_kc
+
 #endif
diff --git a/keyboards/preonic/keymaps/spacebarracecar/config.h b/keyboards/preonic/keymaps/spacebarracecar/config.h
deleted file mode 100644 (file)
index 4f48857..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#pragma once
-
-#ifdef AUDIO_ENABLE
-  #define STARTUP_SONG SONG(NO_SOUND)
-#endif
diff --git a/keyboards/preonic/keymaps/spacebarracecar/keymap.c b/keyboards/preonic/keymaps/spacebarracecar/keymap.c
deleted file mode 100644 (file)
index 041fa9f..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "spacebarracecar.h"
-
-#define LOWER MO(_LOWER)
-#define RAISE MO(_RAISE)
-
-enum layers {
-  _BASE,
-  _RAISE,
-  _LOWER,
-  _MUSICMODE
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Base
-,-----------------------------------------------------------------------------------------------------------------------.
-|`        |1        |2        |3        |4        |5        |6        |7        |8        |9        |0        |\        |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Tab      |Q        |W        |E        |R        |T        |Z        |U        |I        |O        |P        |Backspace|
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Esc/Nav  |A        |S        |D        |F        |G        |H        |J        |K        |L        |;        |'        |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|Shift    |Y        |X        |C        |V        |B        |N        |M        |,        |.        |/        |Shift    |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|LCtrl    |         |Win      |Alt      |Lower    |Space    |Enter    |Raise    |AltGr    |Win      |Menu     |RCtrl    |
-`-----------------------------------------------------------------------------------------------------------------------'
-*/
-
-[_BASE] = LAYOUT_preonic_grid(
-  CU_GRV,   DE_1,     DE_2,     CU_3,     DE_4,     DE_5,     CU_6,     CU_7,     CU_8,     CU_9,     CU_0,     CU_BSLS,
-  KC_TAB,   DE_Q,     DE_W,     DE_E,     DE_R,     DE_T,     CU_Z,     DE_U,     DE_I,     DE_O,     DE_P,     KC_BSPC,
-  CU_NAV,   DE_A,     DE_S,     DE_D,     DE_F,     DE_G,     DE_H,     DE_J,     DE_K,     DE_L,     CU_SCLN,  CU_QUOT,
-  CU_LSFT,  CU_Y,     DE_X,     DE_C,     DE_V,     DE_B,     DE_N,     DE_M,     CU_COMM,  CU_DOT,   CU_SLSH,  CU_RSFT,
-  KC_LCTL,  XXXXXXX,  KC_LGUI,  KC_LALT,  LOWER,    KC_SPC,   CTLENT,   RAISE,    KC_RALT,  KC_RGUI,  KC_APP,   KC_RCTL
-),
-
-/* Lower
-,-----------------------------------------------------------------------------------------------------------------------.
-|`        |1        |2        |3        |4        |5        |6        |7        |8        |9        |0        |\        |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|~        |!        |"        |#        |$        |%        |^        |&        |*        |(        |)        |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |@        |Strg+X   |Strg+C   |Strg+V   |         |         |_        |+        |{        |}        ||        |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |?        |         |         |         |         |         |         |         |         |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |         |         |         |         |         |         |         |         |         |         |         |
-`-----------------------------------------------------------------------------------------------------------------------'
-*/
-[_LOWER] = LAYOUT_preonic_grid(
-  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
-  DE_TILD,  DE_EXLM,  DE_DQOT,  DE_HASH,  DE_DLR,   DE_PERC,  CU_CIRC,  DE_AMPR,  DE_ASTR,  DE_LPRN,  DE_RPRN,  _______,
-  _______,  DE_AT,    CTRLX,    CTRLC,    CTRLV,    XXXXXXX,  XXXXXXX,  DE_UNDS,  DE_PLUS,  DE_LCBR,  DE_RCBR,  DE_PIPE,
-  _______,  DE_EURO,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  DE_MINS,  CU_EQL,   CU_LBRC,  CU_RBRC,  _______,
-  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______
-),
-
-/* Raise
-,-----------------------------------------------------------------------------------------------------------------------.
-|`        |1        |2        |3        |4        |5        |6        |7        |8        |9        |0        |\        |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|`        |1        |2        |3        |4        |5        |6        |7        |8        |9        |0        |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |F1       |F2       |F3       |F4       |F5       |F6       |-        |=        |[        |]        |\        |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |F7       |F8       |F9       |F10      |F11      |F12      |         |         |         |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |         |         |         |         |         |         |         |         |         |         |         |
-`-----------------------------------------------------------------------------------------------------------------------'
-*/
-
-[_RAISE] = LAYOUT_preonic_grid(
-  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
-  CU_GRV,   DE_1,     DE_2,     CU_3,     DE_4,     DE_5,     CU_6,     CU_7,     CU_8,     CU_9,     CU_0,     _______,
-  _______,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    DE_MINS,  CU_EQL,   CU_LBRC,  CU_RBRC,  CU_BSLS,
-  _______,  KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   XXXXXXX,  _______,  _______,  _______,  _______,
-  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______
-),
-
-[_MUSICMODE] = LAYOUT_preonic_grid(
-  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,
-  KC_LCTL,  KC_LALT,  KC_LGUI,  KC_DOWN,  KC_UP,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  MU_MOD,   MU_OFF
-),
-
-/* Deadkey
-,-----------------------------------------------------------------------------------------------------------------------.
-|         |         |         |         |         |         |         |         |         |         |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |         |         |         |         |         |         |Ü        |         |Ö        |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |Ä        |ß        |         |         |         |         |         |         |         |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |         |         |         |         |         |         |         |         |         |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |         |         |         |         |"        |"        |         |         |         |         |         |
-`-----------------------------------------------------------------------------------------------------------------------'
-*/
-
-[_DEADKEY] = LAYOUT_preonic_grid(
-  CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,
-  KC_TAB,   CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_UE,    CU_ED,    CU_OE,    CU_ED,    KC_BSPC,
-  CU_NAV,   CU_AE,    CU_SS,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_DDQ,
-  CU_LSFT,  CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_ED,    CU_RSFT,
-  KC_LCTL,  XXXXXXX,  KC_LGUI,  KC_LALT,  LOWER,    CU_DDQ,   CU_DDQ,   RAISE,    KC_RALT,  KC_RGUI,  KC_APP,   KC_RCTL
-),
-
-/* Navigation
-,-----------------------------------------------------------------------------------------------------------------------.
-|F1       |F2       |F3       |F4       |F5       |F6       |F7       |F8       |F9       |F10      |F11      |F12      |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|ALT F4   |PageDown |Up       |PageUp   |Home     |         |         |         |Win+Up   |         |         |Del      |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |Left     |Down     |Right    |End      |         |         |Win+Left |Win+Down |Win+Right|         |Enter    |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|         |Prev     |Pause    |Next     |LowerVol |RaiseVol |Mute     |         |         |         |         |         |
-|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
-|RESET    |ESCT     |         |         |         |         |         |         |         |         |         |Game     |
-`-----------------------------------------------------------------------------------------------------------------------'
-*/
-
-[_NAV] = LAYOUT_preonic_grid(
-  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,
-  ALTF4,    KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
-  _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_END,   XXXXXXX,  XXXXXXX,  GUIL,     GUID,     GUIR,     EMOJI,    KC_ENT,
-  _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  MU_ON,    XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,
-  RESET,    CU_ESCT,  _______,  _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
-)
-
-};
-
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-switch (keycode) {
-  case MO(_LOWER):
-    if (game){
-      if(record->event.pressed) {
-        register_code(KC_SPC);
-      } else {
-        unregister_code(KC_SPC);
-      }
-      return false;
-    } else {
-      return true;
-    }
-  case KC_LALT:
-    if (game) {
-      if (record->event.pressed){
-        layer_on(_RAISE);
-      } else {
-        layer_off(_RAISE);
-      }
-      return false;
-    } else {
-      return true;
-    }
-  case MU_ON:
-    if(record->event.pressed) {
-      layer_off(_LOWER);
-      layer_off(_RAISE);
-      layer_off(_NAV);
-      layer_off(_DEADKEY);
-      layer_on(_MUSICMODE);
-    }
-    return true;
-  case MU_OFF:
-    if(record->event.pressed) {
-      layer_off(_MUSICMODE);
-    }
-    return true;
-  default:
-    return true;
-  }
-}
diff --git a/keyboards/preonic/keymaps/spacebarracecar/readme.md b/keyboards/preonic/keymaps/spacebarracecar/readme.md
deleted file mode 100644 (file)
index b99bb95..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# SpacebarRacecar US-International Preonic Keymap for German PCs
-
-This keymap emulates most keys of the US-International layout on PCs that have German set as input language.  
-This allows the use of the keyboard on any PC in Germany without the need to change any settings.
-The keymap is mostly based on the Preonic default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß.
diff --git a/keyboards/preonic/keymaps/spacebarracecar/rules.mk b/keyboards/preonic/keymaps/spacebarracecar/rules.mk
deleted file mode 100644 (file)
index bc817a1..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# 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 = 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 SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no           # Breathing sleep LED during USB suspend
-
-# Userspace defines
-GERMAN_ENABLE = yes             # Enable Custom US Ansi Keycodes for PC with German set as input language
index 407118309741c2da3779e413fc8a687a319f2d15..244b165f166659cd209f18fb18b9956cb05bea4c 100644 (file)
@@ -121,10 +121,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 [_NAV] = LAYOUT(
   _______,  _______,  _______,  _______,  KC_ESC,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
-  _______,  _______,  _______,  _______,  ALTF4,    KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
+  _______,  _______,  _______,  _______,  _______,  KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
   _______,  _______,  _______,  _______,  _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_END,   XXXXXXX,  XXXXXXX,  GUIL,     GUID,     GUIR,     EMOJI,   KC_ENT,
   _______,  _______,  _______,  _______,  _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,
-  _______,  _______,  _______,  _______,  RESET,    CU_ESCT,  _______,  _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
+  _______,  _______,  _______,  _______,  RESET,    ALTF4,    _______,  _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
 ),
 
 // Can be used to place macros on the numpad
@@ -242,10 +242,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 [_NAV] = LAYOUT(
   KC_ESC,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,  _______,  _______,  _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
-  ALTF4,    KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  _______,  _______,  _______,  _______,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
+  _______,  KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  _______,  _______,  _______,  _______,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,
   _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_END,   XXXXXXX,  _______,  _______,  _______,  _______,  XXXXXXX,  GUIL,     GUID,     GUIR,     EMOJI,    KC_ENT,
   _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_VOLD,  KC_VOLU,  _______,  _______,  _______,  _______,  KC_MUTE,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,
-  RESET,    CU_ESCT,  _______,  _______,  _______,  KC_SPC,   _______,  _______,  _______,  _______,  CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
+  RESET,    CU_ESCT,  ALTF4,    _______,  _______,  KC_SPC,   _______,  _______,  _______,  _______,  CTLENT,   _______,  _______,  _______,  _______,  CU_GAME
 ),
 
 // Can be used to place macros on the numpad
@@ -363,10 +363,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 [_NAV] = LAYOUT(
   KC_ESC,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,  _______,  _______,  _______,
-  ALTF4,    KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,   _______,  _______,  _______,  _______,
+  _______,  KC_PGDN,  KC_UP,    KC_PGUP,  KC_HOME,  XXXXXXX,  XXXXXXX,  XXXXXXX,  GUIU,     XXXXXXX,  XXXXXXX,  KC_DEL,   _______,  _______,  _______,  _______,
   _______,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_END,   XXXXXXX,  XXXXXXX,  GUIL,     GUID,     GUIR,     EMOJI,    KC_ENT,   _______,  _______,  _______,  _______,
   _______,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_VOLD,  KC_VOLU,  KC_MUTE,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,  _______,  _______,  _______,  _______,
-  RESET,    CU_ESCT,  _______,  _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME,  _______,  _______,  _______,  _______
+  RESET,    CU_ESCT,  ALTF4,    _______,  _______,  KC_SPC,   CTLENT,   _______,  _______,  _______,  _______,  CU_GAME,  _______,  _______,  _______,  _______
 ),
 
 // Can be used to place macros on the numpad
diff --git a/keyboards/suihankey/config.h b/keyboards/suihankey/config.h
new file mode 100644 (file)
index 0000000..ed3d971
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+Copyright 2019 kakunpc
+
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    kakunpc
+#define PRODUCT         Suihankey
+#define DESCRIPTION     A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+
+/*
+ * 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 { F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
+#define UNUSED_PINS
+#define USE_I2C
+#undef USE_SERIAL
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+#define SPLIT_HAND_PIN D2
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+   #define RGBLED_NUM 18
+   #define RGBLIGHT_HUE_STEP 8
+   #define RGBLIGHT_SAT_STEP 8
+   #define RGBLIGHT_VAL_STEP 8
+   #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+   #define RGBLIGHT_SLEEP  /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+   #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+//   #define RGBLIGHT_EFFECT_BREATHING
+//   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+//   #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+//   #define RGBLIGHT_EFFECT_SNAKE
+//   #define RGBLIGHT_EFFECT_KNIGHT
+//   #define RGBLIGHT_EFFECT_CHRISTMAS
+//   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+//   #define RGBLIGHT_EFFECT_RGB_TEST
+//   #define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * 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 */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_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_HELP           H
+//#define MAGIC_KEY_HELP_ALT       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         0
+//#define MAGIC_KEY_LAYER0_ALT     GRAVE
+//#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     B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK           CAPS
+//#define MAGIC_KEY_EEPROM         E
+//#define MAGIC_KEY_EEPROM_CLEAR   BSPACE
+//#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
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES           2     //< number of visible lines of the display
+#define LCD_DISP_LENGTH    16     //< visibles characters per line of the display
+
+#define LCD_IO_MODE      1            //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT         PORTB        //< port for the LCD lines
+#define LCD_DATA0_PORT   LCD_PORT     //< port for 4bit data bit 0
+#define LCD_DATA1_PORT   LCD_PORT     //< port for 4bit data bit 1
+#define LCD_DATA2_PORT   LCD_PORT     //< port for 4bit data bit 2
+#define LCD_DATA3_PORT   LCD_PORT     //< port for 4bit data bit 3
+#define LCD_DATA0_PIN    4            //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN    5            //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN    6            //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN    7            //< pin for 4bit data bit 3
+#define LCD_RS_PORT      LCD_PORT     //< port for RS line
+#define LCD_RS_PIN       3            //< pin  for RS line
+#define LCD_RW_PORT      LCD_PORT     //< port for RW line
+#define LCD_RW_PIN       2            //< pin  for RW line
+#define LCD_E_PORT       LCD_PORT     //< port for Enable line
+#define LCD_E_PIN        1            //< pin  for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
+
+// #define RGBLED_SPLIT {18,18}
diff --git a/keyboards/suihankey/info.json b/keyboards/suihankey/info.json
new file mode 100644 (file)
index 0000000..4580f05
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "suihankey",
+    "url": "https://kakunpc.booth.pm/",
+    "maintainer": "kakunpc",
+    "width": 12,
+    "height": 4,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"label":"1", "x":0, "y":0}, {"label":"2", "x":1, "y":0}, {"label":"3", "x":2, "y":0}, {"label":"4", "x":3, "y":0}, {"label":"5", "x":4, "y":0}, {"label":"19", "x":7, "y":0}, {"label":"20", "x":8, "y":0}, {"label":"21", "x":9, "y":0}, {"label":"22", "x":10, "y":0}, {"label":"23", "x":11, "y":0}, {"label":"6", "x":0, "y":1}, {"label":"7", "x":1, "y":1}, {"label":"8", "x":2, "y":1}, {"label":"9", "x":3, "y":1}, {"label":"10", "x":4, "y":1}, {"label":"24", "x":7, "y":1}, {"label":"25", "x":8, "y":1}, {"label":"26", "x":9, "y":1}, {"label":"27", "x":10, "y":1}, {"label":"28", "x":11, "y":1}, {"label":"11", "x":0, "y":2}, {"label":"12", "x":1, "y":2}, {"label":"13", "x":2, "y":2}, {"label":"14", "x":3, "y":2}, {"label":"15", "x":4, "y":2}, {"label":"29", "x":7, "y":2}, {"label":"30", "x":8, "y":2}, {"label":"31", "x":9, "y":2}, {"label":"32", "x":10, "y":2}, {"label":"33", "x":11, "y":2}, {"label":"16", "x":2, "y":3}, {"label":"17", "x":3, "y":3}, {"label":"18", "x":4, "y":3}, {"label":"34", "x":7, "y":3}, {"label":"35", "x":8, "y":3}, {"label":"36", "x":9, "y":3}]
+        }
+    }
+}
diff --git a/keyboards/suihankey/keymaps/default/config.h b/keyboards/suihankey/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..bf1149e
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/suihankey/keymaps/default/keymap.c b/keyboards/suihankey/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..a1d182a
--- /dev/null
@@ -0,0 +1,100 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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 QMK_KEYBOARD_H
+
+enum layers{
+    BASE = 0,
+    COMMAND,
+    NUMBER,
+    SETTING
+};
+
+#define KC_CMD_SP    LT(COMMAND,KC_SPC)
+#define KC_CMD_ET    LT(COMMAND,KC_ENTER)
+#define KC_NUM_ALT   LT(NUMBER,KC_LALT)
+#define KC_NUM_BS    LT(NUMBER,KC_BSPC)
+#define KC_SET_CTRL  LT(SETTING,KC_LCTRL)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = LAYOUT( /* Base */
+          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,
+          KC_Z,  KC_X,  KC_C, KC_V, KC_B,                 KC_N,  KC_M,  KC_COMMA, KC_DOT, KC_SLASH,
+       KC_SET_CTRL,  KC_NUM_ALT,  KC_CMD_SP,                 KC_CMD_ET,  KC_BSPC,  KC_LSFT
+  ),
+  [COMMAND] = LAYOUT( /* Base */
+          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,
+    LCTL(KC_Z),  LCTL(KC_X),  LCTL(KC_C), LCTL(KC_V), LCTL(KC_B),   KC_N,  KC_M,  KC_COMMA, KC_DOT, KC_SLASH,
+                   KC_NO,  KC_NO,  KC_NO,                           KC_NO,  KC_NO,  KC_NO
+  ),
+  [NUMBER] = LAYOUT( /* Base */
+          KC_F1,  KC_F2,  KC_F3, KC_F4, KC_F5,                 KC_P7,  KC_P8,  KC_P9, KC_NO, KC_NO,
+          KC_F6,  KC_F7,  KC_F8, KC_F9, KC_F10,                KC_P4,  KC_P5,  KC_P6, KC_NO, KC_NO,
+          KC_F11, KC_F12, KC_NO, KC_NO, KC_NO,                 KC_P1,  KC_P2,  KC_P3, KC_NO, KC_NO,
+                        KC_NO,  KC_NO,  KC_NO,                 KC_P0,  KC_PDOT,  KC_NO
+  ),
+  [SETTING] = LAYOUT( /* Base */
+          KC_NO,  KC_NO,  KC_NO, KC_NO, KC_NO,                 KC_NO,  KC_NO,  KC_NO, KC_NO, KC_NO,
+          KC_NO,  KC_NO,  KC_NO, KC_NO, KC_NO,                 KC_NO,  KC_NO,  KC_NO, KC_NO, KC_NO,
+          KC_NO,  KC_NO,  KC_NO, KC_NO, KC_NO,                 KC_NO,  KC_NO,  KC_NO, KC_NO, KC_NO,
+                        KC_NO,  KC_NO,  KC_NO,                 KC_NO,  KC_NO,  KC_NO
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+#ifdef OLED_DRIVER_ENABLE
+void oled_task_user(void) {
+  oled_write_P(PSTR("Layer: "), false);
+  switch (biton32(layer_state)) {
+    case BASE:
+      oled_write_P(PSTR("Defaultn"), false);
+      break;
+    case COMMAND:
+      oled_write_P(PSTR("COMMANDn"), false);
+      break;
+    case NUMBER:
+      oled_write_P(PSTR("NUMBERn"), false);
+      break;
+    case SETTING:
+      oled_write_P(PSTR("SETTINGn"), false);
+      break;
+    default:
+      // Or use the write_ln shortcut over adding 'n' to the end of your string
+      oled_write_ln_P(PSTR("Undefined"), false);
+  }
+
+  // Host Keyboard LED Status
+  oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR("       "), false);
+  oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR("       "), false);
+  oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR("       "), false);
+}
+#endif
diff --git a/keyboards/suihankey/keymaps/default/readme.md b/keyboards/suihankey/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..95eac80
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for suihankey
\ No newline at end of file
diff --git a/keyboards/suihankey/readme.md b/keyboards/suihankey/readme.md
new file mode 100644 (file)
index 0000000..29d8232
--- /dev/null
@@ -0,0 +1,18 @@
+# suihankey
+
+![suihankey](https://i.gyazo.com/f798c5967f2ac457dd520ab8ff83b6ac.jpg)
+
+Compact with only 36 keys is a concept keyboard.  
+Supports OLED and RGBLED (optional)
+
+
+
+Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)  
+Hardware Supported: suihankeyboard_alpha, promicro  
+Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+    make suihankey:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/suihankey/rules.mk b/keyboards/suihankey/rules.mk
new file mode 100644 (file)
index 0000000..19e7923
--- /dev/null
@@ -0,0 +1,82 @@
+# 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
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+#   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 = 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
+# 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
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no            # Enable support for HD44780 based LCDs (+400)
+OLED_DRIVER_ENABLE = no
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/suihankey/suihankey.c b/keyboards/suihankey/suihankey.c
new file mode 100644 (file)
index 0000000..621e21a
--- /dev/null
@@ -0,0 +1,51 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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 "suihankey.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+/*
+
+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/suihankey/suihankey.h b/keyboards/suihankey/suihankey.h
new file mode 100644 (file)
index 0000000..170dbe5
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 kakunpc
+ *
+ * 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/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the Leys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+    L00, L01, L02, L03, L04,            R04, R03, R02, R01, R00, \
+    L10, L11, L12, L13, L14,            R14, R13, R12, R11, R10, \
+    L20, L21, L22, L23, L24,            R24, R23, R22, R21, R20, \
+              L30, L31, L32,            R32, R31, R30   \
+) \
+{ \
+    { L00, L01, L02, L03, L04 }, \
+    { L10, L11, L12, L13, L14 }, \
+    { L20, L21, L22, L23, L24 }, \
+    { L30, L31, L32  }, \
+    { R00, R01, R02, R03, R04 }, \
+    { R10, R11, R12, R13, R14 }, \
+    { R20, R21, R22, R23, R24 }, \
+    { R30, R31, R32  }, \
+}
diff --git a/keyboards/ta65/config.h b/keyboards/ta65/config.h
new file mode 100644 (file)
index 0000000..d54a627
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+Copyright 2019 Maarten Dekkers <maartenwut@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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x4705
+#define PRODUCT_ID      0x7465
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Maartenwut
+#define PRODUCT         TA-65
+#define DESCRIPTION     A universal 65% PCB with underglow.
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS {B4,D7,D6,D4,B3}
+#define MATRIX_COL_PINS {D2,D1,D0,D3,D5,C7,C6,B6,B5,F0,F1,F4,F5,F6,F7,B0}
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+/* Backlight configuration
+ */
+#define RGB_DI_PIN E6
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8
+
+#define QMK_ESC_OUTPUT D2 // usually COL
+#define QMK_ESC_INPUT B4 // usually ROW
+#define QMK_LED E6
diff --git a/keyboards/ta65/info.json b/keyboards/ta65/info.json
new file mode 100644 (file)
index 0000000..e509521
--- /dev/null
@@ -0,0 +1,372 @@
+{
+    "keyboard_name": "ta65",
+    "url": "",
+    "maintainer": "qmk",
+    "width": 16,
+    "height": 5,
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"!", "x":1, "y":0},
+                {"label":"@", "x":2, "y":0},
+                {"label":"#", "x":3, "y":0},
+                {"label":"$", "x":4, "y":0},
+                {"label":"%", "x":5, "y":0},
+                {"label":"^", "x":6, "y":0},
+                {"label":"&", "x":7, "y":0},
+                {"label":"*", "x":8, "y":0},
+                {"label":"(", "x":9, "y":0},
+                {"label":")", "x":10, "y":0},
+                {"label":"_", "x":11, "y":0},
+                {"label":"+", "x":12, "y":0},
+                {"label":"|", "x":13, "y":0},
+                {"label":"Backspace", "x":14, "y":0},
+                {"label":"~", "x":15, "y":0},
+                {"label":"Tab", "x":0, "y":1, "w":1.5},
+                {"label":"Q", "x":1.5, "y":1},
+                {"label":"W", "x":2.5, "y":1},
+                {"label":"E", "x":3.5, "y":1},
+                {"label":"R", "x":4.5, "y":1},
+                {"label":"T", "x":5.5, "y":1},
+                {"label":"Y", "x":6.5, "y":1},
+                {"label":"U", "x":7.5, "y":1},
+                {"label":"I", "x":8.5, "y":1},
+                {"label":"O", "x":9.5, "y":1},
+                {"label":"P", "x":10.5, "y":1},
+                {"label":"{", "x":11.5, "y":1},
+                {"label":"}", "x":12.5, "y":1},
+                {"label":"|", "x":13.5, "y":1, "w":1.5},
+                {"label":"Delete", "x":15, "y":1},
+                {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+                {"label":"A", "x":1.75, "y":2},
+                {"label":"S", "x":2.75, "y":2},
+                {"label":"D", "x":3.75, "y":2},
+                {"label":"F", "x":4.75, "y":2},
+                {"label":"G", "x":5.75, "y":2},
+                {"label":"H", "x":6.75, "y":2},
+                {"label":"J", "x":7.75, "y":2},
+                {"label":"K", "x":8.75, "y":2},
+                {"label":"L", "x":9.75, "y":2},
+                {"label":":", "x":10.75, "y":2},
+                {"label":"\"", "x":11.75, "y":2},
+                {"label":"Non-US Hash", "x":12.75, "y":2},
+                {"label":"Enter", "x":13.75, "y":2, "w":1.25},
+                {"label":"PgUp", "x":15, "y":2},
+                {"label":"Shift", "x":0, "y":3, "w":1.25},
+                {"label":"Non-US Backslash", "x":1.25, "y":3},
+                {"label":"Z", "x":2.25, "y":3},
+                {"label":"X", "x":3.25, "y":3},
+                {"label":"C", "x":4.25, "y":3},
+                {"label":"V", "x":5.25, "y":3},
+                {"label":"B", "x":6.25, "y":3},
+                {"label":"N", "x":7.25, "y":3},
+                {"label":"M", "x":8.25, "y":3},
+                {"label":"<", "x":9.25, "y":3},
+                {"label":">", "x":10.25, "y":3},
+                {"label":"?", "x":11.25, "y":3},
+                {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+                {"label":"Up", "x":14, "y":3},
+                {"label":"PgDn", "x":15, "y":3},
+                {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+                {"label":"Win", "x":1.25, "y":4, "w":1.25},
+                {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+                {"label":"Space", "x":3.75, "y":4, "w":6.25},
+                {"label":"Alt", "x":10, "y":4},
+                {"label":"Win", "x":11, "y":4},
+                {"label":"Ctrl", "x":12, "y":4},
+                {"label":"Left", "x":13, "y":4},
+                {"label":"Down", "x":14, "y":4},
+                {"label":"Right", "x":15, "y":4}
+            ]
+        },
+        "LAYOUT_65_ansi": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"!", "x":1, "y":0},
+                {"label":"@", "x":2, "y":0},
+                {"label":"#", "x":3, "y":0},
+                {"label":"$", "x":4, "y":0},
+                {"label":"%", "x":5, "y":0},
+                {"label":"^", "x":6, "y":0},
+                {"label":"&", "x":7, "y":0},
+                {"label":"*", "x":8, "y":0},
+                {"label":"(", "x":9, "y":0},
+                {"label":")", "x":10, "y":0},
+                {"label":"_", "x":11, "y":0},
+                {"label":"+", "x":12, "y":0},
+                {"label":"Backspace", "x":13, "y":0, "w":2},
+                {"label":"~", "x":15, "y":0},
+                {"label":"Tab", "x":0, "y":1, "w":1.5},
+                {"label":"Q", "x":1.5, "y":1},
+                {"label":"W", "x":2.5, "y":1},
+                {"label":"E", "x":3.5, "y":1},
+                {"label":"R", "x":4.5, "y":1},
+                {"label":"T", "x":5.5, "y":1},
+                {"label":"Y", "x":6.5, "y":1},
+                {"label":"U", "x":7.5, "y":1},
+                {"label":"I", "x":8.5, "y":1},
+                {"label":"O", "x":9.5, "y":1},
+                {"label":"P", "x":10.5, "y":1},
+                {"label":"{", "x":11.5, "y":1},
+                {"label":"}", "x":12.5, "y":1},
+                {"label":"|", "x":13.5, "y":1, "w":1.5},
+                {"label":"Delete", "x":15, "y":1},
+                {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+                {"label":"A", "x":1.75, "y":2},
+                {"label":"S", "x":2.75, "y":2},
+                {"label":"D", "x":3.75, "y":2},
+                {"label":"F", "x":4.75, "y":2},
+                {"label":"G", "x":5.75, "y":2},
+                {"label":"H", "x":6.75, "y":2},
+                {"label":"J", "x":7.75, "y":2},
+                {"label":"K", "x":8.75, "y":2},
+                {"label":"L", "x":9.75, "y":2},
+                {"label":":", "x":10.75, "y":2},
+                {"label":"\"", "x":11.75, "y":2},
+                {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+                {"label":"PgUp", "x":15, "y":2},
+                {"label":"Shift", "x":0, "y":3, "w":2.25},
+                {"label":"Z", "x":2.25, "y":3},
+                {"label":"X", "x":3.25, "y":3},
+                {"label":"C", "x":4.25, "y":3},
+                {"label":"V", "x":5.25, "y":3},
+                {"label":"B", "x":6.25, "y":3},
+                {"label":"N", "x":7.25, "y":3},
+                {"label":"M", "x":8.25, "y":3},
+                {"label":"<", "x":9.25, "y":3},
+                {"label":">", "x":10.25, "y":3},
+                {"label":"?", "x":11.25, "y":3},
+                {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+                {"label":"Up", "x":14, "y":3},
+                {"label":"PgDn", "x":15, "y":3},
+                {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+                {"label":"Win", "x":1.25, "y":4, "w":1.25},
+                {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+                {"label":"Space", "x":3.75, "y":4, "w":6.25},
+                {"label":"Alt", "x":10, "y":4},
+                {"label":"Win", "x":11, "y":4},
+                {"label":"Ctrl", "x":12, "y":4},
+                {"label":"Left", "x":13, "y":4},
+                {"label":"Down", "x":14, "y":4},
+                {"label":"Right", "x":15, "y":4}
+            ]
+        },
+        "LAYOUT_ansi_tsangan": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"!", "x":1, "y":0},
+                {"label":"@", "x":2, "y":0},
+                {"label":"#", "x":3, "y":0},
+                {"label":"$", "x":4, "y":0},
+                {"label":"%", "x":5, "y":0},
+                {"label":"^", "x":6, "y":0},
+                {"label":"&", "x":7, "y":0},
+                {"label":"*", "x":8, "y":0},
+                {"label":"(", "x":9, "y":0},
+                {"label":")", "x":10, "y":0},
+                {"label":"_", "x":11, "y":0},
+                {"label":"+", "x":12, "y":0},
+                {"label":"|", "x":13, "y":0},
+                {"label":"Backspace", "x":14, "y":0},
+                {"label":"~", "x":15, "y":0},
+                {"label":"Tab", "x":0, "y":1, "w":1.5},
+                {"label":"Q", "x":1.5, "y":1},
+                {"label":"W", "x":2.5, "y":1},
+                {"label":"E", "x":3.5, "y":1},
+                {"label":"R", "x":4.5, "y":1},
+                {"label":"T", "x":5.5, "y":1},
+                {"label":"Y", "x":6.5, "y":1},
+                {"label":"U", "x":7.5, "y":1},
+                {"label":"I", "x":8.5, "y":1},
+                {"label":"O", "x":9.5, "y":1},
+                {"label":"P", "x":10.5, "y":1},
+                {"label":"{", "x":11.5, "y":1},
+                {"label":"}", "x":12.5, "y":1},
+                {"label":"|", "x":13.5, "y":1, "w":1.5},
+                {"label":"Delete", "x":15, "y":1},
+                {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+                {"label":"A", "x":1.75, "y":2},
+                {"label":"S", "x":2.75, "y":2},
+                {"label":"D", "x":3.75, "y":2},
+                {"label":"F", "x":4.75, "y":2},
+                {"label":"G", "x":5.75, "y":2},
+                {"label":"H", "x":6.75, "y":2},
+                {"label":"J", "x":7.75, "y":2},
+                {"label":"K", "x":8.75, "y":2},
+                {"label":"L", "x":9.75, "y":2},
+                {"label":":", "x":10.75, "y":2},
+                {"label":"\"", "x":11.75, "y":2},
+                {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+                {"label":"PgUp", "x":15, "y":2},
+                {"label":"Shift", "x":0, "y":3, "w":2.25},
+                {"label":"Z", "x":2.25, "y":3},
+                {"label":"X", "x":3.25, "y":3},
+                {"label":"C", "x":4.25, "y":3},
+                {"label":"V", "x":5.25, "y":3},
+                {"label":"B", "x":6.25, "y":3},
+                {"label":"N", "x":7.25, "y":3},
+                {"label":"M", "x":8.25, "y":3},
+                {"label":"<", "x":9.25, "y":3},
+                {"label":">", "x":10.25, "y":3},
+                {"label":"?", "x":11.25, "y":3},
+                {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+                {"label":"Up", "x":14, "y":3},
+                {"label":"PgDn", "x":15, "y":3},
+                {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+                {"label":"Win", "x":1.5, "y":4},
+                {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+                {"label":"Space", "x":4, "y":4, "w":7},
+                {"label":"Alt", "x":11, "y":4, "w":1.5},
+                {"label":"Left", "x":13, "y":4},
+                {"label":"Down", "x":14, "y":4},
+                {"label":"Right", "x":15, "y":4}
+            ]
+        },
+        "LAYOUT_65_iso": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"!", "x":1, "y":0},
+                {"label":"\"", "x":2, "y":0},
+                {"label":"\u00a3", "x":3, "y":0},
+                {"label":"$", "x":4, "y":0},
+                {"label":"%", "x":5, "y":0},
+                {"label":"^", "x":6, "y":0},
+                {"label":"&", "x":7, "y":0},
+                {"label":"*", "x":8, "y":0},
+                {"label":"(", "x":9, "y":0},
+                {"label":")", "x":10, "y":0},
+                {"label":"_", "x":11, "y":0},
+                {"label":"+", "x":12, "y":0},
+                {"label":"Backspace", "x":13, "y":0, "w":2},
+                {"label":"\u00ac", "x":15, "y":0},
+                {"label":"Tab", "x":0, "y":1, "w":1.5},
+                {"label":"Q", "x":1.5, "y":1},
+                {"label":"W", "x":2.5, "y":1},
+                {"label":"E", "x":3.5, "y":1},
+                {"label":"R", "x":4.5, "y":1},
+                {"label":"T", "x":5.5, "y":1},
+                {"label":"Y", "x":6.5, "y":1},
+                {"label":"U", "x":7.5, "y":1},
+                {"label":"I", "x":8.5, "y":1},
+                {"label":"O", "x":9.5, "y":1},
+                {"label":"P", "x":10.5, "y":1},
+                {"label":"{", "x":11.5, "y":1},
+                {"label":"}", "x":12.5, "y":1},
+                {"label":"Delete", "x":15, "y":1},
+                {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+                {"label":"A", "x":1.75, "y":2},
+                {"label":"S", "x":2.75, "y":2},
+                {"label":"D", "x":3.75, "y":2},
+                {"label":"F", "x":4.75, "y":2},
+                {"label":"G", "x":5.75, "y":2},
+                {"label":"H", "x":6.75, "y":2},
+                {"label":"J", "x":7.75, "y":2},
+                {"label":"K", "x":8.75, "y":2},
+                {"label":"L", "x":9.75, "y":2},
+                {"label":":", "x":10.75, "y":2},
+                {"label":"@", "x":11.75, "y":2},
+                {"label":"~", "x":12.75, "y":2},
+                {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+                {"label":"PgUp", "x":15, "y":2},
+                {"label":"Shift", "x":0, "y":3, "w":1.25},
+                {"label":"|", "x":1.25, "y":3},
+                {"label":"Z", "x":2.25, "y":3},
+                {"label":"X", "x":3.25, "y":3},
+                {"label":"C", "x":4.25, "y":3},
+                {"label":"V", "x":5.25, "y":3},
+                {"label":"B", "x":6.25, "y":3},
+                {"label":"N", "x":7.25, "y":3},
+                {"label":"M", "x":8.25, "y":3},
+                {"label":"<", "x":9.25, "y":3},
+                {"label":">", "x":10.25, "y":3},
+                {"label":"?", "x":11.25, "y":3},
+                {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+                {"label":"Up", "x":14, "y":3},
+                {"label":"PgDn", "x":15, "y":3},
+                {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+                {"label":"Win", "x":1.25, "y":4, "w":1.25},
+                {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+                {"label":"Space", "x":3.75, "y":4, "w":6.25},
+                {"label":"AltGr", "x":10, "y":4},
+                {"label":"Win", "x":11, "y":4},
+                {"label":"Ctrl", "x":12, "y":4},
+                {"label":"Left", "x":13, "y":4},
+                {"label":"Down", "x":14, "y":4},
+                {"label":"Right", "x":15, "y":4}
+            ]
+        },
+        "LAYOUT_iso_tsangan": {
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"!", "x":1, "y":0},
+                {"label":"\"", "x":2, "y":0},
+                {"label":"\u00a3", "x":3, "y":0},
+                {"label":"$", "x":4, "y":0},
+                {"label":"%", "x":5, "y":0},
+                {"label":"^", "x":6, "y":0},
+                {"label":"&", "x":7, "y":0},
+                {"label":"*", "x":8, "y":0},
+                {"label":"(", "x":9, "y":0},
+                {"label":")", "x":10, "y":0},
+                {"label":"_", "x":11, "y":0},
+                {"label":"+", "x":12, "y":0},
+                {"label":"~", "x":13, "y":0},
+                {"label":"Backspace", "x":14, "y":0},
+                {"label":"\u00ac", "x":15, "y":0},
+                {"label":"Tab", "x":0, "y":1, "w":1.5},
+                {"label":"Q", "x":1.5, "y":1},
+                {"label":"W", "x":2.5, "y":1},
+                {"label":"E", "x":3.5, "y":1},
+                {"label":"R", "x":4.5, "y":1},
+                {"label":"T", "x":5.5, "y":1},
+                {"label":"Y", "x":6.5, "y":1},
+                {"label":"U", "x":7.5, "y":1},
+                {"label":"I", "x":8.5, "y":1},
+                {"label":"O", "x":9.5, "y":1},
+                {"label":"P", "x":10.5, "y":1},
+                {"label":"{", "x":11.5, "y":1},
+                {"label":"}", "x":12.5, "y":1},
+                {"label":"Delete", "x":15, "y":1},
+                {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+                {"label":"A", "x":1.75, "y":2},
+                {"label":"S", "x":2.75, "y":2},
+                {"label":"D", "x":3.75, "y":2},
+                {"label":"F", "x":4.75, "y":2},
+                {"label":"G", "x":5.75, "y":2},
+                {"label":"H", "x":6.75, "y":2},
+                {"label":"J", "x":7.75, "y":2},
+                {"label":"K", "x":8.75, "y":2},
+                {"label":"L", "x":9.75, "y":2},
+                {"label":":", "x":10.75, "y":2},
+                {"label":"@", "x":11.75, "y":2},
+                {"label":"~", "x":12.75, "y":2},
+                {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+                {"label":"PgUp", "x":15, "y":2},
+                {"label":"Shift", "x":0, "y":3, "w":1.25},
+                {"label":"|", "x":1.25, "y":3},
+                {"label":"Z", "x":2.25, "y":3},
+                {"label":"X", "x":3.25, "y":3},
+                {"label":"C", "x":4.25, "y":3},
+                {"label":"V", "x":5.25, "y":3},
+                {"label":"B", "x":6.25, "y":3},
+                {"label":"N", "x":7.25, "y":3},
+                {"label":"M", "x":8.25, "y":3},
+                {"label":"<", "x":9.25, "y":3},
+                {"label":">", "x":10.25, "y":3},
+                {"label":"?", "x":11.25, "y":3},
+                {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+                {"label":"Up", "x":14, "y":3},
+                {"label":"PgDn", "x":15, "y":3},
+                {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+                {"label":"Win", "x":1.5, "y":4},
+                {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+                {"label":"Space", "x":4, "y":4, "w":7},
+                {"label":"AltGr", "x":11, "y":4, "w":1.5},
+                {"label":"Left", "x":13, "y":4},
+                {"label":"Down", "x":14, "y":4},
+                {"label":"Right", "x":15, "y":4}
+            ]
+        }
+    }
+}
diff --git a/keyboards/ta65/keymaps/default/keymap.c b/keyboards/ta65/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..b04172c
--- /dev/null
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_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 _MA 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_all(
+  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_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_BSLS,  KC_ENT,  KC_PGUP,
+  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_PGDN,
+  KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                          KC_RALT, KC_APP,  KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/ta65/keymaps/default_ansi/keymap.c b/keyboards/ta65/keymaps/default_ansi/keymap.c
new file mode 100644 (file)
index 0000000..9319d5b
--- /dev/null
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_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 _MA 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_65_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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/ta65/keymaps/default_ansi_tsangan/keymap.c b/keyboards/ta65/keymaps/default_ansi_tsangan/keymap.c
new file mode 100644 (file)
index 0000000..5e0cd0b
--- /dev/null
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_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 _MA 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_ansi_tsangan(
+  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_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,                    KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/ta65/keymaps/default_iso/keymap.c b/keyboards/ta65/keymaps/default_iso/keymap.c
new file mode 100644 (file)
index 0000000..1d11ff9
--- /dev/null
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_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 _MA 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_65_iso(
+  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_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_BSLS,          KC_ENT,  KC_PGUP,
+  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_PGDN,
+  KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                          KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/ta65/keymaps/default_iso_tsangan/keymap.c b/keyboards/ta65/keymaps/default_iso_tsangan/keymap.c
new file mode 100644 (file)
index 0000000..8505d73
--- /dev/null
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_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 _MA 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_iso_tsangan(
+  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_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_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_BSLS,          KC_ENT,  KC_PGUP,
+  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_PGDN,
+  KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                          KC_RALT,                   KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/ta65/keymaps/maartenwut/config.h b/keyboards/ta65/keymaps/maartenwut/config.h
new file mode 100644 (file)
index 0000000..9b18f58
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+#define RETRO_TAPPING
diff --git a/keyboards/ta65/keymaps/maartenwut/keymap.c b/keyboards/ta65/keymaps/maartenwut/keymap.c
new file mode 100644 (file)
index 0000000..a8ce0f1
--- /dev/null
@@ -0,0 +1,45 @@
+#include QMK_KEYBOARD_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 {
+  _MA,
+  _GA,
+  _FL,
+  _SP
+};
+
+#define SPACE LT(_SP, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_65_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_MPLY,
+  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_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_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_CAPS, KC_LGUI, KC_LALT,                   SPACE,                              KC_RALT, KC_RCTRL,MO(_FL),  KC_LEFT, KC_DOWN, KC_RGHT),
+
+[_GA] = LAYOUT_65_ansi(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______,
+  _______, _______, _______,                   KC_SPC,                             _______, _______, _______,  _______, _______, _______),
+
+[_FL] = LAYOUT_65_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,  RESET,   KC_PSCR,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, KC_INS,
+  _______, _______, _______, _______, _______, TG(_GA), _______, _______, _______, _______, _______, _______,           _______, KC_HOME,
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE,  _______,          _______, KC_END,
+  _______, _______, _______,                   _______,                            _______, _______, _______,  _______, _______, _______),
+
+[_SP] = LAYOUT_65_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_UP,   _______, _______, _______,  _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,           _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,           _______, _______,
+  _______, _______, _______,                   _______,                            _______, _______, _______,  _______, _______, _______),
+};
diff --git a/keyboards/ta65/readme.md b/keyboards/ta65/readme.md
new file mode 100644 (file)
index 0000000..48ba9ee
--- /dev/null
@@ -0,0 +1,17 @@
+TA-65
+=====
+
+A 65% PCB designed to fit the TADA68, Kayak and others by [maartenwut](https://maartenwut.com).
+
+![kle](https://maartenwut.com/wp-content/uploads/2019/02/ta-65-layouts-768x420.png)
+
+Keyboard Maintainer: QMK Community<br>
+Hardware Supported: TA-65 PCB<br>
+Hardware Availability: [maartenwut.com](https://maartenwut.com/product/ta-65/)<br>
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ta65:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
diff --git a/keyboards/ta65/rules.mk b/keyboards/ta65/rules.mk
new file mode 100644 (file)
index 0000000..47207cd
--- /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
+BOOTLOADER = qmk-dfu
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite        # 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 = no               # 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
+
+LAYOUTS = 65_ansi 65_iso
diff --git a/keyboards/ta65/ta65.c b/keyboards/ta65/ta65.c
new file mode 100644 (file)
index 0000000..4f67a02
--- /dev/null
@@ -0,0 +1,13 @@
+#include "ta65.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();
+};
diff --git a/keyboards/ta65/ta65.h b/keyboards/ta65/ta65.h
new file mode 100644 (file)
index 0000000..273acf9
--- /dev/null
@@ -0,0 +1,82 @@
+#pragma once
+#include "quantum.h"
+
+// readability
+#define ___ KC_NO
+#define LAYOUT_all( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0f, 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, k2c,      k2d, k2e, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,      k3d, k3e, \
+    k40, k41, k42,                k46,           k49, k4a, k4b, k4c,      k4d, k4e  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f}, \
+    {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, k2c, k2d, k2e, ___}, \
+    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, ___}, \
+    {k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, k4b, k4c, k4d, k4e, ___}  \
+}
+
+#define LAYOUT_65_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,                k46,           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, ___, k2d, k2e, ___}, \
+    {k30, ___, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, ___}, \
+    {k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, k4b, k4c, k4d, k4e, ___}  \
+}
+
+#define LAYOUT_ansi_tsangan( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0f, 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,                k46,           k49,           k4c,      k4d, k4e  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f}, \
+    {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, ___, ___, ___, k46, ___, ___, k49, ___, ___, k4c, k4d, k4e, ___}  \
+}
+
+#define LAYOUT_iso_tsangan( \
+    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0f, k0d, k0e, \
+    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,           k1e, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,      k2d, k2e, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,      k3d, k3e, \
+    k40, k41, k42,                k46,           k49,           k4c,      k4d, k4e  \
+) \
+{ \
+    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f}, \
+    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, ___, k1e, ___}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, ___}, \
+    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, ___}, \
+    {k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, ___, ___, k4c, k4d, k4e, ___}  \
+}
+
+#define LAYOUT_65_iso( \
+    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,           k1e, \
+    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c,      k2d, k2e, \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c,      k3d, k3e, \
+    k40, k41, k42,                k46,           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,      k1e, ___}, \
+    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, ___}, \
+    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, ___}, \
+    {k40, k41, k42, ___, ___, ___, k46, ___, ___, k49, k4a, k4b, k4c, k4d, k4e, ___}  \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
index 6d728b595c73de8014929034671a3e39f9b14042..1439ed43e8c1139621d1ca868b36ff43b3df5657 100644 (file)
@@ -48,11 +48,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define LOCKING_RESYNC_ENABLE
 
 #define RGB_DI_PIN D1
+#ifdef RGB_DI_PIN
 #define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 5
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
 #define RGBLIGHT_VAL_STEP 17
+#define RGBLIGHT_SLEEP
+#endif
 
 #define TAPPING_TERM 200
 /*
index 29c9071bfa1a6aa94429ac6c230436cfd27e845f..34ca6a639c0d325f447b9acdf20f9d65b5f1746f 100644 (file)
@@ -16,34 +16,34 @@ bool lRGB = true;
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 [_BL] = LAYOUT(
-  KC_Q,     KC_W,     KC_E,     KC_R,    KC_T,     KC_Y,           KC_U,           KC_I,    KC_O,    KC_P,    KC_BSPC, \
-  KC_A,     KC_S,     KC_D,     KC_F,    KC_G,     KC_H,           KC_J,           KC_K,    KC_L,    KC_SCLN, TG(_GL), \
+  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, TG(_GL), \
   KC_LSFT,  KC_Z,     KC_X,     KC_C,    KC_V,     KC_B,           KC_N,           KC_M,    KC_QUOT, KC_SLSH, KC_ENT,  \
-  KC_TAB,   KC_ESC,   KC_LCTL,  KC_LALT, KC_COMMA, LT(_DL,KC_SPC), LT(_UL,KC_SPC),          KC_DOT,  KC_LGUI),
+  KC_LCTL,  KC_LALT, KC_COMMA, LT(_DL,KC_SPC), LT(_UL,KC_SPC),          KC_DOT,  KC_LGUI),
 
 [_DL] = LAYOUT(
-  KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,  KC_F12,\
-  KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,    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_TRNS,  KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,    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_F1,    KC_TRNS,  RESET,    KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS),
+  KC_TRNS,  RESET,    KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS),
 
 [_UL] = LAYOUT(
-  KC_LBRC,  KC_RBRC,  KC_LCBR,  KC_RCBR,  KC_PIPE,  KC_BSLS,  KC_PLUS,  KC_UNDS,  KC_MINS,  KC_EQL,  KC_DEL,\
-  KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,   KC_PERC,  KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN, KC_TRNS, \
+  KC_GRV,   KC_LBRC,  KC_RBRC,  KC_LCBR,  KC_RCBR,  KC_PIPE,  KC_BSLS,  KC_PLUS,  KC_UNDS,  KC_MINS,  KC_EQL,  KC_DEL,\
+  KC_TRNS,  KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,   KC_PERC,  KC_CIRC,  KC_AMPR,  KC_ASTR,  KC_LPRN,  KC_RPRN, KC_TRNS, \
   KC_TRNS,  KC_FN0,   RGB_TOG,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SAD,  RGB_VAD,  KC_TRNS,  KC_TRNS,  \
-  KC_TRNS,  KC_GRV,   KC_TRNS,  RGB_MOD,  RGB_HUI,  KC_TRNS,  KC_TRNS,            RGB_SAI,  RGB_VAI),
+  KC_TRNS,  RGB_MOD,  RGB_HUI,  KC_TRNS,  KC_TRNS,            RGB_SAI,  RGB_VAI),
 
 [_GL] = LAYOUT(
-  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_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_UP,    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_SPC,   KC_SPC,             KC_TRNS,  KC_TRNS),
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_SPC,   KC_SPC,             KC_TRNS,  KC_TRNS),
 
 [_BK] = LAYOUT(
-  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
-  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_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_NO,    KC_TRNS,  KC_TRNS,  \
-  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_NO,    KC_NO,    KC_TRNS,  KC_FN1,  KC_NO,    KC_NO),
+  KC_TRNS,  KC_NO,    KC_NO,    KC_TRNS,  KC_FN1,  KC_NO,    KC_NO),
 
 };
 
index 6b686adafa8e9ecbeba8f443c6e0f7fa59a26439..9615e44f330bf33b87879aa54c8c4153f9440ed6 100644 (file)
@@ -7,10 +7,10 @@
 // The first section contains all of the arguments
 // The second converts the arguments into a two-dimensional array
 #define LAYOUT( \
-       k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, \
-       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, \
+       k31, k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, \
+       k30, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, \
        k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \
-       k30, k31, k32, k33, k34, k35, k36,      k38, k39 \
+       k32, k33, k34, k35, k36, k38, k39 \
 ) \
 { \
                {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a}, \
index 0dc1199be9fa6b8f855d197b0cb707743c69e5a0..17efdbe88da9f3aa9e5b25e995146f99b57e1697 100644 (file)
 
 #include "aanzee.h"
 
+void keyboard_pre_init_kb(void) {
 
-void led_set_kb(uint8_t usb_led) {
-
-if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
-
-// Turn capslock on
-
-  writePinLow(B2);
+    // Call the keyboard pre init code.
+    // Set our LED pins as output
+    setPinOutput(B2);
 
-} else {
+    keyboard_pre_init_user();
+}
 
-// Turn capslock off
+void led_set_kb(uint8_t usb_led) {
 
-  writePinHigh(B2);
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
 
-}
+        // Turn capslock on
+        writePinLow(B2);
+    } else {
 
-led_set_user(usb_led);
+        // Turn capslock off
+        writePinHigh(B2);
+    }
 
+    led_set_user(usb_led);
 }
index b97f458639bdda1f12dc71daf445bd52952578d4..7d47b048ea65580bcd76e8e04b13a99cf1d3191e 100644 (file)
@@ -1,6 +1,6 @@
 # aanzee
 
-![aanzee](https://cablecardesigns.co/portfolio-posts/aanzee)
+[aanzee](https://cablecardesigns.co/portfolio-posts/aanzee)
 
 custom pcb for the aanzee keyboard
 
diff --git a/layouts/community/ergodox/manna-harbour_miryoku/keymap.c b/layouts/community/ergodox/manna-harbour_miryoku/keymap.c
new file mode 100644 (file)
index 0000000..86547df
--- /dev/null
@@ -0,0 +1,21 @@
+
+// generated from users/manna-harbour_miryoku/miryoku.org
+
+#define LAYOUT_miryoku(\
+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,\
+N30,   N31,   K32,   K33,   K34,   K35,   K36,   K37,   N38,   N39\
+)\
+LAYOUT_ergodox_pretty( \
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+KC_NO, K00,   K01,   K02,   K03,   K04,   KC_NO, KC_NO, K05,   K06,   K07,   K08,   K09,   KC_NO, \
+KC_NO, K10,   K11,   K12,   K13,   K14,                 K15,   K16,   K17,   K18,   K19,   KC_NO, \
+KC_NO, K20,   K21,   K22,   K23,   K24,   KC_NO, KC_NO, K25,   K26,   K27,   K28,   K29,   KC_NO, \
+KC_NO, KC_NO, KC_NO, KC_NO, K32,                               K37,   KC_NO, KC_NO, KC_NO, KC_NO, \
+                                   KC_NO, KC_NO, KC_NO, KC_NO, \
+                                          KC_NO, KC_NO, \
+                            K33,   K34,   KC_NO, KC_NO, K35,   K36 \
+)
+
+#include "manna-harbour_miryoku.c"
diff --git a/layouts/community/ortho_4x12/bredfield/config.h b/layouts/community/ortho_4x12/bredfield/config.h
new file mode 100644 (file)
index 0000000..9065e41
--- /dev/null
@@ -0,0 +1,4 @@
+#pragma once
+
+#define TAPPING_TERM 200
+#define PERMISSIVE_HOLD
\ No newline at end of file
diff --git a/layouts/community/ortho_4x12/bredfield/keymap.c b/layouts/community/ortho_4x12/bredfield/keymap.c
new file mode 100644 (file)
index 0000000..78fa8c8
--- /dev/null
@@ -0,0 +1,175 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Keymap layers
+enum layer_names {
+    _BASE_LAYER,
+    _RAISE_LAYER,
+    _LOWER_LAYER,
+    _NUMPAD_LAYER,
+    _NAVIGATION_LAYER,
+    _UI_LAYER,
+    _KEYBOARD_LAYER,
+};
+
+// Layer switches aliases
+#define L_LOWER MO(_LOWER_LAYER)
+#define L_RAISE MO(_RAISE_LAYER)
+#define L_NUMPAD MO(_NUMPAD_LAYER)
+#define L_UI MO(_UI_LAYER)
+#define L_KEYBD MO(_KEYBOARD_LAYER)
+#define SCL_NAV LT(_NAVIGATION_LAYER, KC_SCLN)
+#define SFT_MIN MT(MOD_RSFT, KC_MINS)
+#define SFT_ENT KC_SFTENT
+
+// GUI chords
+#define GUI_1 LGUI(KC_1)
+#define GUI_2 LGUI(KC_2)
+#define GUI_3 LGUI(KC_3)
+#define GUI_4 LGUI(KC_4)
+#define GUI_5 LGUI(KC_5)
+#define GUI_6 LGUI(KC_6)
+#define GUI_7 LGUI(KC_7)
+#define GUI_8 LGUI(KC_8)
+#define GUI_9 LGUI(KC_9)
+#define GUI_0 LGUI(KC_0)
+#define GUI_MIN LGUI(KC_MINS)
+#define GUI_EQL LGUI(KC_EQL)
+#define GUI_LBR LGUI(KC_LBRC)
+#define GUI_RBR LGUI(KC_RBRC)
+#define GUI_ENT LGUI_T(KC_ENT)
+#define GUI_ESC LGUI_T(KC_ESC)
+#define GUI_TAB LGUI(KC_TAB) // application toggle
+#define GUI_GRV LGUI(KC_GRV) // window toggle
+#define GUI_SSF LGUI(LSFT(KC_3)) // Full screen shot
+#define GUI_SST LGUI(LSFT(KC_4)) // Targetted screen shot
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |   Tab  |    Q   |    W   |    E   |    R   |    T   |    Y   |    U   |    I   |    O   |    P   |   -    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * | GUI/Esc|    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |  ;/nav |   "    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |  Shift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   | Sft/ent|
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * | Numpad |  Ctrl  |  Alt   |  GUI   |  Lower |  Bksp  |  Space | Raise  |  Ctrl  |  Alt   |   UI   |  Keybd |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_BASE_LAYER] = LAYOUT_ortho_4x12(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_MINS,
+    GUI_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    SCL_NAV, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SFT_ENT,
+    L_NUMPAD,KC_LCTL, KC_LALT, KC_LGUI, L_LOWER, KC_BSPC, KC_SPACE,L_RAISE, KC_RCTRL,KC_RALT, L_UI,    L_KEYBD
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |   `    |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |   +    |    =   |    -   |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |    \   |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |   ,    |    .   |    /   |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |  Del   |        |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_LOWER_LAYER] = LAYOUT_ortho_4x12(
+    KC_GRV,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_PLUS, KC_EQL,  _______,
+    _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSLS,
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COMM, KC_DOT,  KC_SLSH, _______,
+    _______, _______, _______, _______, _______, KC_DEL,  _______, _______, _______, _______, _______, _______
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |   ~    |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |   F7   |   F8   |    F9  |  F10   |   _    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |    {   |    [   |    (   |   <    |    >   |    )   |    ]   |    }   |        |   |    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |   Del  |        |        |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_RAISE_LAYER] = LAYOUT_ortho_4x12(
+    KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_7,    KC_F8,   KC_F9,   KC_F10,  KC_UNDS,
+    _______, XXXXXXX, KC_LCBR, KC_LBRC, KC_LPRN, KC_LABK, KC_RABK, KC_RPRN, KC_RBRC, KC_RCBR, XXXXXXX, KC_PIPE,
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+    _______, _______, _______, _______, _______, KC_DEL,  _______, _______, _______, _______, _______, _______
+),
+
+/* Numpad
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |        |        |        |        |        |        |        |   7    |    8   |   9    |   *    |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |   4    |    5   |   6    |   -    |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |   1    |    2   |   3    |   +    |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |   0    |    .   |   /    |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_NUMPAD_LAYER] = LAYOUT_ortho_4x12(
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7,    KC_8,    KC_9,    KC_ASTR, XXXXXXX,
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4,    KC_5,    KC_6,    KC_MINS, XXXXXXX,
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1,    KC_2,    KC_3,    KC_PLUS, _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_DOT,  KC_SLSH, _______, _______
+),
+
+/* Navigation
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |        |        |        |        |        |        |        |  Home  |   Up   |  End   |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |  Left  |  Down  | Right  |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |  Enter |        |        |   Del  |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_NAVIGATION_LAYER] = LAYOUT_ortho_4x12(
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_UP,   KC_END,  XXXXXXX, XXXXXXX,
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX,
+    _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    _______, _______, _______, _______, KC_ENT,  _______, _______, KC_DEL,  _______, _______, _______, _______
+),
+
+/* UI
+ * ,--------------------------------------------------------------------------------+--------+-----------------.
+ * | GUI Tab|        |        |        |        |        |        |        |        | GUI -  | GUI =  |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * | GUI `  | GUI 1  |  GUI 2 |  GUI 3 |  GUI 4 |  GUI 5 | GUI 6  | GUI 7  |        | GUI [  | GUI ]  |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------------------------+--------|
+ * |        |Full SS | Area SS|        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |  Prev  |  Play  | Next   |  Bri - |        |        |  Bri + |  Mute  | Vol -  | Vol +  |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_UI_LAYER] = LAYOUT_ortho_4x12(
+    GUI_TAB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, GUI_MIN, GUI_EQL, XXXXXXX,
+    GUI_GRV, GUI_1,   GUI_2,   GUI_3,   GUI_4,   GUI_5,   GUI_6,   GUI_7,   XXXXXXX, GUI_LBR, GUI_RBR, XXXXXXX,
+    _______, GUI_SSF, GUI_SST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    _______, KC_MRWD, KC_MPLY, KC_MFFD, KC_VOLD, KC_MUTE, KC_MUTE, KC_VOLU, _______, _______, _______, _______
+),
+
+/* Keyboard
+ * ,--------------------------------------------------------------------------------+--------+-----------------.
+ * |        |        |        |        |        |        |        |        |        |        |        | RESET  |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        | DEBUG  |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------------------------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+[_KEYBOARD_LAYER] = LAYOUT_ortho_4x12(
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DEBUG,
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______
+),
+};
\ No newline at end of file
diff --git a/layouts/community/ortho_4x12/bredfield/readme.md b/layouts/community/ortho_4x12/bredfield/readme.md
new file mode 100644 (file)
index 0000000..e0f6e3f
--- /dev/null
@@ -0,0 +1,105 @@
+# bredfield's 4x12 Ortho Keymap
+
+## Overview
+This is the layout that I use for all 4x12 boards, for writing and programming.
+
+- Works with planck or split style boards
+- Split spacebar; left position is backspace, which frees up the typical key for minus/undersc
+- Targets mac os; linux variant to come
+- Navigation layer is triggered via the `;` key, allowing for single-hand navigation without leaving the home row
+- Brackets are located on the home row on raise, which is comfortable when programming
+- Reduced mod / layer tap use, to avoid input lag
+- LEDs are overrated
+
+## Layers
+### Main
+```
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |   Tab  |    Q   |    W   |    E   |    R   |    T   |    Y   |    U   |    I   |    O   |    P   |   -    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * | GUI/Esc|    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |  ;/nav |   "    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |  Shift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   | Sft/ent|
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * | Numpad |  Ctrl  |  Alt   |  GUI   |  Lower |  Bksp  |  Space | Raise  |  Ctrl  |  Alt   |   UI   |  Keybd |
+ * `-----------------------------------------------------------------------------------------------------------'
+ ```
+
+ ### Lower
+ ```
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |   `    |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |   +    |    =   |    -   |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |    \   |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |   ,    |    .   |    /   |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |  Del   |        |        |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+```
+
+### Raise
+```
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |   ~    |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |   F7   |   F8   |    F9  |  F10   |   _    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |    {   |    [   |    (   |   <    |    >   |    )   |    ]   |    }   |        |   |    |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |   Del  |        |        |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+```
+
+### Numpad
+```
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |        |        |        |        |        |        |        |   7    |    8   |   9    |   *    |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |   4    |    5   |   6    |   -    |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |   1    |    2   |   3    |   +    |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |   0    |    .   |   /    |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ ```
+
+### Navigation
+```
+ * ,-----------------------------------------------------------------------------------------------------------.
+ * |        |        |        |        |        |        |        |  Home  |   Up   |  End   |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |  Left  |  Down  | Right  |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |  Enter |        |        |   Del  |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+```
+
+### UI
+```
+ * ,--------------------------------------------------------------------------------+--------+-----------------.
+ * | GUI Tab|        |        |        |        |        |        |        |        | GUI -  | GUI =  |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * | GUI `  | GUI 1  |  GUI 2 |  GUI 3 |  GUI 4 |  GUI 5 | GUI 6  | GUI 7  |        | GUI [  | GUI ]  |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------------------------+--------|
+ * |        |Full SS | Area SS|        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |  Prev  |  Play  | Next   |  Bri - |        |        |  Bri + |  Mute  | Vol -  | Vol +  |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+```
+
+### Keyboard
+```
+ * ,--------------------------------------------------------------------------------+--------+-----------------.
+ * |        |        |        |        |        |        |        |        |        |        |        | RESET  |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        | DEBUG  |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------------------------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |
+ * `-----------------------------------------------------------------------------------------------------------'
+ */
+ ```
\ No newline at end of file
diff --git a/layouts/community/ortho_4x12/jotix/config.h b/layouts/community/ortho_4x12/jotix/config.h
deleted file mode 100644 (file)
index 9ec4fd1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define TAPPING_TOGGLE 2
index 1eb82ff16f5ba42717091181ca847743e8c6afbe..c6655afa525289c6091f43c77ff1b5df90c44cfc 100644 (file)
@@ -1,15 +1,14 @@
 #include QMK_KEYBOARD_H
 
-extern keymap_config_t keymap_config;
-
 enum layers {
-    _QWERTY,
-    _LOWER,
-    _RAISE,
+  _QWERTY,
+  _LOWER,
+  _RAISE,
 };
 
-#define LOWER TT(_LOWER)
-#define RAISE TT(_RAISE)
+#define LOWER   MO(_LOWER)
+#define RAISE   MO(_RAISE)
+#define TGLOWER TG(_LOWER)
 
 static bool is_ctl_pressed;
 static bool is_esc_pressed;
@@ -17,65 +16,47 @@ static bool is_bspc_pressed;
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-/* qwerty
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |   esc  |    Q   |    W   |    E   |    R   |    T   |    Y   |    U   |    I   |    O   |    P   |  bspc  |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |   tab  |    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |    ;   |    '   |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * | lshift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   |  enter |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |  lctrl |  lgui  |  lalt  |  ralt  |  lower |  space |  space |  raise |  right |  down  |   up   |  right | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
-[_QWERTY] = LAYOUT_ortho_4x12 ( 
-    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,
-    KC_LCTL, KC_LGUI, KC_LALT, KC_RALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
-),
+[_QWERTY] = LAYOUT_ortho_4x12 (
+// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
+     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_ENT,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+    KC_LSFT, KC_Z  , KC_X  , KC_C  , KC_V  , KC_B  , KC_N  , KC_M  ,KC_COMM, KC_DOT, KC_UP, KC_SLSH,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+    KC_LCTL,KC_LGUI,KC_LALT,TGLOWER, LOWER , KC_SPC, KC_SPC, RAISE ,KC_RALT,KC_LEFT,KC_DOWN,KC_RGHT
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
+), 
 
-/* lower
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |        | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |  vol-  |  mute  |  vol+  |  caps  |  home  |  pgup  |    -   |   =    |    [   |    ]   |    \   | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |  prev  |  play  |  next  |   del  |   end  |  pgdn  |    `   |        |        |        |        | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |        |        |        |        |        |        |        | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
 [_LOWER] = LAYOUT_ortho_4x12 (
-    _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,
-    _______, KC_VOLD, KC_MUTE, KC_VOLU, KC_CAPS, KC_HOME, KC_PGUP, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
-    _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL,  KC_END,  KC_PGDN, KC_GRV,  _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
+     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_LBRC,KC_RBRC,KC_BSLS,KC_QUOT,_______,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+    _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 ,_______,KC_MINS, KC_EQL,_______,_______,_______,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+    _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______     
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
 ),
 
-/* raise
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |    (   |    )   |        | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    _   |    +   |    {   |    }   |    |   | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F7   |   F8   |   F9   |   F10  |   F11  |   F12  |    ~   |        |        |        |        | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |        |        |        |        |        |        |        | 
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
 [_RAISE] = LAYOUT_ortho_4x12 (
-    _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
-    _______, 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_TILD, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
+    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_F9 , KC_F10, KC_F11, KC_F12,_______,KC_LCBR,KC_RCBR,KC_PIPE,KC_DQUO,_______,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+    _______,_______,_______,_______,_______,_______,KC_UNDS,KC_PLUS,KC_HOME,KC_PGUP,KC_VOLU,_______,
+// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
+    _______,_______,_______,_______,_______,_______,_______,_______, KC_END,KC_PGDN,KC_VOLD,KC_MUTE     
+// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
 ),
 
 };
 
 uint32_t layer_state_set_user(uint32_t state) {
   #ifdef JOTANCK_LEDS
-  switch (biton32(state)) { 
+  switch (biton32(state)) {
   case _LOWER:
     writePinHigh(JOTANCK_LED1);
     writePinLow(JOTANCK_LED2);
index ed4aa7414443c78fe726605f30d3842c5f504def..ec1fb7ba9bfa16f2458320888769f658303918ad 100644 (file)
@@ -1,6 +1,6 @@
 # Jotix ortho 4x12 keymap
 
-![keymap](https://i.imgur.com/ocZCRkN.png)
+![keymap](https://i.imgur.com/CpZCcuy.png)
 
 Tested on:
 
diff --git a/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c b/layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
new file mode 100644 (file)
index 0000000..b1341d4
--- /dev/null
@@ -0,0 +1,17 @@
+
+// generated from users/manna-harbour_miryoku/miryoku.org
+
+#define LAYOUT_miryoku(\
+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,\
+N30,   N31,   K32,   K33,   K34,   K35,   K36,   K37,   N38,   N39\
+)\
+LAYOUT_ortho_4x12(\
+KC_NO, K01,   K02,   K03,   K04,   KC_NO, KC_NO, K05,   K06,   K07,   K08,   KC_NO,\
+K00,   K11,   K12,   K13,   K14,   KC_NO, KC_NO, K15,   K16,   K17,   K18,   K09,\
+K10,   K21,   K22,   K23,   K24,   KC_NO, KC_NO, K25,   K26,   K27,   K28,   K19,\
+K20,   KC_NO, KC_NO, K32,   K33,   K34,   K35,   K36,   K37,   KC_NO, KC_NO, K29\
+)
+
+#include "manna-harbour_miryoku.c"
index 173cd194a4ffa2f4c5a21d7da725dd25eb26a15c..33dbcfcb1dc852aa9d6117f3bcd0990f6a610db7 100644 (file)
 
 #define NO_SOUND
 
-#define LP_NUMB        \
-       H__NOTE(_CS5), H__NOTE(_E5), H__NOTE(_CS5), WD_NOTE(_FS5), \
-       WD_NOTE(_A5), WD_NOTE(_GS5),   WD_NOTE(_REST),  H__NOTE(_CS5), H__NOTE(_E5), \
-       H__NOTE(_CS5), WD_NOTE(_A5), WD_NOTE(_GS5), WD_NOTE(_E5),
-
 /* Ode to Joy
  * Author: Friedrich Schiller
  + License: Public Domain
     S__NOTE(_REST),  \
     E__NOTE(_E7  ),
 
+#define WORKMAN_SOUND \
+    E__NOTE(_GS6 ), \
+    E__NOTE(_A6  ), \
+    S__NOTE(_REST), \
+    E__NOTE(_GS6 ), \
+    E__NOTE(_A6  ), \
+    S__NOTE(_REST), \
+    ED_NOTE(_FS7  ), \
+    S__NOTE(_REST), \
+    ED_NOTE(_A7 ),
+
 #define PLOVER_SOUND \
     E__NOTE(_GS6 ),  \
     E__NOTE(_A6  ),  \
 #define TERRAS_THEME
 #define RENAI_CIRCULATION
 #define PLATINUM_DISCO
+#define LP_NUMB
index 23263b7007d7f4c4d3f38c3b62a16f98b8061220..6530738b71d38c10eca656d97e1f98c3ed58e133 100644 (file)
@@ -707,8 +707,9 @@ bool process_record_quantum(keyrecord_t *record) {
 
 #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
     case BL_BRTG: {
-      if (record->event.pressed)
+      if (record->event.pressed) {
         breathing_toggle();
+      }
       return false;
     }
 #endif
@@ -1027,35 +1028,49 @@ void matrix_scan_quantum() {
 #  define TCCRxB TCCR1B
 #  define COMxx1 COM1C1
 #  define OCRxx  OCR1C
+#  define TIMERx_OVF_vect TIMER1_OVF_vect
+#  define TOIEx  TOIE1
 #  define ICRx   ICR1
+#  define TIMSKx TIMSK1
 #elif BACKLIGHT_PIN == B6
 #  define HARDWARE_PWM
 #  define TCCRxA TCCR1A
 #  define TCCRxB TCCR1B
 #  define COMxx1 COM1B1
 #  define OCRxx  OCR1B
+#  define TIMERx_OVF_vect TIMER1_OVF_vect
+#  define TOIEx  TOIE1
 #  define ICRx   ICR1
+#  define TIMSKx TIMSK1
 #elif BACKLIGHT_PIN == B5
 #  define HARDWARE_PWM
 #  define TCCRxA TCCR1A
 #  define TCCRxB TCCR1B
 #  define COMxx1 COM1A1
 #  define OCRxx  OCR1A
+#  define TIMERx_OVF_vect TIMER1_OVF_vect
+#  define TOIEx  TOIE1
 #  define ICRx   ICR1
+#  define TIMSKx TIMSK1
 #elif BACKLIGHT_PIN == C6
 #  define HARDWARE_PWM
 #  define TCCRxA TCCR3A
 #  define TCCRxB TCCR3B
-#  define COMxx1 COM1A1
+#  define COMxx1 COM3A1
 #  define OCRxx  OCR3A
+#  define TIMERx_OVF_vect TIMER3_OVF_vect
+#  define TOIEx  TOIE3
 #  define ICRx   ICR3
+#  define TIMSKx TIMSK3
 #elif defined(__AVR_ATmega32A__) && BACKLIGHT_PIN == D4
 #  define TCCRxA TCCR1A
 #  define TCCRxB TCCR1B
 #  define COMxx1 COM1B1
 #  define OCRxx  OCR1B
+#  define TIMERx_OVF_vect TIMER1_OVF_vect
+#  define TOIEx  TOIE1
 #  define ICRx   ICR1
-#  define TIMSK1 TIMSK
+#  define TIMSKx TIMSK1
 #else
 #  if !defined(BACKLIGHT_CUSTOM_DRIVER)
 #    if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO)
@@ -1066,15 +1081,15 @@ void matrix_scan_quantum() {
 #      define TCCRxA TCCR1A
 #      define TCCRxB TCCR1B
 #      define OCRxx  OCR1A
-#      define OCRxAH OCR1AH
-#      define OCRxAL OCR1AL
 #      define TIMERx_COMPA_vect TIMER1_COMPA_vect
 #      define TIMERx_OVF_vect TIMER1_OVF_vect
 #      define OCIExA OCIE1A
 #      define TOIEx  TOIE1
 #      define ICRx   ICR1
-#      ifndef TIMSK
-#        define TIMSK TIMSK1
+#      if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register
+#        define TIMSKx TIMSK
+#      else
+#        define TIMSKx TIMSK1
 #      endif
 #    elif !defined(C6_AUDIO) && !defined(C5_AUDIO) && !defined(C4_AUDIO)
 #pragma message "Using hardware timer 3 with software PWM"
@@ -1084,16 +1099,12 @@ void matrix_scan_quantum() {
 #      define TCCRxA TCCR3A
 #      define TCCRxB TCCR3B
 #      define OCRxx OCR3A
-#      define OCRxAH OCR3AH
-#      define OCRxAL OCR3AL
 #      define TIMERx_COMPA_vect TIMER3_COMPA_vect
 #      define TIMERx_OVF_vect TIMER3_OVF_vect
 #      define OCIExA OCIE3A
 #      define TOIEx  TOIE3
 #      define ICRx   ICR1
-#      ifndef TIMSK
-#        define TIMSK TIMSK3
-#      endif
+#      define TIMSKx TIMSK3
 #    else
 #pragma message "Audio in use - using pure software PWM"
 #define NO_HARDWARE_PWM
@@ -1138,13 +1149,13 @@ void backlight_off(uint8_t backlight_pin) {
 #define BACKLIGHT_PIN_INIT BACKLIGHT_PINS
 #endif
 
-#define FOR_EACH_LED(x)                             \
+#define FOR_EACH_LED(x) \
   for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) \
-  {                                                 \
-    uint8_t backlight_pin = backlight_pins[i];      \
+  { \
+    uint8_t backlight_pin = backlight_pins[i]; \
     { \
-      x                         \
-    }                                             \
+      x \
+    } \
   }
 
 static const uint8_t backlight_pins[BACKLIGHT_LED_COUNT] = BACKLIGHT_PIN_INIT;
@@ -1223,7 +1234,9 @@ ISR(TIMERx_COMPA_vect) {
 // this one triggers at F_CPU/65536 =~ 244 Hz
 ISR(TIMERx_OVF_vect) {
 #ifdef BACKLIGHT_BREATHING
-  breathing_task();
+  if(is_breathing()) {
+    breathing_task();
+  }
 #endif
   // for very small values of OCRxx (or backlight level)
   // we can't guarantee this whole code won't execute
@@ -1274,8 +1287,8 @@ void backlight_set(uint8_t level) {
   if (level == 0) {
     #ifdef BACKLIGHT_PWM_TIMER
       if (OCRxx) {
-        TIMSK &= ~(_BV(OCIExA));
-        TIMSK &= ~(_BV(TOIEx));
+        TIMSKx &= ~(_BV(OCIExA));
+        TIMSKx &= ~(_BV(TOIEx));
         FOR_EACH_LED(
           backlight_off(backlight_pin);
         )
@@ -1287,8 +1300,8 @@ void backlight_set(uint8_t level) {
   } else {
     #ifdef BACKLIGHT_PWM_TIMER
       if (!OCRxx) {
-        TIMSK |= _BV(OCIExA);
-        TIMSK |= _BV(TOIEx);
+        TIMSKx |= _BV(OCIExA);
+        TIMSKx |= _BV(TOIEx);
       }
     #else
     // Turn on PWM control of backlight pin
@@ -1325,11 +1338,11 @@ bool is_breathing(void) {
 #else
 
 bool is_breathing(void) {
-    return !!(TIMSK1 & _BV(TOIE1));
+    return !!(TIMSKx & _BV(TOIEx));
 }
 
-#define breathing_interrupt_enable() do {TIMSK1 |= _BV(TOIE1);} while (0)
-#define breathing_interrupt_disable() do {TIMSK1 &= ~_BV(TOIE1);} while (0)
+#define breathing_interrupt_enable() do {TIMSKx |= _BV(TOIEx);} while (0)
+#define breathing_interrupt_disable() do {TIMSKx &= ~_BV(TOIEx);} while (0)
 #endif
 
 #define breathing_min() do {breathing_counter = 0;} while (0)
@@ -1411,7 +1424,7 @@ void breathing_task(void)
 /* Assuming a 16MHz CPU clock and a timer that resets at 64k (ICR1), the following interrupt handler will run
  * about 244 times per second.
  */
-ISR(TIMER1_OVF_vect)
+ISR(TIMERx_OVF_vect)
 #endif
 {
   uint16_t interval = (uint16_t) breathing_period * 244 / BREATHING_STEPS;
index 0e59df3d06d9bf0b593302850e6b2e1790411a9c..ff0fc5e1930dcf68b9b4755c9a689279582ff127 100644 (file)
@@ -4,6 +4,10 @@
     #define RGBLIGHT_SPLIT
   #endif
 
+  #ifndef F_SCL
+    #define F_SCL 100000UL  // SCL frequency
+  #endif
+
 #else  // use serial
   // When using serial, the user must define RGBLIGHT_SPLIT explicitly
   //  in config.h as needed.
index 17f3779b7423d6d7805a95af75c4e2346175f927..716b61a25c3726b8c05089b9fb0534349cd43c6a 100644 (file)
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "quantum.h"
+#include "layout_macros.h"
 
 #define BASE 0
 #define CODE 1 // code layer
diff --git a/users/333fred/layout_macros.h b/users/333fred/layout_macros.h
new file mode 100644 (file)
index 0000000..3b163f6
--- /dev/null
@@ -0,0 +1,44 @@
+#pragma once
+
+#define SIX_TRNS  _______, _______, _______, _______, _______, _______
+#define FOUR_TRNS _______, _______, _______, _______
+
+// Row 5: 6 keys
+#define ROW5_LEFT_BASE KC_GRV,  KC_1,  KC_2,  KC_3,  KC_4,  KC_5
+#define ROW5_RGHT_BASE KC_6,    KC_7,  KC_8,  KC_9,  KC_0,  KC_MINS
+#define ROW5_LEFT_SYMB _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define ROW5_RGHT_SYMB KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11
+#define ROW5_LEFT_VIM  SIX_TRNS
+#define ROW5_RGHT_VIM  SIX_TRNS
+
+// Row 4: 6 keys
+#define ROW4_LEFT_BASE KC_TAB,  KC_Q,    KC_W,  KC_E,    KC_R,    KC_T
+#define ROW4_RGHT_BASE KC_Y,    KC_U,    KC_I,  KC_O,    KC_P,    KC_BSLS
+#define ROW4_LEFT_SYMB _______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, KC_PIPE
+#define ROW4_RGHT_SYMB KC_UP,   KC_7,    KC_8,  KC_9,    KC_ASTR, KC_F12
+#define ROW4_LEFT_VIM  SIX_TRNS
+#define ROW4_RGHT_VIM  SIX_TRNS
+
+// Row 3: 6 keys
+#define ROW3_LEFT_BASE CTL_T(KC_ESC), KC_A,    KC_S,   KC_D,     KC_F,    KC_G
+#define ROW3_RGHT_BASE KC_H,          KC_J,    KC_K,   KC_L,     KC_SCLN, KC_QUOT
+#define ROW3_LEFT_SYMB _______,       KC_HASH, KC_DLR, KC_LCBR,  KC_RCBR, KC_GRV
+#define ROW3_RGHT_SYMB KC_DOWN,       KC_4,    KC_5,   KC_6,     KC_PLUS, _______
+#define ROW3_LEFT_VIM  _______,       DLEFT,   DRIGHT, KC_LCTL,  KC_LGUI, _______
+#define ROW3_RGHT_VIM  KC_LEFT,       KC_DOWN, KC_UP,  KC_RIGHT, _______, _______
+
+// Row 2: 6 keys
+#define ROW2_LEFT_BASE OSM(MOD_LSFT), CTL_T(KC_Z), KC_X,    KC_C,     KC_V,           KC_B
+#define ROW2_RGHT_BASE KC_N,          KC_M,        KC_COMM, KC_DOT,   CTL_T(KC_SLSH), OSM(MOD_RSFT)
+#define ROW2_LEFT_SYMB _______,       KC_PERC,     KC_CIRC, KC_LBRC,  KC_RBRC,        KC_TILD
+#define ROW2_RGHT_SYMB KC_AMPR,       KC_1,        KC_2,    KC_3,     KC_BSLS,        _______
+#define ROW2_LEFT_VIM  _______,       _______,     KC_TAB,  _______,  _______,        _______
+#define ROW2_RGHT_VIM  SIX_TRNS
+
+// Row 1: 4 keys
+#define ROW1_LEFT_BASE OSM(MOD_LCTL), KC_F4,   KC_F5,    KC_LALT
+#define ROW1_RGHT_BASE KC_DOWN,       KC_EQL,  KC_RIGHT, KC_RGUI
+#define ROW1_LEFT_SYMB _______,       _______, _______,  _______
+#define ROW1_RGHT_SYMB KC_0,          KC_DOT,  KC_EQL,   _______
+#define ROW1_LEFT_VIM  FOUR_TRNS
+#define ROW1_RGHT_VIM  FOUR_TRNS
index 5a6d74b5ac60568ec9aaef547879c99dfa287fe7..c86cd1c77d0ddb76b14e908ad0ff265dca2ac4dd 100644 (file)
@@ -5,15 +5,15 @@ void layer_state_set_rgb(uint32_t state) {
   switch (biton32(state)) {
     case BASE:
       // purple
-      rgblight_sethsv_noeeprom(255, 255, 20);
+      rgblight_sethsv_noeeprom(210, 255, 20);
       break;
     case SYMB:
       // blue
-      rgblight_sethsv_noeeprom(240, 255, 20);
+      rgblight_sethsv_noeeprom(191, 255, 20);
       break;
     case VIM:
       // green
-      rgblight_sethsv_noeeprom(120, 255, 20);
+      rgblight_sethsv_noeeprom(85, 255, 20);
       break;
     case GAME:
       // red
diff --git a/users/manna-harbour_miryoku/README.org b/users/manna-harbour_miryoku/README.org
new file mode 120000 (symlink)
index 0000000..b6caaad
--- /dev/null
@@ -0,0 +1 @@
+miryoku.org
\ No newline at end of file
diff --git a/users/manna-harbour_miryoku/config.h b/users/manna-harbour_miryoku/config.h
new file mode 100644 (file)
index 0000000..c3c513d
--- /dev/null
@@ -0,0 +1,13 @@
+
+// generated from users/manna-harbour_miryoku/miryoku.org
+
+#pragma once
+
+// Prevent normal rollover on alphas from accidentally triggering mods.
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
+#define TAPPING_FORCE_HOLD
+
+// Recommended for heavy chording.
+#define QMK_KEYS_PER_SCAN 4
diff --git a/users/manna-harbour_miryoku/manna-harbour_miryoku.c b/users/manna-harbour_miryoku/manna-harbour_miryoku.c
new file mode 100644 (file)
index 0000000..bb4770a
--- /dev/null
@@ -0,0 +1,56 @@
+
+// generated from users/manna-harbour_miryoku/miryoku.org
+
+#include QMK_KEYBOARD_H
+
+#define KC_NP KC_NO // key is not present
+#define KC_NA KC_NO // present but not available for use
+#define KC_NU KC_NO // available but not used
+#define KC_RST RESET
+
+enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [BASE] = LAYOUT_miryoku(
+    KC_Q,              KC_W,              KC_F,              KC_P,              KC_B,              KC_J,              KC_L,              KC_U,              KC_Y,              KC_QUOT,
+    LGUI_T(KC_A),      LALT_T(KC_R),      LCTL_T(KC_S),      LSFT_T(KC_T),      KC_G,              KC_M,              LSFT_T(KC_N),      LCTL_T(KC_E),      LALT_T(KC_I),      LGUI_T(KC_O),
+    KC_Z,              KC_X,              KC_C,              KC_D,              KC_V,              KC_K,              KC_H,              KC_COMM,           KC_DOT,            KC_SLSH,
+    KC_NP,             KC_NP,             LT(MEDR, KC_ESC),  LT(NAVR, KC_SPC),  LT(MOUR, KC_TAB),  LT(NSSL, KC_ENT),  LT(NSL, KC_BSPC),  LT(FUNL, KC_DEL),  KC_NP,             KC_NP
+  ),
+  [NAVR] = LAYOUT_miryoku(
+    KC_RST,  KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_AGIN, KC_UNDO, KC_CUT,  KC_COPY, KC_PSTE,
+    KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA,   KC_CAPS, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT,
+    KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_INS,  KC_HOME, KC_PGDN, KC_PGUP, KC_END,
+    KC_NP,   KC_NP,   KC_NA,   KC_NA,   KC_NA,   KC_ENT,  KC_BSPC, KC_DEL,  KC_NP,   KC_NP
+  ),
+  [MOUR] = LAYOUT_miryoku(
+    KC_RST,  KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NU,   KC_NU,   KC_NU,   KC_NU,   KC_NU,
+    KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA,   KC_NU,   KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R,
+    KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NU,   KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
+    KC_NP,   KC_NP,   KC_NA,   KC_NA,   KC_NA,   KC_BTN3, KC_BTN1, KC_BTN2, KC_NP,   KC_NP
+  ),
+  [MEDR] = LAYOUT_miryoku(
+    KC_RST,  KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NU,   KC_NU,   KC_NU,   KC_NU,   KC_NU,
+    KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA,   KC_NU,   KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT,
+    KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NU,   KC_NU,   KC_NU,   KC_NU,   KC_NU,
+    KC_NP,   KC_NP,   KC_NA,   KC_NA,   KC_NA,   KC_MSTP, KC_MPLY, KC_MUTE, KC_NP,   KC_NP
+  ),
+  [FUNL] = LAYOUT_miryoku(
+    KC_F12,  KC_F7,   KC_F8,   KC_F9,   KC_PSCR, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_RST,
+    KC_F11,  KC_F4,   KC_F5,   KC_F6,   KC_SLCK, KC_NA,   KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+    KC_F10,  KC_F1,   KC_F2,   KC_F3,   KC_PAUS, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,
+    KC_NP,   KC_NP,   KC_APP,  KC_SPC,  KC_TAB,  KC_NA,   KC_NA,   KC_NA,   KC_NP,   KC_NP
+  ),
+  [NSL] = LAYOUT_miryoku(
+    KC_LBRC, KC_7,    KC_8,    KC_9,    KC_RBRC, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_RST,
+    KC_SCLN, KC_4,    KC_5,    KC_6,    KC_EQL,  KC_NA,   KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_BSLS, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,
+    KC_NP,   KC_NP,   KC_DOT,  KC_0,    KC_MINS, KC_NA,   KC_NA,   KC_NA,   KC_NP,   KC_NP
+  ),
+  [NSSL] = LAYOUT_miryoku(
+    KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_RST,
+    KC_COLN, KC_DLR,  KC_PERC, KC_CIRC, KC_PLUS, KC_NA,   KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_PIPE, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,
+    KC_NP,   KC_NP,   KC_GT,   KC_RPRN, KC_UNDS, KC_NA,   KC_NA,   KC_NA,   KC_NP,   KC_NP
+  )
+};
diff --git a/users/manna-harbour_miryoku/miryoku.org b/users/manna-harbour_miryoku/miryoku.org
new file mode 100644 (file)
index 0000000..556f95f
--- /dev/null
@@ -0,0 +1,609 @@
+#+Title: miryoku.org
+
+The miryoku layout is an ergonomic, minimal, orthogonal layout for ergo or ortho
+keyboards, implemented as part of the QMK firmware.  The layout is maintained in
+emacs org-mode tables and converted to QMK keymap data structures using embedded
+python scripts.  The layout is mapped onto keyboards with different physical
+layouts as a subset without code duplication using the QMK userland feature and
+C macros.  Versions of the layout can also be seen outside of the QMK source at
+[[https://github.com/manna-harbour/miryoku/]].
+
+* Contents
+
+- [[#layout][Layout]]
+- [[#code-generation][Code Generation]]
+- [[#subset-mapping][Subset Mapping]]
+
+
+* Layout
+:PROPERTIES:
+:CUSTOM_ID: layout
+:END:
+
+** Info
+
+*** General Principles
+
+    - Use layers instead of reaching.
+    - Use both hands instead of contortions.
+    - Use the home positions as much as possible.
+    - Make full use of the thumbs.
+    - Avoid unnecessary complication.
+
+
+*** Specifics
+
+    - 5 columns, 3 rows, 3 thumb keys, 2 hands.
+    - Can be used on almost any split or non-split ergo or ortho keyboard.
+    - Includes all keys found on a US layout TKL keyboard, plus media keys and
+      mouse emulation.
+    - Home row is the middle row, home thumb key is the middle thumb key.
+    - Maximum 1-u movement from home position for fingers and thumbs, and only
+      along one axis (except for the inner index finger column which is
+      deprioritised compared with the home columns).
+    - Dual-function modifiers on home row, mirrored on both hands.
+    - Dual-function layer change on thumbs.
+    - Layers are designed orthogonally with a single purpose per hand and are
+      accessed by holding a thumb key on the opposite hand.
+    - Holding layer change and modifiers on one hand combined with a single key
+      press on the other hand can produce any combination of modifiers and
+      single keys without any finger contortions.
+    - Single function mods are also defined on layers on the same hand as the
+      layer change thumb key so layer change and mods can be held in any order
+      or simultaneously without race conditions.
+    - As mods are only enabled on the opposite hand, auto-repeat is available on
+      the home row on layers for use with cursor and mouse keys.
+    - Tap-hold auto-repeat is disabled to enable faster tap-hold switching on
+      thumbs but thumb tap keys are mirrored onto some layers for use with
+      auto-repeat.
+
+
+** Layers
+
+The layers are maintained in tables, with the thumb keys on the bottom row.  NP
+indicates the key is not present and is used to fill in the table around the
+thumb keys.  The grid arrangement of the tables does not imply a particular
+physical layout.
+
+Basic keycodes are entered without the KC_ prefix.  Symbols can be entered as-is
+(excepting '"' (DQUO) and '|' (PIPE)).  Empty cells are unused.
+
+The base layer has both halves of the layout joined for convenience.  Other
+layers are specified as a single hand.
+
+*** Base (BASE)
+
+
+The base layer is maintained as separate tap and hold tables and are combined
+into the corresponding tap-hold keycodes for mods and layer change.  RST and
+mods will be available on sub layers on the same hand as the layer change thumb
+key.  Unknown names are considered to be layer names.
+
+Base layer alphas are Colemak DHm.  Thumb keys are backspace, enter, delete on
+the right and space, tab, escape on the left.  Dot, comma and apostrophe are
+included for prose, dot and slash for file and directory names.
+
+#+NAME: tap
+| Q    | W    | F    | P    | B    | J    | L    | U    | Y    | '    |
+| A    | R    | S    | T    | G    | M    | N    | E    | I    | O    |
+| Z    | X    | C    | D    | V    | K    | H    | ,    | .    | /    |
+| NP   | NP   | ESC  | SPC  | TAB  | ENT  | BSPC | DEL  | NP   | NP   |
+
+#+NAME: hold
+| RST  |      |      |      |      |      |      |      |      | RST  |
+| LGUI | LALT | LCTL | LSFT |      |      | LSFT | LCTL | LALT | LGUI |
+|      |      |      |      |      |      |      |      |      |      |
+| NP   | NP   | MEDR | NAVR | MOUR | NSSL | NSL  | FUNL | NP   | NP   |
+
+
+*** Navigation (NAVR)
+
+Primary right-hand layer (left home thumb) is navigation and editing.  Cursor
+keys are on the home position, line and page movement below, clipboard above,
+caps and insert on the inner column.  Thumb keys are duplicated from the base
+layer to avoid having to layer change mid edit and to enable auto-repeat.
+
+#+NAME: navr
+| AGIN | UNDO | CUT  | COPY | PSTE |
+| CAPS | LEFT | DOWN | UP   | RGHT |
+| INS  | HOME | PGDN | PGUP | END  |
+| ENT  | BSPC | DEL  | NP   | NP   |
+
+
+*** Mouse (MOUR)
+
+Secondary RH layer is mouse emulation.  Mouse movement mirrors cursor navigation
+on home and wheel mirrors line / page movement below.  Buttons are on the
+thumbs.  Mouse movement, click, and drag with modifiers can be performed from
+the home position.  Unused keys are available for other related functions.
+
+#+NAME: mour
+|      |      |      |      |      |
+|      | MS_L | MS_D | MS_U | MS_R |
+|      | WH_L | WH_D | WH_U | WH_R |
+| BTN3 | BTN1 | BTN2 | NP   | NP   |
+
+
+*** Media (MEDR)
+
+Tertiary RH layer is media control, with volume up / down and next / prev
+mirroring the navigation keys.  Pause, stop and mute are on thumbs.  Unused keys
+are available for other related functions.
+
+#+NAME: medr
+|      |      |      |      |      |
+|      | MPRV | VOLD | VOLU | MNXT |
+|      |      |      |      |      |
+| MSTP | MPLY | MUTE | NP   | NP   |
+
+
+*** Numerals and Symbols (NSL)
+
+Primary left-hand layer (right home thumb) is numerals and symbols.  Numerals
+are in the standard numpad locations with symbols in the remaining positions.
+Dot is duplicated from the base layer for convenience.
+
+#+NAME: nsl
+| [    | 7    | 8    | 9    | ]    |
+| ;    | 4    | 5    | 6    | =    |
+| `    | 1    | 2    | 3    | \    |
+| NP   | NP   | .    | 0    | -    |
+
+
+*** Shifted Numerals and Symbols (NSSL)
+
+Secondary LH layer has shifted symbols in the same locations to reduce chording
+when using mods with shifted symbols.  Automatically generated from unshifted
+table.
+
+
+*** Function and System (FUNL)
+
+Tertiary LH layer has function keys mirroring the numerals on the primary layer
+with extras on the pinkie column, plus system keys on the inner column.  App
+(menu) is on the tertiary thumb key and other thumb keys are duplicated from the
+base layer to enable auto-repeat.
+
+
+#+NAME: funl
+| F12  | F7   | F8   | F9   | PSCR |
+| F11  | F4   | F5   | F6   | SLCK |
+| F10  | F1   | F2   | F3   | PAUS |
+| NP   | NP   | APP  | SPC  | TAB  |
+
+
+*** COMMENT Templates
+
+#+NAME: tem
+| <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> | <l4> |
+|------+------+------+------+------+------+------+------+------+------|
+|      |      |      |      |      |      |      |      |      |      |
+|      |      |      |      |      |      |      |      |      |      |
+|      |      |      |      |      |      |      |      |      |      |
+| NP   | NP   |      |      |      |      |      |      | NP   | NP   |
+
+
+Duplicate base layer tap keys on thumbs rather than trans to enable auto-repeat.
+
+#+NAME: temr
+| <l4> | <l4> | <l4> | <l4> | <l4> |
+|------+------+------+------+------|
+|      |      |      |      |      |
+|      |      |      |      |      |
+|      |      |      |      |      |
+| ENT  | BSPC | DEL  | NP   | NP   |
+
+#+NAME: teml
+| <l4> | <l4> | <l4> | <l4> | <l4> |
+|------+------+------+------+------|
+|      |      |      |      |      |
+|      |      |      |      |      |
+|      |      |      |      |      |
+| NP   | NP   | ESC  | SPC  | TAB  |
+
+
+* Code Generation
+:PROPERTIES:
+:CUSTOM_ID: code-generation
+:END:
+
+** Table Conversion Scripts
+
+*** table-layout-taphold
+
+Produce base layer from separate tap and hold tables.
+
+#+NAME: table-layout-taphold
+#+BEGIN_SRC python :var tap_table=tap :var hold_table=hold :var symbol_names_table=symbol-names :var mods_list=mods :tangle no :results verbatim
+width = 19
+mods_dict = dict.fromkeys(mods_list)
+symbol_names_dict = {}
+for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
+  symbol_names_dict[symbol] = name
+  symbol_names_dict[shifted_symbol] = shifted_name
+results = '  [BASE] = LAYOUT_miryoku(\n'
+for tap_row, hold_row in map(None, tap_table, hold_table):
+  results += '    '
+  for tap, hold in map(None, tap_row, hold_row):
+    if tap == '':
+      code = 'NU'
+    elif tap in symbol_names_dict:
+      code = symbol_names_dict[tap]
+    else:
+      code = tap
+    code = 'KC_' + str(code)
+    if hold in mods_dict:
+      code = str(hold) + '_T(' + code + ')'
+    elif hold != '' and hold != 'NP' and hold != 'RST':
+      code = 'LT(' + str(hold) + ', ' + code + ')'
+    results += (code + ', ').ljust(width)
+  results = results.rstrip(' ') + '\n'
+results = results.rstrip('\n, ') + '\n  )'
+return results
+#+END_SRC
+
+#+RESULTS: table-layout-taphold
+:   [BASE] = LAYOUT_miryoku(
+:     KC_Q,              KC_W,              KC_F,              KC_P,              KC_B,              KC_J,              KC_L,              KC_U,              KC_Y,              KC_QUOT,
+:     LGUI_T(KC_A),      LALT_T(KC_R),      LCTL_T(KC_S),      LSFT_T(KC_T),      KC_G,              KC_M,              LSFT_T(KC_N),      LCTL_T(KC_E),      LALT_T(KC_I),      LGUI_T(KC_O),
+:     KC_Z,              KC_X,              KC_C,              KC_D,              KC_V,              KC_K,              KC_H,              KC_COMM,           KC_DOT,            KC_SLSH,
+:     KC_NP,             KC_NP,             LT(MEDR, KC_ESC),  LT(NAVR, KC_SPC),  LT(MOUR, KC_TAB),  LT(NSSL, KC_ENT),  LT(NSL, KC_BSPC),  LT(FUNL, KC_DEL),  KC_NP,             KC_NP
+:   )
+
+
+*** table-layout-half
+
+Produce sub layers given layer name and corresponding table for single hand and
+incorporating mods and reset from base layer.  Layer names must end with R or L.
+A layer with shifted symbols can also be generated.
+
+#+NAME: table-layout-half
+#+BEGIN_SRC python :var hold_table=hold :var layer_name="NSL" :var half_table=nsl :var symbol_names_table=symbol-names :var mods_list=mods :var shift="false" :tangle no :results verbatim
+width = 9
+mods_dict = dict.fromkeys(mods_list)
+symbol_names_dict = {}
+shifted_symbol_names_dict = {}
+for symbol, name, shifted_symbol, shifted_name in symbol_names_table:
+  symbol_names_dict[symbol] = name
+  symbol_names_dict[shifted_symbol] = shifted_name
+  shifted_symbol_names_dict[symbol] = shifted_name
+length = len(half_table[0])
+mode = layer_name[-1:].lower()
+results = '  [' + layer_name + '] = LAYOUT_miryoku(\n'
+for half_row, hold_row in map(None, half_table, hold_table):
+  results += '    '
+  hold_row_l, hold_row_r = hold_row[:length], hold_row[length:]
+  for lr, hold_row_lr in ('l', hold_row_l), ('r', hold_row_r):
+    if lr == mode:
+      for half in half_row:
+        if half == '':
+          code = 'NU'
+        elif shift == "true" and half in shifted_symbol_names_dict:
+          code = shifted_symbol_names_dict[half]
+        elif half in symbol_names_dict:
+          code = symbol_names_dict[half]
+        else:
+          code = half
+        results += ('KC_' + str(code) + ', ').ljust(width)
+    else:
+      for hold in hold_row_lr:
+        if hold == '' or hold != 'NP' and hold != 'RST' and hold not in mods_dict:
+          code = 'NA'
+        else:
+          code = hold
+        results += ('KC_' + str(code) + ', ').ljust(width)
+  results = results.rstrip(' ') + '\n'
+results = results.rstrip('\n, ') + '\n  )'
+return results
+#+END_SRC
+
+#+RESULTS: table-layout-half
+:   [NSL] = LAYOUT_miryoku(
+:     KC_LBRC, KC_7,    KC_8,    KC_9,    KC_RBRC, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_RST,
+:     KC_SCLN, KC_4,    KC_5,    KC_6,    KC_EQL,  KC_NA,   KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI,
+:     KC_GRV,  KC_1,    KC_2,    KC_3,    KC_BSLS, KC_NA,   KC_NA,   KC_NA,   KC_NA,   KC_NA,
+:     KC_NP,   KC_NP,   KC_DOT,  KC_0,    KC_MINS, KC_NA,   KC_NA,   KC_NA,   KC_NP,   KC_NP
+:   )
+
+
+*** table-enums
+
+Produce layer enums from layer names in hold table.
+
+#+NAME: table-enums
+#+BEGIN_SRC python :var hold_table=hold :var mods_list=mods :tangle no
+mods_dict = dict.fromkeys(mods_list)
+results = 'enum layers { BASE, '
+for hold_row in hold_table:
+  for hold in hold_row:
+    if hold not in mods_dict and hold != '' and hold != 'NP' and hold != 'RST':
+      results += hold + ', '
+results = results.rstrip(', ') + ' };'
+return results
+#+END_SRC
+
+#+RESULTS: table-enums
+: enum layers { BASE, MEDR, NAVR, MOUR, NSSL, NSL, FUNL };
+
+
+** Data
+
+*** symbol-names
+
+Symbol, name, and shifted symbol mappings for use in tables.
+
+#+NAME: symbol-names
+| `    | GRV  | ~    | TILD |
+| -    | MINS | _    | UNDS |
+| =    | EQL  | +    | PLUS |
+| [    | LBRC | {    | LCBR |
+| ]    | RBRC | }    | RCBR |
+| \    | BSLS | PIPE | PIPE |
+| ;    | SCLN | :    | COLN |
+| '    | QUOT | DQUO | DQUO |
+| ,    | COMM | <    | LT   |
+| .    | DOT  | >    | GT   |
+| /    | SLSH | ?    | QUES |
+| 1    | 1    | !    | EXLM |
+| 2    | 2    | @    | AT   |
+| 3    | 3    | #    | HASH |
+| 4    | 4    | $    | DLR  |
+| 5    | 5    | %    | PERC |
+| 6    | 6    | ^    | CIRC |
+| 7    | 7    | &    | AMPR |
+| 8    | 8    | *    | ASTR |
+| 9    | 9    | (    | LPRN |
+| 0    | 0    | )    | RPRN |
+
+
+*** mods
+
+Modifiers usable in hold table.  Need to have the same name for KC_ and _T versions.
+
+#+NAME: mods
+- LSFT
+- LCTL
+- LALT
+- LGUI
+- LAGR
+
+
+** Other
+
+*** header
+
+Header for tangled src files.
+
+#+NAME: header
+#+BEGIN_SRC C :tangle no
+generated from users/manna-harbour_miryoku/miryoku.org
+#+END_SRC
+
+
+* Subset Mapping
+:PROPERTIES:
+:CUSTOM_ID: subset-mapping
+:END:
+
+** Userspace
+
+The keymap and configuration are shared between keyboards.  The keymap is
+defined for LAYOUT_miryoku which is 10x4, with the outer 2 positions on the
+bottom row unused and the rest of the bottom row are the thumb keys.
+
+
+*** manna-harbour_miryoku.c
+
+Contains the keymap.  Included from keymap.c
+
+[[./manna-harbour_miryoku.c][users/manna-harbour_miryoku/manna-harbour_miryoku.c]]
+#+BEGIN_SRC C :noweb yes :tangle manna-harbour_miryoku.c
+
+// <<header>>
+
+#include QMK_KEYBOARD_H
+
+#define KC_NP KC_NO // key is not present
+#define KC_NA KC_NO // present but not available for use
+#define KC_NU KC_NO // available but not used
+#define KC_RST RESET
+
+<<table-enums()>>
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+<<table-layout-taphold()>>,
+<<table-layout-half(layer_name="NAVR", half_table=navr)>>,
+<<table-layout-half(layer_name="MOUR", half_table=mour)>>,
+<<table-layout-half(layer_name="MEDR", half_table=medr)>>,
+<<table-layout-half(layer_name="FUNL", half_table=funl)>>,
+<<table-layout-half(layer_name="NSL", half_table=nsl)>>,
+<<table-layout-half(layer_name="NSSL", half_table=nsl, shift="true")>>
+};
+#+END_SRC
+
+
+*** config.h
+
+Config options.  Automatically included.
+
+[[./config.h][users/manna-harbour_miryoku/config.h]]
+#+BEGIN_SRC C :noweb yes :tangle config.h
+
+// <<header>>
+
+#pragma once
+
+// Prevent normal rollover on alphas from accidentally triggering mods.
+#define IGNORE_MOD_TAP_INTERRUPT
+
+// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
+#define TAPPING_FORCE_HOLD
+
+// Recommended for heavy chording.
+#define QMK_KEYS_PER_SCAN 4
+
+#+END_SRC
+
+
+*** rules.mk
+
+Build options.  Automatically included.
+
+[[./rules.mk][users/manna-harbour_miryoku/rules.mk]]
+#+BEGIN_SRC makefile :noweb yes :tangle rules.mk
+
+# <<header>>
+
+MOUSEKEY_ENABLE = yes        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes        # Audio control and System control(+450)
+
+#+END_SRC
+
+
+** Layouts
+
+To use the keymap on a keyboard supporting the layouts feature, LAYOUT_miryoku
+is defined as a macro mapping onto the layout's own LAYOUT macro, leaving the
+unused keys as KC_NO.  The userspace keymap is then included.
+
+*** ergodox
+
+For the ergodox layout, the main 5x3 alphas are used as usual. The primary and
+secondary thumb keys are the inner and outer 2u thumb keys and the tertiary
+thumb key is the innermost key of the partial bottom row.  The remaining keys
+are unused.
+
+[[../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c][layouts/community/ergodox/manna-harbour_miryoku/keymap.c]]
+#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ergodox/manna-harbour_miryoku/keymap.c
+
+// <<header>>
+
+#define LAYOUT_miryoku(\
+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,\
+N30,   N31,   K32,   K33,   K34,   K35,   K36,   K37,   N38,   N39\
+)\
+LAYOUT_ergodox_pretty( \
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+KC_NO, K00,   K01,   K02,   K03,   K04,   KC_NO, KC_NO, K05,   K06,   K07,   K08,   K09,   KC_NO, \
+KC_NO, K10,   K11,   K12,   K13,   K14,                 K15,   K16,   K17,   K18,   K19,   KC_NO, \
+KC_NO, K20,   K21,   K22,   K23,   K24,   KC_NO, KC_NO, K25,   K26,   K27,   K28,   K29,   KC_NO, \
+KC_NO, KC_NO, KC_NO, KC_NO, K32,                               K37,   KC_NO, KC_NO, KC_NO, KC_NO, \
+                                   KC_NO, KC_NO, KC_NO, KC_NO, \
+                                          KC_NO, KC_NO, \
+                            K33,   K34,   KC_NO, KC_NO, K35,   K36 \
+)
+
+#include "manna-harbour_miryoku.c"
+
+#+END_SRC
+
+To build for any keyboard using the this layout (ergodone, ergodox_ez,
+ergodox_infinity, hotdox) e.g. the ergodox_ez,
+
+#+BEGIN_SRC sh :tangle no
+cd ../.. && make ergodox_ez:manna-harbour_miryoku:teensy
+#+END_SRC
+
+
+
+*** ortho_4x12
+
+For the ortho_4x12 layout, the right half as is as follows: The rightmost column
+bottom 3 rows is the pinkie column.  The middle 4 columns top 3 rows are for the
+remaining fingers.  The bottom row left 3 columns are the thumb keys.  The
+remaining keys are unused.
+
+[[../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c][layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c]]
+#+BEGIN_SRC C :noweb yes :tangle ../../layouts/community/ortho_4x12/manna-harbour_miryoku/keymap.c
+
+// <<header>>
+
+#define LAYOUT_miryoku(\
+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,\
+N30,   N31,   K32,   K33,   K34,   K35,   K36,   K37,   N38,   N39\
+)\
+LAYOUT_ortho_4x12(\
+KC_NO, K01,   K02,   K03,   K04,   KC_NO, KC_NO, K05,   K06,   K07,   K08,   KC_NO,\
+K00,   K11,   K12,   K13,   K14,   KC_NO, KC_NO, K15,   K16,   K17,   K18,   K09,\
+K10,   K21,   K22,   K23,   K24,   KC_NO, KC_NO, K25,   K26,   K27,   K28,   K19,\
+K20,   KC_NO, KC_NO, K32,   K33,   K34,   K35,   K36,   K37,   KC_NO, KC_NO, K29\
+)
+
+#include "manna-harbour_miryoku.c"
+
+#+END_SRC
+
+To build for any keyboard using this layout (4x4, nori, chimera_ls, contra,
+divergetm2, jj40, lets_split, lets_split_eh, meira, niu_mini, planck, telophase,
+vitamins_included, zinc, zlant, ortho48, kbd4x, levinson, wavelet, plaid)
+e.g. the levinson,
+
+#+BEGIN_SRC sh :tangle no
+make keebio/levinson:manna-harbour_miryoku:avrdude
+#+END_SRC
+
+
+** Keyboards
+
+To use the keymap on a keyboard which does not support the layouts feature,
+LAYOUT_miryoku is defined as a macro mapping onto the keyboard's own LAYOUT
+macro, leaving the unused keys as KC_NO.  The userspace keymap is then included.
+
+
+*** crkbd
+
+The outer columns are unused.
+
+[[../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c][keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c]]
+#+BEGIN_SRC C :noweb yes :tangle ../../keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
+
+// <<header>>
+
+#define LAYOUT_miryoku( \
+       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, \
+       N30,   N31,   K32,   K33,   K34,   K35,   K36,   K37,   N38,   N39 \
+) \
+LAYOUT( \
+KC_NO, K00,   K01,   K02,   K03,   K04,   K05,   K06,   K07,   K08,   K09,   KC_NO, \
+KC_NO, K10,   K11,   K12,   K13,   K14,   K15,   K16,   K17,   K18,   K19,   KC_NO, \
+KC_NO, K20,   K21,   K22,   K23,   K24,   K25,   K26,   K27,   K28,   K29,   KC_NO, \
+                     K32,   K33,   K34,   K35,   K36,   K37 \
+)
+
+#include "manna-harbour_miryoku.c"
+
+#+END_SRC
+
+To build for this keyboard,
+
+#+BEGIN_SRC sh :tangle no
+cd ../.. && make crkbd:manna-harbour_miryoku:avrdude
+#+END_SRC
+
+
+* Related Documentation
+
+** QMK
+
+- https://qmk.fm/
+- https://docs.qmk.fm/#/getting_started_introduction
+- https://docs.qmk.fm/#/hardware_keyboard_guidelines
+- https://docs.qmk.fm/#/config_options
+- https://docs.qmk.fm/#/keycodes
+- https://docs.qmk.fm/#/feature_advanced_keycodes
+- https://docs.qmk.fm/#/feature_layouts
+- https://docs.qmk.fm/#/feature_userspace
+- https://docs.qmk.fm/#/getting_started_make_guide
+
+
+** Org Mode
+
+- https://orgmode.org/
+- https://orgmode.org/manual/Tables.html
+- https://orgmode.org/manual/Working-with-Source-Code.html
diff --git a/users/manna-harbour_miryoku/rules.mk b/users/manna-harbour_miryoku/rules.mk
new file mode 100644 (file)
index 0000000..baff143
--- /dev/null
@@ -0,0 +1,5 @@
+
+# generated from users/manna-harbour_miryoku/miryoku.org
+
+MOUSEKEY_ENABLE = yes        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes        # Audio control and System control(+450)
index 172764c074233a3b477b3b4a898884053cd1354e..3d9ceb80c46a33bff3af786d723a3eefb9da773c 100644 (file)
@@ -14,7 +14,7 @@ I'm using the US Ansi layout however I'm living in Germany which means that ever
 - The keycodes are handled by the `process_record_user` function which is now located in [spacebarracecar.c](spacebarracecar.c). To change keyboard specific configuration `process_record_keymap` is used (see [drashna userspace readme](../drashna/readme.md) for better explanation).
 - There is a predefined `_DEADKEY` layer in [spacebarracecar.h](spacebarracecar.h) under `enum userspace_layers`. Shifted CU_QUOT enables the dead key layer, just like KC_QUOT would when using the US International layout. (See `enum userspace_custom_keycodes` for more explanation).
 - On Windows grave and circonflexe are defined as dead keys when using the standard german layout. Those are automatically escaped when using the custom keycodes. `CU_ESCT` can be used to enable/disable this behavior.
-- For a complete example see my [fc660c](../../keyboards/fc660c/keymaps/spacebarracecar/keymap.c) or [planck](../../keyboards/planck/keymaps/spacebarracecar/keymap.c) keymaps.
+- For a complete example see my [planck](../../keyboards/planck/keymaps/spacebarracecar/keymap.c) keymap.
 
 ### How it works
 
index 2ab10d9459e1538202c8e50542c7fbc7ab38996c..bbd864aa936d7c04c86b4c0c972330f0b2386653 100644 (file)
@@ -71,6 +71,11 @@ void timer_timeout(void){
   rshiftp = false;
   #endif
   navesc = false;
+  timer_timeout_keymap();
+}
+
+__attribute__((weak))
+void timer_timeout_keymap(void){
 }
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
@@ -340,3 +345,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     return process_record_keymap(keycode, record);
   }
 }
+
+__attribute__((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
index 690971c39b0471734c722f47b5294bb3e6b6263c..43bfc5e6558d0ab10252987a488fc2cc54d1ada9 100644 (file)
@@ -75,6 +75,8 @@ extern bool game;
 
 void timer_timeout(void);
 
+void timer_timeout_keymap(void);
+
 bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 
 #define CTRLX LCTL(KC_X)